複雑なものを理解する道
ぼくは Smalltalk と Lisp のファンです。
たまたま、Lisp と Smalltalk についてかかれた、興味深い記事をみつけました。2014年と少し前の公開ですが、とても刺激的でしたので紹介します。
Lisp, Smalltalk, the Power of Symmetry
以下はその要点です。勘ちがいの可能性もありますので要注意。
*
Lisp のお気に入りのポイントは、それ自身がプログラムできるプログラムをつくることができること。プログラムできるプログラムはマクロ macros と呼ばれるけど、macros が Lisp の強みなのではなく、Lisp がもつ特性から自然に生じる症状 symptom のようなものである。
Smalltalk は、この macros を使わずに (メッセージングによる) オブジェクト指向という方法で、プログラムできるプログラムづくりを可能にしている。
Smalltalk にはソースコードがない。ソースコードということばが動かないデータを指すからだ。Smalltalk には動くデータ、つまりオブジェクトしか存在しない。
データがプログラムであるから、Smalltalk はパワフル。データ (オブジェクト) は、プログラム (オブジェクト) をつくることができる。そのプログラム (オブジェクト) もプログラム (オブジェクト) をつくることができ、それはさらにちがうプログラム (オブジェクト) を...
*
以下は、ぼくの考えです。
Smalltalk は1972年の誕生から1980年の商用版の発表まで、Smalltalk を開発言語としてつかいながら、大きな変化を遂げました (Ingalls 2020)。GUI という、当時だれも知らないものをカタチにできたのも、プログラムできるプログラムを自然につくることができる (メッセージングによる) OOP というスタイルをとっていたからこそと、聞いたことがあります。
Lisp は macros でそれを可能にしている。これが、1958年生まれという古い言語であるにも関わらず、今も熱心なユーザーが多く、Clojure など新しい技術も取り込んだ派生言語が活躍している理由だと予想しています。
*
Lisp と Smalltalk のみかけは大きくちがいます。しかし、その2つに共通点がある。それは、プログラム可能なプログラムを自然につくることができること。
そして、このみかけが似ていない2つのプログラミング言語が、何十年にもわたって使われつづけていることには、大切な意味があるのではないか。それは、プログラミング言語に限らずもっと広い問題にも当てはめられるのではないか。
たとえば、この世界というか、ぼくたちの日々の生活は、もちろん複雑で、この複雑なことをどう理解していけばいいのか、どうつきあって行けばいいのか、そのヒントにもなっているかもしれない。
*
この最後の部分は、ぼくが好きなブログ「23-seconds blog」の作者である Hibiki Kurosawa さんの、ウケウリです ( ͡° ͜ʖ ͡°)b。
尊敬と感謝の気もちをこめて、ウケウリました (意味不明?)。