← すべての記事

エンジニアリング哲学:ドナルド・クヌース、プログラミングは芸術である

ドナルド・クヌース、計算機科学者であり『The Art of Computer Programming』の著者

要点

  • プログラミングは単なるエンジニアリングではなく、芸術である。 クヌースが生涯の仕事に The Art of Computer Programming という題を付けたのは意図的なものでした。どんなテストスイートでも測れない美の基準を、コードに課しているのです。
  • コードは人間のために書かれた文学である。 第一の読者は、そのプログラムを次に読む人間であり、コンパイラは二番目にすぎません。読みやすさは礼儀ではなく、第一級のエンジニアリング要件です。
  • 厳密さは効く場所だけに注ぎ、それ以外には抑制を注ぐ。 アルゴリズムを証明し、その費用を正確に分析し、最後の一文字まで手仕事を仕上げる――そして、どうでもいい97%のコードに労力を注ぐことは拒む。
  • 「早すぎる最適化」とは、まず計測せよということ。 あの有名な一句は遅いコードへの言い訳ではなく、計測の規律です。プロファイリングで決定的な数パーセントを見つけ、そこだけを攻め、残りは読みやすいまま残すのです。

原則

「私たちの主な仕事はコンピュータに何をすべきかを指示することだと想像するのではなく、コンピュータに何をさせたいのかを人間に説明することに集中しよう。」 – ドナルド・クヌース1

この一文に、姿勢のすべてが収まっています。クヌースにとって、プログラムとは何よりも機械に向けた命令の流れではありません。それは人に向けた書き物なのです――次にそれを読む人、たいていは半年後の、すべてを忘れてしまった自分自身に。コンパイラは二次的な読者にすぎません。第一の読者は人間であり、プログラムはその読者のための文学であるか、さもなければ――どれほど正しく動こうとも――失敗作なのです。

だからこそクヌースは、生涯の仕事に The Science でも The Engineering でもなく The Art of Computer Programming という題を付けました。彼は art(芸術)を文字どおりの意味で使っています。作られたものの質のために追求される手仕事であり、どんなテストスイートでも測れない美の基準に照らされるものとして。そこから導かれる規律は、ある特定の意味でとても厳格です。それはこう言います――本当に大切な、ごく少数のことをやり、それを完璧に正しくやれ、と。アルゴリズムの正しさを証明せよ。当て推量ではなく、その費用を精密に分析せよ。摩擦なく読めるよう、ページを組版せよ。そして――誰もが引用し、ほとんど誰もが読み違える部分――どうでもいい97%のコードに手仕事を注ぐ 、と。なぜなら、間違った場所に注がれた労力は職人技ではなく、勤勉を装った浪費だからです。

ですからこの原則には、対立して見えて実は一つである、二つの顔があります。効く場所すべてに厳密さを。効かない場所すべてに抑制を。腕の見せどころは、どちらがどちらかを見分けることにあります――そして どうやって見分けるのか というクヌースの答えは、本シリーズ全体を貫くものと同じです。計測するのです。早すぎる最適化についての有名な一句は、遅いコードを書く許可証ではありません。何かに手を付ける前に、証拠によって決定的な数パーセントを見つけよという要求なのです。それは性能とは最後に付け足す合格判定ではなく、組み込んで計測する性質であるという確信と、まったく同じものです。

背景

ドナルド・アーヴィン・クヌースは、1938年1月10日、ウィスコンシン州ミルウォーキーに生まれました。2 ケース工科大学で学士号と修士号を取得し――ケースは彼に感心するあまり、1960年に学士号と同時に修士号を授与しました――1963年にはカリフォルニア工科大学で数学の博士号を取得しています。2 1969年にスタンフォードの教員となり、1977年にはフレッチャー・ジョーンズ計算機科学教授に、そして1990年には、事実上自分のために発明した肩書きを得ました――「The Art of Computer Programming 教授」です。2 長年にわたりスタンフォードの名誉教授であり、今なお、60年以上にわたって取り組み続けてきた同じプロジェクトに、手書きと郵送で携わっています。

