kbits

誰もシステム全体の仕組みを知らない

原文: Nobody knows how the whole system works
著者: Lorin Hochstein
日付: 2026-02-08
アーカイブ日: 2026-02-09


エグゼクティブサマリー

現代のソフトウェア開発において、システム全体の仕組みを完全に理解している人間は誰もいない――これは危機なのか、それとも必然なのか?

Lorin Hochsteinが、LinkedIn上で交わされた3つの投稿(Simon Wardley、Adam Jacob、Bruce Perens)と、1994年のMIT教授Louis Bucciarelliの洞察を通じて、「理解」の限界について考察。AI時代において「仕組みを知らずに作ること」の是非を問う、ソフトウェア工学の根源的なジレンマに迫る。

TwitterからLinkedInへの人材流出は、意外な副作用をもたらした――技術的に深い議論が、より真剣に交わされるようになったのだ。この記事は、そんなLinkedIn上の議論から生まれた。


4つの視点:理解の限界をめぐる議論

1. Simon Wardley:AI時代の危機

Wardleyは、AI(特にコード生成AI)が引き起こす未来に対して警鐘を鳴らす:

「私が魅了され、恐怖を感じているのは、AIを使って『仕組みを理解せずに物を作る』能力を手に入れたこと。これは危険だ。」

彼の懸念は、単なる技術的スキルの喪失ではない。根本的な動作原理を理解しないまま複雑なシステムを構築すること の危険性だ。バグが出たとき、パフォーマンスが悪化したとき、セキュリティホールが見つかったとき――誰がそれを修正できるのか?生成されたコードの背後にある「なぜそう動くのか」を誰も説明できない世界。

この懸念は、業界で「魔法(magic)」という言葉が軽蔑的に使われる理由と重なる。魔法とは、下層の仕組みを意図的に隠蔽するフレームワークのこと。Ruby on Railsが典型例だ。Railsは「設定より規約」でコードを劇的に減らしたが、その代償として「裏で何が起きているか」を見えなくした。Wardleyが恐れるのは、AIがこの「魔法」を極限まで推し進めることだ。

2. Adam Jacob:変化は避けられない

Adam Jacob(ChefとSystem Initiativeの創業者)は、Wardleyの懸念を認めつつも、現実的な立場を取る:

「AIは確かに新しい能力だ。そして、その利益は明らかにリスクを上回る。私たちはさらに根本的な仕組みから遠ざかるが、それは避けられない変化だ。」

彼の主張は2つの前提に基づく:

  1. 生産性の爆発的向上 - AIによるコード生成は、開発速度を桁違いに引き上げる
  2. 抽象化の歴史的必然性 - アセンブリ→C→Java→Python→AIという抽象化の流れは止められない

Jacobは、Wardleyの懸念を「新しい問題」としてではなく、「既存の問題の延長線」として捉える。私たちは常に、完全には理解していないレイヤーの上で開発してきた。JVMの最適化、TCP/IPスタックの実装、ARMプロセッサのメモリモデル――どれだけのエンジニアが、これらを本当に理解しているだろうか?

AIは確かに「理解と実装の距離」をさらに広げる。しかし、その代償として得られる生産性は、リスクを上回る――それがJacobの結論だ。

3. Bruce Perens:恐れるべきシナリオはすでに現実

Bruce Perens(Open Source Initiativeの共同創設者)は、Wardleyの懸念を別の角度から覆す:

「Wardleyが恐れるシナリオはすでに起きている。現代のCPUやOSは非常に複雑で、多くの開発者は実際の仕組みを知らない。彼らはメンタルモデルを持っているが、そのモデルは根本的に間違っている。」

Perensの指摘は辛辣だ。多くのエンジニアは「自分はシステムを理解している」と信じているが、実際にはその理解は根本的に不完全だ。例えば:

Perensの主張は明確だ:私たちはすでに、理解していないシステムの上で開発している。AIはこの状況を悪化させるのではなく、単に顕在化させるだけだ。

4. Louis Bucciarelli (1994):「知っている」とは何か?

MIT工学部の教授Louis Bucciarelliは、1994年の著書『Designing Engineers』で、「技術リテラシー」についての会議での経験を記している:

ある社会学者が発表した:「アンケート調査の結果、アメリカ人の80%は電話の仕組みを知らない。我々は技術的に無知な国民だ。」

Bucciarelliは不安になった。自分は電話の仕組みを知っているだろうか?

彼は自問する:

そして結論する:誰も電話の仕組み全体を知らない。

「電話の仕組みを知っている」とは、どのレベルの理解を指すのか?物理?アルゴリズム?インフラ?経済?規制?――複雑な技術システムは、本質的に誰一人として全体を理解できないように設計されている。


技術面接という儀式:知識の限界を探る

著者Hochsteinは、古典的な技術面接質問を引用する:

「URLをブラウザに入力してEnterを押すと、何が起きるか?」

この質問は、候補者の知識の深さを測るためのものだ。しかし、その深さに底はない:

レベル1:アプリケーション層

レベル2:ネットワーク層

レベル3:OS層

レベル4:ハードウェア層

どこまで答えられるか?

Brendan Greggの面接哲学

Hochsteinは、元同僚のBrendan Gregg(Netflixでのパフォーマンスエンジニア、『Systems Performance』著者)の面接手法を紹介する:

