HTTPサーバーの実装と、成長の実感
そうこうして一つずつ丁寧に読んだり書いたりしていくうちに、分かることが少しずつ増えていきました。それまではたくさんの覚えるべきことを前にした焦りから、あちらこちらの表面をなぞっただけ、ただただ学んだつもりになっていただけなのだと思い知ります。
食べ物と同じように、噛み砕かずに丸呑みするばかりなのですから、自身を形作る栄養を受け取れないのは当たり前です。焦って一度に全てのことを覚えようとせず、じっくりと腰を据えて読む、書くの繰り返しが、結局は一番効率が良い学び方なのだという気付きがありました。
だんだんと業務のコードも読み書きできるようになりました。「以前はなんでこんなことも分からなかったんだろう……」としょんぼりすることもありましたが、今までできなかったことができると、少しずつ自信につながっていきました。業務でできることが増える、できることが増えると楽しくなってくる、楽しくなるともっと深く広く学びたくなる、という良い循環が生まれてきたように思いました。単なる実装だけでなく、簡単な機能の設計などもだんだんと任されるようになっていきました。
コップ本を一通り終えた後は、「エンジニアとしてちゃんとやっていきたいなら、こういった分野も押さえておくと良い」とHTTPサーバーを実装する課題を出していただきました。情報のソースはRFCとJavadoc/Scaladocおよび他言語でのHTTPサーバーの実装(Javaを除く)のみ、利用できるライブラリはJava/Scalaの標準のもののみという私にとってはなかなか厳しい制約が課せられた課題です。
普段の業務で扱うものとは全く異なるものを作るということなので、この課題で学ぶことは業務にすぐに役立つというよりも、あとからボディブローのように効いてくる知識なのだろうなと初めは考えていました。しかし、サーバーとクライアントがどのようにデータをやりとりしているかが整理されると、エラーの原因分析などが以前よりスムーズにできるようになるなど、意外にも即効性があるということが分かりました。別の講師からよく言われていた「業務のことだけを効率よく学ぼうとすることが実は非効率であること、目先のことだけを考えて避けていくことはもったいない」ということを実感する出来事でした。
ソケットやスレッドの管理、HTTPリクエスト/レスポンスのread/writeなど、初めて触れる分野の技術ばかりでしたが、Twitter課題の時とは違い、知識のひとつひとつを噛み砕いて吸収できている実感がありました。HTMLファイルや画像をクライアントに返せるようになった瞬間は、不思議なくらい感動がありました。課題は今も継続中で、今後はmultipart/form-data形式のPOSTリクエストへの対応などに取り組んでいく予定です。
一番の学びはエンジニアとしてどうあるべきか
先のメッセージ以外に、他の講師からもそれぞれの仕事観、エンジニア観について聞く機会が研修中にたびたびありました。「ああ、あのとき聞いたことは、こういうことを言っていたのか!」と腹落ちするような、時間をかけて伏線が回収されていくような瞬間は数えきれません。
今研修まっただ中の新卒エンジニアの方は、もし機会があれば技術以外にも講師の仕事観、エンジニア観について聞いてみるのも良いのではないでしょうか。情熱を持ちつつも、自分からはそういった話をあまりしない人も多分にいると思うので、ぜひ自分から聞きに行ってみてください。
仕事自体の変化やトレンドの移り変わりで、自分が扱う技術は変わるかもしれません。ですが、エンジニアリングへの情熱はたとえ扱う技術が変わったとしても折に触れて自身を支えてくれるでしょうし、何よりそういった情熱を持った人は周囲にも良い影響を与えるように思います。
高い技術力、そして周囲に良い影響を与える力を併せ持ったエンジニアに、私もなりたいと思います。まだまだできないこと、知らないことが山のようにあります。道程は長いですが、「スタートがどうあれ、最終的には日々の勉強と努力を愚直に続ける人だけが成長する」と信じて、手をコードに戻そうと思います。