そのプロジェクトは、規模の偶然から始まりました。1962年、アディソン=ウェスレイ社は、若きクヌースにコンパイラについての本を書くよう依頼します。3 彼は書き始め、そして、その下にある基礎理論――ソート、探索、データ構造、アルゴリズムが実際にどれだけの時間を要するかの分析――をまず据えなければ、コンパイラの作り方を正直に説明することはできないと結論づけました。一冊の本は、計画されたシリーズになりました。第1巻 Fundamental Algorithms が世に出たのは1968年。計画はやがて7巻にまで膨らみ、その仕事は今日もなお未完です。3 のちに American Scientist 誌はこれを、一世紀の科学を形づくった百冊ほどの本の一つに挙げ、ニューヨーク・タイムズ 紙は「この職業を定義する論文」と呼びました。3 妥当な合意として、計算機科学が持つ聖書に最も近いものといえるでしょう。

1974年、クヌースはACM A.M. チューリング賞――計算機分野の最高の栄誉――を、「アルゴリズム解析とプログラミング言語設計への数々の主要な貢献に対して、とりわけ、よく知られた一連の著作を通じた『プログラミングの技芸(art of computer programming)』への最も重要な貢献に対して」受賞しました。4 彼のチューリング講演の題は、彼らしく「Computer Programming as an Art(芸術としてのプログラミング)」でした。4

ドナルド・クヌースの多巻にわたる著作『The Art of Computer Programming』

仕事

『The Art of Computer Programming』とアルゴリズム解析

クヌースはアルゴリズム解析の父と呼ばれ、その称号は実力で得たものです。2 TAOCP 以前、プログラマたちはおおむねアルゴリズムを非形式的に論じていました――こちらの方が速い気がする、あちらは無駄に見える、と。クヌースのプロジェクトは、その推論を厳密な数学的基盤の上に据えることでした。アルゴリズムが入力の関数としていくつの操作を行うかを正確に導き出し、それを数学者が定理に向けるのと同じ精度でやってのける、ということです。彼は、いまやあらゆるプログラマが費用の増え方を表すのに使う漸近記法「ビッグ・オー(big-O)」を広めました。2 要点は記法そのものでは決してなく、プログラムの費用とは 計算すべき 既知の量であって、抱くべき感覚ではない、という確信にありました。

各巻そのものは、ある種の執拗なまでの完全さ――あらゆる主張が証明され、あらゆるアルゴリズムが分析され、あらゆる端の場合が処理される――で有名であり、誤りを見つけた者にクヌースが差し出す報奨小切手でも知られています。小切手の額は2.56ドル。彼はこれを「16進数の1ドル」と表現します。256セントは16進法で100だからです。5 金額は冗談ですが、その背後にある規律は冗談ではありません。クヌースは自分の仕事が正しいことに金を賭け、世界に「間違っていると証明してみせよ」と挑んでいるのです。何十年たっても TAOCP が磨き上げられ、今なお権威を保っている状態は、その立ち続ける賭けの産物でもあります。5(彼は2008年、銀行詐欺を機に実物の小切手の郵送をやめ、いまでは架空の「サンセリフ銀行(Bank of San Serriffe)」を引き当てとする証書を発行しています――厳密さは生き延び、紙の記録は移ったのです。)5

早すぎる最適化と決定的な3%

ソフトウェアエンジニアリングで最も引用される一文はクヌースのものであり、そしてほとんど常に誤って引用されています――意味を与えている節を剥ぎ取られて。以下が、1974年の論文「Structured Programming with go to Statements」(ACM Computing Surveys 掲載)からの全文です。

「プログラマは、プログラムのうち決定的でない部分の速度について考えたり気を揉んだりして、膨大な時間を浪費する。そして、こうした効率化の試みは、デバッグや保守を考慮に入れると、実際には強い悪影響を及ぼす。私たちは小さな効率化のことを、たとえば時間の97%は忘れるべきだ。早すぎる最適化は諸悪の根源である。とはいえ、その決定的な3%において、機会を見逃すべきではない。」6

