3 ポイント 投稿者 GN⁺ 2024-05-06 | 1件のコメント | WhatsAppで共有
  • 単純な方法が論文査読や昇進評価で低く評価される背景には、複雑性バイアスがあり、複雑な成果物のほうがより多くの努力・熟練・革新を含んでいるように見えるためである
  • 選択肢や構成要素が多いシステムは柔軟に見えるが、実際の運用では説明・テスト・問題解決が難しくなり、ミスと非効率が増える可能性がある
  • 単純なアイデアやシステムは理解・利用・フィードバック・拡張がしやすく、Instagramは2012年の買収当時、13人のチームで数千万人のユーザーにサービスを提供しながら、PostgreSQLとRedisのような実績ある技術を維持していた
  • 機械学習でも複雑な手法が常に優れているわけではなく、中規模の表形式データセット45件では木ベースモデルが深層ニューラルネットワークより良く、推薦・検索では内積(dot product)が neural collaborative filtering より優れていた事例がある
  • 複雑さそのものに報酬を与えると不要な複雑化やnot invented hereの傾向を強めるため、複雑な問題ほど単純な解法が可能か、複雑性のコストが正当化されるかを先に検討すべきである

複雑さがより魅力的に見える理由

  • 複雑さは努力のシグナルとして受け取られやすい
    • 難しいアイデアや技術的な詳細が多い論文は、多くの時間と労力が注がれたように見える
    • 構成要素や機能が多いシステムは、より小さなシステムよりも手間をかけて作られた成果物として評価されやすい
    • 作るのが難しいという印象が、そのまま価値や品質のシグナルとして機能する
  • 熟練のシグナルとしても解釈される
    • 動く部分が多いシステムは、設計者が各部分を理解し統合する能力を持っているという印象を与える
    • 専門用語や証明が多い論文は近寄りがたいが、そのぶん主題に対する専門性を示しているように見える
    • 実務でほとんど使わないアルゴリズムやデータ構造を面接で問う慣行も、こうしたシグナルと結びついている
  • 革新のシグナルという認識もある
    • まったく新しいモデルアーキテクチャを作った論文は、既存のネットワークを修正した論文よりも新規性が高く評価されやすい
    • ゼロから作った構成要素が多いシステムは、既存の部品を再利用したシステムよりも独創的に見える
    • 「一つだけ変えて残りは既存研究と同じ」という評価は、単純なアイデアの価値を下げうる
  • 機能が多いほどより包括的だという錯覚が生じる
    • SQL と NoSQL のデータストアの両方をサポートしたり、バッチとストリーミングのパイプラインの両方を可能にしたりするシステムは、あらゆるケースを扱えるように見える
    • レゴブロックが多いほど変化にうまく対応できると考えられがちである
    • こうした判断が、単純なアイデアやシステムより複雑なものを過剰に好む complexity bias につながる

単純さが実際の利点になる場面

  • 単純なアイデアや機能は理解しやすく使いやすい
    • 採用可能性と実際の影響が大きくなる
    • 伝えやすくフィードバックも得やすい
    • 複雑なシステムは説明や管理が難しく、利用者が何をどうすべきか把握しづらい
    • 調整項目が多すぎるとミスが増え、手順が多すぎると非効率が生じる
  • 単純なシステムは作りやすく拡張しやすい
    • 構成要素が少ないほど実装しやすい
    • 標準化された既製技術を使えば、実装・保守する人材を見つけやすい
    • コードや内部相互作用が減り、理解やテストの負担も小さくなる
    • 不必要に複雑なシステムは、構築により多くの時間と資源を要し、無駄を生む
  • Instagram の事例は、単純な技術選択の利点を示している
    • 2012年の買収当時、Instagram は13人のチームで数千万人のユーザーにサービスを提供していた
    • 新しい流行技術ではなく実績のある技術を維持することで、エンジニア一人あたりの運用負荷を下げていた
    • 他のスタートアップが流行していた NoSQL データストアを導入して苦労していたとき、Instagram は理解しやすい PostgreSQLとRedis を使っていた

運用コストと保守性

  • システムのデプロイは終わりではなく出発点である
    • ほとんどの努力は本番投入後に発生する
    • 運用は、もともと作ったチームではない別の人が担う可能性が高い
    • 単純なシステムは保守コストを下げ、寿命を延ばせる
  • 動く部品が少ないほど、より信頼性が高く、修理もしやすい
    • 故障しうる箇所が減る
    • 内部相互作用が少ないため、個々の構成要素をアップグレードしたり交換したりしやすい
    • 複雑なシステムは、限られたチームが理解しなければならない構成要素が多く、保守コストが大きくなる
    • 相互依存する部分が多いほど、問題解決も難しくなる
  • Thomas Paine は『Common Sense』で、「何事も単純であるほど乱れにくく、乱れたときにも直しやすい」と述べている

