← すべての記事

エンジニアリング哲学:トンプソンとリッチー、「一つのことをうまくやる」

ベル研究所のPDP-11に向かうケン・トンプソン(着席)とデニス・リッチー

要点

  • 小さく、鋭いツール。 各プログラムは一つのことをうまくこなし、二つ目に手を出すことを拒みます。新しいニーズには、フラグを増やすのではなく、新しいツールで応えるのです。
  • 機能より組み合わせ。 力は、プログラムどうしを普遍的なテキストインターフェース——すなわちパイプ——でつなぐことから生まれます。能力はどれか一つのプログラムの内側ではなく、その継ぎ目に現れるのです。「一つのことをうまくやる」という有名な言葉は、トンプソンでもリッチーでもなく、ダグ・マキルロイのものです。
  • Cによる移植性。 UnixをCで書き直したことで、システム全体を書き直すのではなくコンパイラを移植するだけで新しいハードウェアへ移れるようになりました——Unixが至るところへ広まった最大の理由です。
  • 自分で作っていないものは信用するな。 トンプソンの「Reflections on Trusting Trust」は、調べられるどのソースにも痕跡を残さずに、バックドアがバイナリの中に潜みうることを示しました——サプライチェーンセキュリティの礎となった洞察です。

原則

「一つのことをこなし、それをうまくやるプログラムを書け。協働するプログラムを書け。テキストストリームを扱うプログラムを書け。テキストストリームこそが普遍的なインターフェースだからだ。」 – ダグ・マキルロイ、Unix哲学を要約して1

この一文はトンプソンのものでもリッチーのものでもありません。書いたのはダグ・マキルロイ——ベル研究所での彼らの同僚であり、Unixのパイプを発明した人物——であり、1978年のBell System Technical Journal特集号への序文に記されました。1 とはいえ、これはトンプソンとリッチーが実際に築き上げたものを最も明快に言い表した一文であり、どちらか一方自身の言葉ではなくこの一文を冒頭に置く理由そのものが核心を突いています。Unix哲学は、一人の天才が起草したマニフェストなどでは決してありませんでした。それは一つの文化であり、その文化こそが作品だったのです。

この原則には三つの動きがあり、それらは切り離せません。各ツールを小さく鋭くすること——一つの仕事を、うまくこなし、二つ目を欲しがらない。ツールを組み合わせ可能にすること——一方の出力が次の入力になり、能力はどのプログラムが肥大化するかではなく、組み合わせから生まれる。そして両者のあいだのインターフェースを普遍的にすること——プレーンテキストにすることで、互いの存在を知らずとも、どのツールも他のどのツールへとつなげられる。力は部品ではなく、継ぎ目に宿るのです。行を並べ替えるプログラムはウェブログのことを何も知らず、重複を数えるプログラムはHTTPステータスコードのことを何も知りません。けれどパイプでつなげば、どちらも単独では答えられない問いに答えられるのです。

これはほとんどのソフトウェアを生み出す本能とは正反対です。自然な引力は、一つのプログラムにもっと多くをやらせること——フラグを足し、モードを足し、次の要件をすでにあるものに織り込むこと——へと向かいます。マキルロイの第一の規則は、その引力に名を与え、それを拒みます。「新しい仕事をするには、新しい『機能』を追加して古いプログラムを複雑にするのではなく、新たに作り直せ。」1 トンプソンとリッチーのシステム全体が、単純さこそが他のすべての前提条件であること、そして小さなものが強力になる道は機能ではなく組み合わせであることの、その証明なのです。

背景

Unixは一つの失敗から生まれました。1960年代半ばを通じて、ベル研究所はMITおよびゼネラル・エレクトリックと組み、Multicsに取り組んでいました。ほぼ何でもこなすことを目指した、途方もなく野心的なタイムシェアリングOSです。1969年までにそれはあまりに複雑で、あまりに遅延したため、ベル研究所は手を引きました。そして取り組んでいた研究者たち——ケン・トンプソン、デニス・リッチー、ダグ・マキルロイ、ジョー・オサナ——には、快適な対話的計算環境を失った悔しさと、システムをどう作るべきでないかについての強い感覚だけが残されました。2

C言語の生みの親、デニス・リッチー