全体を読めば、これは性能に反対する議論ではありません。計測 を支持する 議論なのです。クヌースの主張は経験的です。プログラムは、そのコードのごく一部でほぼすべての時間を費やす。だから、残りの97%――ほとんど動かない部分――を最適化することは、実際の労力を費やし、ほとんど何も得られず、しかもコードを読みづらく信用しづらくする。「悪」なのは最適化ではありません。悪は、時間がどこで費やされるかを知る前に 最適化すること――証拠ではなく信仰に手仕事を注ぐことなのです。彼が処方する規律は、怠惰の正反対です。プロファイリングで決定的な3%を見つけ、そこを徹底的に攻めよ、と。

帰属について一言。この一句を正直に引用しようとする人にとって、それは大切なことだからです。この一文はクヌースの1974年の論文に、彼自身の文章として現れます。ところがその15年後、クヌース自身がこれを「ホーアの格言(Hoare’s dictum)」と呼び、トニー・ホーアに帰属させました――そしてホーアが直接尋ねられると、彼もまたそれを否認し、ダイクストラのものかもしれないとし、「共通の文化、ないし伝承」として扱うのが最善だと述べたのです。7 ですから、最も簡潔で正確な言い方はこうなります。私たちが皆引用する 言い回し はクヌースのものであり、1974年にクヌースが発表したものです。しかしその 着想 を、彼は自分だけのものだと主張することを潔く拒んだ。その拒絶それ自体が、彼らしいのです。自分の誤りを見つけた者に金を払う男は、自分のものだと確信できない手柄を取ることに、興味がありません。

TeX、METAFONT、そして手仕事としてのデジタル組版

1976年、クヌースは第2巻の第2版のゲラ刷りを受け取り、愕然としました。初版を美しくしていた活字組版が、初期の写真植字に置き換えられつつあり、その結果は醜かった――とりわけ数式が間違って見えたのです。3 別の人なら、それを進歩の代償として受け入れたでしょう。自分の本がまずく組版されることを許せなかったクヌースは、1977年、もっと良いものを作るのに少し時間を割こうと決めました。その「少しの時間」は、十年近くになりました。その成果が、組版システム TeX であり、フォントそのものを設計するための姉妹システム METAFONT でした。どちらも1986年に完成し、書籍として刊行されています。3

彼の経歴のどの寄り道も、これほど多くを明かしはしません。一人の数学者が、自らの大著を8年間中断して、ページに美しい文字を載せるという問題を第一原理から解いた――なぜなら、彼の頭の中では、ページの見た目は仕事の質と切り離せないものだったからです。TeX は40年たった今も、世界中で数式組版の標準であり続けています。それは、クヌースにとって作られたものが最後の一文字の最後の一画素にまで及ぶことの、これ以上ないほど明確な表明です。手仕事はコードで止まらないのです。それは塀の裏側を仕上げることのエンジニア版です――読者が意識して気づくことのない部分こそ、彼がぞんざいにやることを拒んだ部分なのです。

スタンフォード大学のドナルド・クヌース

文芸的プログラミング

プログラムが人間に読まれるためのものなら、私たちがそれを書くやり方――コンパイラの順序で、コメントは後付けで貼り付ける――は逆さまです。1984年、The Computer Journal 誌の論文で、クヌースはそれを反転させることを提案しました。彼はその実践を 文芸的プログラミング(literate programming) と呼び、それを行うための WEB というシステムを作りました。1

