ジュニアエンジニアは地に足をつけて学ぼう

ソフトウェアエンジニアになって5年ほど経つ。ある程度基礎も理解できて、技術のキャッチアップも苦にならなくなってきた。しかし、最初の頃は大変だった。業務で使う技術を理解するのに精一杯なのに、新しい技術はどんどん出てくるからだ。新しい技術が出てくるのは今も変わらないけど、一年目の頃のような焦りは無くなってきた。

なぜなら、どんな人でも全部覚える、理解するのは無理だと割り切れたからだ。コンピュータサイエンスだけならまだしも(それも難しいが)、ツールまで覚えるなんて不可能だ。たとえ全部理解できなくても、必要な時にキャッチアップできる力、あれが必要になりそうという勘があれば良い。そのためには、2つの力が必要になる。

まず1つは基礎力だ。コンピュータの基本原理が分かっていること。プロセス、メモリ、ストレージ、OS、アルゴリズム/データ構造、計算量の見積もり、など。WebならHTTP、TCP/IPSSL/TLSなども含まれるか。正直私もAWSのサービスを全部は覚えてないけど、基礎知識があるので、この概念を使いやすくしたツールなんだな、とすぐに理解し使うことができる。もちろん、ツールにはツールの落とし穴はあるが、まあ何とかなることが多い。所詮は使い方なので。逆に背景の基礎が分かってないと、上手く動かない時に全く原因の当たりがつかないだろう。

2つ目は経験だ。これはチーム、事業がどんな方向に進むかを理解することが前提で、それを実現するのに役立つ手段を事前に勉強しておくということだ。経験がないと的外れになることがあるだろう。的外れとは、大きな課題を見過ごしていたり、方向性がずれているという意味だ。精度を上げるには、経験を深めるしかないと思う。

書いたことは身も蓋もないけど、基礎を勉強し、業務で役立ちそうな技術を勉強して業務で提案するとか使ってみるしか経験は深められないと思う。最新技術に振り回されるのではなく、基礎から地に足つけて学んでいきたい。自戒を込めて。