ケン・トンプソンは1943年2月4日にニューオーリンズで生まれ、UCバークレーで電気工学と計算機科学の学士号と修士号を取得したのち、1966年にベル研究所へ加わりました。3 デニス・リッチーは1941年9月9日にニューヨーク州ブロンクスヴィルで生まれ、1967年に計算科学研究センターへ加わりました。4 1969年、トンプソンは打ち捨てられたPDP-7——当時すでに時代遅れになっていた小型のミニコンピュータ——を見つけ、そのうえで小さなOSを作り始めました。一つには、自分が書いたSpace Travelというゲームを動かすためでした。トンプソンはのちに役割分担をあっさりとこう述べています。「UNIXの最初の二、三のバージョンは、すべて一人で作った。そしてデニスは伝道師になった。」3 最初のバージョンはPDP-7のアセンブリで書かれました。

名前は冗談から生まれました。Multicsが「Multiplexed(多重化された)」であったのに対し、新しいシステムは意図的に小さかったため、グループはそれを「UNICS」——Uniplexed Information and Computing Service——と呼びました。Multicsを揶揄したもじりです。綴りは「Unix」へと流れていき、通常その名の名付け親とされるブライアン・カーニハンも、のちに最終形がどう生まれたかは誰もはっきり思い出せないと記しています。2 その小ささは、偶然でも、いずれ乗り越えるべき制約でもありませんでした。それが設計だったのです。

仕事

Unixとファイルシステム

Unixが最初に正しくとらえたのは、コンピュータの資源が何であるかのモデルでした。それ以前のシステムは、ファイル、デバイス、通信チャネルをそれぞれ別種のものとして扱い、それぞれに固有のインターフェースを与えていました。Unixはそれらを一つにまとめました。単一の階層的ファイルシステム——ディレクトリの木——を提示し、そしてその中のほぼすべてをファイルとして扱ったのです。文書だけでなく、デバイスも、プロセス間通信チャネルさえも。2 ファイルを読み書きできるプログラムは、何も変えずに、端末からも、テープドライブからも、別のプログラムからも読み取れました。プログラムにとって、それらはすべてただのファイルだったからです。

これが普遍的インターフェースの最初の形です。「すべてはファイルである」とは、小さなツールが入力の種類ごとに別バージョンを必要とせず、一つで済むということです。組み合わせのコストはほぼゼロまで下がります。あらゆる部品がすでに同じ言語を話しているからです。階層的ファイルシステムと、統一されたopen/read/write/closeインターフェースこそが、残りの哲学を可能にした理由でした。それぞれが専用のコネクタを要求するようなツールどうしは、組み合わせようがないのです。

Cと移植性

二つ目の突破は、システムを移植可能にすることで、それには言語が必要でした。リッチーは1969年から1973年にかけてCを作り上げ、トンプソンのB言語から発展させました。B言語はさらにBCPLの末裔でした。4 Bは型がなく、インタプリタで動きました。Cはデータ型と構造体を加え、効率的な機械語へとコンパイルされました。OSを書けるほどハードウェアに近く、機械のあいだを移れるほど抽象的だったのです。

決定的な瞬間は1973年ごろ、Version 4 UnixがCで書き直されたときに訪れました。2 それまで、OSとはアセンブリ言語であり、書かれた当の一台の機械へ永久に溶接されたものでした。Unixを高水準言語で書き直すことは、ほとんど異端でした。当時の通念では、システムコードは手作業で調整したアセンブリでなければ遅すぎる、とされていたのです。トンプソンとリッチーはそれでも実行し、その見返りが移植性でした。Unixはいまや、システム全体を書き直すのではなくコンパイラを移植することで、新しいハードウェアへ移せるようになったのです。あのたった一つの決断こそが、同時代のシステムが元の鉄塊に固定されたままだったのに対し、Unixが計算の隅々まで広まった最大の理由です。1978年、リッチーとカーニハンはThe C Programming Language——「K&R」——を出版しました。一世代にCの書き方を教え、いまなお技術文章の手本であり続ける、簡潔で正確な一冊です。5 トンプソンとリッチーは、システムそのものをより広い世界へ向けて、1974年7月のCommunications of the ACM論文「The UNIX Time-Sharing System」で発表しました。6

パイプと組み合わせモデル

Unixの共同開発者、ケン・トンプソン

ファイルシステムがツールに同じ言語を話させたのなら、パイプはツールどうしを語り合わせました。発想はダグ・マキルロイのものでした。彼は何年ものあいだ、プログラムを端から端へつなぐ方法——一方の出力が、庭のホースの一区間のように、直接次へと流れ込む——を訴えてきました。トンプソンは1973年にそれを実装し——一晩でやったことで有名です——pipe()システムコールとシェルの|演算子を加えました。7 マキルロイは続いて起きたことをこう描いています。「翌日には、誰もが配管の興奮に加わる、忘れがたいワンライナーの饗宴が繰り広げられた。」7