文芸的プログラミングでは、人間の思考の順序で一つの文書を書きます――何を意図しているかを説明する散文に、説明が求めるところでコードの断片を、最も読みやすい順序で織り込んでいくのです。次に二つのツールがそれを処理します。tangle はコンパイラが必要とする順序でコードを抽出し、weave は人が読むための整形・組版された文書を生成します。8 WEB は Pascal と TeX を組み合わせ、のちにシルヴィオ・レヴィとともに作られた CWEB は、同じことを C で行いました。8 クヌース自身の言い方では、「プログラムは web として捉えるのが最善である……プログラマの仕事は、それらの部分とそれらの関係を、人間の理解にとって最善の順序で述べることだ」。8

文芸的プログラミングが主流の実践になることはありませんでした。そのことは正直に認めておく価値があります。けれども、その下にある確信――説明はプログラム についての 文書ではなくプログラムそのものであり、読みやすさは礼儀ではなく第一級のエンジニアリング要件である、という確信――は、静かに勝利を収めました。それは、自らを説明するコードを私たちが尊ぶのと同じ本能であり、プログラミングは 何のためにあるのか という問いにクヌースが与える、最も深い答えなのです。

方法

その方法は、60年と四つの領域――アルゴリズム、組版、言語設計、そして書くことそのもの――を通じて一貫しています。

まず人間の読者のために書く。 機械は二番目の読者です。プログラムは、証明や一段落の文章と同じく、次の人がたどれるかどうかで判断されます。文芸的プログラミングは、この確信を道具にしたものです。18

証明し、それからテストする。 「上のコードのバグに注意。私はそれが正しいことを証明しただけで、試してはいない」とクヌースは1977年のメモに書きました――この一句が可笑しいのは、まさに彼が、本当に自分のコードを証明する希有な人だからです。9 冗談の中に規律が含まれています。正しさは論証されるものであって、仮定されるものではない。そして証明は必要だが、それでもなお十分ではない。あなたは両方を負っているのです。

費用を分析する。当て推量しない。 アルゴリズムの実行時間は、数学的に導き出すべき量であって、勘ではありません。これがアルゴリズム解析の創始の行為であり、「ビッグ・オー」があらゆるプログラマの口にのぼる理由です。2

最適化する前に計測する。 早すぎる最適化が諸悪の根源なのは、それが信仰に手仕事を注ぐからです。証拠によって決定的な3%を見つけ、そこだけを最適化し、残りは読みやすいまま残す。6

手仕事を最後の一文字まで貫く。 生涯の仕事を8年間止めて TeX を作ったことは、この方法の最も純粋な姿です。作られたものの質は、コードが終わるところで止まりません。ページの端で終わるのです。3

深い集中を守る。 クヌースは1990年1月1日にメールをやめました――「それ以来、私は幸せな人間だ」と彼は書いています――その理由は、メールは物事の上に立っていることを仕事とする人のためのものであり、一方で彼の仕事は物事の にいること、ある主題をうまく説明できるほど深く研究することだから、というものでした。10 中断の拒絶は奇癖ではありません。仕事の前提条件なのです。

影響の連鎖

彼を形づくった人々

数学の伝統、とりわけ組合せ論と数論。 クヌースは数学者としてプログラミングに来て、数学者の譲れない基準――主張は証明されるまで知識ではない――を、それまで直観でやり過ごしてきた分野に持ち込みました。(形成的な影響)

アディソン=ウェスレイの1962年の依頼。 その軌道を定めた偶然。コンパイラの本を頼まれたクヌースは、問題をその基礎まで追い下りて、二度と戻ってきませんでした。アルゴリズム解析が現代の形で存在するのは、彼が頼まれた易しい本を書くことを拒んだからです。(直接的な影響)

活字組版と印刷された書物。 組版されたページがどうあるべきかという彼の基準は、それ以前の時代の印刷の職人技によって形づくられました――まさにそれゆえに、1976年の写真植字のゲラは耐えがたく、TeX が必要になったのです。(形成的な影響)

彼が形づくった人々

働くすべてのプログラマ。 ビッグ・オー解析、アルゴリズムの厳密な研究、そして TAOCP それ自体が、基礎的な素養です。一世代が、彼の本を一度も開いたかどうかにかかわらず、アルゴリズムが 何を費やすか をクヌースから学びました。

