風変わりな言語
「自分の経験では、どのプログラミング言語も基本的に同じだ」と言う人がいますが、その言葉が物語っているのは言語そのものではなく、その人がこれまでやってきたプログラミングの種類なのです。
プログラミングの99.5%は、ライブラリ関数の呼び出しをつなぎ合わせる作業です。人気のある言語はどれも、この作業においては同じように優れています。だからこそ、キャリアのすべてを人気言語の共通部分だけで過ごすことも十分に可能なのです。
しかし、残りの0.5%は、その割合とは不釣り合いなほど面白いのです。それがどんなものなのか知りたいのであれば、風変わりな言語の「風変わりさ」こそ、追うべき手がかりになります。
風変わりな言語が風変わりなのは、偶然ではありません。少なくとも優れた言語に関してはそうです。優れた風変わりな言語の風変わりさは、たいてい、単にライブラリの呼び出しをつなぎ合わせるだけではない、何らかのプログラミングの形が存在することを示唆しているのです。
具体例を挙げましょう。Lispマクロです。Lispマクロは、多くのLispプログラマにとっても奇妙に映ります。それらは人気言語の共通部分に含まれていないだけでなく、その性質上、言語をLispの方言に変えてしまわずに正しく実装することは困難です。そしてマクロは、間違いなく単なるグルー・プログラミングを超えるテクニックの存在を示す証拠です。たとえば、まずその種の問題のための言語を書き、次にその言語で具体的なアプリケーションを書くことで問題を解く、といった手法です。しかも、マクロでできることはこれだけではありません。これは、プログラムを操作するテクニックという広大な空間の中の一領域にすぎず、その空間は今なお十分に探求されているとは言えないのです。
ですから、プログラミングとは何でありうるかという概念を広げたいのであれば、風変わりな言語を学ぶことは一つの方法です。多くのプログラマが風変わりだと感じる一方で、中央値的なユーザーが優秀な言語を一つ選び、人気言語の共通部分との違いに注目してみてください。この言語では、他の言語では言おうとすると途方もなく面倒になるようなことが、何が言えるでしょうか。これまで言えなかったことを言えるようになる過程で、これまで考えられなかったことを考えられるようにもなるはずです。
この文章の下書きを読んでくれたTrevor Blackwell、Patrick Collison、Daniel Gackle、Amjad Masad、Robert Morrisの各氏に感謝します。
記事をランダムに読む