そのワンライナーの饗宴こそが、哲学の実践そのものです。誰も新しいプログラムを書く必要はありませんでした。すでに手元にある小さなプログラムどうしをつなげば、どれ一つとして設計されていなかった問いに答えられると、人々は発見したのです。grepからcutsortuniq -csort -rn、そしてheadへと続くパイプラインは、六つの段から成ります。各段は他の段を知らず、それぞれ一つのことをこなし、テキストのストリームを通じて左から右へと組み合わさります。能力は創発的です。それはどの単一のコマンドでもなく、|の中に宿るのです。

これはシステム全体の中で最も深い発想です。ほとんどのソフトウェアは堆積によって育ちます。プログラムは新しい要件を一つずつ吸収していき、ついには作者にしか理解できないモノリスになります。Unixは組み合わせによって育ちます。システムは小さな部品のキットのままにとどまり、新しい能力は古い部品の新しい並べ方から生まれるのです。テキストストリームは、その並べ替えを自由にする普遍的インターフェースです。だからこそUnixのシェルは、五十年を経たいまも、現存する最も表現力豊かなプログラミング環境の一つであり続けています——小さな単一目的のプログラムから成っているにもかかわらずではなく、そうであるがゆえに。

信用を信用すること、そしてその後の遺産

1983年、トンプソンとリッチーはACMチューリング賞を分かち合いました。授賞理由には「汎用的なオペレーティングシステム理論の展開、とりわけUNIXオペレーティングシステムの実装に対して」とあり、委員会の声明はその原則を的確に言い当てています。「UNIXシステムの成功は、いくつかの鍵となるアイデアの趣味の良い選択と、その優雅な実装に由来する。」8 いくつかの鍵となるアイデアの趣味の良い選択——その賞は、実質的に、抑制に対して贈られたのです。

1984年に「Reflections on Trusting Trust」として発表されたトンプソン自身のチューリング賞講演は、同じミニマリストの厳密さをセキュリティへ向けました。彼は、コンパイラがloginプログラムにバックドアを仕込み、さらにそれがコンパイルする将来のどのコンパイラにもそのバックドア仕込み自体を仕込むよう、教え込めることを実証しました——つまり悪意あるコードはバイナリの中にだけ存在し、調べられるどのソースにも痕跡を残さないのです。彼の結論は、計算分野で最も引用される一文の一つです。「自分で完全に作り上げていないコードは信用できない……ソースレベルでどれほど検証や精査をしても、信用できないコードを使うことからは守ってくれない。」9 これはサプライチェーンセキュリティの考え方の礎となる文献です——あなたが信用すべきものはソースではなく、バイナリを生み出したツールチェーン全体だ、という認識です。

二人のその後の経歴は、同じ本能を伸ばしていきました。トンプソンは落ち着くことを知りませんでした。ベル研究所ではPlan 9オペレーティングシステム(「すべてはファイルである」をネットワーク越しにまで、さらに推し進めました)、edエディタ、そして正規表現とgrepの実用的な理論を作り上げました。1992年には、ロブ・パイクとともにUTF-8——いまや世界中のほぼすべてのテキストを運ぶ可変幅のテキストエンコーディング——を、一晩で設計しました。ランチョンマットに描いたという逸話で有名です。3 そして2007年、Googleで、トンプソンはロバート・グリースマー、ロブ・パイクとともにGoプログラミング言語を共同設計し、2009年に公に発表しました。意図的に小さく、コンパイルが速く、組み合わせ可能な言語であり、Unixの価値観への意識的な回帰のように読めます。10 一方リッチーは、2011年10月12日に亡くなりましたが、より静かで、しかしより遍在する痕跡を残しました。歴史家ポール・セルージがこう言ったとおりです。「もし顕微鏡があってコンピュータの中をのぞけたら、その内側の至るところに彼の仕事が見えるだろう。」4

方法

その方法は、めったに説明を必要としなかった二人の男にわたって、四十年を通じて一貫しています。

小さく、鋭いツールを作る。 各プログラムは一つの仕事をこなします。その規律は拒むことです。新しいニーズが現れたとき、答えは新しいツールであって、古いものに継ぎ足された新しいフラグではありません。「古いプログラムを複雑にするのではなく、新たに作り直せ。」1

