http://martinfowler.com/bliki/LanguageForLearningObjects.html

オブジェクト指向を教えるとき、どの言語がよいか?

ここ数年、オブジェクト指向を覚えるときには、Javaが使われてきました。Javaを使うのには、いくつかの理由があります。

  • 広く知られている
  • C を基本とした文法(一般的なスタイルとなりつつあります)
  • フリーで高性能な開発環境が利用可能である
  • Javaの知識があれば仕事に就ける

こういった理由から、私はJavaの使用をやめさせようとはしませんでした(C#にもこういった特徴があり、いずれC#が代わりになるだろうと指摘してはいたんですが)。ただ、Javaだけに任せようとは思っていません。Java、C#、C++はいずれも、オブジェクト指向プログラミングのある形を提示してくれていますが、誰かにオブジェクト指向を紹介するならば、選択肢も紹介してあげるといいでしょう。

選択肢とは、RubyPythonのことです。両言語とも、動的型言語です。静的型言語と一緒に使えるようになってれば便利だと思います。どちらも大変便利な言語です。ちょっとしたスクリプトで自動化して解決するような仕事はたくさんあります。技術者たるもの、1つくらいはスクリプト言語を隠し持っているべきですね。

どちらの言語を選んでも構いません。個人的には、Rubyが気に入っていますけど。 広く使われている(かつ利用可能な)のはPythonですし、Rubyはより純粋なオブジェクト指向ですので(学ぶのには最適です)私にとってみれば、すがすがしい感じがします。 あと、Rubyにはブロック(コード群を簡単にオブジェクトとして扱う機能)がありますね。ブロックは強力なプログラミングツールで、コードの構造化についての多くの考え方を学ぶことができます。他のやり方だと、なかなかこうはいきません。関数型言語の入門用にも良いですね。

みなさん「Smalltalkはどうしたの?」と言うでしょうね。Smalltalkによるプログラミングは、私にとって今でもお気に入りの経験だから、その気持ちは分かります。だけど、スクリプト言語の強みって、プロのプログラマが普段使えるかどうかなんです。私のようなSmalltalkファンですら、もう何年もSmalltalkの環境(image)を立ち上げていないのです。

こうなると、また別の疑問が湧きますね。オブジェクト指向を教えるのに、言語を使ったほうが良いかどうか。言語を使わない案というのは、原則について議論するということになるでしょうね。おそらくはUMLを描くとか、そんな感じでしょうか。 私は、まずは言語を使って、何かできるようになるほうが断然いいと思いますね。私にとってソフトウェア設計とは、数学みたいなものなんです。読んだり聞いたりするだけでは、なかなか理解が深まりません。実際にやってみないと理解なんかできません。だから、本当にオブジェクト指向を理解したいのなら、実際に何かを作ってみるべきです。 PragDave’s Katas の精神で、いろいろなやりかたを試してみてください。