Paul Graham は On Lisp の導入部で「ボトムアップ・プログラミング」の重要性を説いた。プログラミング言語をそのままつかうのではなく、問題に適するように変えていき、そのような最適化された独自のプログラミング言語でもってつくりたいプログラムを書く、という説明を初めてみたとき、ピンとこなかったのを覚えている。プログラミング言語というものはもっと「かたい」ものだというイメージがあり、拡張するというのがどういうことなのかわからなかった。 Lisp は特別だからそういうことができるのだろうか、と不思議に思ったものだった。
先日とあるプログラムを書いていて、突然「ボトムアップ・プログラミング」の意味がわかった。外部サービスの API のバージョンによる差異を吸収して UI 部分からは同じように使えるようにしようと、クライアント・ライブラリクラスのインターフェースをそろえる作業をしていたときのことだった。つくりたいプログラムが自然に書き下せるようにそれより下層の部分をうまく実装して、お互いのインターフェースをなじませていく、その感覚が肌でわかったときは、衝撃のあまり思わずあっと声をあげそうになった。
ある種の悟りにも似た体験で、そうそうあるものではないが、そのぶん感動も大きい。特に、過去に理解できなかった概念や意義を理解できるようになると、自分の成長が目に見えてわかるようで、嬉しいものだ。でも、残念ながら手応えには乏しい。共有できず、共感を得られないからだ。
どう書いてもうまく表現できないので結局書くことができない。一言でいうと、「学んでもむなしい」。でも他にもっと面白いこともないので、蜃気楼のような影のようななにかを追って読んだり書いたりしている。せめて、何年後かの自分がまた同じような気分になったときにこの日記を読んで、共感を得られますようにと願い、書く。