「私が興味を持っていたのは、候補者の知識の限界を見つけること。そして、その限界に達したときの反応を観察すること。」

Greggのアプローチ:

  1. 専門分野から質問を始める - 候補者が自信を持っている領域
  2. どんどん深く掘り下げる - 詳細な実装、トレードオフ、エッジケース
  3. 限界に達するまで続ける - 必ず「知らない」地点に到達する
  4. 反応を観察する - 「知りません」と認めるか、ごまかそうとするか

この面接哲学は、ある前提に基づいている:

誰もシステムの底まで理解していない。

重要なのは「どこまで知っているか」ではなく、「知らないことを認められるか」「知らないことをどう学ぶか」だ。


4人全員が正しい:矛盾しない真実

一見対立する4つの視点は、実は異なる側面から同じ真実を指している:

Wardleyは正しい:理解せずに作ることは危険

下層の仕組みを理解しないままシステムを構築することには、明確なリスクがある:

「魔法」に頼りすぎると、魔法が壊れたときに対処できない。

Jacobは正しい:AIの利益はリスクを上回る

しかし、抽象化は避けられない:

AIは新しいレイヤーだが、その価値は明白だ。

Perensは正しい:その状況はすでに起きている

Wardleyが恐れるシナリオは、すでに現実:

多くのエンジニアは、これらに対して間違ったメンタルモデルを持っている。そして、それでも仕事はできている。

Bucciarelliは正しい:複雑なシステムは本質的に理解不可能

電話、インターネット、OS、CPU――これらは本質的に、誰一人として全体を理解できない

これは欠陥ではなく、複雑な技術システムの本質的な性質だ。


AI時代の示唆:問題は新しくない

Hochsteinの結論は明快だ:

「AIはこの状況を悪化させる。しかし、それは新しい問題ではない――私たちはずっとこの状況の中にいた。」

AI時代に変わるのは:

しかし、根本的な構造は同じだ:

私たちは常に、完全には理解していないシステムの上で、部分的な知識を組み合わせて、何かを作ってきた。

AI時代に必要なのは:

  1. 謙虚さ - 「知らない」と認める勇気
  2. 好奇心 - 下層を学び続ける姿勢
  3. 実用主義 - 全てを理解しなくても前に進む決断

そして何より:「理解」の限界を前提に設計すること。

テスト、監視、ロギング、デバッグツール――これらは全て、「誰もシステム全体を理解していない」という前提の上に成り立つ安全装置だ。


考察:抽象化と理解のジレンマ

この記事が提示するのは、ソフトウェア工学の根本的なトレードオフ だ:

「魔法」は必要悪か、それとも進歩の証か?

Wardleyは「魔法(magic)」を危険な存在として扱う。しかし、魔法なしでは現代のソフトウェア開発は成り立たない。

Ruby on Railsの「魔法」が可能にしたこと:

問題は「魔法を使うこと」ではない。問題は:

  1. 魔法が壊れたときに対処できないこと - エラーメッセージが意味不明になる
  2. 魔法の限界を知らないこと - フレームワークの想定外の使い方でパフォーマンスが崩壊する
  3. 魔法に依存しすぎること - 基礎を学ばないまま「動く」コードを量産する

健全な「魔法」との付き合い方:

AI時代の新しい恐怖、古い問題

「AIが書いたコードを人間が理解できない」――この恐怖は新しく聞こえるが、構造は古い。

私たちはすでに、完全には理解していないシステムの上で開発している:

AIは「生成者と理解者の分離」を加速させる。しかし、その分離自体は新しくない。

すでに分離していた例:

AIは単に、この「制御の喪失」を一段階進めただけ。

「理解」の階層構造

Bucciarelliの洞察は深い:「知っている」とは何か?

電話を例にとると:

レイヤー 知識の内容 専門家
ユーザー ダイヤルの仕方 全員
物理デバイス 振動板、コイル、磁場 電気工学者
信号処理 エコー除去、ノイズ抑制 DSPエンジニア
ルーティング 長距離電話の経路選択 ネットワークエンジニア
衛星通信 信号の送受信、遅延補償 通信工学者
インフラ保守 電柱の修理、ケーブル敷設 保守作業員
経済・規制 設備投資、企業間調整 経営者・政策立案者

誰が「電話の仕組みを知っている」と言えるのか?

全レイヤーを理解している人間は存在しない。システムは、本質的に分散した知識で成り立っている

エンジニアリングの未来:前提を変える

従来の前提:「システムを理解してから作る」

新しい前提:「誰も全体を理解できないシステムを、どう作るか」

必要なアプローチ:

  1. モジュール化 - 小さな理解可能な単位に分割
  2. テスト駆動 - 仕様を保証する(実装の理解は二の次)
  3. 監視とオブザーバビリティ - システムの振る舞いを外から観察
  4. ドキュメント文化 - 知識を記録し、共有する
  5. 謙虚さ - 「知らない」と認め、学び続ける

重要な教訓

“Nobody knows how the whole system works”

これは諦めではなく、設計の前提条件だ。

その前提の上で:

AI時代のエンジニアは、「全てを理解できない」という現実と共生する技術 を身につけなければならない。

それは新しいスキルではない――ただ、今まで目を背けてきた現実を、直視するだけだ。


関連リンク


この記事は個人ブログからのサマリーです。全文は原文をご覧ください。