新人研修で何を教えるべきか。Javaなのか

自分自身、新人研修で何を教わったのか、記憶をたどってもおぼろげである。Javaでのプログラムの仕方を教わった気はする。仕方、というのはプログラミングとは何ぞやというのではなくて、Javaの制御構造とかAPIの使い方だよなあ。

先日、SIer の友人が新人研修の講師として Java を教えるというお話を聞きました。会社側からは「Java を教えるのではなく、"プログラミング" を教えてほしい。オブジェクト指向は教えないでください。」との指示を受けたそうです。
会社側の意図としては、オブジェクト指向が云々とか、抽象クラスを使って、、、とかを覚えても、新入社員が現場に配属されて、即戦力で活躍とまではいかなくても、まともにさえ機能しないというクレームが出ているそうです。

次世代の基幹系オープンシステム開発に利用されるプログラミング言語は? - forest book

別にまともに機能することを期待しているわけでもないけど、あまりにプログラムを組むこととはどういうことかが欠落したまま現場にやってくることが多すぎる。アルゴリズムって何ですか?JavaならこういうAPIあるのになんでないんですか?
前、CASLをやったという話をしたけれども、それすらノウハウになってしまう人はいました。何をどうやっての部分が欠落していると、答えは考えてひねり出すものではなくてパーツを組み合わせるものになってしまう。
Javaでプログラムを初級者に教えるのは難しい。言語仕様をひとしきり説明するだけでも時間がかかってしまう。

Beautiful Code: Leading Programmers Explain How They Think (Theory in Practice (O'Reilly))

Beautiful Code: Leading Programmers Explain How They Think (Theory in Practice (O'Reilly))

の巻末対談でもそういうような話が出ていたような気がする。で、結局覚えるのはAPIをどう叩くかだけだったりしてね。
アルゴリズムのお勉強は軽視されていることが多い。アルゴリズムのお勉強だってある意味ではセオリー集のお勉強に過ぎないかもしれませんけど、プログラムの考え方の基礎作りという点ではやっぱりおろそかにしてはならないと思う。
Webアプリケーションなんて作らされちゃってさ、httpも理解してないのにとりあえずdoGetとdoPostがどうとか。doGetがどこからどうやって呼ばれるかもわからない。そのままじゃ人口無能みたいになっちゃう。でもそこをちゃんと教えながら研修やったらすごく時間がかかる。
とはいっても、研修の中できちんとプログラムとは何ぞやを教えるのは難しい。地道だし、つまんないって逃げ出す人もでてきそうだし。やる気も素質もある人だけを相手にしていられたら楽なんだけどね。