- 最近の研究によると、オープンソース開発者が自分のよく知るコードベースでAIツールを使うと、かえって作業時間が19%増加する
- 開発者はAIが自分をより速くすると信じているが、実際には遅くなるという認識と現実のギャップが存在する
- 中核的な原因は、開発者が持つ精緻なメンタルモデル(理解の構造)とAIのあいだにある知識伝達の限界にある
- Peter Naurの理論によれば、プログラミングで最も重要なのは開発者の頭の中にある「精神的モデル」である
- デンマークの計算機科学の先駆者であり、2005年のチューリング賞受賞者。プログラミング言語の構文を説明するために使われるBackus-Naur form (BNF) 記法に貢献した
- 長期的な観点では、プロジェクトを深く理解するために自分でコードを書きながらメンタルモデルを構築することが重要である
AIがオープンソース開発者を遅くする現象
- Metrの研究によると、AIツールの使用時には問題解決の速度がむしろ19%遅くなるという結果が出た
- 開発者は作業前にはAIが24%速くしてくれると期待し、作業後も実際より20%速かったと信じていた
- この研究は、自分が深く理解しているオープンソースプロジェクトを直接管理する熟練開発者を対象に行われた
- この結果をすべての開発者に一般化することはできないが、この集団ではAIツールが生産性に逆効果をもたらすことを示している
- 企業環境や、新しいコードベースに適応しなければならない一般的な開発者にとっては、AIツールが生産性向上により前向きな役割を果たす可能性がある
なぜAIは熟練したオープンソース開発者を遅くするのか
- Peter Naurの論文「Programming as Theory Building」によれば、**プログラミングの真の成果物はコードではなく、『プロジェクトに関する開発者のメンタルモデル』**である
- このメンタルモデルは、システムの理解、問題診断、効果的な改善の中核である
- LLMベースのAIは開発者のメンタルモデルに直接アクセスできず、一部の情報を与えても知識伝達の過程で本質的な損失が生じる
- 例として、誰かに赤ちゃんを寝かしつける役目を任せるとき、明確に説明しても実際には意図と違う行動を取ることが多い
- メンタルモデルの伝達はきわめて複雑であり、AIがテキストだけでこれを吸収するのはほぼ不可能である
- したがって、自分が深く理解しているプロジェクトでAIに作業を委任すると、かえって生産性が低下する
- 開発者の豊富な文脈情報と直感的な理解は、AIが容易に置き換えられるものではない
現場でAIツールを禁止すべきか?
- 必ずしもそうではない。これは「自分でよく知り、よく理解したプロジェクトで働く人」にだけ当てはまる
- 多くの企業開発者は、すでに去ったシニア開発者のコードを保守したり、システム全体の構造を深く理解しないまま作業したりすることが多い
- こうした環境では、AIがコードベースを素早く把握し、変更を自動生成することで、短期的な生産性向上に貢献しうる
- 短期的なビジネス価値の創出と即時の効率だけを見るなら、AIツールは生産性に前向きな役割を果たしうる
メンタルモデルの構築とAI
- もしプロジェクトに関するメンタルモデルがないなら、LLMが生産性向上を助けることはありうる
- しかし、ソフトウェア開発の本質が「メンタルモデルの構築」にあるなら、AIに過度に依存するとその能力が低下する可能性がある
- 長期的にプロジェクトを深く理解し、能動的に変化させたいなら、自分でコードを書く経験が必要である
- 逆に、「とにかく動けばよい」というタイプの作業なら、AI活用は効率的かもしれない
追加の議論と結論
- 現在の水準のAIツールでは、十分なメンタルモデルを持つ開発者の生産性を向上させるのは難しい
- AIがメンタルモデルを適切に支援したり、熟練開発者の生産性を革新的に高めたりする方向性には、なお研究と発展が必要である
- 今後モデルが進化すれば、人間の開発者があえてメンタルモデルを持たなくてもよい日が来るかもしれないが、現時点では直接的な理解と学習が不可欠である
- 最終的に、AIは『自分が何をしているのかを深く理解している環境』では妨げになり、『素早い成果物が重要な環境』では生産性ツールになりうる
5件のコメント
> 開発者たちはAIが自分をより速くしたと信じているが
AIを活用したリサーチが速くなることで、より高い品質を実現できるなら、同じ作業でも品質が少し高くなるのではないでしょうか。開発者は作業後の成果物の品質に合わせて開発しようとするなら、自力で到達するよりも、AIの助けを借りて到達するほうが速いと考えているのではないでしょうか。
そもそも使わなかった場合は、もう少し限られた知識だけで実装することになるから、そう見えるのではないかという気がします。
> 逆に、「とにかく動けばいい」という प्रकारの作業であれば、AIの活用が効率的な場合もある。
開発者に限った話ではありませんが、さまざまな志向を持つ人がいる中で、たまたま開発者をしていて、コードを書いたり読んだりすることを嫌ったり怖がったりし、体系的な構造や保守性の観点で解釈するよりも、とにかく動けばいいというマインドであるほど、AIへの依存や盲信が強いように感じます。違っていたらすみません
AIはオープンソース開発者を遅くする。Peter Naurがその理由を教えてくれる
経験豊富なオープンソース開発者の生産性に及ぼす「AIのインパクト」を測定する
Hacker Newsの意見
このブログ記事は、AIが開発速度を落としうる具体的な要因のひとつを興味深く扱っていると思います。
論文の開発者引用(C.1.5節)も参考にしてください。
多くの人は論文を読んで、自分に当てはまる要因をひとつ見つけると、「このひとつの問題だけが遅くなる理由だ」と結論しがちです。
ですが実際には要素は複数あります(少なくとも5つが有力で、最大9つまで排除できません。p.11の要因表を参照)。
ひとつだけが原因だと仮定するより、多面的に原因を分析するほうが妥当です。
自分でも実験してみる予定のある方は、ぜひ論文記載のメールアドレスに結果を共有していただければと思います。
そして記事タイトルが「AI slows down open source developers. Peter Naur can teach us why」となっていますが、より正確には「2025年初頭、AIは経験豊富なオープンソース開発者を遅くする。Peter Naurは特定の要因にさらなる文脈を与えてくれる」くらいが適切だと思います。
表現としては刺激が弱いかもしれませんが、正確さが重要だと考えています。
改めてすばらしい記事に感謝します。引き続きコメントも読んでいます。
以前の関連議論
論文全文
xkcd タイムマネジメント漫画
Joel on Software: Things you should never do, part I
AI生成コードの多くは、ただ作られて簡単なテストを通すだけで終わります。しかも、自分自身ですら全体の文脈や理由を十分に理解していないコードが増えていきます
(論文C.2.7「平均以下のAIツール活用」節でさらに詳しく扱われています)
参考: 昔のAIスパム問題
try:catch構文を広く使いすぎて、問題の発生源の追跡を難しくしてしまうと指摘しています。私は問題を素早く、そしてはっきり表面化させて(=fail fast)、すぐに直したいのです私も似たような考えを持っていましたが、どう表現すればいいのか曖昧でした。
メンタルモデル、いいネーミングですね。時々使ってみようと思います。