プログラミング言語の使いやすさ

  • 黒須教授
  • 2002年7月29日

CGIプログラムを自分で書く必要がでてきたので、Perlの解説書を読み始めたら、プログラミング言語の使いやすさについて改めて考えさせられた。これまで10種類近くの言語を使ってきたことがあるが、新しい言語に接するたびに、なんでここをこういう仕様に設定したのだろう、という疑問を抱いたものだった。プログラミング言語を設計する人は、ロジックの面では有能かもしれないけど、それを使う人間に対する配慮に欠けているんではないか、という思いを強く持ったわけだ。

これまで使ってきたプログラミング言語のうち、私が一番気に入っている言語はLISPである。ある意味で大変原始的な言語であるだけに、とても自由度が高く、強力で、魅力的な言語だと思う。Common LISPの仕様が提案されて以来、世の中のLISP処理系はほとんどそれに準拠するようになってしまったが、構造体とかパッケージという概念を導入することで言語としての記述力を向上させたものの、ある意味ではLISP本来の原始的な良さを損なってしまったようにも思っている。

LISPの使いやすさはリスト構造という基本的構造にある。そのリストは小括弧、つまり”(“と”)”で表現されており、プログラムもリストなら、データもリストである。また特別な意味をもっているマクロ文字も、”(“, “)”, “‘”, “;”, “””, “`”, “,”, “#”だけであって、非常に整然とした構成になっている。さらに関数言語である、という点も単純な構造を可能にしていると思う。LISPが発展してくる過程の中で副作用を利用する関数が多くなったために多少分かりにくくなった面もあるが、基本的には、関数は値を返し、他の関数がその値を利用する、という関係になっている。

こうした単純さは、プログラムの理解を容易にすることに役だっていると思われる。こうした特徴に反してLISPがあまり利用されていないのは、コンパイルした時のサイズが大きいとか、処理速度に難がある、といった理由からであって、インタプリタをペースにしたその処理系は、初心者にもなじみやすいものである。LISPがちょっと人を寄せ付けにくい面としては、その小括弧の羅列にあるかもしれないが、適切な構造画面エディタがあれば、そのプログラムは決して読みにくいものではない。こうしたことから、私の認識では、LISPはユーザビリティの高いプログラミング言語といえる。

Perlに話を戻そう。まだ解説書を読み始めて一日しかたっていないので、十分理解した上での発言ではないのだが、たとえば、メタ文字は頭に”\”を付けるとか、スカラー変数は頭に”$”を付けるとか、配列は頭に”@”を付けるとか、連想配列は頭に”%”を付けるとか、データタイプを頭の一文字によって識別させるための約束事が多すぎるように思う。また、括弧についても小括弧である”(“と”)”の他に、中括弧すなわち”{“と”}”も使われている。Cなど他の言語処理系でも中括弧を使うことが多いが、これもLISPフリークの私には疑問である。全部小括弧でいいじゃないか、と思ってしまうのだ。

また例えば、Content-typeヘッダとして”Content-type:text/html\n\n”のような書き方をすることになっているが、なぜ”:”を使うのか、なぜ”/”を使うのかが納得できない。こうしたことは納得するものではなく、単純に覚えてしまうものだ、という考え方もあるのだろうが、プログラミングをする人の立場にたてば、あまりいろいろな規則を設定するのは適切とは思えない。

処理系を構築する上では、こうした約束事が沢山あった方が楽だろうが、もともと特殊な意味を持つ文字がいろいろとある上にこうした約束事があるので、使う方では煩雑になり初心者は混乱してしまうことになるだろう。

さらに、特に奇妙に感じたのは、制御文でelsifという綴りを使わせる点だ。他の場合にはフルスペルを使うことが多いのに、なぜelseifではなく”e”を省略させるのだろう。タイプする労力を削減したつもり、とでもいいたいのだろうか。

このほかにも、配列の添字を0から始めるのが本当にいいのかどうかとか、まだまだいろいろと不満に感じた点はあるのだが、すでにPerlでプログラミングをしている人たちはこうした点をどう思っているのだろうか。習うより慣れろということで、とにかく頑張って覚えてしまったのだろうか。それとも好きこそものの上手なりということで、何の苦もなく覚えてしまったのだろうか。

いささかLISPに肩入れしすぎの私ではあるが、このPerlのような例を見ていると、プログラミング言語の設計者は、その仕様のユーザビリティという点にもっと配慮すべきではないか、と思えてしまう。プログラミングにおける認知的負荷を最小化するための努力を怠ってはならないと思う。仕様を決める人は一人だけかもしれないが、それを使う人は何万人、何十万人といるのだ。その責任を十分に感じて仕様設計をすべきだと思う。