機械学習でも単純な手法が劣らない事例

複雑さに報酬を与えると生じる問題

  • 複雑さに報酬を与えると、人は不必要に複雑なものを作る動機を持ってしまう
    • 単純な方法やシステムは、簡単そうに見えるという理由で価値が低いと見なされることがある
    • 報酬を得るためにシステムを複雑にすると、最も単純な解法がもはや明確な選択肢ではなくなる
    • 複雑さはさらに多くの複雑さを生み、最終的には作業不能な水準に至ることがある
  • not invented here の傾向も強まる
    • 既存の構成要素を再利用すれば時間と労力を節約できるのに、ゼロから作ろうとする傾向が生まれる
    • 時間と資源を浪費し、より悪い結果につながる可能性がある
  • 昇進プロセスや機械学習論文の査読でも、複雑さが過度に強調されることがある
    • Bryan Liles は、単純な解法のほうが複雑な解法より実装と拡張が容易であるにもかかわらず、昇進は複雑な解法を作った人に与えられることが多いと指摘している
    • Micah Goldblum は、ML レビューでは手法が単純すぎる、あるいは既存部品の組み合わせだという指摘がよくあるが、単純さは弱点ではなく強みだと述べている
    • Kalman Filters、PageRank、SVM、LSTM、Word2Vec、Dropout のような革新でさえ、拒否されたことがある

複雑さに向き合うより良い方法

  • 目標は、複雑な問題を可能な限り単純な解法で解くことである
    • 解法の複雑さではなく、問題の複雑さに焦点を当てるべきである
    • 単純な解法は、問題に対する深い洞察と、より込み入ってコストの高い解法を避ける能力を示す
    • Albert Einstein の「すべては可能な限り単純であるべきだが、それ以上に単純であってはならない」という言葉にも通じる
  • すべてを包含する複雑な解法よりも、複数の焦点を絞った解法を検討できる
    • 万能(one-size-fits-all)な解法は、期待ほど柔軟でも再利用可能でもないかもしれない
    • 複数のユースケースや利害関係者を同時に支援すると、強く結合され、計画や移行により多くの調整が必要になる
    • 単一目的のシステムは運用しやすく、必要になれば廃棄もしやすい
  • 複雑性バイアスを減らす方法として Occam’s razor を適用できる
    • 最も単純な解法や説明が通常は正しいという原則である
    • 単純なアイデアを早々に退けたり、価値を正当化するために不必要な複雑さを加えたりしてはならない
    • 複雑性のコストを考慮し、「それだけの価値があるのか」を問うべきである

慣れた複雑さを再利用する反対側のバイアス

  • 「not invented here」の反対側には、既存の構成要素を自動的に好むバイアスもある
    • すでに知っていて個人的な経験上より簡単であり、自分の時間と労力を減らせるためである
    • しかし既存の構成要素自体が非常に複雑なら、より単純なものを新たに作るよりも時間と資源を浪費し、より悪い結果につながることがある
  • 単純な選択肢がないときは、新しく作る必要があるかもしれない
    • 新しく作ったものが実際には単純にならず、既存のものと同じくらい複雑な別の何かになってしまう場合もある
    • 問題によっては本質的に複雑で、実際には取り除けない essential complexity を持つ
  • ORM は悪い例として扱われている
    • ORM は繰り返し新しく作られ、最初は単純に始まるが、やがて複雑さが爆発する
    • object/relational impedance mismatch はよく知られており、ORM というアイデア自体が本質的に複雑である
    • 単純さを保っているように見えるものは、ORM ではなく query builder や data mapper である可能性が高い
  • PSR キャッシュ API は取り除ける複雑さの事例である
    • PSR-6 キャッシュ API の後に、より単純な PSR-16 キャッシュ API が登場した
    • PSR-16 は複雑さと概念数を減らし、API をより小さく、より非依存的な形にした
    • PSR-16 実装用の PSR-6 アダプタ逆方向アダプタ を作れるという点は、PSR-16 で取り除かれた複雑さが本質的ではなかったことを示している
  • 一部のライブラリやフレームワークは、開発者体験の名の下に本質的複雑性を超えて肥大化することがある
    • 真の単純さは、コード行数、public method 数、結合度といった指標で測定できる性質を持つ
    • ライブラリが数年のうちに元の10倍の規模に膨らみ、6〜12か月ごとに大きな breaking change を出すことがある
    • 成長のないライブラリを「死んだ」と見なし、より「活発な」パッケージへ移ろうとする動機も、複雑性バイアスの症状かもしれない
  • 広がっていく複雑さを避けるには、新しく作る選択が必要な場合もある
    • 要件を固定し、スコープが広がっていく成長を避けられるなら、新しい実装のほうがより単純な選択になることがある
    • どちらか一方のバイアスも強めないよう注意すべきである

