SICPから気に入った一節を

『計算機プログラムの構造と解釈』(通称SICP)より引用。とってもお気に入りな一節だったりする。

強力な言語には三つの仕掛けがある。

  • 基本式 言語が関る最も単純なものを表す。
  • 組合せ式 より単純なものから合成物を作る。
  • 抽象化法 合成物に名をつけ、単一のものとして扱う。

SICPでは種々のプログラミング技法が取り扱われているが、引用部分は第一章。ごく基礎的な内容を扱う章から。だから主張としてはある意味で、ものすごく当たり前なことでしかない。
だからこそと言うべきなのか、あらゆる分野で通用する普遍的な記述のように思う。こういう原理的なことを書いてくれる本はなかなか無い。時代の流れに耐えた古典ならでは、ということか。*1

ふとした思いつき

この「三つの仕掛け」は、分割統治法の別表現? 関連がありそうな、なさそうな。
分割統治の言わんとすることは「大きな問題は手に負えるだけの大きさにまで分解すべし」。問題が有限である以上は、分解していけばいずれプリミティブな要素の組み合わせに行き着く。プログラミングの問題を解くとは言語によって問題を表現することだから、分割統治の構造は「三つの仕掛け」の言うプログラムの構成法と似ている。

ただ、相違点もある。
まず視点。分割統治は「大きな問題があるから、それを分解しよう」。トップダウン的な発想である。一方で「三つの仕掛け」は「基本的な要素を組み合わせて、抽象を積み上げていこう」。ボトムアップ的だ。

第二に、「抽象化法」はどこへ行っちゃったんだ……? 単に問題を分解するという操作だけでは、抽象は生まれないことを示しているのだろうか。抽象を噛ませず実装に依存した分割を行うと変化に弱いプログラムができるとかなんとか、そっちの方面の話と関係する?

うーん、分からないことだらけ。まだまだ無知だ。

*1:古いといっても初版はたかだか数十年程度でしかない。しかしコンピュータの世界は日進月歩ということを考慮すれば、十分長いと言えるのだろう。実際、内容は決して古くない。Rubyまつもとゆきひろ氏が「プログラミング言語の進化は遅い」と言っていたのを思い出す。