まさかのScalaプロジェクトへの配属、できないことだらけの日々
7月の終盤、Twitter課題に取り組む直前のタイミングで配属が発表になりました。同期が集まったなか、それぞれの配属先が発表される緊張の一瞬です。
私が配属されたのは、まさかのScalaを使う部署でした。研修でも3日間に渡ってScalaに触れましたが、Javaにはない柔軟さや記述の簡便さに楽しさを感じる一方で、省略記法や関数型言語の作法などに戸惑うことも多く、なんだか難しそうな言語だなと思ったのが正直なところでした。
また、配属先の部署は検索エンジンを作るという技術的にも高度なことをしていると聞いていたこともあり、ワクワク感が半分、プレッシャーが半分だったことを覚えています。
当然、Twitter課題もScalaで書くことになりました。フレームワークはPlay2、データストアはElasticsearchと初めて触るものばかりで、右も左も分からないまま課題がスタートしました。先輩方や同期のサポートもあり、1か月後にはなんとかユーザー登録、ログイン、ユーザーのフォロー/アンフォロー、ツイートやお気に入り機能などを実装することができました。
![Twitter課題の構成。サーバーはJSONを返すAPIサーバーとして実装、フロントにはGoogle製のUIライブラリPolymerを使用しました。](http://cz-cdn.shoeisha.jp/static/images/article/9394/9294_004.gif)
サーバーはJSONを返すAPIサーバーとして実装、フロントにはGoogle製のUIライブラリPolymerを使用しました。
![完成したTwitter課題のログイン画面とメイン画面。短いコードをTwitterのように気軽に読み書きするサービスです。](http://cz-cdn.shoeisha.jp/static/images/article/9394/9294_005a_s.gif)
![完成したTwitter課題のログイン画面とメイン画面。短いコードをTwitterのように気軽に読み書きするサービスです。](http://cz-cdn.shoeisha.jp/static/images/article/9394/9294_005b_s.gif)
ひとまず動くものが作れた達成感もありましたが、「こんな機能やあんな機能をつけよう」と妄想していたことの半分も実装できず、不完全燃焼感が残る結果になりました。当然、研修前に想像していた「一人でサービスが作れるくらいのエンジニア」になった自信は微塵もありませんでした。
こう書けばこう動くということが分かっても、なぜそう動くのかは分からない。きちんと噛み砕いた理解ができていないままで仕事が進められるのか、不安を感じていました。
9月に入り、いざ業務が始まると、その不安は的中します。
言語やツールについての知識のなさに加え、設計の意図を読み取るスキルも不足していたため、既存のコードを修正する際もどこに注目して読めばいいのかが分からず、何をしているのかを理解するだけでもかなりの時間がかかりました。
また、読む力もなければ書く力もなかったため、トンチンカンな実装をしてばかりでした。研修の課題レベルのコードと、400万件超の求人を扱うサービスのコードは、質がまるで違うということを思い知らされます。毎日遅くまで辛抱強く懇切丁寧に解説とレビューをしてくれた上長や先輩には、本当に頭が上がりません。
配属から1か月、2か月と過ぎていき、同じ部署に配属された同期が次々と成果を上げていく一方で、「今は完全にチームのお荷物だ。このままだとまずい……」という焦りが日増しに大きくなっていくのを感じていました。
![新卒研修のメイン講師であり、Java製O/Rマッパー「DBFlute」などの作者でもある久保雅彦(jflute)さん。現場への配属後も色々と相談に乗っていただいています。](http://cz-cdn.shoeisha.jp/static/images/article/9394/9294_006.jpg)
勇気をくれた講師のメッセージ
しかし、できないことばかりのなかでも自身のモチベーションを保ってくれたのが、とある講師の「スタートがどうあれ、最終的には日々の勉強と努力を愚直に続ける人だけが成長する」というメッセージでした。
社内で最も活躍したエンジニアに贈られる最高技術賞を受賞したトップエンジニアでもある彼は、研修の最後に自身の新卒時代のエピソードについて話していました。同期の中で一番できなかったこと、だからこそ毎日愚直に勉強し続けたこと、そうして学んだことが今の自分を支えていること。「そうして身につくものに比べたら、今の実力差なんて誤差でしかない」というメッセージは、経験豊富な同期との間に大きな力の差を感じていた私を鼓舞してくれました。だったら自分も愚直にやるしかない、素直にそう思いました。
11月に入り、Scalaを基礎から勉強し直そうということで、同期と2人でランチ勉強会を始めました。週に2日、『Scala スケーラブルプログラミング』通称「コップ本」を2~3章ずつ、事前にサンプルコードを書いて動かしたうえで読み進めていく会です。
![『Scala スケーラブルプログラミング』、通称「コップ本」。擦り切れるほど読み込んでいます。](http://cz-cdn.shoeisha.jp/static/images/article/9394/9294_007.jpg)
ありがたいことに、メッセージをくれた先輩エンジニアも勉強会に毎回参加してもらえることになりました。「この機能は現場ではどう使うのか」「なぜこの書き方は良くないのか」「AとBはどう使い分けるのが良いのか」など、非常に実践的な解説をしてくれました。先輩の深い知識に触れることで、今までの自分の理解がいかに表層的だったかを思い知らされました。
また本の解説だけではなく、データ構造やそのメソッドを自前で実装するトレーニングを行いました。Listと呼ばれる、Scalaの代表的なデータ構造の簡易版を一緒に書いたり、それを操作するmapやfoldなどのメソッドを自分で実装してみたりという非常に濃い内容です。特に後者のメソッド実装は、引数と戻り値のシグネチャのみが与えられたなか、内部の実装を考えて書いていくというとてもハードな内容でしたが、うんうんと唸りながら進めていくうちに関数型言語の思想の一端に触れられたように思います。
また、Nothingと呼ばれる特殊な型が存在する理由や、カリー化によってメソッドを組み込みの制御構造のように見せる書き方など、言語の設計やテクニックのスマートさに感動を覚えることもありました。