世界を動かす技術を、日本語で。

誰も全体のシステムがどのように機能しているかを知らない

概要

  • Twitterの衰退 により LinkedInの台頭 が注目される現状
  • 技術的理解の限界 について、複数の専門家の意見を紹介
  • 「自分の使う技術をどこまで理解すべきか」 という根本的な問い
  • AIやフレームワークの普及 が理解の断絶をさらに拡大
  • 複雑な技術システム に対する人間の知識の本質的な限界

Twitterの衰退とLinkedInの台頭

  • Twitterの衰退 による LinkedInの新たな社会的役割 の拡大
  • 技術分野の 有識者たちの議論 がLinkedIn上で活発化
  • Simon Wardley、Adam Jacob、Bruce Perens、Louis Bucciarelli らの重要な発言の紹介

技術を「理解する」とは何か

  • 技術リテラシーの測定 に関する疑問
  • 電話の仕組みシステムの物理的・論理的構造 への無知
  • 自分は本当にこの技術を理解しているのか」という不安
  • 複数レイヤーにまたがる知識 (物理、アルゴリズム、運用、経済、規制など)の必要性
  • 誰も全てを理解していない という現実

技術面接と知識の限界

  • 技術面接 で「 どこまで知っているか」を探る手法
  • Brendan Gregg による「知識の限界に直面した時の反応」評価
  • 「全てを理解できる人はいない」 という前提

主要論者の主張まとめ

  • Wardley
    • 理解せずに構築する危険性 の指摘
    • 「魔法」フレームワーク (例:Ruby on Rails)が仕組みを隠蔽
  • Jacob
    • AIの普及 がソフトウェア開発のあり方を変革
    • 利便性とリスクのバランス を評価
  • Perens
    • 複雑な現代システム の中で既に理解の断絶が起きている現状
    • 根本的に誤ったメンタルモデル の蔓延
  • Bucciarelli
    • システムの複雑性 ゆえに「全体を理解する人間はいない」と指摘
    • 部分的理解しか持ちえない という技術の本質

技術的複雑性と人間の限界

  • AIの進化 が「理解の断絶」をさらに拡大
  • しかし「 全体を知ることの不可能性」は以前から存在
  • 複雑な技術社会 における知識の本質的な限界
  • 部分的理解実用的運用 とのバランスが今後も課題

Hackerたちの意見

実際にはそんな風にはいかないよね。「みんながどうやって物事が動いてるのか知らない」っていうのが問題じゃないと思う。人は料理の細かい化学や物理のメカニズムを理解しなくても、自分の食べ物を作ることができたから。でも、基本を理解しなくなるのは問題だよね。たとえば、店で用意された卵を買うだけで、自分で卵を焼くことができなくなるとしたら、それは全然違う無知だし、もっと危険だよ。農業企業が小麦や肉を生産するのは問題ないかもしれないけど、もし企業がみんなのために標準化された料理を作り始めたら、それって本当に同じことなのか?それは良い進化なのか、そうじゃないのか?ここが議論のポイントだね。

ほとんどの人は狩りをしたり、火を起こしたり、食べ物を育てたりする方法を知らないよね。もし全てのスーパーやレストランが長期間食べ物を売り切れたら、人々は飢え死にするだろう。でも、実際にはそんなことは起こらない。なぜなら、スーパーやレストランがたくさんあって、供給チェーンもいろんな場所から調達しているから、冗長で分散型の性質があるから問題にならないんだ。だから、自分で食べ物を作るのも同じこと。結局、ロボットやフードレプリケーターが十分にあれば、食べ物を作る方法を知っていることは関係なくなるよ。壊れても、どこかに必ず見つけられるからね。(注:まだそこには至っていないけど)

どの時点で「大丈夫」と「心配」の境界線が引かれるの?君が言ったのは君の視点からのものだと思うけど、みんなが同意するわけじゃないし、主観的だよね。

それは全然違う無知で、もっと危険だよ。なんで?テフロンパンで卵を焼く方法を知らない方が危険なの?それとも石の上で薪の火で焼く方法を知らない方が危険なの?前者を知っていて後者を知らないのは許されるの?テフロン業者に依存しないために、材料科学を理解する必要があるの?