世界の数学・科学出版。 TeX と LaTeX は、この40年間に組版された事実上すべての数学論文、物理学プレプリント、技術書の基盤です。クヌースの8年間の寄り道は、インフラになりました。

正しさと読みやすさの文化。 文芸的プログラミング、報奨小切手、「正しいことを証明しただけで、試してはいない」――これらは一つの基調を定めました。本気のコードは証明可能なほど正しく、かつ読んで心地よくあるべきだという期待は、いくぶんクヌースの遺産です。

貫く一本の線

クヌースとエドガー・ダイクストラは、本シリーズにおける正しさの二大使徒であり、両者のあいだの生産的な緊張こそ、本シリーズで最も示唆に富むものです。二人はともに手で書き、真理の裁定者としての機械を信用せず、プログラムは単に動かすのではなく論証されるべきだと主張しました。けれども、テストはバグの存在を示せても不在は決して示せないとし、唯一の確かな地盤として証明へ強く傾いたダイクストラに対し、クヌースの「私はそれが正しいことを証明しただけで、試してはいない」は、証明そのものの限界に目配せします。彼は証明 し、かつ テストし、両方が見落としたら金を払うのです。厳密さの中の実用主義。ジョン・カーマックは同じ軸の反対の端にいます――ホットスポットをプロファイリングし、機械をその基礎まで理解し、決定的なループを攻める――これはまさにクヌースの「決定的な3%」を、証明ではなくハードウェアの天井に向けたものです。そしてトンプソンとリッチーの Unix は、オペレーティングシステムが一台の機械に手溶接されるのではなく 読まれ 移植できるように C が作られたものであり、クヌースが明示した同じ信念――プログラムは人間のために書かれる――そのものです。(シリーズの架け橋)

ここから受け取るもの

私が抱き続ける教訓は、私の分野で最も引用される一句が、箴言の衣裳をまとった計測の規律だということです。「早すぎる最適化は諸悪の根源である」は、遅くて怠惰なコードを正当化するのに使われますが、それはクヌースが意味したことの正確な逆です。彼が実際に要求するのは、すべてを最適化することよりも、何も最適化しないことよりも難しいことです。まずプロファイリングし、証拠によって決定的な3%を突き止め、まさにそこに手仕事を注ぎ、残りは読めるまま残す。それは品質こそ唯一の変数であるという基準と同じものです――問いは決して「これは十分に速いか?」でも「これは十分に賢いか?」でもなく、「費用が実際どこにあるかについて、私は証拠を持っているか?」なのです。それは性能に当てはめた証拠の関門です。ホットスポットについての勘は、計測するまで知識ではありません。

私が今ものを作っている世界――エージェント、ツールのループ、モデル呼び出し――では、クヌースの二つの顔がどちらも荷を支えています。抑制のほう――計測していないプロンプトや検索経路を最適化するな。レイテンシのほぼすべてはわずかな呼び出しに宿っており、残りは読みやすいまま残すべき雑音です。厳密さのほう――効く場所では、証明し、テストし、自分が正しいことに何かを賭けよ。そして文芸的プログラミングの確信は、五十年を経た今、私が最も切実に感じるものです――システムが、誰も読めない速さでコードを生成できるようになったとき、まず人間の読者のために書く ことは上品な心がけであることをやめ、システムを検査可能に保つ唯一のものになります。その確信――趣味判断は技術的なシステムである、主張する雰囲気ではなく、計測し守るものだ、という確信――は、1962年の一冊の本の依頼から、2026年のエージェントの基盤まで、一直線に貫いているのです。

FAQ

ドナルド・クヌースのエンジニアリング哲学とは?

