複数のプログラミング言語を学ぶ意義

まつもとゆきひろ氏の記事、総論 複数のプログラミング言語を学ぶ意義を読んだ。賛同する。

プログラミング言語が思考に及ぼす影響はバカにならない。C言語だけやっていてもおそらくオブジェクト指向パラダイムは理解できないし、動的言語の柔軟さがもたらす利点も理解できない。プログラミングするときはこの言語でどう表現するか、この言語の哲学にうまく乗ってどう書くか、という点に意識が向くので、言語で表現できないところまで頭が回らないことが多い。

実際、CからJavaへの転向組がなかなかJavaらしいプログラムを書いてくれないので閉口した人も多いはず。両者は文法だけ見れば似ており、覚えるのに大した苦労はない。しかし、その使い方はまるで異なる。言語を覚えるというのは、その言語を取り巻く文化や哲学、適用技術をまとめて飲み込むことに他ならない。Javaへの転向組が真にJavaを使いこなせるところまでくれば、獲得できる新しい概念はたくさんある。

Duck TypingなんてC/C++/Java/C#プログラマからすれば柔軟すぎて保守性が失われるのでは、と懸念される概念なのだが、これが有効に働くことは実際に動的言語を扱ってみると理解できる。俺は基本的にC/Javaプログラマなのだが、半年前からRubyを触って、Duck Typing以外にも思いもよらない実装の数々を見て、脳が洗われた思いがしたものである*1

新しい言語を学ぶことは思考を広げるし、いい刺激になる。そして、やっぱり飯の種にもなり得る。指定した言語を使えるか、というのはプログラマの選択理由の一つになるのだ。もっとも、くだんの記事では仕事に関係ない言語を学ぶことを推奨しているが・・・。

俺の今年のLotY*2は・・・HaskellErlangか、というところ。どちらもこれまで覚えた言語とは違う脳の使い方を要求されるようだ。覚えておいて悪くはあるまい。

*1:それでこんなにRuby厨なんですが

*2:Language of the Year、今年覚える言語