知識とスキルのために時間を惜しまない

勉強とは「しなくてはならないもの」でなく、「したいと思う」ものであるという言葉を聞いたことがある。知識も同じように、生きるために身に付けるべきものではなく、知りたいという欲求があってこそ、初めて本当に身に付くものなのだそうだ。耳が痛いと感じる人も多いかもしれないが、志々目氏とのインタビューで印象に残ったのも同じようなことだった。

すごい同意。
とくにこの業界に入って間もない人には読んでほしい文章。

ツブシのきかないエンジニアが増えてるように思える。

それは俺の回りだけの話かもしれないけど。

俺がこの業界に入ったときはそれほどでもなかった傾向がより顕著になってきたのはJavaがある程度の市民権を得てきた時期だったか。
Javaがというよりもフレームワークが流行りだしたころか。

7年ほど前からフレームワークが流行り、雨後のタケノコのようにオリジナルのフレームワークが出来できて、ここ数年はStrutsや大きいとこでは.NETFrameworkなどがデファクトスタンダードになりつつある。
それに伴ってITエンジニアは本来カバーしていた低レベルAPIや更に下位のシステムに対する処理をフレームワークに任せ、業務ロジックなど本来主軸となるプログラミングに注力できるようになった。
それにより生産性は向上したし、ある程度の品質のゲタを履かせる事ができたことにより業界を俯瞰したときの品質のレベルが上がったと思う。

最初はそれで全てがうまく行っているように見えた。

数年が経過してフレームワークを使用したシステム開発が主体になってくると、自然と新入社員に対する教育が「いかにフレームワークを使いこなすか」に傾倒するようになった。
極端に言えば「いかに今使っているフレームワークを使うか」にまで落ちているケースもある。

たしかに手っ取り早くフレームワークを使った開発ができるようにするならばそれが最速だろう。
−−−「新入社員をいかに早くシステム開発に投入可能な戦力にするか」という視点で言えば。

考えられない

最近、5年目ぐらいのエンジニアと話をしていて驚いたことがある。

彼「なんかCDからブートできないんですよね。」
俺「は?BIOSのBootDeviceの設定が狂ってるんじゃない?」
彼「バイオス?」
俺 ('A`)

驚くことに彼はBIOSを知らなかった。
毎日仕事でPCを触り、5年間に渡りそんな毎日を過ごしてきてBIOSを知らないということが信じられなかった。
毎朝PCを起動したら「Press F2 to enter system setting」とか出てるのに!

気になって時間を見付けちょっと話をしてみたところ驚愕の事実がわさわさと。

  • 5年間 BorlandDelphiを使ってプログラムをしてきた。でもdllのロード方法はわからない。
  • Web系のシステム開発をしてきた。でもHTTPのプロトコルがどういう仕様か知らない。
  • プロキシを知らない。
  • 英語のドキュメントは嫌い。

もう限界だと思った。

でも彼と同じように、フレームワーク前提の開発にのみ携わって来たことで、フレームワークの使いかたしか習得していないエンジニアって実は潜在的にすげーいっぱいいるのかもと思い至って寒気がした。

フレームワークの功罪 〜フレームワークのジレンマ〜

フレームワークは便利だ。
それは間違いない。

誰もHTTPで通信するのにSocketからプログラミングなんてしたくはない。ラッパーがあれば便利だし、フレームワークになっていれば誰にでも比較的マシな品質のソフトウェアは作れるからなお便利だ。

でもこの便利さはあくまでも「本筋以外を気にしないで良い楽さ」であって断じて「本筋以外を知らなくても良い楽さ」ではない
ここを大きく見誤ってるエンジニアが多すぎるんじゃないだろうか。

本来フレームワークは多かれ少なかれブラックボックスな部分を持っている。
これは 普段は考慮せずに済み楽ができる半面、一旦事が起こるとその原因究明と問題解決に多くの時間を取られる という特徴を潜在的に持っている。*1
それを考えればフレームワークを使用したからといって、下位の 言い替えれば基本的な知識が必要無いなどと考えられるわけが無いはずだ。

こんな事例を何度も見てきて経験則的に導き出されたフレームワークのジレンマとは

フレームワークが優秀になった分だけエンジニアの平均レベルが下がり、トータルのコストは決して下がらない。

話を元に戻して

結局のところフレームワークを使おうが使うまいが伸びるヤツは伸びる。
そういう人間は得てして知識を得ることに喜びを見出せるやつだと思う。
言い替えれば知的好奇心が旺盛なやつ。

問題はそうでない人間をどうするかだろう。
俺が良くやるやりかたは「自分にとってのリスク」をネタに話をするという方法。

フレームワークを使い、あるいはラッパーを使い、かつそれを使用することだけに特化してきた人間はツブシが効かず、転職や技術的なパラダイムシフトが起こったとき大きなアドバンテージを失うことになる。
それは会社にとってという視点では無く完全に個人に降り掛かるリスクになるので、比較的どんなタイプの人間に対してもある程度理解が得やすい。

ただ、それは結局のところ「やらなければならない」という意味になってしまうので、本来進んでほしい方向性とは違うわけだが。


ただこればっかりは本人によるとこが大きいからなぁ。
対人間ってのは難しいわ。

*1:オープンソースであればソースを見ればいいんだけど。