[ 目次, 前節, 次節, 索引 ]

第一版への前文



\hfill \begin{minipage}{120mm} \noindent {\small 計算機はヴァイオリンのようだ. まず蓄音器, 次にヴァイオリンを試す初心者 を思ってみよう. 後者について彼はひどい音だという. これはヒューマニストや殆んど の計算機科学者から聞いてきた議論である. 彼らは計算機は特定の目的には役にたつが 柔軟性を欠くという. ヴァイオリンもタイプライタもその使い方を学までは柔軟でない. \smallskip \noindent Marvin Minsky, 「プログラミングが不十分にに理解され, 雑然と形式化された思考を表 すのに絶好の媒体である理由」} \end{minipage} \vspace{12mm} \noindent 「計算機プログラムの構造と解釈」はマサチューセッツ工科大学の計算機科学での入門 レベルの科目である. これはMITで電気工学か計算機科学を専攻するすべての学生にとり 「共通コアカリキュラム」の四半分として必修である. 他には回路と線形システムの二 科目とディジタルシステムの設計の科目がある. われわれは1978年からこの科目の開発 に関ってきており, 1980年の秋学期からこの教材を現在の形で毎年600名から700名の学 生に教えた. これらの学生のうち, 多くは計算機で少しは遊んだことがあり, 僅かはプ ログラムやハードウェア設計の経験を持っているが, 大部分は計算の正式教育を少しし かまたは全く受けていない.

この計算機科学の入門科目の設計には二つの主要な関心事があった. 第一に計算機言語 は単に計算機に演算を実行させる方法だけでなく, 方法に関する考えを表現する新しい 形式的媒体であるという考えを樹立したかった. そこでプログラムは人びとが読むよう に, そして計算機はたまたま実行するように書くべきである. 第二にこの科目が扱う実 質的な材料は, このレベルが特定のプログラム言語の構成の構文でも, 特定の関数を効 率よく計算するアルゴリズムでも, アルゴリズの解釈や計算の基礎でもなく, 巨大なソ フトウェアシステムの知的複雑性の制御に使う技法であった.

われわれの狙いはこの科目を修めた学生は, プログラミングの各種の流儀と美学に健全 な感覚を持つべきであるということだ. 彼らは巨大システムの複雑さを制御する主要な 技法の力を持つべきである. 彼らは模範的な形で書いてあれば50ページのプログラムも 読めるべきである. 彼らはいつでも何を読まず, 何を理解しないでよいか知るべきであ る. 彼らは元々の作者の精神と文体を維持したまま, プログラムの修正に確信を持つべ きである.

これらの技法は計算機科学の学生に限られたものではない. われわれが教え, 頼る技法 は工学設計のすべてに共通する. われわれは複雑さを制御するのに場合により細部を隠 す抽象を構成する. 複雑さを制御するのに標準的でわかり易い部品を「取り替え引き替 え」して組み合せ, システムが構築出来るよう, 公認インターフェースを用意する. 複 雑さを制御するのに設計のある面をを強調し,他を軽視する設計記述用の新言語を用意す る.

この科目の基礎には, 「計算機科学」は科学ではなく, その重要さに計算機はあまり関 らないというわれわれの確信がある. 計算機革命は, われわれが物を考える方法, 考え を表現する方法での革命である. この変化の本質は手続き認識論(procedural epistemology)---数学の古典的主題で採用するより宣言的観点より命令的観点からの知 識の構造の研究---と呼ぶのが最適なものの出現である. 数学は「何である」の概念を精 密に扱う枠組を提供する. 計算機科学は「いかにして」の概念を精密に扱う枠組を提供 する.

この教材を教えるのに, プログラム言語Lispの一方言を使う. われわれはその必要がな いので, 言語を形式的に教えることはない. ただ使うだけだが, 学生は数日でそれに慣 れる. これはLisp様の言語の一つの大きな利点である: 合成式を形作る方法は非常に少 なく, 構文構造も殆んどない. 形式的な性質はチェスの規則のように一時間もあれば話 せる. しばらくすると言語の構文に関する細部は(何もないので)忘れ, 実の論点---何が 計算したく, 問題を扱える部分にどう分解し, 部分をどう扱うか---に進める. Lispのも う一つの利点は, 他のどの言語よりもプログラムの部品分解の大型戦略を多く支援する (が, 強制はしない)ことである. 手続きをデータが抽象化出来, 利用の共通パターンを 捕える高階関数が使え, 代入とデータ変更で局所状態がモデル化出来, プログラムの部 品をストリームと遅延評価で連結出来, 組込み言語が容易に実装出来る. これらのすべ ては漸進的プログラム設計, 構築, テスト, 虫とりの優れた支援のある対話的環境に組 み込まれている. John McCarthyを祖とし, 空前の能力と気品のある繊細な道具を作った 歴代のLispの達人のすべてに感謝したい.

われわれの使うLisp方言のSchemeはLispとAlgolの能力と気品を統合しようとする試みで ある. Lispからは単純な構文から引き継いだ超言語能力, データオブジェクトとしての プログラムの一様な表現, ごみ集めされるヒープ領域に割り当てたデータを貰った. AlgolからはAlgol委員会にいたプログラム言語設計の開拓者からの贈物である静的有効 範囲とブロック構造を貰った. われわれはChurchのλ算法とプログラム言語の関係にお ける彼らの識見についてJohn RaynoldsとPeter Landinの名を挙げたい. 視野に計算機が 現れる何十年も前にこの領域を開拓した数学者への借りを認めたい. そういう開拓者に はAlonzo Church, Barkley Rosser, Stephen KleeneおよびHaskell Curryがいる. \newpage \thispagestyle{empty}


[ 目次, 前節,次節, 索引 ]