Javaとプログラミングとオブジェクト指向の関係

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

これを書かれた方も人から聞いた話のと言う事のようですので、色々書くのはなんですがちょっと気になったので。

先日、SIer の友人が新人研修の講師として Java を教えるというお話を聞きました。会社側からは「Java を教えるのではなく、"プログラミング" を教えてほしい。オブジェクト指向は教えないでください。」との指示を受けたそうです。

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

ここには「Java」・「プログラミング」・「オブジェクト指向」という3つのキーワードがでてきます。前半の、

Java を教えるのではなく、"プログラミング" を教えてほしい。

は多分、

特定のプログラム言語の詳細を教えるのではなく、言語によらない汎用的なプログラミングの技法を教えてほしい。

と言う事を意味しているのではないでかと思います。ここでポイントとなるのは新人研修の指示という所です。

ここから「初心者向け言語が避けていること」言い替えれば「初心者が苦手なこと」が何であるかだいたいわかる。彼らは「抽象化」が苦手なのだ。

Matzにっき(2008-02-04)

言語によらない汎用的なプログラミングの技法は特定のプログラム言語よりも抽象的かと思いますので、初心者が苦手とする事をやれと言う事でしょうか。そうなると、

会社側の意図としては、オブジェクト指向が云々とか、抽象クラスを使って、、、とかを覚えても、新入社員が現場に配属されて、即戦力で活躍とまではいかなくても、まともにさえ機能しないというクレームが出ているそうです。

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

苦手な事をやらせてもそう簡単には克服出来ず、この方向性では現場に配属されてもやっぱり「まともにさえ機能しない」となることが予想されます。(新人が配属されて、すぐまともに機能するべきなのかと言う点については、ここでは議論しない方向で)

で最後のキーワードである「オブジェクト指向」です。これがオブジェクト指向分析なのかオブジェクト指向設計なのかオブジェクト指向プログラミングなのかは明示されていませんが、プログラミングの話なのでオブジェクト指向プログラミングだとします。後半部分は、

オブジェクト指向は教えないでください。

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

となっており、「オブジェクト指向」は「Java」というプログラム言語と比較してより抽象的で、かつ、プログラミングの方がさらに抽象的であるとすると(Javaプログラミング、Cプログラミング、構造化プログラミング、オブジェクト指向プログラミング等々、様々な限定する用語をつけて使われる事からもプログラミングの方がより広く抽象的な語であることは自明)、

  1. プログラミング
  2. オブジェクト指向
  3. Java

という順で「プログラミング」が一番抽象的となります。後者2つは「教えないで欲しい」となっているので、「プログラミング」という、3つのキーワードの中でもっとも抽象的なを教えましょうという結論が導き出せます。「プログラム言語もプログラミングパラダイムも具体的すぎだ。もっと抽象的な事を教えろ」ということでしょうか。なんだかすごいですね。

…とか書いていたら一方で、

オブジェクト指向は、実装ではなく設計論なので、まずは設計よりも実装だよね、って話ですね。

オブジェクト指向よりプログラミング - 谷本 心 in せろ部屋

と書いている方もいて、ここでの「オブジェクト指向」はオブジェクト指向設計と解釈した方が良かったのでしょうか?なんだかよく分からなくなってきました。

ここからはあまり明確な根拠は無いですが、1つ目に、即戦力が欲しいと言う事なら具体的な事をやった方がいいかと。ここでいうと「Javaを教えるべき」ということになるかと思います。具体的な事しかやってないと、出来ることがすぐに頭打ちになってしまうと思いますが、即戦力が欲しいという要望には一番近づけるはず。Javaによらないほど抽象的な事を覚えて具体的なプログラムにまで持っていくのは始めてやるにはかなり難易度が高い気がします。

2つ目に、書いてはないですが話の流れから新人研修で使用するプログラム言語はJavaだとして、OOPだと大々的に主張しているJavaを使いつつ、JavaでもOOPでもないものを教えるって、一体何を教えるんでしょうか?私がこの指示を出されたらかなり困ると思います。その組織に属していると何となく分かるのでしょうか?教材とかも市販のJavaの本は当然OOPについて書いてあるでしょうから、全部自前で作らないとならないかもしれません。