はじめまして。やっしーと申します。

oliva社に入社して4ヶ月目になり、少しずつ環境に慣れてきました。
現職では今までに触れる機会がなかった言語や技術、方法論に出会う機会が多くなり色々なことを勉強してキャッチアップしていく必要性を強く感じるようになりました。そこで今日は新人エンジニアの立場に立った技術のキャッチアップ、要は勉強の進め方の話をしたいと思います。

新しい技術をどうやってキャッチアップする?

新しい知識・技術を学びたい。学ばなければならない。エンジニアとして働いている多くの人が日々の勉強の必要性を痛感していると思います。

まったく触れたことのない知識や技術をどうキャッチアップすればよいか。最初に思い浮かぶのは以下の方法でしょう。

  1. インターネット上の資料を探す
  2. 人に聞く
  3. 本を買って勉強する

インターネットは便利だけれど

1.のインターネット上の資料を探すことは最も簡単で費用もかかりません。
しかしエンジニア一年生など経験が浅い方がインターネットを中心に新技術を学んでいくことは、個人的にはなかなか難しいことだと感じています。

理由のひとつは情報の正確性がサイトによって大きな差がある点です。
確かにインターネット上には様々な技術情報があります。しかし、その情報の「確かさ」はサイトによって玉石混交です。単に情報が間違っているだけならばまだしも、一見正しいように見えて問題がある情報も多くあります。

セキュリティに全く配慮されていない実装・設定方法、何回も孫引きされて余分な処理が含まれているせいで動作が重い実装のソースコードなど…

その分野の知識が少ないうちは、入手した情報がどれだけ正しいかを判断することは難しいでしょう。

さらにいうと、断片的な知識ではなく、ある分野についての体系的な知識を得られるサイトや資料はそれほど多くありません。もちろん探せば見つけることはできるでしょう(たとえばLinux標準教科書)。しかし、効率的な調べ方もまだわからない駆け出しエンジニアの場合はそれも難しいでしょう。

頼れる人ほど忙しい

2.の人に聞く方法はどうでしょうか。弊社で私より先に入社して活躍されている先輩エンジニアの方々はみなさん優秀です。コンピュータ・サイエンスの学位を持っていらっしゃる方もいます。そういう方々ですからこちらの疑問にも的確に回答してもらえるのですが、忙しい人達をちょっとした質問で拘束するのは気がひけることもあります。(質問をするときも好ましいやり方、というものがありますが話が脱線するので今回は割愛します)

日々の学習は自分のペースで行えることが肝心であり、先駆者のアドヴァイスはその補助にすぎません。一から十まで人に聞いて学ぶというのは不可能でしょう。

本を読もう

なので私個人としては最初はある程度情報がまとまっている書籍から学習を始めることがよいと考えています。書籍はある分野について、ページ数の縛りはあるものの順を追った説明を通して体系的に知識を得ることができます。

しかし入門書を買おうと思い立った人たちが皆思うことがあります。

「どの本を買えばよいか」

シンプルですが意外と難しい問題です。書籍はお金を払って買うものですので、ネット上の無料記事に比べればある程度のクオリティが保証されています。しかし、そうであったとしてもやはりインターネットサイトと同じく、ある程度「玉石混交」の状態であることは変わりありません。

わかりやすくを心がけ過ぎて結果的に正しくない説明をしてしまう○○入門、動かないサンプルコード、英語と日本語のニュアンスを無視して原書を直訳した技術書の謎の言い回し、校正したとは思えない誤字脱字の数々、Linuxの勉強だけのためにわざわざAWSを契約しないといけないの?仮想マシンやWSLでよくないですか?…など

個人的な感情が出てしまいそうなのでこれくらいにしますが、お金を払う以上はクオリティの高い本で学びたいと思うのが人情ですので、「よい本/ダメな本の見分け方」は皆さん気にされていると思います。

インターネットで良い本は探せる?

インターネット上には書評ブログが多くあります。「●●を学ぶための入門書10選」などというタイトルの記事を一度はクリックしたことがある人も多いのでしょう。

しかしGoogle検索の上位に出てくるサイトは多くはアフェリエイト記事ですので内容の信頼性に一抹の不安を感じることもあります。「Google検索の上位サイトであること」と「情報の信頼性が高いサイトであること」はイコールではありません。

ある程度の参考にはなりますが情報を過信することもできません。

結局どうやって探すのか

信頼すべき本にどうやって辿り着くか、自分の中でも明確な結論はでていませんが、ひとつの(そして身も蓋もない)解決策として考えつくのは「本の良し悪しに関係なく知りたいジャンルの本を読みまくる」ことです。

全然効率的じゃないじゃないか!とお叱りを受けそうですが聞いていただきたいです。
そもそもここで言う「よい本」とは「自分の知識レベルにマッチした説明で正しい知識を授けてくれる本」です。つまり「よい本」を選ぶためには自分の知識・技術のレベルを理解していなければなりません。

自分の経験を踏まえていうと、本当の初学者の段階では自分の正確な知識・技術レベルも把握できていないことが多いです。例えるなら大海原へコンパスも六分儀もない状態で漕ぎ出した状態です。

そのような状態でできることは何か。それは得られた情報をひとつひとつ吟味して、自分が何がわかっていて何がわからないかを少しずつ確認していくことです。地道な作業ですが継続することで自分の知識も増えていきますし、やがて自分が読んでいる本の良し悪しもわかるようになります。自分が読んだ本がよい本か否かもその時初めて分かるわけです。

つまり、「よい本」とは学ぶ前に「出会う」ものではなく、学んできた道筋を振り返ったときに「発見」するものなのではないでしょうか。

まとめ

だいぶ自己啓発書めいた結論になってしまいましたが、要は「たくさん読め!」です。(そして手を動かせ!と続きます)
非効率的かもしれませんが、効率的な勉強方法を探し続けて技術取得という目的に目を向けない「永遠のワナビ」になるよりかは大分マシと言えるでしょう。電子書籍を上手に活用すれば床まで本が溢れたり本棚が崩壊する心配もありませんしね。

ではこれを読んでいる新人エンジニアの皆さん。
一緒に頑張りましょう。