第3章. 70%問題:実際に機能するAI支援ワークフロー
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
AIベースのコーディングツールは、特定のタスクにおいて驚くほど優れている。1ボイラープレートの作成、定型関数の作成、プロジェクトの大部分を完了させることなどが得意である( )。実際、多くの開発者は、AIアシスタントが要件のおよそ70%をカバーする初期解決策を実装できると発見している。
ピーター・ヤンは 、Xへの投稿で私が現場で観察してきたことを完璧に捉えている:
非エンジニアとしてAIを使ってコーディングしてきた率直な感想だ:
AIは70%の道のりを歩ませてくれるが、最後の30%はイライラさせられる。新しいバグや問題などで、一歩進んで二歩下がるということを繰り返している。
もしコードの仕組みがわかっていれば、自分で直せるかもしれない。しかし、そうでない以上、本当に多くのことを学んでいるのか疑問だ。
AIをコーディングに使う非エンジニアは、自分たちがフラストレーションの壁にぶつかっていることに気づく。AIをコーディングに使用する非エンジニアは、自分たちが苛立たしい壁にぶつかっていることに気づくのだ。彼らは驚くほど早く70%を達成できるが、最後の30%は収穫逓増の練習になってしまう。
この "70%問題 "は、AIによる開発の現状について重要なことを明らかにしている。初期化には魔法のような手応えがある。欲しいものを説明すれば、v0やボルトのようなAIツールが印象的なプロトタイピングを生成してくれる。しかしその後、現実がセットされる。
その70%は、しばしば単純でパターン化された部分、つまりよく知られたパスや共通のフレームワークに従ったコードのようなものだ。あるHacker Newsのコメントで述べられているように、AIはソフトウェアの「偶然の複雑さ」(パターンと繰り返しの機械的なもの)を扱うことに長けているが、「本質的な複雑さ」(問題の本質的な複雑さを理解し管理すること)は人間の肩にかかっている。フレッド・ブルックスの古典的な言葉を借りれば、AIは偶発的なものには取り組むが、開発における本質的な困難には取り組まないということだ。
これらのツールはどこで苦労しているのだろうか?経験豊富なエンジニアは、一貫して「ラストワンマイル」のギャップを報告している。AIはもっともらしい解決策を生み出すことはできるが、最後の30%、つまりエッジケースをカバーし、アーキテクチャを洗練させ、保守性を確保するためには、「人間の専門知識が必要」なのだ。
例えば、AIは基本的なシナリオに対して技術的に機能する機能を与えるかもしれないが、明示的に指示しない限り、通常とは異なる入力、競合条件、性能制約、将来の要件などを自動的に考慮することはない。AIは大体のことはやってくれるが、最後の重要な30%(エッジケース、保守性の維持、強固なアーキテクチャ)には、人間の専門知識が必要だ。
さらに、AI()には、説得力はあるが正しくない出力を生成する傾向があることが知られている。微妙なバグを導入したり、存在しない関数やライブラリを「ハルシネーション」することもある。スティーブ・イェッゲは、今日のLLMを「乱暴で生産的なジュニア開発者」-信じられないほど速く熱心だが、「精神に作用する薬物でラリっている可能性がある」-になぞらえている。
イェッゲの言葉を借りれば、LLMは一見すると洗練されたコードを吐き出すことができるが、経験の浅い開発者が「私には良さそうだ!」と素朴に言ってそれを実行すると、その後数週間は笑い(あるいは大惨事)が続く。AIは問題を真に ...