ここで主張されているつながりは、すぐに崩れちゃうな。CPUの命令、キャッシュ、メモリアクセスなどは、議論され、テストされ、強化され、文書化されているレベルが、最近使われているLLM生成のコードとは桁違いなんだ。基本的なコンピュータの抽象化は、そんなに漏れやすくもないし、明日リファクタリングが必要なほどでもないよ。

AIがこの状況を悪化させるだろう。私はAIに懐疑的な方だけど、この記事の結論は正しいとは思わない。LLMが私たちのためにできることは、正反対なんだ。彼らはほぼすべてのことについて訓練されているから、AIに電話がどうやって動くのか、ブラウザにURLを入力するとどうなるのかを尋ねれば、実際に答えて詳しく説明してくれる(それは論文サイズのテキストになるけど)。正確さや幻覚を除けば、電話がどう動くのか全く知らない人間よりも、はるかに優れているよ。人間の脳は「自分が知らないことを知らない」という領域にかなりのギャップがあるけど、言語モデルは非常に広範な知識を持っていて、ある意味で優れている。ただし、コストが高くて電力を大量に消費するけどね。まあ、技術的な詳細は置いといて。LLMは知識の機械で、すべてのレベルで人間の言語で説明されている限り、すべてのことについて知っているのが得意なんだ。LLMは私たちの知識を、以前は不可能だった方法で統合してくれる。推論やコード生成はあまり得意じゃないけど、ほぼ何にでも答えるのが得意なんだ。

これには多くの層があるけど、私が気になるのは一つのプログラミングスタイルだ。上の層(製品が存在する理由やシステムの目標)も下の層(実際にその動作を実装する方法)も理解していない状態。過去には多くの開発者がビジネスケースをほとんど理解していなかったけど、少なくともコードに翻訳する方法は理解していて、ビジネスに対して圧力をかけることができた。でも今は、コードがどう動くかを知っている必要すらないみたい!議論は、「それは他の誰かの心配だ」という薄い潤滑油の上で浮かんで、チケットからチケットへと幸せに滑っていくことのようだ。目標も成果も理解していない。テストがグリーンでボタンが送信されれば、ミッション完了!Claudeを使っていると、状況認識がどんどん薄れていくのを感じる。どんなコードも見なくなる開発スタイルが明らかになってきた。私の英語の指示は、何の成長も残さない。上に戻すために何も学べないし、下に何があるのかも知らない。私が存在する理由は何?

開発者の平均在職期間は長い間2.5年だったし、チームを変える開発者も多かった。AIが登場する前から、多くの開発者は自分がメンテナンスするために呼ばれたコードがどう動くかを理解していなかった。 > 私の英語の指示は、何の成長も残さない。私は何も学ばず、下に何があるのかも知らない。私はなぜ存在するべきなのか?Claudeコードを使うときは、何をどうするかを更新するマークダウンファイルを維持するように言ってみて。単に「$yをやれ」じゃなくて、「$xのために$yをやる必要がある」とかね。マークダウンファイルが更新されれば、それが記録されて、エージェントが正しいコードを出して変更を加えることがあるよ。考えてもみなかったユースケースもね。そしたら「なぜ$yをしたの?」って聞けるし、予想外でも、ああ、正しかったんだなってなる。 > 私はなぜ存在するべきなのか?それは間違った質問で、正しい質問は「なぜ私の雇用主は私に給料を払っているのか?」だよ。雇用主は、明確に定義された要件を働くコードに変えるために給料を払っている。お金を稼ぐためか、あるいはお金を節約するためにね。もしあなたが中堅のチケットテイカーなら、それがあなたの役割だよ。タイトルに関係なく、誰もあなたがforループを使うかwhileループを使うかなんて気にしない。高いレベルでは、あなたは自分の$n年の経験を使って、より曖昧で影響力のある大規模なプロジェクトを、期限通りに、予算内で、要件を満たす実装に変える責任がある。LLMが登場する前は、自分のコーディング、チームを組むこと、そしてディレクターやCTOに「これは社内でやるべきことじゃない」と伝えることが求められた。今は、そのリソースの間にコーディングエージェントが加わっている。いずれにせよ、チケットテイカー以上の立場の私は、まずコードの行を見ていないだろう。機能要件と非機能要件を満たしているかをテストして、主にホットスポット、つまり同時実行の問題、セキュリティの問題、そして明らかなスケーラビリティの問題を見て、実際のトラフィック、ウェブリクエストやETLジョブのトランザクションで叩く前に確認するんだ。パールを握りしめる前に言っておくけど、私は80年代にアセンブリを趣味で始めて、キャリアの最初の15年はC言語で複数のメインフレームやPC、後にはWindows CEデバイスでビットをいじってたんだ。