堆積させるのではなく組み合わせる。 能力は組み合わせから現れるべきものです。システムが小さな部品のキットであり、どの部品もモノリスへと膨れ上がるのではなく並べ替えによって育つとき、それは理解可能なままにとどまります。

ツールではなく、インターフェースを標準化する。 その統一の動き——「すべてはファイルである」、プログラム間のプレーンテキストストリーム——は、接続を普遍的にすることで、部品が互いに無知なままでいられるようにすることです。安価な継ぎ目こそが、小さな部品を強力にするのです。

いくつかの鍵となるアイデアを、趣味よく選ぶ。 チューリング委員会の言葉はお世辞ではなく、方法そのものでした。Unixは、何を省いたかで有名です。Cによる移植性、ファイルという抽象、パイプ——ほんの一握りの決断が、それぞれ巨大な重みを担い、雑多なものは意図的に欠けているのです。

調べられないものを信用しない。 「Trusting Trust」は、内側へ向けられた方法です。単純さと可読性は、美的な美徳であるだけでなく、信用の唯一の真の基盤でもあります。複雑さこそ、見えないものが潜める場所だからです。

影響の連鎖

彼らを形づくった人々

反面教師としてのMultics。 最も形成的だった影響は、彼ら自身が築くのを手伝い、そして立ち去ったシステムでした。Multicsは、考えうる限り最も高くつくやり方で、過剰な野心が何を犠牲にするかをトンプソンとリッチーに教えました——そしてUnixは、その大部分が、それに対する規律ある反動なのです。(形成的な影響)

ダグ・マキルロイ。 計算科学研究センターの長であったマキルロイは、パイプを発明し、「一つのことをうまくやる」哲学を文章にまとめ、グループの容赦ない趣味の批評家として振る舞いました。組み合わせモデルは、誰のものであるのと同じくらい彼のものでもあり、この哲学の正典的な一文の正しい帰属先は彼です。(直接的な影響)

ベル研究所の研究文化。 自由と良い機械を与えられた少数の仲間たちが、製品ロードマップのためではなく、自分たちのあいだで優雅さを求めて最適化していました。Unixは経営陣によって仕様化されたのではなく、趣味の良いものを尊び、肥大したものを嘲笑する文化から堆積していったのです。(形成的な影響)

彼らが形づくった人々

あらゆるUnixの末裔。 Linux、各種BSD、そしてmacOSは直系の相続人です。トンプソンとリッチーが打ち捨てられたPDP-7のうえで書いたシステムは、いまや地上のサーバー、電話、組み込み機器のほとんどを動かしています。

あらゆるシェルとコマンドライン。 パイプと組み合わせモデルは、五十年を経たいまも、事実上すべてのプログラマとシステム管理者の日々の作業環境です——その本質は変わっていません。本質が正しかったからです。

Cとその子供たち。 Cはシステムプログラミングの共通語となり、その構文と意味論はC++、Java、Go、Rust、そして今日書かれるもののほとんどに響いています。K&Rは、言語をどう文書化するかの手本であり続けています。

Unix哲学そのもの。 「一つのことをうまくやる」はUnixを超えて成長し、一般的な設計原則となりました——マイクロサービスのための、コマンドラインツールのための、ビルドなし・小さな部品というウェブへのアプローチのための、そしてAIシステムを、安全で読み解けるほど小さく保つための原則です。

貫く一本の線

トンプソンとリッチーは、このシリーズを貫くのと同じ信念の、システムレベルでの表現です。エツガー・ダイクストラは、単純さは信頼性の前提条件だと論じました。Unixは、その論をコンパイルして出荷したもの——いくつかの鍵となるアイデアの核を、信用できるほど小さく保ったものです。リーナス・トーバルズの「良い趣味」、すなわち特殊ケースが消える書き直しは、パイプラインをまたいでではなく一つの関数の内側での「一つのことをうまくやる」です。そしてトーバルズは、この二人が築いた土台の上に、LinuxとGitを直接築きました。ジョン・カーマックの高速で単純な核は、ハードウェアの天井へ向けられた同じ引き算です。そしてまつもとゆきひろによる、人間の幸福のためのRubyの設計は、Unixの本能——組み合わせ可能で表現力豊かな小さな部品——を高水準言語へと持ち上げたものです。貫く一本の線は一文です。力は、どれか単一の部品が大きく育つことからではなく、小さく理解可能な部品を普遍的インターフェースを通じて組み合わせることから来るべきだ、と。(シリーズの架け橋)

