職歴1年目のエンジニアが考えるインプットとアウトプットのうまいやり方について

記事の趣旨について

7/20 にサポーターズCoLabの「あえてジャンル不問の大LT大会」で発表をしたので、その内容についてエンジニアとして就職してからこれまでを振り返りつつ掘り下げてまとめています。

記事のスライド

URL

私について

SIerで5年、Web系の企業で1年ほどサービス運営の仕事などを経て、去年の10月からWeb系企業でエンジニアとして働いています。仕事で主に書いているのは JavaScript(Node.js / React) で、仕事としてコードをみっちり書くようになってからはまだ1年も経っていないペーペーです。

インプットについて

転職してから最初に任されたのが React のプロジェクトだったので、とにかく React, Redux 周りの情報収集、写経、ドキュメントの読み込みなどなどをひたすらやっていました。それに付随してフロントエンドのトレンドなどにも首を突っ込んだり、LTのイベントで情報を色々収集していたのですが、業務ではまだすぐには実践できない + 情報の流速と量に根負けしてしまったのでとりあえず React と Node.js の動向を追う以外はフロントエンドのインプットの優先順位を下げています。 他にも周囲の関心につられてラズパイを買ったり関数型言語について手を出そうとしたりしましたが、長続きしませんでした。 色々手を出そうとして中途半端になってしまったところで「ちゃんとプログラミングを仕事でやるようになったのにネットワークもOSもDBについても基礎的な部分への理解がおざなりじゃん」と冷静になったので、学ぶ内容を根本的に見直し、それに対して意味づけをするようにしました。具体的には以下の項目を重点的にやるつもりです。

  • Laravel (業務で使うから)
  • Docker (業務で使うから)
  • ネットワーク、OSなどのフロントエンドより下のレイヤ (トレンドで左右されないから)

インプットの優先度をどう見直したか

まず、職歴が浅いため、目の前にある自分の案件に必死に取り組まなければなりません。というわけで、現行のプロジェクトで使っている JavaScript については絶えず学んで行く必要があります。

Laravel, Dockerも同様で今後の案件で使うので優先順位を上げました。Laravel, もしかすると Rails にも共通して言えることかもしれませんが、MVCフレームワークにふれることで「プロダクト」としてのWebプログラミングに対して理解が深まると考えています。DBを自分で設計したりするのが結構楽しい。SPA + マイクロサービスの波がより大きくなるとMVCフレームワークの需要も減って行くのかもしれませんが、まだ色んなWebサービスがこの上で動いているのを考えると今勉強していても時代遅れとは言えない(むしろ気づきが多い)でしょう。また、自分のポートフォリオを充実させるためにオリジナルのWebアプリを制作したいので、これを下地にしたいと考えています。

3番目に「フロントエンドより下のレイヤ」を学ぼうと決めた理由は、自分に足りていない領域を補完して地力をつけるためです。フロントエンドのアプリを書いて、サーバーと通信をさせているのでネットワークについて知らないのはまずい。日々自分が開発環境として使っているOSのファイルシステムについて知らないのもまずい。そういった下のレイヤについて知ることで、Webプログラミングをもっと俯瞰的に見ることができます。

また、ネットワークやOSはプログラミングにおける「歴史」を学ぶのに等しいと考えているので、これからの変遷を予測し、備えるためにも役立ちそうです。 とはいえ、インプットに割ける時間は限られています。とてもではないがC言語の仕様書を読み込みにいくほどの時間は作れなさそうです。業後に寝食を惜しんでまで勉強できるほど体は丈夫ではないし、頭をフル回転できる余裕はもう年齢的にありません。 そのため、粒度を「ハードルが低めのほんを1冊ずつ読み終えていく」程度に設定し、以下の本を順に読んでいくことにしました。

7割くらい読み終わった。もともとプログラミングにあまり親しみのない高校生に向けて執筆された内容ながら、PCにVirtual Box + Vagrant をインストールして Linux (Ubuntu) を直接いじるところから始まるので、普段MacOSで開発している自分にとって結構刺激的でした。

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

2割くらい読み終わった。

Goならわかるシステムプログラミング

Goならわかるシステムプログラミング

まだ読み始めたばかり

下2冊の本は Go を書きながら学習できるので、もともと「何かサーバサイドの言語をもう1つやってみたいな」と思っていた自分にとっては一石二鳥っぽいです。

アウトプットについて

まだ1年目の自分にとって、勉強に使う時間は圧倒的にインプットに回すことが多く、なかなかアウトプットできないな、という悩みがありました。自分が属しているコミュニティのエンジニアには頻繁にQiitaに記事を書いたり、技術同人誌を執筆していてとても刺激を受けるのですがまだそういった類のアウトプットの難易度は高く感じます。自分でもQiitaに何回か投稿したことはありますが、結構似た内容はすでに詳しい人が投稿したりしているので、ちょっと尻込みしてしまいます。

そこで、インプットに時間を使いながら自分にもできる難易度の低いアウトプットは以下の通りかなと思いました。

  • 読書感想文
  • ハマったことの共有
  • LT登壇

今読んでいる本については、学習記録として読み終えたらこのブログに読書感想文を残しておこうと思います。後から読み返すことでその時点で自分が何を考えていたかの振り返りにもなるので、無駄ではないと考えています。また、新しいツールを導入しようとするとなぜかインストールでハマることが多かったりするので、再度環境構築を行うような場面で自分が困らないようにハマった点は同様にブログかQiitaに残すと後々役立ちそうです。 LT登壇も何回かやったことがありますが、技術的な話題からちょっと逸れた内容のものが多いので、今後やるときはちょっと内容を工夫したいです。使っている人がまだ少ないツールの紹介とかカッコいいなぁと思うので挑戦してみたいですね。

地力が身につくまでは上記のようなアウトプットを繰り返して、そこから余裕ができたらOSS活動やWebアプリの開発といった難易度が高めのアウトプットに取り組むのが今後の目標です。