もっと「ハンズオフ」じゃなくて、小さな編集を最適化するClaudeコードが欲しいな。例えば、IDEに座って、いくつかの行を選択して、(例えば)Caps Lockを押して音声をアクティブにして、何を調整すべきかを短く言うと、それが次の調整のためにステージされる感じ。例えば「ここに新しいユースケースが必要だから、yをする関数を作ろう」とか。 [関数が現れる] いいね、オブジェクトをそれに接続する必要があるね [クラスを指さす] [LLMが言語サーバーを通じてコードパスを遡って見つけて、情報を渡す] そのUXの主な障害は、応答の速度だと思う。音声認識はほぼ瞬時だけど、その後のコーディングプロンプトは良くなるまでに少し時間がかかるからね。そんなインタラクティブなアプローチは、スピードがあればもっと良く感じるだろうな。残念ながら、誰もLLMのためにマウスと音声の組み合わせをターゲットにしていないみたいだ。これは、さまざまなタイピング関連の問題を抱える人々にとっても素晴らしいアクセシビリティツールになるだろう。

理想的なシナリオでは、従業員が交換可能であることが望ましい。組織全体を人質に取るような、代替不可能な個人は必要ないからね。そういう個人から自分を守る方法の一つは、全てのメンバーが他の人の役割を取れるだけの知識を持つことを確保することだ。少しのトレーニングの後でもね。問題は、高いレベルの能力と透明性を維持するのは非常にコストがかかることだ。もう一つの解決策は、組織が完全に混乱していて、誰も何をしているのかわからない状態になることだ。そうすると、組織は非効率的になるけど、その非効率は全体の観点から見ると安く済むかもしれない。

皮肉なことに、「オーナーシップ」はよくある管理の話題だけど、実際にオーナーシップを取ろうとすると、アクセスの壁や情報不足、一般的な「君はここで何をしているの?」というメンタリティにぶつかる。確かに、一人の人間が全てを知っているわけではないけど、大企業は特に、あなたに何の可視性も与えたがらないように見える。締切を与えられて、残業して必死に間に合わせようとしているのに、その締切があなたが招待されていない会議で延長されたことを発見するのは特にイライラする。さらに悪いことに、「彼は今すごく頑張っているから、元の締切に間に合えば予定よりも早く進むし、間に合わなければ余裕がある」というような暗い管理手法を使っていることもある。もし私が管理の道具として使われることが期待されているなら、私は自分の職務をその通りにこなすだけで、さらに何かをするつもりはない。もしオーナーシップが期待されているなら、少なくともクールな子たちのテーブルに座って、何か関連することを言う機会が必要だよね。

なんか不思議なんだけど、Claudeを使うことで、実際にやろうとしてることにもっと集中できる気がする。プログラミングの30年間、ずっと「ヤクシェービング」に時間を費やしてたんだ… ボイラープレートの設定とか、いつもやらなきゃいけない基本機能の追加、サポートシステムの設定とかね。Claudeを使うと、そういうことがすごく早く終わるから、実際にやりたいことに集中できるし、だからこそ、自分が大事にしてるコア機能を頭の中に保てるんだ。他のプロジェクトで共通する部分をやるために、コアで新しい部分を脇に置く必要がなくなる。

Hacker Newsで議論の続きを見る