ここから私が受け取るもの

私が抱き続ける教訓は、インターフェースこそがアーキテクチャだ、ということです。いまや何かを設計するとき——エージェントであれ、ツールのループであれ、スクリプトのパイプラインであれ——誘惑はいつも、一つの部品をより賢くすること、次の要件をすでにあるものに織り込み、ついには自分にしか理解できないモノリスにしてしまうことへと向かいます。Unixの動きはその逆です。各部品を、完全に理解できるほど小さく保ち、知性は部品どうしがつながるやり方の中に置くのです。単純な部品どうしのあいだの、すっきりとした普遍的な継ぎ目は、すっきりした継ぎ目を持たない賢い部品に、いつだって勝ちます。それは品質こそが唯一の変数であるという基準と同じものです——問いは決して「この一つのプログラムはもっと多くをこなせるか?」ではなく、「このシステムは、いまも私が筋道立てて考えられる部品から成っているか?」なのです。

私がいま物を作っている世界——AIエージェントをツールとテキストで結び合わせた世界——では、トンプソンとリッチーの設計は、五十数年という年齢からすれば持つはずもないほどに、いまなお切実です。エージェントは小さなプログラムであり、ツールも小さなプログラムです。それらを強力にするのは、両者のあいだのすっきりとした普遍的なインターフェースであり、それは今日では主に構造化されたテキストです。それはパイプの作り直しです。そして「Trusting Trust」は、私が最も真剣に受け止める警告です。システムが、誰もが読める速さを超えてコードを生成するとき、信用の唯一の持続的な基盤は、部品を小さく、継ぎ目を読み解けるように保つことです。複雑さこそ、見えないものが潜みに行く、まさにその場所だからです。その確信——趣味は技術的なシステムであること、そして小さく、組み合わせ可能で、検査できる部品は、おまけではなく、すべてだということ——は、1969年のPDP-7から2026年のエージェントハーネスまで、まっすぐに走っているのです。

FAQ

Unix哲学とは何ですか?

Unix哲学とは、普遍的なインターフェースを通じて組み合わさる、小さく単一目的のツールの上に築かれた設計のアプローチです。その正典的な一文は、1978年のダグ・マキルロイによるもので、こうあります。「一つのことをこなし、それをうまくやるプログラムを書け。協働するプログラムを書け。テキストストリームを扱うプログラムを書け。テキストストリームこそが普遍的なインターフェースだからだ。」第一の原則は、既存のものに機能を加えるのではなく新しいツールを作ることであり、システムの力は、どれか単一のプログラムが大きく育つことからではなく、小さな部品を——パイプとプレーンテキストを介して——組み合わせることから来ます。1

ケン・トンプソンは「一つのことをうまくやる」と言ったのですか?

いいえ。「一つのことをうまくやる」という格言と、より広いUnix哲学を文章にまとめたのは、ベル研究所の計算科学研究センターの長であったダグ・マキルロイで、1978年のBell System Technical JournalのUnix特集号への序文においてでした。1 トンプソンとリッチーはこの哲学を体現するシステムを築き、マキルロイ——彼はUnixのパイプも発明しました——はその最も明快な代弁者であり、グループの常駐の趣味の批評家でした。この格言をトンプソンに帰属させるのは、よくある、しかし誤った近道です。

トンプソンとリッチーは実際に何を生み出したのですか?

ケン・トンプソンは1969年からPDP-7のうえでUnixオペレーティングシステムの最初のバージョン群を築き、のちにB言語、edエディタ、実用的な正規表現検索(grep)、Plan 9システム、UTF-8(ロブ・パイクとともに)を作り、GoをGoogleで共同設計しました。3 デニス・リッチーはC言語(1969〜1973年)を作り、それを使って1973年にUnixを書き直して移植可能にし、1978年にブライアン・カーニハンとともにThe C Programming Languageを共著しました。45 二人はUnixで1983年のACMチューリング賞を分かち合いました。8

「Reflections on Trusting Trust」とは何ですか?

それは、Communications of the ACMに発表された、ケン・トンプソンの1984年のACMチューリング賞講演です。彼は、コンパイラがプログラムに隠れたバックドアを仕込むように仕立てられること、そして自分自身の新しいバージョンをコンパイルするたびにそのバックドアを再生産できることを示しました——つまり悪意あるコードはバイナリの中にだけ存在し、読めるどのソースにも痕跡を残さないのです。彼の結論はこうです。「自分で完全に作り上げていないコードは信用できない……ソースレベルでどれほど検証や精査をしても、信用できないコードを使うことからは守ってくれない。」これはソフトウェアのサプライチェーンセキュリティの基礎となる文献です。9


