Cogito Ergo Sum.

我思う故に我あり

Lispをめぐる言説のウソホント?

 Lispの本を読んでいてLispというものがだんだんわかってくると、「Lispを学ぶとプログラミングのスジが良くなる」みたいな言説は嘘ではないかと思うようになってきた。

 Lispの魅力は、おそらくLispそのものを自分で拡張してしまえるような柔軟さにある(条件分岐や繰り返しを行う処理もLispではただの関数やマクロとして定義されており、当然、そういった関数やマクロを自分で定義することができる)。そういうレベルでLispを使いこなすことのできる人ならそりゃあこの言語に魅了されるだろうし、優秀なプログラマだろう。だから「Lispは優秀なプログラマを魅了する言語である」ってことは正しいと思う。

 しかしそれは、「Lispを学ぶと優秀なプログラマになる」ということを意味しない。単に「優秀なプログラマしかLispを使いこなせない(し、使い続けない)」ってことなんじゃないかと思う。Lispを使いこなすレベルのプログラマなら、どんな言語だって使いこなすだろう。そのときに使いこなし甲斐があるのがLispだというだけで。

 ほんの一握りの優秀プログラマを除いた多くのプログラマは、デファクトスタンダードではない言語を使い続けることはできないだろう。デファクトスタンダードがCならCを使うだろうし、それがJavaならJavaを使うだろう。それがLispならLispを使うだろう。

 で、Lispデファクトスタンダードになったときに、「やっぱりダメなプログラマLispを使ってもダメなままだ」ということが明らかになるのではないかと思う。むしろ、Lispは制約が少ないぶんだけ、どんなにダメなプログラムでも書けてしまうような怖ろしさがある。

 Rubyも凄く自由な言語だと思うのだけど(まぁ、Lispに比べれば大したことないのかもしれないが)、Railsの成功によってRuby人口が爆発的に増えて、そりゃもう信じられないようなヒドいプログラムもたくさん書かれているはずだと思う(Rubyにはそれを許す自由さがある)。プログラミング言語に限らず、どんなものだって大衆化すれば(一部の優秀な人たちだけが使っていた頃と比べて)全体の質は下がる。

 結局、制約の少ない言語でちゃんとしたプログラムを書けるのは特別に優秀な人に限られた話だと思うのだ。Javaなんかがルールだらけで堅苦しいのは、そうしなければ普通の人はちゃんとしたプログラムを書けないからなのだから。マニュアル通りに決まりきったことをやらせる、というのが全体の質を上げる手っ取り早い方法なのだ、たぶん。

 あるものがあったとして、それを使いこなしている人がそれを評価するときに挙げる(その「あるもの」の)性質と、それを全員に使わせるべきかどうかを検討するときに考慮すべき性質は異なる(それは単に「異なる」というだけで、必ずしもトレードオフの関係にあるわけではないと思う)。そういう当たり前のことに思い当たった。

 Lispという言語は確かに使いこなせる人にとっては最高の言語なのだろうけど、誰もが使いこなせる言語ではない(たぶん。今のところは。…って言うか、LispLisp的である限り)。