1件のコメント

 
GN⁺ 2024-05-06
Hacker News の意見
  • FAANG のある企業で、複雑な問題の解決を昇進基準にしていた時期に働いていたが、より複雑な問題を解くほどレベル・報酬・地位が上がっていった
    自然と人々は解くに値する複雑な問題を探し回るようになり、他社もその会社のアイデアを真似したことで、複雑な解法を必要としない小さな会社まで似たような技術スタックを持つようになったように思う

    • 昇進基準として必ずしも良いかは分からないが、複雑な問題を解くことと、複雑な解法を見つけ出すことは別物
    • 複雑な問題を解決するのは昇進に値するが、複雑だという理由だけで複雑な解法を提供するのはそうではない
    • ごく少数しか聞いたことのない数学用語で説明できれば、さらに加点される
    • Google? 今のクラウドネイティブな複雑性の罠を作ったところのこと?
    • 表現は変わっているかもしれないが、その文化は100%残っていて、それに立ち向かうのは気力を削がれる
  • 最近の自動車 UI、特に電気自動車の複雑で扱いにくい UIを見て同じようなことを考えたし、それが必要とする車を買えないほどになっている
    結論としては、洗練された消費者と憧れ志向の消費者はまったく異なり、憧れ志向の消費者のほうがずっと多いということ
    だから、洗練された消費者を犠牲にして憧れ志向の消費者に合わせるのは、経済的には合理的である
    憧れ志向の消費者は、欠陥や見せかけを消費上の達成の象徴のように受け止めるため、それを受け入れる
    乱暴に言えば、「ラグジュアリー」カーに乗るのが嬉しすぎて付いてきたガラクタが見えず、何十年もラグジュアリーカーを買ってきた立場としては、単にシフトレバーが分かりやすければいいと思っている

    • 以前の Tesla 車は操作系がもっと良かったが、ソフトウェアアップデートで悪くなった
      タッチ対象が理由もなく小さくなりすぎていて、開発者たちは固定された机上のディスプレイや動かない車の中で UI を作り、テストしていたように見える
      走行中の車内では、すべてが破綻する
      シフトレバー、方向指示器、ワイパー、ライトのレバーがない最新車はめちゃくちゃだ
      手を置く場所もない画面で、運転席に座ったまま小さな対象を突いて当てなければならず、間接的な操作・混乱・不正確さ・注意散漫によって、誰もが運転が下手になる
    • 正直、Tesla のユーザー体験と UIは好きだ
      施錠・解錠、窓を閉める、予熱・予冷、朝は会社へ夜は自宅へ自動でナビを設定する、どのスマートフォンキーを使ったかに応じて座席や設定を調整する、といった面倒なことを自動化してくれる
      無料の接続のおかげでナビゲーションもきちんと動くし、以前使った車載 GPS はどれも役に立たなかった
      音楽の選択と再生画面も良く、音声コマンドも音楽選択にはかなりうまく機能する
      完璧ではないが、これまで運転したどの内燃機関車よりも良いと思う
      朝、会社へ出発する流れは、ドアを開ける、走行モードに入れる、の2ステップで終わる
      冬場の内燃機関車では、キーを探す、車を開ける、ドアを開ける、妻が運転した後の座席を調整する、始動ボタン、フロントガラスの霜取り、リアウィンドウの熱線、フロントガラスの氷を削る、GPS で会社を選ぶ、パーキングブレーキ解除、クラッチ、ギアを入れるまで10ステップ以上あった
    • 自分の基準では、1974 Celica が自動車の頂点だ
    • Tesla を所有している立場から見ると、少し笑える
      実際に持っていない人たちがオンラインでタッチスクリーンを延々と嘆く一方で、Tesla オーナーはタッチスクリーンの有無にかかわらず他の車より優れているので、そのブランドに残り続ける
      Technology Connections が最近の動画で、ワイパーを替えるために不格好な90年代風のレバーを4秒間押さえていなければならず、それを知るために説明書を読まなければならなかったと言っていた
      バラバラに取り付けた部品で作られた車では、こうしたひどい動作はごく普通にある
      一方で自分の車は、リアルタイム監視映像の通知をスマートフォンに送り、通勤時の運転をしてくれ、シフト操作はたいていシートベルトを締めてブレーキを踏めば車が方向を自動で選ぶレベルだ
      重要な機能は50個のボタンではなく、ステアリングホイールから文脈に応じてアクセスできる
      シンプルでありながら強力で、問題は前述のラグジュアリーカーたちの実装がひどいことにある
  • Theo Browne という YouTuberをたまに見るが、主にフロントエンド開発者だ
    彼が解決策を説明するのを見ると、野球バットで頭を殴られたような気分になるし、デモに入っている要素の数は涙が出るほど多い
    1本の動画で言及される React 関連の難解な用語の数にも驚く
    特定の人を名指しで非難したいわけではないが、その複雑さが人気を保たせているのではないかと心配になる
    一方で Pieter Levels は Suspense、サーバーサイドレンダリング、Hydration といった話なしに、生の PHP をそのまま本番に投入する
    どちらも結局は同じ目標に到達するが、Pieter Levels のほうがずっと稼いでいそうだし、複雑さの差は大きい
    実際、Nomad List のようなものは、Theo で見るものより機能もはるかに豊富だと思う

    • Theo に一度会ったことがある。誰なのかは知らなかったが、数文も話さないうちに自分が人気ストリーマー/YouTuberだと必ず知らせてきた
      その後、別の人が彼に気づき、Theo がチャンネルで強い調子で語っていたテーマについて、親しげに大声で議論しているのを見た
      彼の性格は、不要な複雑さを通じてメディアでのエンゲージメントを最大化するのに完全に合っているように見えた
      複雑であるほど論点が増え、難解な選択肢に慣れていない人たちにはより賢く見えることもある
    • YouTube インフルエンサー式のソフトウェア開発は、現実のソフトウェア開発とは完全にかけ離れていると、ますます感じる
      おもちゃのような例に使われるライブラリやコードの量は、本番で見るものよりはるかに多く、私自身かなり怪物のようなシステムも見たことがある
      これがどれくらい続くのかは分からない
    • フレームワークや抽象化レイヤーを1つ加えるたびに、実際には複雑度が上がる傾向がある
      使わない雑多なものが大量に含まれ、肝心の使う部分を邪魔する
      問題が起きると、もはやプログラミング言語と自分のコードだけでなく、フレームワーク内で自分が通る経路のコードまで理解しなければならない
      その経路は簡単に10〜20個の関数の深さまで潜り、さまざまな境界ケースで何が起きるのかが十分具体的に文書化されていることは極めてまれだ
    • 偏った考えかもしれないが、これはフロントエンド/JavaScript エコシステムの姿だ
      比較的単純なものを作るために使うツールの量がすさまじく、DevOps でも似たようなことが起きている気がする
    • 長い間、同型 JavaScript が PHP に取って代わることを望んでいたが、残念ながらこうした複雑性グルたちが10年以上も酸素を吸い続けている
      この問題は企業の「フロントエンド開発者」たちが作ったもののように思える
      フルスタックやバックエンド開発者がやる「本物のエンジニアリング」への劣等感のようなものが、フロントエンドにも「本物のエンジニアリング」問題を作りたくさせたのだろう
  • 何十年もレガシーシステム開発をしてきて、時には自社の設計で、時には顧客との契約作業で、複雑でバグの多いソフトウェアを特定の顧客が好むのだと信じさせられる出来事をたくさん見てきた
    理由は、その陰に隠れられるからだ
    「ソフトウェアにバグがあって期限までに終わらなかった」「ソフトウェアが Y をサポートしていないので X ができなかった」「犬が宿題を食べた」といった具合だ
    多くの場合、単純で簡単でバグがはるかに少ない解決策を設計できたが、そうするとユーザーは、特定の失敗がソフトウェアの問題ではなく自分の無能さのせいかもしれないことを、もはや隠しにくくなる
    だから、特に上からの圧力が大きい会社では、管理職が完全には理解しておらず、バグや問題があると知られているソフトウェアで働くことを実際に好む

    • キャリアの大半と人生の大半を、かなり世間知らずに過ごしてきたように思う
      27歳で5年勤めた最初の職場を移るとき、超複雑な GUI プログラムを、2つの CLI プログラムを包んだ小さな GUIで置き換えた
      それは間違った入力が来ても毎回動作し、まれに失敗しても有益なエラーメッセージを返した
      それを使っていた3人の女性は、私のことを本当に嫌っていた
      会社を辞めてから1年ほどたってようやく理由を理解したが、そのころの私はあまり賢くなかった
      時がたつにつれ、人々は Microsoft Teams のようなものを求めているのだと思うようになった。必要なときにそれで自分の尻拭いができるからだ
  • 物理的な UI について、私たちのグループではこれを電子レンジ問題と呼んでいる
    電子レンジに付いている20個の追加ボタンは誰も使わず、たいていは1つか2つのボタンしか使わないが、ボタンの少ない電子レンジは誰も買わない

    • 私はその「誰も」ではないらしい
      10年来 Samsung ME82V が気に入っていて、ダイヤル2つで済む
    • その20個のボタンのどれも、ビープ音を消すことはできない
      だから午前2時にこっそり夜食を食べるには、1999年のように電子レンジを見張ることになる
    • 高級ブレンダーも同じだ
      欲しいのは速度ダイヤル、パルス動作スイッチ、電源スイッチだけで、みんなそれを望んでいるのに、なぜか世代が変わるたびに誰も使わない機能が大量に付く
    • 選択肢には価値がある
      必ずしもいつも同じ2つのボタンだけを使うわけではないので、ほかのボタンを使えるという選択権が好きだ
      それに、ボタンが多いと、より良い仕様が一緒に付いてくる場合もかなり多い
    • Apple はかつて、厳選された UIを持つ製品を売っていた
      操作も少なく機能も少ないが、ユーザー体験は素晴らしかった
      機能が過剰に多く複雑な競合製品と比べて、iPod のすっきりした感じが記憶に残っている
  • こういう嘆きは、ありきたりな格言だらけでうんざりする。
    Einstein や Dijkstra を引用すれば賢く見せるのは簡単だし、後知恵の利点と実際の要件への無知を抱えたまま、複雑な解法を一般化して指さし批判するのも簡単だ。
    「できる限りシンプルに、しかしシンプルにしすぎない」は常に正しい。
    汚い解法ならもっとシンプルにすべきだったし、原始的な解法が問題を起こしたなら、シンプルにしすぎるべきではなかったということになる。
    なぜただ完璧に作ろうと思わなかったのか、という話だ。
    現実には、解法に複数のトレードオフがあるとき、何がシンプルなのかに合意することさえ非常に難しい。
    複雑なデータベースを1つ維持するほうが、「シンプルな」データベースを3つ置いて管理作業を3倍にし、結局は同期や分散トランザクションを実装するより簡単な場合もある。
    今実装しやすいものが後で複雑な問題を生むこともあるし、問題を完全には解決しない既製の解法は、サポートされないケースのための複雑な回避策を生み、最後には適切なものへ移行する複雑さまで追加する。
    「とにかくシンプルにしろ」という助言は、そうした解法が万能薬ではなく、複雑さ対シンプルさの明確な選択肢がまれである現実を分かっていないことが多い。
    プロジェクトには、既存の汚いシステム、一貫しない法的要件、変化する事業要件のような制約があり、リリース速度や採用可能なスキルを優先することもある。
    経済性も容赦なく、年次報告書の出力がルーブ・ゴールドバーグ・マシンのようでも、年に1回しか使わず、作り直しても50年以内に費用を回収できないかもしれない。
    複雑性の議論は、プロジェクトと要件が成長するという事実をほとんど認めない。
    今は完全にシンプルなものが、後には無能や悪意ではなく、完全に合理的な形で複雑になり得る。
    最初はプレーンテキストファイルにデータを保存するのが美しくシンプルでも、後にはひどい NIH データベースになり得る。
    だからといって、3行のデータのために最初からデータベースを使うのも過剰設計だ。
    リファクタリングにはコストがあるので、常に理想的な解法を使うことも、それほどシンプルではない。

    • 私たち2人にはそうした格言が当たり前に見えるかもしれないが、そういう言葉を聞いた人たちが、長いあいだ本当にシンプルなものを理解しておらず、初めて気づいた表情をする場面に何度も立ち会ったことがある。
      実際に当たり前なことは、思っているよりずっと少ない。
      「できる限りシンプルに、しかしシンプルにしすぎない」が完璧を要求している、という解釈は論理的につながらない。
      実務では、反復は計画に勝ることを知っている。
      何がシンプルかで合意するのが難しいなら、許可を求めず、あとで許しを請えばいい。
      この業界、そしておそらく他の多くの業界でも通用する法則だ。
    • ある種の複雑性は問題そのものに内在しているが、大部分はデプロイの現実における非機能要件、設定の機能要件、そしてユーザーというカオスモンキーのせいで偶発的に入り込むように思える。
      夢想家やフロントエンド開発者に見られる、特定の偶発的複雑性のタイプは確かにある。
      複雑性は複雑だ。
    • 本当の要件はなぜ隠れているのか
  • より複雑なシステムには、チュートリアルや動画のような周辺資料を大量に生み出す二次効果もある。
    また、それを学んだ人たちは会社で必要な技術と責任を持つ存在になるので、ただうまく動いていてそういう人が不要なものよりも雇用の安定をもたらす。

    • https://en.wikipedia.org/wiki/Full-employment_theorem
      ソフトウェアがシンプルで、ただ動くように作られていたなら存在しなかった仕事が、IT にはあまりにも多い。
    • SQL Server DBA としては、何を言っているのかまったく理解できない。
      シンプルな場合には「ただ動く」が、内部を覗いたり、些細でないことをしようとしなければ問題ない。
    • ときどき AWS と Azure がこんな感じに思える。
    • その通り。複雑性はベンダーロックインを呼び寄せるキャットニップだ。
    • そう言うと Scientology みたいに聞こえる。
      比喩としてかなり合っているのかもしれない。
  • 論文査読の話なら、査読者として論文に求めるものはシンプルさでも複雑さでもなく、「新規性」でもない。
    私が求めるのは、問題に対する徹底的で思考を促す実証分析だ。
    投稿物の中には、1) 既存のアイデアを十数個つなぎ合わせたフランケンシュタインのようなシステムを提案し、各部分の失敗の様相を深く分析せず、手に入る最新のおもちゃをできるだけ動員して「太字の数字」を得ることに成功したもの、2) 既存手法を単に少し変えたら偶然性能が上がったが、なぜ役に立つのかについて適切な実証的・理論的正当化がないものが多い。
    2つ目のタイプは、コミュニティや読者にごくわずかな価値はあるかもしれないが、ほとんどは役に立たないと思う。
    読者にとって価値があるのは、博士課程の学生が問題を長く見つめた末に、自分の直感を定量的で検証可能な確認へと結びつけ、予測力のある再現可能な観察を得た場合だ。
    たとえば「この論文で説明した Z メカニズムを通じて X が Y に影響することを全ての場合で実験的に検証し、その結果 A 指標を B% 改善し、これは Z と一致する」といったものだ。
    複雑性とは関係なく、「X をやったら A が B% 上がった」というだけでは不十分だ。
    残念ながら、すべての査読者が同意するわけではない。

  • 高校の歴史教師が、第二次世界大戦につながった出来事についてエッセイを書く課題を出した。
    最初の質問は分量がどれくらい必要かで、教師は、この複雑なテーマをA4 1枚で扱えるなら満点を与えるが、そんな短い文章で扱えるかは本気で疑っている、と答えた。
    みんなその論理に衝撃を受けた。
    教師がそんなことを言うのを誰も聞いたことがなく、子どものころから、より多いことは常により良いと教わっていることを示している。

    • 良い逸話だが、境界条件がもう少し必要だ。
      説明はいつでも抽象化レベルを選ぶことで長くも短くもでき、人々は通常、文脈と社会的慣例に応じてそのレベルを選ぶ。
      たとえば「キー入力がどのように画面上の文字につながるのか」は一文でも説明できるし、ファームウェア、ソフトウェアスタック、電子工学、材料科学、製造プロセスまで踏み込めば、長い本を何冊も使って説明することもできる。
      第二次世界大戦も、Hitler が Poland と France に侵攻したことで始まったと言えるし、Versailles 条約までさかのぼることもできるし、地球上の生命の進化まで語ることもできる。
      最後は衒学的だが、技術的には第二次世界大戦につながった出来事であることは確かだ。
  • Rich Hickey の Simple Made Easy 講演を強くおすすめします
    複雑さはまったく売れませんが、簡単なものはよく売れます
    企業が「foo」を使える人材を多く採用でき、業界がずっと「foo」について語っているなら、foo が完全な混沌であってもそれを選ぶでしょう
    ラムダアーキテクチャ、大半の Apache プロジェクト、コンテナなどを見ればわかります