出典


  1. M・ダグラス・マキルロイ、“UNIX Time-Sharing System,” The Bell System Technical Journal, Vol. 57, No. 6, Part 2(1978年7月〜8月)への序文。四点の要約(「各プログラムに一つのことをうまくやらせよ……新しい『機能』を追加して古いプログラムを複雑にするのではなく、新たに作り直せ」)と、より簡潔な後年の形:「一つのことをこなし、それをうまくやるプログラムを書け。協働するプログラムを書け。テキストストリームを扱うプログラムを書け。テキストストリームこそが普遍的なインターフェースだからだ。」あわせて“Unix philosophy,” Wikipediaも参照。 

  2. “Unix,” Wikipedia。1969年にベル研究所がMulticsを放棄したこと、PDP-7での起源、「Unics」/「Unix」の命名(ブライアン・カーニハン)、移植性のため1973年にCで書き直されたVersion 4 Unix、階層的ファイルシステムとデバイス・IPCのファイルとしての扱い(「すべてはファイルである」)、パイプ、1974年のCACM論文。 

  3. “Kenneth Lane Thompson,” Wikipedia。1943年2月4日、ニューオーリンズ生まれ、UCバークレーの学士/修士、ベル研究所(1966年)、Unixの最初のバージョン群(「UNIXの最初の二、三のバージョンは、すべて一人で作った。そしてデニスは伝道師になった。」)、B言語、ed、正規表現、grep、Plan 9、ロブ・パイクとのUTF-8(1992年)、GoogleでのGo(2007年〜)。 

  4. “Dennis Ritchie,” Wikipedia。1941年9月9日、ニューヨーク州ブロンクスヴィル生まれ、2011年10月12日没、ベル研究所計算科学研究センター(1967年)、Cの創出(BとBCPLから発展)とそれを用いた移植性のためのUnixの書き直し、ポール・セルージの言葉(「もし顕微鏡があってコンピュータの中をのぞけたら、その内側の至るところに彼の仕事が見えるだろう」)。 

  5. “The C Programming Language,” Wikipedia。ブライアン・カーニハンとデニス・リッチー、1978年2月22日初版(Prentice Hall)、「K&R」として知られる、Cに関する最初の広く入手可能な書籍。 

  6. D・M・リッチー、K・トンプソン、“The UNIX Time-Sharing System,” Communications of the ACM, Vol. 17, No. 7(1974年7月), pp. 365–375。Unixをより広い計算分野のコミュニティへ発表した論文。 

  7. “Pipeline (Unix),” Wikipedia。パイプの概念はダグ・マキルロイが着想し、1973年にケン・トンプソンが実装(pipe()システムコールと|演算子)。マキルロイ:「翌日には、誰もが配管の興奮に加わる、忘れがたいワンライナーの饗宴が繰り広げられた。」 

  8. “Dennis M. Ritchie – A.M. Turing Award Laureate,” ACM(ミラー)。1983年の授賞理由:「汎用的なオペレーティングシステム理論の展開、とりわけUNIXオペレーティングシステムの実装に対して」、委員会の声明:「UNIXシステムの成功は、いくつかの鍵となるアイデアの趣味の良い選択と、その優雅な実装に由来する。」 

  9. ケン・トンプソン、“Reflections on Trusting Trust,” 1984年ACMチューリング賞講演、Communications of the ACM, Vol. 27, No. 8(1984年8月), pp. 761–763。MORALの節:「自分で完全に作り上げていないコードは信用できない。(とりわけ、私のような人間を雇っている会社のコードは。)ソースレベルでどれほど検証や精査をしても、信用できないコードを使うことからは守ってくれない。」 

  10. “Go (programming language),” Wikipedia。「2007年にGoogleでロバート・グリースマー、ロブ・パイク、ケン・トンプソンによって設計され、2009年11月に公に発表された。」 

関連記事

エンジニアリング哲学:John Carmack、道徳的な営みとしてのパフォーマンス

John Carmackはパフォーマンスを道徳の問題として扱います。速くてシンプルな核まで削ぎ落とし、問題を土台から理解し、出荷し、そしてその過程を公開する。

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 分で読める