優秀なエンジニアは勉強しない

もう1ヶ月経つから、そろそろ書いてもよいだろう。

個人的な好悪より「エンジニア」ではなく「プログラマ」と記述するが、元来プログラマは勉強などしないものだ。

プログラマの三大美徳を思い出すこと。

プログラマは、技術的課題にたいして怠惰・短気・傲慢をもって取り組む*1。このいずれかに触れる何かがあった場合のみ、プログラマは意地になって、ドキュメントを漁り、コードを読み、昼夜を問わず解決方法を探る。

これは傍から見ると、特に職業プログラマの場合、私生活をかなぐり捨てて仕事をしている社畜だと思われがちだ。しかし実態は、単に「筋の悪い力業」で課題を解決することによる気持ち悪さから逃れようとする、プログラマ特有の生理現象に過ぎない。

もとより、課題を無理矢理力でねじ伏せて解決するなど、目先の売上としては正しくとも、技術的には後々に禍根を残すことが多いものだ。今日の「筋の悪い力業」は、明日の死亡フラグ。そのことを身をもって知っているからこそ、もっとマシな解決方法を得るためにプログラマはあがき続ける。

しかし、これらの行為は、決して「勉強」とは言わない。終業間際のコーディング中に何かしら引っかかるものを感じて、帰宅後に一風呂浴びた後に一杯飲みながらデバイスのデータシートを読んだりフレームワークの公式リファレンスを眺めたりしていようとも、プログラマはそれをもって「プライベートに勉強している」とは言わない。

なぜなら、それはプログラマ特有の習性ないし生理現象であり、不快さから逃れようとした結果に過ぎないからだ。気になったからちょっと調べただけで、別段大したことはしていない――というのが、当人の答えだ。

一方で、三大美徳にかすりもしない課題には、プログラマは熱意を抱けない。だから、そんなものをわざわざ勉強しようとなど思わない。

そんなことするぐらいなら、趣味に費やす方がマシだ。

興味深いことに、理由は分からないがプログラマには古い意味でのおたく・マニア的気質の持ち主も多くて、そのためか趣味についても割と深掘りする傾向にあることが多い。英語でいうなら「like to do」よりも「hobby」に近い。どちらかといえば凝り性だ。

ついでに言えば、三大美徳を重んじるプログラマには、プログラミングという行為そのものや、プログラミングから派生した物事を趣味とする人も多い。この辺り、金田一秀穂氏の説に沿うとするなら、おたく的気質の人だと割とプログラミング系の趣味しか持たず、マニア的気質の人だとプログラミング関連以外の趣味も持っている。

私の周囲という非常に狭い観測範囲となるが、技術面で一日の長がある人は、割とコンピュータ関連の趣味を持っている(もしくは過去に持っていた)ケースが多い。実際には、並行して他の趣味も持っている人が大半で、コンピュータ・プログラミング系に趣味が偏っている人は少数派である。

こういった趣味は、その時々の時流と一致すると、職業プログラマの仕事に大いに役立つ。

例えば、私の本業は組み込み系Cプログラマなのだが、趣味で全く畑違いの言語を触ることがある。それらのうち、JavaScriptLuaXSLTあたりは、なぜか数年後に業務で触れることになった。趣味レベルとはいえ事前に経験済みだった点は、仕事にプラスになった。

また、ライトなPC自作も趣味で、しかしお金がないのでOSとしてLinuxディストリビューションを入れている(特に最近は、手間をかけるのが面倒なのでUbuntuに統一している)のだが、これも業務絡みでUbuntu LTSやDebian仮想マシンを構築・運用したり、実験機としてRaspberry Pi(のRaspbian)を使ったりする場合に若干の応用が効くものだ。

こういったケースは、実のところ少ない。趣味の一環でプログラミング言語を30言語近く触ってきたが、その大半は本業では使うことがない。業務で使うことがあったとしても、シェルスクリプトPythonPowerShellのように(私の仕事では)内製ツールや自分用ツールの開発に使う程度であったり、Makefileのように「納品物には含まれるけど、実際のソフトウェア製品そのものではないよね」という具合に留まることが多い。

最近だとちょっとしたArduino用ライブラリを書いたりしたが、これも仕事とはほぼ無関係だ。そもそも仕事でArduinoを使うことなどないし、今のところその予定もない。

あくまでも趣味なのだ。プライベートの趣味は自由だ。だから、趣味がその時々の時流と一致するとは限らない。むしろ「一致しない」という前提で考えるべきだろう。

というか、趣味に無理矢理「仕事のエッセンス」をぶち込まれることほど無粋で興醒めなことはない。

実のところ、「お勉強」という視点では、Windows Serverの構築・運用・管理だとか、Office 365のクラウド機能の評価とか、やったほうがよいことは色々ある*2。あるのだが、それは私の趣味に合わないので、手を出していない。

結局、会社的にみて「優秀なプログラマ」というのは、単にその個人の趣味が時々の時流に偶然合致しているに過ぎないのだ。そしておそらく、その会社では偶然にも今までコンピュータ関連の趣味の持ち主が多くて、さらに偶然にも彼らの趣味が会社の方向性と重なる部分がそこそこ多かっただけなのだ。

だから、職業プログラマにたいして「業務時間外に勉強を」云々と述べるのは筋違いだ。アレは趣味なのだ。趣味にケチをつけるな。

よく分からないけど、アメリカのような雇用の流動性が高い地域なら、会社のその時々の方向性と合致する趣味の人を数年単位で雇用するなんてことがあまり無理なく可能じゃないのかしら。ただし方向性の違いで離職したり、逆に方向転換のためにレイオフしたり、なんてことも割とある感じで。

*1:「技術的課題にたいして」という点に留意すること。同僚/チームメンバーといった「人」というファクターにたいしては謙虚・尊敬・信頼をもって臨むのが正しい。

*2:最近、時々自分の本業が分からなくなる。