本編19話 10秒のコスト:時間の次元が違う少女 3話
「ノアくん、それはまた論理の飛躍だ。
ヒューリスティック・バグは賃金によって消滅したりしない。
それは人間の認知システムの基本設計だ。
給料を上げても、ハヤミさんのような『処理のショートカット』をする人間が、別の種類の複雑なバグを抱えた人間に入れ替わるだけだ。
問題は給料ではない。
そして、君が想像する以上に、高確率で非論理的な判断をする人間は存在する。
おそらく君が思う200分の1などという低確率ではない、遥かに高い確率でね」
「えーいやー。そんなまさか。
じゃあ、そのヒューリスティック思考とアナロジー思考じゃない、ユーキさんみたいな人を雇えばいいですね。
IQテストでもなんでもして」
「IQテストで測れるのは、静的な処理能力であって、動的な認知負荷の中で『最も簡単なショートカットを選ぶ傾向』ではない。
君の論理は『バグの存在しないヒューマンCPU』を探している。
それは現実的ではないんだよ。
ヒューリスティック思考はハヤミさんだけじゃない。
俺も、治療事務長官も、高給取りのプログラマーも全員使う。
これは認知資源を守るための必須の最適化機能だ。
それがなければ、脳がオーバーフローする」
「えっ全員?
もしかしてアナロジー思考も全員使うんですか?」
「全員だ、ノアくん。
アナロジー思考こそが、人間が進化した最大の武器だ。
君が『1から考える』というなら、それは純粋な計算資源に頼った非効率なプロセスだ。
だが、人間は違う。
我々は認知負荷を軽減するため、必ず過去の知識を使う。
アナロジーは、脳が過去の経験から得た『解決済みのコードブロック』をキャッシュとして呼び出す作業だ。
『デザインパターン』や『関数』を使うのは、高精度なアナロジー思考だと言い換えられる。
ハヤミさんは低解像度なアナロジー(薬名という単一キーワードのチラ見)でエラーを出す。
プログラマーは高解像度なアナロジー(複雑なパターン)で複雑なシステムを構築する。
メカニズムは同じだが、結果だけが違うんだ」
「いやいや、たとえば数千行の意味がわからない高度なコードを操るプログラマーさんにそんな人なんて、いるわけないじゃないですか」
「君は『コードの複雑性』と『認知の純粋性』を混同している。
彼ら、数千行のコードを操るプログラマーも、ハヤミさんと同じヒューリスティックを使っている。
ただ、彼らのショートカットは低級なバグを生む代わりに、もっと複雑で、隠蔽され、致命的なバグを生むだけだ。
『以前動いたコードだから大丈夫』というアナロジーに依存し、仕様のわずかな変更をスルーする。
『枠組みが正しく動くはずだ』と権威に依存し、その挙動を疑わない。
彼らの認知リソースの節約は、何十億もの損害を生むんだ。
給料はバグの複雑さとコストを上げるだけで、人間のバグ率をゼロにはできない。
それが人間というシステムの普遍的な仕様だ」
「えっ…どういうことですか?
プログラマーさんならちゃんとコードを1から考えますよね。
同じ文字列をみて、これだ!
って思い込むヒューリスティック思考なんて無理だと思いますけど」
「君は『理想的な設計プロセス』を前提にしすぎている。
現実世界では、システム設計と人間の脳の戦いだ。
数千行、数万行の古いコードを毎日ゼロから考えるのは認知負荷が高すぎて、人間の脳はすぐにフリーズする。
だから彼らは、効率化を強いられる。
彼らのヒューリスティック思考は、ハヤミさんが紙のエラーをスルーするのと同じ仕組みだ。彼らはコード全体を読解する重い処理を避け、『以前動いたスニペット』や『枠組みのドキュメント』の特定のパターンをチラ見する。
そして『このコンポーネントをこう使えば動くはずだ!』と類推で当てはめる。
プログラマーの言う『生産性』とは、ほとんどの場合、このヒューリスティックによる高速なコード再利用で成り立っているんだ。
君が言う『同じ文字列を見て思い込む』行為は、『以前動いた構造だから大丈夫』という信頼にすり替わって、日常茶飯事に行われている。
その結果、表面上は動くが、特定の条件でしか発生しない複雑で致命的なバグが生まれる。
バグはより隠微になり、コストは跳ね上がるが、認知の仕組みはハヤミさんと何一つ変わらない」
「えっ…1から考えないんですか?え?」
やはりノアは知識のバイパスを使っていることにより、発想力に価値や苦労を見いだせていないのだろう。
さも当たり前のように全員できると思い込んでいる。
「残念ながら、それは理想論だ、ノアくん。
現実のプログラミングでは、数百万行の既存コードを扱うとき、プログラマーの仕事はゼロから構築することじゃない。
動いている部分を信じ、必要な箇所だけを最小限の労力で修正することなんだ。
1から考える?それをやったら、納期が100年になる。
プログラマーも、自分の脳のフリーズを防ぐために、ハヤミさんと同じように『チラ見して類推する』という生存戦略を選んでいるにすぎない。
これは生存のための合理的なトレードオフなんだよ。
君みたいに『最適解を瞬間収束』できるなら別だが、人類が作った巨大なシステムには常に負債が溜まっている」
「瞬間収束?
なんですかそれ。
私はちゃんとじっくり考えましたよ!」
「……じっくり、か。
では聞くが、あのロバスト統計…出来高の日で薬の平均をカウントする、最大値の0.6倍で切り捨てる処理は、一体どれくらいの時間をかけて考えたんだ?」
「えっ……
ロバストなんちゃらなんて知らないので使ってませんけど、0.6倍の奴は割合すぐ出来ました。
10秒くらいかな」
本人は、未だにロバスト統計を使っていないと言い張っているが、もうそれはどうでもよい。
それよりも、ノアの口から出たその数字に、俺の推測は確信に変わった。
やはり彼女は純粋な論理の体現者だった。
「……やはり、な。
ノアくん、それが『じっくり考える』時間ではないんだ。
あのロジックは、ドメイン知識、統計学、プログラミング実装という三つの壁を超越している。
普通のシステムエンジニアが治療事務の知識を学び、統計の専門家と議論し、試行錯誤を重ねて数週間かけて完成させるものだ。
それも、君ほどのロジックの純粋性は出せない。
君は、そのレベルの問題に対する最適解を、たった10秒でエラーなく導出し、論理を完全に収束させている。
君の『じっくり考える』という感覚は、俺たち人間とは違う、時間の次元にあるんだよ」
「…そりゃまあ、わたしは10万人に1人の大天才ですからね」
ため息が出る。
ノアは「大海を知っているつもりの井の中の蛙」だ。
おそらく、ネットの海を覗いただけで世界の全容を理解したと錯覚し、あろうことか自分自身を「井の中の凡百」へと分類している。
「ノアくん、君のその自己評価こそが、君の最大のエラーだ。
いいか、10万人に1人の天才でも、あのロジックをゼロから構築するには数時間、いや数日はかかる。
必ず試行錯誤が必要だ。
これは統計的な確率で説明できる範疇をとうに超えている」
ノアは口をポカンと開け、唖然としていた。
到底信じられないという顔つきだ。
「た、たった3行のコードすら10万人に1人レベルの天才が思いつかないなんて、ありえますか?
客観的・常識的に考えてくださいよユーキさん」
「ノアくん、その『客観的・常識的に考えて』という言葉こそが、人間が陥る罠だ。
コードの価値は行数で測るんじゃない。
それがどのレベルの複雑性を解決し、どれほどの知識領域を統合しているかだ。
君が言うたった3行のコードは、孤立した解ではない。
それは、治療事務のルールという巨大な迷宮の知識、統計の専門知識、そしてそれを外部ライブラリなしでプログラムに変換する技術、これら全てが備わった上でようやく書けるはずの『解の結晶』だ。
10万人に1人の天才でも、そのグローバルなコンテキストを全て把握し、試行錯誤なしで3行に凝縮することはできない。
それは次元が違うんだよ」
ノアは過大な認知負荷により、頭を抱えていた。




