人工知能に知恵はなく、あなたにもない
日本語
コピー
この1か月で、こんな言葉を何度も耳にした:
- 2025年以降コードを書いていない;
- コードレビューは死んだ;
- もう誰もコードを読まない。
業界が変わりつつあるのは確かだ。だが、コードを読まなくなり、書かなくなった人や組織は、自らを危険に晒している。
実際、vibe coding で作られたプロジェクトは、時間とともに手に負えないスパゲッティへと腐っていく。理由は単純だが、解決は難しい。コードの保守性や良いアーキテクチャを測る指標が存在しないからだ。悪いアーキテクチャや保守できないコードの代償は、数か月、場合によっては数年経たなければ表面化しない。
悪いコードの定義ならできる。読みにくく、理解しにくく、将来のどんな変更にも耐えられないコードだ。1か所を変えると、まったく予測できない形でプログラムが壊れる。あるいは変更箇所から遠く離れた論理が壊れる。いわば「バタフライ効果」だ。機能を1つ足すだけで大工事になる。複数箇所を直す必要があり、必ずどこかを漏らして不整合が生まれる。設計上の不変条件が明確でなく、書いた本人はとうにいない。誰もそれを守らず、一貫性も保たれない。テストも難しい。モックが必要になり、実装の詳細が露出し、テストが脆くなって、結局は意味のあるリファクタリングを妨げる。
だが、確かなことが1つある。悪いコードを見抜くには時間がかかる。数か月、数年単位だ。もちろん、経験を積んだソフトウェアエンジニアは鼻が利く。コードの臭いを嗅ぎ分け、悪い結果が現れるずっと前に手を打つ。
熟練した開発者や専門家が頼りにしているのは、汗水と涙で培った直感だ。長時間残業してデバッグし、本番障害を直し、昔と同じ馬鹿な間違いは二度としないと誓う。その直感を死んだルールの集合として書き下すことはできない。すべては文脈次第だからだ。初心者の効率を上げるルールやレシピは、専門家には通用しない。専門家はルールに従わない。ルールを作る側だ。
そこで問題が出てくる……
第一に、AI の学習目標には「コードの保守性」など最初から入っていない。たとえば強化学習には即座に測定できる報酬信号が要る。数か月、数年後にしか分からないものでは話にならない。AI は初心者向けのルールブックからルールを学び、現実のコードからパターンを見つける。そして正直に言えば、現実のコードの大半はひどい。保守しやすいコードの適応度関数は定義できない。少なくとも我々には見つけられていない。見つかっていたら、とっくに linter に組み込まれている。
AI の「単純化」がどれほど下手か気づいたことはあるか?そう、あの SOTA モデルの話だ。関数をまともに定義できない。関数をより小さな関数に分割するだけで、その小関数はまったく再利用できない。大きな関数から小関数を切り出すのは、大きな関数を理解するのに切り出した小関数の実装まで読まなければならないなら、最悪の選択だ。再利用でき、コードをより明確にする関数を定義するのは芸術であり、力量が要る。ほとんどの開発者は Dreyfus モデルで言う 「上級初心者」の段階にとどまり、コードを明確にする良い再利用可能な関数を定義できない。AI にも今のところできない。
人間がまだ主導権を握り、こうした間違いから学べているなら、まだましだ。だが、様相は変わってきている。人はコードを書くためだけでなく、読むためにも AI に頼り始めた。
そういう人は永遠に熟達できない。選択をしなくなり、コーディングの間違いに責任を負わなくなり、間違いから学ばなくなるからだ。今や間違いを犯すのは AI であり、AI はその間違いから学ばない。AI に頼ってコードを書く人間も学ばない。
ああ。
誤解しないでほしい。LLM は良いツールだと思っている。ラッダイトではない。日常業務で AI はすでに使っているし、学んだことを同僚にも教えている。退屈で魂を削るような雑務は喜んで LLM に任せる。効率の向上も実感している。だが結局のところ、それはただのツールだ。他のあらゆる革命と同じく、その輝きはいずれ薄れる。私の目には、すでに始まっているように映る。最近のテックニュースは本当に退屈だ。
人間は予測がひどく苦手だ。未来は我々全員を驚かせるだろう。それでも、1つだけ予測をしておく……
今後、「NO-AI」ポリシーを競争優位として誇らしげに掲げる企業が増える。そして彼らは正しい。
「自動化できるパイプラインのほうが常に効率的だろう」と人は言う。だがソフトウェア業界は例外だ。我々は大規模な自動化をずっとやってきた。やることのすべてが自動化であり、LLM はそれを実現する唯一の手段ではない。状況次第では、むしろ邪魔になることさえある。「プログラミングの問題は解決していない」。意味のある意味では、何も解決していない。LLM に C/C++ コンパイラを作らせることもできるし、GCC や LLVM を clone すれば、より優れた C/C++ コンパイラが無料で手に入る。同じ CRUD アプリを再発明するより、時間とリソースの使い道は他にあるだろう(人間の欲求は尽きず、新しい目標には事欠かない)。
人や企業が責任ある使い方を始めなければ、いずれ代償を払うことになる。