ITエンジニアは勉強しなくてはならない、という幻想

 ITエンジニアは一生勉強しなければならない!というのはよく聞く話ですが、闇雲に勉強をしていても、活用しなければ宝の持ち腐れどころか、脳のリソースと時間を食うだけの無駄なものと成り下がります。

 将来的に役に立つかもしれないから、勉強しておくんだ!という話も理解はできます。ですが、かの有名なYAGNI(You ain’t gonna need it)原則があるように、意外とその時というものは来ないものです。

 また、IT技術が発展する速度は非常に早いですから、トレンドに乗った勉強をしていたとしても、役に立つ頃には枯れた技術だったということもよくあります。これは役に立っているだけマシですが、当然役に立たず消えていく技術もあります。

 勿論、勉強し得た知識は、濃淡はあれ何らかの形で役には立つはずです。ですが、その情報が必要だとわかってから、勉強を始めても遅くないのではないでしょうか。

勉強する意味を考える

 「ITエンジニアは生涯勉強しないといけないんだ!」と言って、新しい技術を常に勉強している人がいます。それは全くもって間違いではありません。知識は知識を呼びますから、無駄になることはそうそう無いでしょう。

 しかし、それが義務感となり、プレッシャーになる人もいます。もともと勉強があまり好きではない人は、とても苦痛を伴うかもしれません。場合によっては、業界からリタイアしてしまうこともあります。

 頑張らなくてもいいのです。「勉強しなければならない!」という固定観念に苛まれるくらいなら、そんなプレッシャーやプライドは捨ててしまえばいいのです。それは幻想に過ぎません。

 同僚が常に勉強していて、追いつけない、と感じることもありますが、比較すべきではありません。そもそも、ITエンジニアリングの勉強を勉強だと思っている時点で勝ち目はあまり無いのです。彼らは趣味でやっていますから。

 勉強をしたくないなら、効率化を図るべきです。必要なことだけを必要な量だけ頭に詰め込む、といったことが重要になってきます。

 プログラマの三大美徳に「怠惰」がありますが、言い換えれば、努力すべきこと、力の入れどころを常に意識している、という解釈をすることもできます。

キャッチアップ力を磨く

 業務に必要な情報を取捨選択し、限られた時間で効率的に学習することが、ITエンジニアにとって必要な能力です。それには基礎的な知識も勿論必要です。

 例えば、プログラミング言語は方言のようなものです。書き方は全く異なりますし、パラダイムが違えば理解も難しいです。ですが、「出来ること」だけ見ると限られてくるわけです。条件分岐、繰り返しなど。OOP言語と関数型の違いは、例えるなら沖縄と北海道の方言のような違いであるとも言えます。そもそもプログラミング言語はほとんど英語で書かれていますしね。

 つまり、両方ともベースは同じであると考えれば、どこから始めても2言語目を習得するのに時間はそう必要ありません。これが基礎知識です。

 他、機械学習を考えてみます。使うだけなら便利なAPIが用意されているため誰でもできますが、モデリングを適切に行うには高度な数学知識が必要です。しかし高度な数学知識とはいっても、中学生からの数学カリキュラムをすべてこなさなければ理論を組み立てることができないかというと、そうでもないわけです。必要な知識は常に限られています。であれば、必要な知識をまず俯瞰し、そこから派生する基礎知識に絞ってまずは知識を蓄えればよいのです。概要がわかれば、あえて試験勉強のようにノートを取って演習する必要もありません。

 キャッチアップ力とは、必要な知識を見極める能力です。その業務には、どういった知識が必要で、どういった勉強をすればよいか。あるいは、なぜ必要なのか。どうすれば効率よく学習を進められるか。そういったことを考えることがキャッチアップ力に繋がります。要点を素早く見つけ、知識を吸収することが重要なのです。

何を勉強すべきか考える

 明快なのは、次のプロジェクトで使う技術スタックが決まっているとき、などですが、そうでないこともあります。なぜ、何をどうするのか、ということを意識して考えましょう。

 機械学習がトレンドだからとりあえず勉強しておこう、ではないのです。明確に目標や目的があればこそ、その学習が初めて意味のあるものとなります。

 どんな動機でもいいのです。プロダクトを作りたい、その技術を採用しているプロジェクトに参加したい。そういった明確な動機があれば勉強する価値はあると言えます。

動機を作る

 もし、あなたが優れたITエンジニアになりたいのなら、苦痛なく能力を高められるような動機を作ることです。それは人によっては、「趣味にする」ですし、「できるだけ勉強しないように効率的に能力を高める」かもしれません。「アウトプットで自己顕示欲を充足させる」でもよいですし、「仲間との会話の種にする」「オープンソースが使いづらいから使いやすくする」とかでもいいです。どうしても動機がなければやらなくても良いのです。

 モチベーションが無いと楽しくないですし、どうせなら楽しんでやりたいですよね。

ものづくりを目標にする

 「勉強しよう!」と思ってやると楽しくないですし、アウトプットも出ません。実務とかけ離れているのでインプットも効率が悪くなります。それなら自分でサービスを考えてそれを完成させることを目標とする、とすれば、普通に勉強するよりも数倍効率のよい学習ができます。多くの経験が伴いますし、自信にも繋がります。また、サービスを1からすべて作り上げ、それをリリースできる人材というのは意外と稀有なものですから、今後のアピールポイントになるかもしれません。

 ほか、たとえば、機械学習ならkaggleなどのコンペがありますし、ハードウェア制御はraspberry-piなどの製品があります。意外とものづくりをする環境というのは整っています。

まとめ

 ITエンジニアリングは、本来とても楽しい仕事です。しかし、そこに義務感を伴い、苦痛を感じている人も少なくありません。それでプログラミングやIT技術が嫌いになっては勿体無いので、力強い動機とともに必要な知識を吸収するのが一番です。

 まずは何を勉強するか、ではなく、なぜそれを勉強するか、を意識して考えてみると良いかもしれません。

 ところで、あなたが勉強しようと思って買って本棚に置いてあるオライリー本、何冊読破しましたか…?