AIに知恵はなく、あなたにもない
AI Has No Wisdom and Neither Will You (alexn.org)
要約
AI、特にLLMは、コードの保守性やアーキテクチャの質といった、即座に測定できない長期的な価値を理解できません。これらの品質は熟練したエンジニアの直感に依存するため、AIはそれらを学習できません。AIへの過度な依存は、開発者が間違いから学ぶ機会を奪い、熟達への道を閉ざすため、注意が必要です。
全文翻訳
AIに知恵はなく、あなたにもない
過去1ヶ月だけでも、私は次のような言葉を聞きました。
- 「2025年以降、コードを書いていない」
- 「コードレビューは死んだ」
- 「人々はもうコードを読まない」
確かに業界は変革していますが、コードを読んだり書いたりすることをやめるという罠に陥る人々や組織は、自らの危険を冒しているだけです。
事実は、感覚だけで進められるプロジェクトは、時間の経過とともに維持不可能な混乱へと陥ります。その理由は単純ですが、修正が難しいのです。コードの保守性や優れたアーキテクチャには、適用できる良い測定基準がありません。なぜなら、悪いアーキテクチャや維持不可能なコードの影響に気づくまでには、数ヶ月、あるいは数年かかるからです。
悪いコードを定義することは確かにできます。読みにくく、理解しにくく、将来何が起こるにしても進化させにくいコードです。何か一つを変更すると、予期せぬ形でプログラムが壊れたり、変更箇所から遠く離れた別の場所でロジックが壊れたりするような、「バタフライ効果」に似たコードです。機能を追加するために、複数の箇所でコードを変更し、それでもすべてを修正しきれずに不整合が生じるようなコードです。設計上の不変条件が不明確で、その作者がもはや存在せず、違反を防いだり一貫性を確保したりできないコードです。モックが必要で実装の詳細を露呈するため、テストが難しく、結果として意味のあるリファクタリングを妨げる脆弱なテストにつながるコードです。
しかし、私たちは悪いコードに気づくのに時間がかかるという事実を知っています。数ヶ月、数年です。もちろん、経験豊富なソフトウェアエンジニアは、コードの臭いを嗅ぎ分け、悪い影響が観察されるずっと前に対応できる鼻を持っています。
熟練した開発者、エキスパートは、汗と涙で築き上げた直感に頼っています。長時間かけてデバッグや本番環境の問題修正に費やし、過去の過ちを繰り返さないと誓います。これは、すべてが文脈に依存するため、厳格なルールのリストにすることはできない種類の直感です。エキスパートは、初心者の生産性を向上させるのと同じルールやレシピには適合しません。エキスパートはルールに従わず、ルールを作ります。
そして、ここに問題があります…
まず、AIはコードが保守的であることの意味についてトレーニングされていません。例えば、強化学習には、数ヶ月や数年後ではなく、即座に測定可能な報酬信号が必要です。AIは初心者向けのルールブックからルールを学びます。AIは、世の中のコードからパターンを認識しますが、正直に言って、世の中のコードのほとんどはかなり悪いものです。保守的なコードのためのフィットネス関数は存在しません。少なくとも、私たちが識別できるようなものは。そうでなければ、リンターに組み込まれているはずです。
AIがコードを「単純化」するのがどれほどひどいか気づきましたか?はい、SOTAモデルです。関数を適切に定義することすらできず、実際には再利用できない小さな関数に分割することさえあります。大きな関数から小さな関数を抽出するのは、大きな関数を理解するために抽出された小さな関数の実装も読まなければならない場合、非常に悪い選択です。再利用可能で明確な関数を定義することは芸術形式であり、習得に時間がかかる芸術です。ほとんどの開発者は、Dreyfusモデルにおける「高度な初心者」のままであり、優れた、明確な、再利用可能な関数を定義できず、現在のAIも同様です。
人々がまだコントロール下にあり、それらの間違いから学んでいるのであれば、これはそれほど悪くはありません。しかし、私たちは人々がコードを書くため、あるいは読むためにさえAIに依存する傾向を見ています。
その人々は決して熟練に達することはありません。なぜなら、彼らはもはや選択をせず、コーディングにおける間違いに対する責任を取らず、それらの間違いから学ぶこともないからです。今間違いを犯しているのはAIであり、AIはその間違いから学びません。そして、コーディングのためにAIに依存している人々も同様です。
ヤバい!
誤解しないでください。LLMは素晴らしいツールだと思います。私はラッダイトではありません。私はAIを日常業務に統合し、同僚に学んだことを教えています。私たちが対処しなければならない、退屈で魂を吸い取るような仕事のすべてをAIに任せることを喜んで行っています。私はまた、私が目にしている効率性の恩恵も楽しんでいます。しかし、結局のところ、それは単なるツールであり、他のすべての革命と同様に、その光もいつかは消えるでしょう。私の意見では、すでに消えつつあります。なぜなら、現在のテクノロジーニュースは率直に言ってかなり退屈だからです。
人々は予測をするのが非常に下手です。未来は私たち全員を驚かせると信じています。しかし、私は自分自身の予測をしようと思います…
将来、ますます多くの企業が「AI不使用」ポリシーを競争上の優位性として誇らしげに宣伝するようになるでしょう。そして、彼らは正しいでしょう。
「しかし、自動化された組立ラインは常に効率的です」と人々は言いますが、ソフトウェア業界は特別です。なぜなら、私たちは常に大規模な自動化を行ってきており、私たちがやることすべてが自動化だからです。LLMだけがその手段ではありません。文脈によっては、実際には気を散らすものになる可能性があります。「コーディングは解決されていない」という意味では、決して。確かに、LLMにC/C++コンパイラを構築するように指示することはできます。あるいは、GCCやLLVMをクローンするだけで、無料でもっと良いC/C++コンパイラを手に入れることができます。そして、同じCRUDアプリを再発明するよりも、私たちの時間とリソースを費やすより良い方法があるかもしれません(人間のニーズと欲求は無限であり、取り組むべき新しい目標に不足はありません)。
人々や企業がその使用について責任を持たなくなれば、結果が伴うでしょう。