ちょっと古いが、黒須教授のUser Engineering Lectureより。 CGIのためにPerlを使おうとしたら複雑スギ、Lispの方がよっぽどユーザビリティが高い、というような話。
CGIプログラムを自分で書く必要がでてきたので、Perlの解説書を読み始めたら、プログラミング言語の使いやすさについて改めて考えさせられた。これまで10種類近くの言語を使ってきたことがあるが、新しい言語に接するたびに、なんでここをこういう仕様に設定したのだろう、という疑問を抱いたものだった。プログラミング言語を設計する人は、ロジックの面では有能かもしれないけど、それを使う人間に対する配慮に欠けているんではないか、という思いを強く持ったわけだ。
基本的には言わんとしていることは分かる。 「プログラミング言語は使う人のことを考えていない」というのはよく感じることだ。 特にLarryはそういうところには気を使わない、というか、慣れればよいと思ってるみたいだし。
元々、言語設計者はユーザインタフェースやユーザビリティの研究者ではないので、 その辺の知見が足りないというのはありそうなことだ。
では、黒須教授はどのような言語が良いと思っているかというと、Lispなんだそうだ。
これまで使ってきたプログラミング言語のうち、私が一番気に入っている言語はLISPである。ある意味で大変原始的な言語であるだけに、とても自由度が高く、強力で、魅力的な言語だと思う。
(中略)
こうした単純さは、プログラムの理解を容易にすることに役だっていると思われる。
ここでLispとはなんと通な。
その後、Perlの仕様に対する文句とかが並ぶのだが、 Perlの仕様の話をしている最中にいきなりContent-Typeのフォーマットの話が出てきちゃうことは論外としても、 全体を通して読み終わった後、奇妙な違和感が残る。なんだろうか。
まず第一に「Lispはプログラムの理解を容易にしない」という点だ。
Lispは確かに単純だ。自由度も高い。強力で魅力的だ。「美しい言語」と呼んでもいいだろう。 しかし、だからといってLispで書かれたプログラムが他の言語以上に理解しやすいかというと そんなことはない。むしろはっきりいって読みにくい。美しいと使いやすいはかならずしも一致しない。 このことは根っからのLispファンであるPaul Grahamも認めている。
なぜLispのプログラムが読みやすくないかというと、理由はいくつかあって
などがあるだろう。ここ数十年積み上げられてきたプログラミング言語の伝統に沿っていないというのもあるかもしれない。もちろん、Lispはそんな伝統ができる前から存在していたのだが。
第二に、プログラミング言語は確かにインタフェースであるが、他のインタフェースとは少々違うかもしれない点だ。
インタフェースである以上、ユーザビリティの良し悪しがあるのは当然のことだ。 最初にいったようにユーザビリティにあまり配慮していない部分を持つ言語があまりにも多いのも事実だ。
しかし、他のツールのインタフェースが、ボタンを押す、メニューから選ぶ、というような非常に限られた 選択肢しか提供しないのに比較して、プログラミング言語は条件判断や繰り返しを含む異常に柔軟な指定ができる。 また、その表現すべき「仕事」も他と比べると圧倒的に複雑だ。 その結果、プログラミング言語自身も、大規模で、複雑で、習熟に時間のかかるツールである。 そういうツールのユーザビリティは、 「誰にでも使いやすい」を目指すいわゆる普通のユーザビリティとは違うかもしれない。
なにより違和感があるのは、プログラミング言語デザイナーの数を考えると、 本来この文章の対象になるべき人物(で日本語が読める)のは指折り数えるほどではないかと。
とはいうものの、ユーザビリティの専門家によるアドバイスを受けて設計されたプログラミング言語ってのも 見てみたい気がするなあ。
LISP が読みにくさは、慣れの問題ではないでしょうか。
すくなくとも Scheme については以下のように思います。
・表現の種類がすくなくても、抽象化力が強いので、「冗長」というよりは「簡潔」である。
・データ部分とコード部分を区別しないでいいのは利点。
・閉鎖的というのは、最近の実装にはあてはまらない。
・マクロについては、たしかに別の言語を許すようなものですが、簡潔に書くためには便利。
・本来複雑なプログラムを如何に抽象化するかが、読みやすさにつながる。抽象的な表現力がつよい言語で記述できるほど読みやすくなる。
Lisp は(多分、C なんかも同様だと思うけど)
汚く書く自由がある言語なんだと思います。
綺麗に書くことが強制されてないというか。
Lisp で複雑な問題を対象にする場合、
対象問題にあったミニ言語を作って、
その上で記述することが少なくないと思いますが、
そうすると Lisp 自体は節操無しの無法地帯に
ならざるを得ないのかな?
私は Lisp の本質は S 式だと思っているので、
Lisp を比較する相手は Ruby とかではなくて、
むしろ XML とかかなと思ったり。
(やっぱり、読みにくいということか(^_^;)
すみません〜
教授はLispしか実は理解してないんです。
雛がはじめて動くものに出会ったときに、親と認めるのと同じなんですぅ〜
雛なんですぅ〜