こんにちは!
現在クランチタイマーで、エンジニアインターンとして働いている懸川明日也です。
僕がインターンを始めてちょうど一年ほど経ちました。
その中の感じたことを振り返りながら、エンジニアを目指している方、エンジニアになったばかりの方に向けて、少しだけアドバイスをしたいと思います。
自己紹介
僕は広島大学の情報科学部の3年生です。
元々1年生の頃は工学部に所属していましたが、一般教養の授業でプログラミングの面白さに魅せられ、2年生から情報科学部に転学部しました。
情報科学部でコンピュータサイエンスを勉強している中で、この知識が実際の現場でどう応用されて、世の中にサービスとして出ているのだろうと疑問を抱き、実務を経験するために2年生の秋にクランチタイマーにインターンとして入社しました。
インターンの一年を振り返ってみて
まず、インターンに入ってすぐに自社アプリの開発に携わりました。
僕はインターンの先輩と二人でサーバーサイドを担当し、Golang言語を使って開発することになりました。
大学でC言語を勉強していて基本的な文法はわかっていたものの、実際にwebを使ったアプリケーションを開発したことがなかったため、実務のコードの複雑さとアーキテクチャを考慮した実装にとても苦戦しました。
自社アプリを開発していた当時、基本をあまり理解していない僕にとっては難しい技術が使われており、それでもタスクをこなすために、無理矢理そのような技術を使おうとしていたため、あまり開発が進みませんでした。
数学でいうなら、足し算や掛け算ができないのに、二次関数の問題を解くみたいな感覚です。
一旦、プロジェクトを進めることをやめて、使われている技術の勉強期間に充てさせていただいた時もあったのですが、前提となる基本的な知識が欠けていたため、プロジェクトを進めれるだけの理解をすることができず、注意を受けたこともありました。
エンジニアになることを諦めそうになりましたが、同じインターンのメンバー励ましてもらい、もう少し頑張ってみようと思うことができました。
そしてインターンを始めて半年ほどたった後、クライアントワークのサーバーサイドを担当することになりました。
言語は同じくGolangでした。
このプロジェクトではサーバーサイドの担当が僕を含めて3人おり、お互いに教え合いながら開発することができました。
このプロジェクトでリリースまで一通り携わることができたため、開発の流れを掴むことができ、またやり切ったという自信を得ることができました。
少しずつ、ちゃんと力はついていた
2つ目のクライアントワークのプロジェクトに携わった当初、最初の失敗もあってすっかり自信がなくなった僕は、うまくやれるかとても不安でした。
しかし、この時は、振られたタスクをこなすことだけでなく、ここはこうした方がいいとメンバーに提案できるようになっていました。
最初のプロジェクトでは、先輩が卒業されてからは一人で考え問題に対処していたため、チームに貢献するという感覚があまりありませんでした。
しかしこのプロジェクトでは他のメンバーに貢献している実感が得られ、ちゃんと力はついていたんだと感じることができました。
駆け出しのエンジニアに伝えたいこと
「web開発にも、移り変わりが起こりにくい基本的な概念がある」
web開発は技術の移り変わりが激しいといわれる分野で、初学者にとってみれば、じゃあ何を勉強すればいいんだろうと困ることがあると思います。
確かに流行っている技術や廃れる技術はありますが、それら技術を構成する基本的な概念はあまり変わらないと思います。
例を挙げるならHTTPやURLなどのwebの基本的な概念や、TCP/IPなどのネットワーク、Linuxの知識などです。
これらの概念がweb開発の常識としてあり、そのもとで移り変わりの激しい様々な技術があるのだと思います。
僕はこのことをインターンに入ってすぐに知っておきたかったですし、もっと言えばこれらをある程度理解してからインターンに行けばよかったなと思います。
そうしていれば、周りの先輩からもっといろんなことを吸収できたのではと後悔もありました。
しかし、インターンに入る前から基本的な概念があるんだなんて知るのは難しいと思いますし、基本的な概念は難しくて退屈なので挫折してしまうだろうなとも思います(笑)
だから、そういった基本的な概念を大切にしつつ、プログラミングでたくさんのモノを作って、モノづくりの楽しさに触れるのが、一番いい勉強法なのかなと思います。
「頼りすぎるのはダメだけど、頼らなすぎるのはもっとダメ」
基本的に開発に必要な情報はすべてweb上に載っているので、知りたい情報を手に入れられます。
エンジニアになる上で必ず必要になるのは、エラーが起こったときにその原因の仮説を立てて、それを一つずつ検証して解決するという力です。
僕自身、自走できるエンジニアになるために、そのことをいつも意識して、できるだけ一人で解決できるように開発をしていました。
しかし、今はそのような自走力だけでなく、他の人に頼るべき時にきちんと頼ることができる力も重要な力だと考えています。
なぜなら自分だけでは考える引き出しがそもそも足りていない場合があるからです。
これは初学者がとくに当てはまると思うのですが、基本的な概念が欠けている場合、その時にやろうとしていることの全容がぼやけて、結局何をしていいかわからなくなることがあります。
そのような時は他の人に聞いてみて、自分に足りていない知識がどんな分野か教えてもらうべきです。
方向性が全然違ったなんてことを防いだり、聞いたら一瞬で解決できたりすることもあるので、「頼る力」は重要だと思います。
「やり続けていれば、いつかはできるようになる」
web開発は必要な知識が幅広く、それらを理解するのも少しずつになるので、最初はなかなか開発が思うようにできず、つらいこともあるかもしれません。
しかし、勉強を続けていれば、数か月前はわからない単語だらけで理解できなかった記事がなんとなく理解できるようになる日がくるので、それまでがんばりましょう。
ある程度理解が進んでくれば、作りたいと思ったものが自分で作れるようになりきっと楽しくなると思います。
最後に
エンジニアを目指している方、駆け出しのエンジニアの方に向けて、僕自身もまだまだ勉強しないといけないなと毎日感じています。
現在はクランチタイマーのプログラミングスクールであるスタートプログラミングの社内システムを開発しています。フレームワークであるRailsでの初めての開発で、慣れないところもありますが日々奮闘しています。
後輩に教える場面もでてきたので、僕が一年前に感じていたことを思い出しながら、うまく知識を伝えられるように頑張ろうと思います。