低水準言語での研修

よく、新人研修で「実践的な」研修を求められることが多い。のだけれども、本当に僕らが必要としている人材というのは、別に単なる作業員ではない。実践的な言語研修で良しとするのは、作業員を育成するためのものである。職業訓練をしているわけではない。SIerとして、将来設計や要件定義をするための、あるいは、お客さんと本来必要なコミュニケーションをきっちりとこなすための、人材育成をしたいのだ。
もちろん、短い新人研修期間で全てが身に付くわけではないけれども、ろくにプログラムの何たるかもわからないまま、Javaや.NETのようなAPIが潤沢な言語を、しかもIDEを用いて研修するなんてのが将来の役に立つとはどうも思えない。直近でぶち込まれたプロジェクトがJavaだったりして、「Javaできます」っていえるわけでもなし。しかも、ArrayListとか最初から使えちゃうわけで、データ構造に対する素養も身に付かない。ソートって何?SQLでGROUP BYすれば出来るんでしょ?みたいな。こんな奴らを現場に出すと、10万回ループさせても平気である。
そういえば、他の会社の奴だけど、現場で「パフォーマンスが出ないなら石を追加すればよいんですよ!」なんて言い放ったバカがいた。おい、お前らの会社が作った部分のロジックがどんなに非効率かわかって言っているのか?もうそれを改善すると全面的に作り直しだからちょっとでも改善できるように俺らが頑張っているというのに「なんで俺たちがパフォーマンステストに付き合わなきゃならないの?」みたいな顔をしやがって。CPU追加するとメンテ費もライセンス料も何もかも変わってくることをこちらのロジックを修正もしないで客に求められるわけあるまい。余談。
てなわけで、現場に放り込む前に、不便で制約も多い低水準言語(それこそCASLみたいな)ものでの研修を行うと、多少はマシである。多少は。少なくとも、鉄は熱いうちに的な感じで最初のうちに限りある資源、効率的なロジックで、基本的なアルゴリズムの実装を行うということは(最初から出来るやつを除けば)有効だ。ソートしてマッチング、マージなども出来ないようではAPIを駆使したってろくなロジックを書けるようにはならない。ろくなロジックが掛けない奴はろくな設計をできない。
新人君たちも、「実践的な」モノは現場にいったらいくらでも身に付けることが出来るから、心配しないでしっかりと基礎中の基礎を身につけて欲しいな。バイナリとテキストでの数値表現の違いとか相互変換とか、現場ではほとんどやらないと思うけど、いざその手の問題に直面したときに、理解しているとしていないでは大違いなんだよね。
アセンブラ的なものからCPUが、プログラムが、どう動くのかを想像できるようになって欲しい。Java使っていてJVMの存在を知らない奴のなんと多いことか。Heapって何?っていう奴が存在することを貴方は信じますか?いや、身を持って体験しているはず。Out of Memoryを見て右往左往する人々を見て。無限にオブジェクトを生成できるものだと信じている人々を見て。ガベッジコレクションって喰いもん?みたいな。
もちろん、低水準言語での研修がこれらの素養の元に必ずしもなるわけではないけれども、コンピュータープログラミングは本来不自由な存在であるコンピューターに人間の求める動作をさせるための手段である、ということはわかってもらえる。全員ではなくても。それが事務作業員でない将来像へ進むための第一歩であると思っている。趣味プログラマーなら「C言語ってなんて不便なんだ!」で良いと思う。職業プログラマーとしては、「Javaってなんて便利なんだ!」と思って欲しい。
いずれにしても、今年の新人達が、どんな人材に育つか、楽しみである。