傲慢
神罰が下るほどの過剰な自尊心。または人様に対して恥ずかしくないプログラムを書き、また保守しようとする気質。よって、プログラマーの第三の美徳である。
-- Larry Wall (翻訳:小飼弾)

プログラマーの怠慢ぶりと短気ぶりを一通り見たしたところで、いよいよ傲慢(hubris)ぶりを見ることにしましょう。

プログラミング言語は不自然言語?

ここまでJavaScriptを見てきて、アマグラマーたる読者のあなたはどう思われたでしょうか?

なんでJavaScriptは、こんなに不自然というか、自然の言語からかけ離れた書き方をするのだろう?

こんな感想をお持ちの方は少なくないと思われます。

実は同様の感想を持つプログラミング言語の設計者は少なくありません。そしてもっと自然言語に近いプログラミング言語もいくつも登場してはいます。

例えば、「変数aに123456789という値を入れろ」は、JavaScriptでは

var a = 123456789;

と書きますが、HyperTalkという言語では、以下のように書きます。

put 123456789 into a

見ての通り、英語そのままです。

それどころか、日本語そのままのものすら存在します。例えば「なでしこ」というプログラミング言語では、同じことを以下のように書きます。

aは123456789。

こういった自然言語に近いコンピューター言語は実は少なくないのですが、なぜかプログラマーの間でメジャーになることはこれまでなかったのです。それは何故なのでしょうか。

Larry Wallのいい分

ここで、Larry Wallに登場してもらいましょう。この人は、Perlという名のプログラミング言語を作った人です。Perlはアマグラマーにもプログラマーにも絶大な人気があるだけではなく、Python、Rubyといったより新しいプログラミング言語にも多大な影響を与えました。その影響はJavaScriptにも及んでいます。実は「プログラマーの三大美徳」を最初に説いたのもこの人です。

その彼が、Perlを設計する際に心がけたのが、以下です。

Programming Perl
Perl is designed to make the easy jobs easy, without making the hard jobs impossible.
[Perlは簡単なことは簡単に、難しいこともそれなりに出来る言語として設計されました。]

ここに、重大なヒントがあります。

殺速と複殺

自然言語を元にすると、たしかに「簡単なことは簡単」になりそうです。なにしろ自然言語が元ですから、新しく文法や語彙を覚える必要はありません。ところが、自然言語にも「難しいこともそれなりにやりにくい」分野を、あなたは少なくとも一つは知っています。

それが、数式です。

数式なんてだいっきらいというあなたも、以下の数式は見たことがあるでしょう。

E = mc2

これは日本語にすると、

エネルギーは質量に光速度の二乗をかけたもの

となりますが、どちらが同じことを簡潔に言っているでしょうか?

ちなみに、JavaScriptでは、

var E = m * c * c;

です。

これがまだアインシュタインの有名な公式なら、自然言語で書き直すのもなんとかなりますが、これが例えば量子力学の世界のある重要な公式、

planck's equasion

だったりしたらもうお手上げです。しかしJavaScriptであれば

function f(l){
  return 8 * pi * c * Math.pow(l, -5) / (Math.exp(h * c / (l * k * T)) - 1);
};

と何とか書き下ろせます。

数学者や科学者や工学者(そう、プロのプログラマーも含みます)が数式を好んで使うのには、この「言葉で言ったらかえって難しくなってしまう」ことを、数式なら簡単に表せるからなのです。このことは、プログラミング言語にも共通しています。簡単なことを簡単に書けるだけでは、プログラマーは満足しないのです。難しいこともなんとか書き下せて、やっと満足が行く仕事ができるのです。

ちなみに「簡単なことを簡単に出来る」ことを、Larry WallはWhipuptitudeと名付けました。英語で「サクっと片付ける」ということを"Whip up"といいますが、これに引っ掛けた単語です。これの和訳は「殺速」といいますが、実は和訳者もLarry Wall本人です。

これに対して「難しいこともそれなりに出来る」ことは、Manipulexityといいます。Manipulate=操作と、Complex=複雑に引っ掛けた言葉で、和訳はこれまたLarry Wall本人による「複殺」です。

コンピューター言語を作るのは、自然言語を作るより実は遥かに簡単なのですが、そのコンピューター言語がプログラマーたちの間で使われて普及するには、この殺速と複殺を兼ね備えている必要があるのです。

プログラマーの傲慢にはまた、「わざわざ自然言語で『読めるだけ』の仕様書を書くより、書いたまま動いた方がずっとまし」という気持ちもあります。そして難しそうな数式も、見慣れれば美しいように、難しそうなコンピューター言語も読み書き慣れれば美しく見えるようになります。傲慢とは、不可解の中に美を見いだすこと、なのかも知れません。

プログラマーの三大美徳=読者の三大美徳

出版界には、「数式を一つ載せると売り上げが一割り下がる」という都市伝説があるそうです。数式が入ると内容が難しく見えるようになるのが理由だと言われていますが、私のblogでは数式だらけの本が意外とよく売れています。「読んで解った気になる」だけであれば数式は不要かも知れませんが、それを実際に使ってみる段階になると、数式がないと翻って大変なのです。あなたは、「読むだけの本」と「読んで使える本」とどちらが好きですか?

私に言わせれば、出版界は傲慢度が足りないのです。読者は、出版界が憶測しているより、ずっと無精で短気で、そして傲慢なのです。そう、プログラマーたちのように。

Dan the Programmer