クヌースはプログラミングを、第一の読者が機械ではなく人間である芸術として捉えます。「コンピュータに何をさせたいのかを人間に説明すること」です。1 そこから導かれる規律は、厳しい厳密さと意図的な抑制を組み合わせます――アルゴリズムの正しさを証明し、その費用を数学的に分析し、組版されたページに至るまで手仕事を仕上げ、その一方で、どうでもいいプログラムの部分を最適化することに労力を費やすのを 拒む。そのどちらがどちらかを、彼は計測によって決めます。それこそが、早すぎる最適化についての彼の一句の本当の意味なのです。6

「早すぎる最適化は諸悪の根源である」は、実際には何を意味していたのか?

それは計測への要求であって、性能の拒絶ではありません。1974年の全文はこうです。「私たちは小さな効率化のことを、たとえば時間の97%は忘れるべきだ。早すぎる最適化は諸悪の根源である。とはいえ、その決定的な3%において、機会を見逃すべきではない。」6 クヌースの主張は、プログラムはそのコードのわずかな部分でほぼすべての時間を費やす、というものです。残りの97%を最適化することは労力を浪費し、読みやすさを損なう。規律とは、まずプロファイリングし、決定的な数パーセントを見つけ、そこだけを最適化することです。この一句を遅いコードの言い訳に使うことは、その意味を逆さまにします。

「早すぎる最適化」の一句を生んだのはクヌースか、それともホーアか?

誰もが引用する言い回しはクヌースのもので、彼自身の1974年の Computing Surveys 論文「Structured Programming with go to Statements」で発表されました。6 しかしその15年後、クヌース自身がこれを「ホーアの格言」と呼び、トニー・ホーアに帰属させました。ホーアが直接尋ねられると、彼も著作権を否認し、ダイクストラに遡るかもしれないと示唆し、「共通の文化、ないし伝承」として扱うのが最善だと述べたのです。7 正直な要約はこうです。私たちが引用するこの一文はクヌースのものですが、彼はその着想を自分だけのものだと主張することを潔く控えたのです。

ドナルド・クヌースは何を生み出したのか?

クヌースは The Art of Computer Programming(1962年着手、第1巻1968年、継続中――計算機科学を定義する論文)を著し、ビッグ・オー記法を広めて現代のアルゴリズム解析を打ち立てました。23 自分の本のまずい組版に苛立ち、組版システム TeX とフォントシステム METAFONT を作りました。どちらも1986年に刊行され、今なお数学出版の標準です。3 さらに、人間に読まれるためにプログラムを書く実践である文芸的プログラミングと WEB システムを創始しました。18 1974年には ACM チューリング賞を受賞しています。4


