学ぶべき5つ言語について
最近ですね。僕がtwitterで
学ぶべき5つ言語を選べと言われたら、最近は、1 Common Lisp2 Haskell3 Smalltalk4 Prolog5 APLとなっている。
— はなだ のぶかずさん (@nobkz) 2013年4月30日
とつぶやいてましたので、その理由と、言語紹介も兼ねて詳しく書いてみようかなぁと思っています。
んで、5つの言語と言えばですね、Eric S. RaymondのHow To Become A Hackerで紹介されていた、
が有名だと思います。これはこれで一理あるかなぁと思ってましたし、実際にこれらの言語はやるならやるべきだと思います。
ですが、今回自分なりに5つの言語を選んだらどうなるのかなぁと思い、やってみました。
選択した基準といえばですね、
1 : 各言語間の距離が遠いこと。
2 : 純粋、あるいは、ユニークであること。
3 : 書いてて楽しいと思ったこと。
この三点を基準に選択しました。人によってはマイナーな言語な選択かもしれません。しかし、言語のポピュラーさと、言語の良さに関係は無いのです。Grahamさんの有名な記事"If Lisp Is So Great"から引用させてもらいますと
"プログラミング言語の間に大した差が無いのなら、 いちばん人気の高い、広く使われている言語を使っておくに越したことはない。 でも、長い目で見れば、言語は等価ではないんだ。 だからこそ、人気の低い言語も、ジェーン・オーステンの小説のように、 生き残っているんだ。他のみんなが最新のジョン・グリシャムの小説を読んでいる時にも、 いつだって、ジェーン・オーステンの小説を読んでいる、少数の読者がいるからだ"
http://practical-scheme.net/trans/iflisp-j.html
全体として、個人的にバランスがとれた選択じゃないかと思っています。
1 Common Lisp -> Lisp系
2 Haskell -> 純粋関数型言語
3 Smalltalk -> オブジェクト指向言語
4 Prolog -> 論理型言語
5 APL -> 一言でいうならば「配列処理言語」
と、どの言語も独特な特徴をもっているのではないでしょうか。(自画自賛)
人によっては、「いやCommon LispじゃなくてClojureだろがそこはぁ!」みたいな人もいるかもしれません。そういった異論をもってる方はぜひコメントにでも書いてみてください。そういった意見を言い合うのはなかなか楽しいと思います。
さて、今後のエントリでこれらの言語を紹介したいと思います。
:追記です。
「学ぶこと」という意味合いは、その言語でバリバリ書けるプログラマになるって事ではありません。
その言語を、教養として知っておいてほしいってことです。(私も5つの言語全部の詳細を把握しているわけではありません。)、齧るだけでもかまいません。
どれか一つの言語を選択してそれに突出する事も大事だと思いますし、私の場合それがCommon Lispだったのです。
他の言語を学ぶことは、自身の使う言語にも深い理解を得られたり、新しい発想とまでは行かないまで、新しい見方が出来るようになると思います。また、システムの振る舞い自体の良い抽象を得ることにもつながると思います。
今後のエントリで、これらの言語の紹介をしていきます。できるだけ、その言語について知らない方でも読めるようにしたいと思います。できるだけ、その言語の良さが分かるように書いていきたいと思います。私の記事を読んでくれた方がinspireしてくれたらなぁと思います。