計算機プログラムの構造と解釈
ハロルド・エイブルソン、ジェラルド・サスマン
計算の哲学 — SICPが教えた抽象化とプログラムの本質
ハル・エイブルソンとジェリー・サスマンが1985年に発表した『計算機プログラムの構造と解釈(SICP)』は、MITの入門計算機科学のテキストとして書かれながら、プログラミングを超えた知的探求の書として世界中の計算機科学者に読み継がれた著作だ。プログラムを書く技術書ではなく、計算という行為の本質と、プログラムで世界を記述する方法論を問う哲学書だ。
本書のエピグラフに選ばれたハーバート・サイモンの言葉——「どのような問題も、それが解決された瞬間には自明に見える」——は本書の精神を体現する。複雑に見える問題は、適切な抽象化によって単純な部品に分解できる。SICPはその抽象化の技法を教えると同時に、抽象化の深さを問い続ける。
手続きと再帰的思考
SICPの最初の章はLisp言語の単純な手続きから始まり、徐々に再帰という強力な概念へと展開する。再帰とは問題の解決を「より小さな同じ問題の解決」に委ねることだ。フィボナッチ数列・階乗・ツリー探索など、再帰で自然に表現できる問題は驚くほど多い。
再帰は単なる技術的手法ではなく思考のパターンだ。自分自身を参照する構造、部分が全体と同じ形をもつフラクタル、言語が言語について語るメタファーなど、再帰的構造は自然・数学・言語のあちこちに現れる。GEBのホフスタッターが自己言及と再帰を音楽・数学・芸術で追ったように、SICPは計算における再帰の深さを探求する。
高階関数と抽象化の力
SICPが最も強調する概念が「高階関数(higher-order function)」だ。関数を引数として受け取り、関数を返す関数は、計算パターンを抽象化する強力な道具だ。map・filter・reduceという関数はリストに対する変換・選択・集約というパターンを抽象化する。
高階関数という概念は関数型プログラミングの核心だ。手続きを値として扱うことで、コードの繰り返しを避け、問題の構造をそのままコードに写し取ることができる。Clojure・Haskell・Scalaといった言語の台頭は、SICPが1985年に教えた関数型の発想の遅れた普及だと言える。
データ抽象化と表現の独立
本書の中盤では「データ抽象化」が中心テーマとなる。データの表現をその操作から分離することで、実装を変えてもインターフェースを変えずに済む。このモジュール性こそが大規模なシステムの複雑さを管理する基本戦略だ。
データ抽象化はオブジェクト指向設計の「カプセル化」と同じ洞察の別表現だ。SICPはオブジェクト指向という流行語を使わずに、その核心にある考え方を関数型の枠組みで明快に説明している。実装の詳細を隠し、インターフェースだけを公開するという設計原則は今日も変わらない。
メタサーキュラー評価器という頂点
SICPのクライマックスは「メタサーキュラー評価器」だ。Lisp で書かれた Lisp インタープリタは、言語が自分自身を解釈するという自己言及的な構造をもつ。計算の本質は特定の機械に依存するのではなく、抽象的な評価過程にあることがここで明確になる。
自己言及という概念はGEBのホフスタッターが数学・音楽・絵画で追求したテーマと重なる。プログラムがプログラムを生成し解釈する能力は、人工知能の可能性の核心にある。思考する機械の夢は、機械が自分自身を記述し修正できる能力への問いと不可分だ。
計算の哲学としての永続的価値
SICPはLisp言語を使って書かれているが、特定の言語の技術書ではない。問題を分解する方法、抽象化の層を設計する思考、再帰的構造を認識する能力——これらは言語を超えた計算的思考の訓練だ。
計算機科学の本質は計算機の使い方ではなく、計算という抽象的過程の理解にある。SICPは入門教科書として書かれながら、その問いは専門家にも新鮮な問いとして響き続ける。チューリングの大聖堂が歴史的側面からコンピュータの誕生を描いたとすれば、SICPは哲学的側面から計算の本質を問い続ける。
プログラミング教育の哲学
SICPが影響を与えたのはプログラマーだけではない。問題を分解し抽象化する思考様式は、工学・数学・哲学・ビジネスのあらゆる分野で使える知的ツールだ。1980年代のMITではコンピュータ科学専攻以外の学生にもSICPを教えた。計算的思考は21世紀のリベラルアーツだという考え方の先駆けだ。
計算的思考という概念は、コードを書く技術ではなく問題を計算可能な形式に変換する思考方法だ。SICPはその思考方法を教えるために書かれており、特定のプログラミング言語や技術的詳細への依存を意図的に排除している。チューリングの大聖堂が計算の歴史を語るとすれば、SICPは計算の哲学を実践的に教える。