出典


  1. Donald E. Knuth, “Literate Programming,” The Computer Journal 27 (1984). 「私たちの主な仕事はコンピュータに何をすべきかを指示することだと想像するのではなく、コンピュータに何をさせたいのかを人間に説明することに集中しよう。」 次も参照:“Literate programming,” Wikipedia. 

  2. “Donald Knuth,” Wikipedia. 1938年1月10日、ウィスコンシン州ミルウォーキー生まれ。ケース工科大学(1960年に学士・修士)、カリフォルニア工科大学で数学の博士号(1963年)、スタンフォード教員(Wikipedia によれば1969年――一部の伝記資料は Fundamental Algorithms が刊行された1968年とし、そこから混同が生じている)、フレッチャー・ジョーンズ計算機科学教授(1977年)、The Art of Computer Programming 教授(1990年)、現在は名誉教授。「アルゴリズム解析の父」。漸近(ビッグ・オー)記法を広めた。 

  3. “The Art of Computer Programming,” Wikipedia. アディソン=ウェスレイは1962年にコンパイラの本を依頼。プロジェクトは計画7巻に拡大。第1巻は1968年刊行で、仕事は継続中。American Scientist に一世紀の科学を形づくった本の一つに挙げられ、ニューヨーク・タイムズ に「この職業を定義する論文」と呼ばれた。1976年の写真植字への苛立ちから、クヌースは1977年に TeX に着手し、8年後に戻った。TeX と METAFONT は1986年に書籍として刊行。2.56ドルの「16進数の1ドル」報奨小切手。 

  4. “Donald E. Knuth – A.M. Turing Award Laureate,” ACM(公式ページは自動リクエストをブロックする。以下のボットがアクセス可能な一次資料ミラーを参照)。授賞式で読み上げられ、講演とともに再録された1974年の逐語的な賞辞:「1974年の A.M. チューリング賞は、スタンフォード大学のドナルド・E・クヌース教授に、アルゴリズム解析とプログラミング言語設計への数々の主要な貢献に対して、とりわけ、よく知られた一連の著作を通じた『プログラミングの技芸』への最も重要な貢献に対して贈られる。」チューリング講演:Donald E. Knuth, “Computer Programming as an Art,” Communications of the ACM 17, no. 12 (December 1974): 667–673(全文。賞辞も再録されている)。 

  5. “The Art of Computer Programming,” Wikipedia, および “Knuth reward check,” Wikipedia. 誤りを見つけるごとに「16進数の1ドル」(256セント=2.56ドル)相当の報奨小切手。実物の小切手は銀行詐欺を機に2008年に廃止され、架空の「サンセリフ銀行」を引き当てとする証書に置き換えられた。 

  6. Donald E. Knuth, “Structured Programming with go to Statements,” ACM Computing Surveys 6, no. 4 (December 1974): 261–301. 「プログラマは、プログラムのうち決定的でない部分の速度について考えたり気を揉んだりして、膨大な時間を浪費する……私たちは小さな効率化のことを、たとえば時間の97%は忘れるべきだ。早すぎる最適化は諸悪の根源である。とはいえ、その決定的な3%において、機会を見逃すべきではない。」 論文の書誌は次にも:“Structured programming,” Wikipedia. 

  7. 帰属について:クヌースは1974年の論文からおよそ15年後にこの一句を「ホーアの格言」と呼び、直接尋ねられたトニー・ホーアはそれを否認し、ダイクストラと「共通の文化、ないし伝承」を示唆した。議論とホーアの返答は次に記録されている:“Programming Myths and Folklore: The Origin of ‘Premature optimization is the root of all evil’,” および帰属に関する注記:“Donald Knuth,” Wikiquote. 

  8. “Literate programming,” Wikipedia. クヌースの1984年 Computer Journal 論文。WEB システム(Pascal + TeX)と、のちの CWEB(シルヴィオ・レヴィとともに、C 用)。tangle はコンパイル可能なコードを抽出し、weave は組版された文書を生成する。「プログラムは web として捉えるのが最善である……プログラマの仕事は、それらの部分とそれらの関係を、人間の理解にとって最善の順序で述べることだ。」 

  9. Donald E. Knuth, “Notes on the van Emde Boas construction of priority deques: An instructive use of recursion”(メモ、1977年)、次に記録:“Donald Knuth,” Wikiquote. 「上のコードのバグに注意。私はそれが正しいことを証明しただけで、試してはいない。」 

  10. Donald E. Knuth, “Knuth versus Email,” スタンフォードのホームページ. 「1990年1月1日にメールアドレスを持たなくなって以来、私は幸せな人間だ。」 メールは物事の上に立つことを役割とする人に向く。クヌースの役割は物事の底にいること、ある主題を説明する前に深く研究することである。 

関連記事

エンジニアリング哲学:岩田聡

岩田聡は、一度もゲーマーであることをやめないまま任天堂の社長になったプログラマーだった——プレイヤーの喜びに奉仕するための、技術の極み。

1 分で読める

エンジニアリング哲学:レスリー・ランポート、コードを書く前に考える

レスリー・ランポートは分散システムを科学へと変えました。時間はグローバルではなく、因果こそが実在であり、コードを書く前に設計を仕様化するのです。

2 分で読める

The Shader Gallery That Lied: Debugging 216 WebGL Presets

A user said the shader playground looked broken. Pixel-readback testing found 30 dead presets, 11 that never compiled, a…

11 分で読める