世界を動かす技術を、日本語で。

AIはオープンソース開発者の作業を遅らせる。ピーター・ノールがその理由を教えてくれる

概要

  • AIツール は熟練オープンソース開発者の 生産性を低下 させる傾向
  • Peter Naur の理論がその理由を説明
  • 開発者はAIで 速くなると錯覚 しやすい
  • メンタルモデル の重要性とAIの限界
  • 一般的な企業開発者には 異なる効果 の可能性

AIツールは熟練オープンソース開発者を遅くする理由

  • Metr社 の研究によると、オープンソース開発者が 自分の得意なコードベース でAIツールを使うと、AIなしよりも 19%遅く 課題を完了
  • 開発者自身は AIで24%速くなる と予測し、実際に遅くなっても 20%速くなった と錯覚
  • この 認知と現実のギャップ が顕著
  • 対象は 熟練のオープンソース開発者、他の開発者全体には一般化できない点に注意
    • 例:企業の保守的なプロジェクトでは AIで生産性向上 の可能性

Peter Naurの「プログラミング=理論構築」論

  • Peter Naurの論文「 Programming as Theory Building」の要点
    • プログラミングとは プログラム全体の洞察(理論) を構築する活動
    • 本当の成果物は 開発者の頭の中のメンタルモデル
    • このモデルがあるからこそ、 ソフトウェアの理解・保守・拡張 が可能
  • Metr社の被験者 は自分のプロジェクトの 深いメンタルモデル を持つ
  • AI(LLM) はこのメンタルモデルに アクセスできない
    • 開発者がAIに情報を渡す過程は 遅く、情報損失も大きい
    • 結果として 独自の強みが損なわれる

メンタルモデルの移転困難性

  • 他者にタスクを委任する時の 伝達の難しさ に類似
    • 例:「赤ちゃんを寝かせる」指示でも意図通りに伝わらない
  • メンタルモデル は非常にリッチで 完全な伝達は不可能
  • テキストのみでAIに伝える 場合、AIは
    • 質問や確認 をしない
    • 重要度の判断 ができない
    • 学習能力が限定的
  • このため、 AIツールは熟練開発者の生産性を低下 させる

一般的な企業開発者へのAIの効果

  • 「自分のプロジェクトを深く理解している」開発者には AIは逆効果
  • しかし、企業では
    • 古いコードベース他人が作ったシステム を扱うことが多い
    • 理解よりも納期重視 の環境も多い
  • こうした場合、 AIはコードベースの理解を早めたり、動く変更を素早く生成 できるメリット
  • 短期的なビジネス価値の創出」を生産性と定義するなら、 AIで生産性向上 もあり得る

メンタルモデル構築とAIの限界

  • メンタルモデルがない状態 でAIに頼れば 一時的な生産性向上 は可能
  • しかし、 本質的な目的はメンタルモデルの構築
  • AIに作業をアウトソースすると モデル構築が困難
  • 長期的にプロジェクトに関わり、 深い理解と自立的な改修能力 を得たいなら 自分でコードを書くべき
  • 逆に「 使い捨ての開発現場」ではAI活用も選択肢

AIツールの今後と注意点

  • 現在のAIツールは 熟練開発者のメンタルモデル支援 には不十分
  • 将来的に より高度なAI が登場すれば、状況は変わる可能性
  • 今は「 Claude Code」などを 適切に活用 しつつ、自分の目的に応じて使い分けが必要

参考

  • Metr社の研究論文(要約だけでも読む価値あり)
  • Peter Naur「Programming as Theory Building」
  • Claude Code推奨、Cursorは非推奨

Hackerたちの意見

彼らは経験豊富なオープンソース開発者で、自分たちのプロジェクトに取り組んでいます。 私は、他の誰かが書いた3ヶ月前のコードベースに取り組み始めたばかりで、使ったことのないフレームワークとアーキテクチャでした。 数時間後、Claude Codeの助けを借りて、ステージングからローカル開発にデータを複製するための素晴らしいシステムを作成しました。 これは他のプロジェクトで以前に作ったことがあり、手動でやると1日か2日はかかるだろうなと思っていました。 特にそのアーキテクチャに経験がなかったので、開発がさらに加速しました。 今はローカルでテストするためのデータが良くなったからです。 それから数時間後、私はすでに最初のPRをプッシュしました。 すべてのコードは、既存のプロジェクトとフレームワークの適切なコーディングスタイルとプラクティスに従っています。 そのPRは、手動で書いてテストするのに少なくとも数日、場合によっては2週間かかっていたでしょう。 だから、AIがすべての人やすべてのことを加速するわけではないけれど、少なくともこのケースでは大きな助けになりました。 これから進めていく中で、プロジェクトの複雑さが増すにつれて、少しスピードが落ちると思います。 でも、素晴らしいスタートを切るチャンスをもらったのも事実です。

記事のポイントを見逃してるよ。それは実際に君のエピソードと一致してる。

開発者がシステムを理解することにあまり価値を置かず、主に動作する変更を迅速に提供することに多くの価値を置く環境で働くのは同じくらい一般的です。 この文脈では、AIツールがより有利だと思う。 彼らは、人間よりも早く不慣れなコードベースを取り込むことができ、基本的に動作する変更を生成することが多いから。

私もAIとオープンソースで似たような経験をした。 AIのおかげで、あまりよく知らない言語やスタックで機能を実装できた。 その機能が欲しかったのに、他の誰も実装しようとしなかったから。 自分でスタックを直接勉強しようとしたけど、全体像が複雑で、初心者にはドキュメントが不足していると感じた。 Warpターミナル(Claudeを使っている)を使うことで、その壁を乗り越えて、以前は全く得られなかった結果を得ることができた。

俺も似たような経験があるけど、これは研究が言ってるような仕事じゃないよ。「オープンソースの開発者が、自分がよく知っているコードベースでAIツールを使ってタスクを完了しようとすると、タスクを完了するのに時間がかかる」っていうのは、俺も実際にそうだと思う。LLMは新しいコードベースに慣れるのを大幅に早めてくれるけど、プロジェクトに慣れた後は逆に迷わせることが多い。

逸話とデータが一致しないときは、だいたいデータが間違ってることが多い。必ずそうとは限らないけど、AIが実際に人々の生産性を下げているという研究や議論を読むたびに、ほとんどのプログラマーが、俺も含めて、これらのツールに価値を見出している理由が気になる。高水準のプログラミング言語でも同じことがあったんじゃないかと思う。人々は「自分でガーベジコレクタを管理しない方が生産性が上がると思うかもしれないけど、実際は…」って言ってたし。たとえ私たちがもっと「生産的」じゃなくても、何百万もの人がこれらのツールを使いたがっているんだから、何か意味があるはずだよね。そんなことを教えてくれる「研究」は必要ないよ。

明らかにその研究を読んでないね。問題は、開発者たちが自分たちは20%速くなったと思ってたけど、実際は遅くなってたこと。とりあえず、あなたのプロフィールをざっと見た感じ、バイブコーディングに関して利害の対立があるから、あなたの意見はちょっと疑ってかかるよ。

まあ、今のところそれが得意なことだね。ボイラープレートのスターターテンプレート、ランディングページ、使い捨てアプリとか。でも、データパイプラインやセキュリティみたいに精度が必要なプロジェクトでは、生成されたコードには微妙な欠陥がたくさんあって、すべての行を掘り下げないと大きな頭痛の原因になるよ。

TFAは、彼らが取り組んでいるプロジェクトやコードベースに非常に精通している人々についてのものだったんだ。君のエピソードは、まさにその状況とは逆のことを言ってるし、君が説明しているようなプロセスも認めているよ。

あのPR、俺だったら完全に手動で書いてテストするのに、少なくとも数日から2週間はかかるな。ソフトウェア開発の見積もりの正確さってどうなの?いつも「俺だったらこうなった」とかいう生産性の主張を見かけるけど、見積もりが得意かどうかは全然考慮されてないよね。俺は見積もりが苦手だし。PRの質が本来のものと同じかどうかも考えられてないし。手順やシステムの理解をスキップして、早く進めることができるけど、その分バグが出る確率も高くなるんじゃない?AIなしでも同じスピードアップはできるよ。

LLMがそう言ってるからって、どうしてそのコードやコーディングスタイル、プラクティスに自信を持てるの?コードベースを理解してないのに、ハルシネーション(幻覚)じゃないってどうやって確認するの?

いい記事だね。 この生産性の研究や「プログラミングは理論構築だ」という論文について、私も似たようなことを考えてた。 プログラムのオリジナル著者で、そのプログラムのコンテキストが頭に残っているなら、どんなAIシステムも近づくけど超えられないアシンペトートになるんじゃないかって思い始めてる。 生のコーディングスピードではなく、プログラムの理解、開発のビジョン、欠陥やハック、コンテキスト、ユーザーのニーズ、プログラムが存在する文化などに関してね。 著者が言ったように、日常の仕事の大半では理論が構築されていないし、その一部が変わるかどうかは分からないっていうのも面白い。

誰かがXで言ってたけど、これらのエージェントAIツール(Claude Code、Amp、Gemini Cli)は、プログラミングにおけるテーブルソーのようなものだって。 人間がノコギリでやるよりも速くて良いものを作れるけど、正しく使い方を学ばないと(指を失うことになるかも)。 個人的には、エージェントAIツールのおかげでプロジェクトに対する野心が高まった。 以前は考えもしなかったことに挑戦できるようになったし、嫌な仕事は彼らに任せてる。 彼らは私よりも早くて上手にやってくれるからね。 だから、私の頭はアーキテクチャやコードの技術的負債などの本当の問題に集中できる。 ただ、AIエージェントにすべてを任せて、自分のコードを理解せずに結果だけをコミットする誘惑があるのが問題。 (そう、AIが生成したけど、コミットにサインしたら君がそのコードの責任を持つことになるからね)。 だから、どんなツールでも、使い方を理解する時間を取って、自分に合うかどうかを見てみてね。

「使い方が間違ってる!」って言うのは、2023年以前のオープンソース開発者全員に対する侮辱だよ。 彼らが「AI」の強盗バロンたちが使う全スタックを生み出したんだから。 「AI」を使って実際に価値のあるソフトウェアが生産されたことがないのに、さらに侮辱的だ。

プログラミングは、テーブルソーが手作りの木工に対して持つ意味と同じだ これは全くおかしな比較だね。テーブルソーは精密な道具だけど、エージェントAIは全然違うと思う。

こんにちは、HNの研究著者です! (論文についての前のスレッドはここにあります [1])。 このブログ記事は、スローダウンに寄与している特定の要因についての興味深い見解だと思います。 このことについては、論文の「暗黙のリポジトリコンテキスト(C.1.5)」のセクションで議論しています。 興味があれば、開発者の引用を見てみてください。

これが、現在のAIコーディングツールが、何をしているかを理解しているプロジェクトに取り組んでいる場合、一般的に誰かを遅くする理由です。 この点については、他のスレッドでも議論しましたが、一般的にこれらの結果が驚くべきものであるため、論文を読みやすくし、一つの要因に共鳴して「これがスローダウンを説明しているんだ」と結論づけるのは簡単です。 私の予想では、単一の要因はないと思います。 この結果に寄与する要因がいくつかあると思います。少なくとも5つはありそうで、9つは排除できないと思います(11ページの完全な要因表を見てください)。 もし誰も興味がなければ、自分で実験してみようかな。 これはすごく面白そう! どうやって設定するのか、結果がどうなるのか楽しみにしてます…やったらぜひメールをください(論文に書いてあります)! AIはオープンソース開発者を遅くします。 ピーター・ノーアはその理由を教えてくれます。 注:論文を要約する短いタイトルを書くのがどれだけ難しいか、よく分かります(グラフのタイトルが私が頑張った結果の中で一番良かったものです)。 でも、「2025年初頭、AIは経験豊富なオープンソース開発者を遅くします。ピーター・ノーアが特定の要因についてもっと詳しく教えてくれます。」と書いたかもしれません。 キャッチーなタイトルではないけれど、資格を正しく伝えることが本当に重要だと思います! 改めて素晴らしい記事をありがとう! 今日はコメント欄にもいますね。

2025年初頭、AIが経験豊富なオープンソース開発者の作業を遅くする。これも一般的すぎるけど、タスクによるよね。オープンソース開発者がAIで時間を節約できるタスクに全く取り組まないわけじゃないし。

これが意味を持つなら、研究はどうやって問題やタスクがどれくらいの時間で終わるべきだったか、AIを使った場合にどれくらい時間がかかったかを合理的に測定できるの?それとも、開発者がAIを使った場合の所要時間と、実際にかかった時間を比較しているの?それには開発者のAIが生産性に与える影響の推測も含まれているよね?問題を完了するのがどれくらい難しいかを見積もるのが難しいとき、研究はこれをどう考慮しているの?推定が難しいために、どのくらいのパーセンテージのスピードアップやスローダウンがノイズになるの?このあたりの測定は本当に難しいことは理解しているよ。

この研究では、50時間以上のCursor経験を持つ開発者は1人だけで、その間にCursorを使っていました。 その1人の開発者は25%のスピード向上を見ました。 他の人は皆、ほとんどCursorの経験がない完全な初心者でした。 不慣れなツールを使うことでソフトウェアエンジニアが遅くなるのは驚くことではないと思います。 この研究は、AIと開発スピードの関係について何らかの結論を導くためには使えないと思います。

それ、まさに俺も同じ意見だわ。エンジニアが経験のないツールを使うと、どうしても作業が遅くなるよね。AIも同じだよ。

ここで詳しく掘り下げてくれてありがとう!他のスレッドから関連するコメントをコピーしておくね(https://news.ycombinator.com/item?id=44523638)。これがこの点に役立つかも。

  1. 以前の研究では、スピードアップを見つけたのは、使っているツールに対して同じくらい(またはそれ以下の)経験を持つ開発者たちだった。つまり、「急な学習曲線」理論は、私たちの結果と他の結果を区別するものではない。
  2. 研究の前に、90%以上の開発者がLLMを使うための十分な経験を持っていた。スローダウンが見つかる前は、外部のレビュアーたちが経験について心配していたのは、プロンプトのことだけだった。プロンプトが主なスキルだと考えられていたからね。一般的には、標準的な知恵として、CursorはVSCodeに慣れている人にはすごく簡単だと言われていた。
  3. もしこれらの開発者がAIの経験をたくさん持っていたら、AIを使わないときにプログラミングが下手になるかもしれない(少なくとも俺には共感できる)。それが、私たちが見つけたスピードアップを引き上げることになるかも(AIが良いからじゃなくて、AIを使うときがひどくなるから)。つまり、私たちはちょっと板挟み状態なんだよね。正しい基準を見つけるのが本当に難しい!
  4. 開発者の過去の経験についての情報を専門家の予測者と共有したんだけど、これでも予測者たちはスピードアップについて過剰に楽観的だった。
  5. あなたが言うように、これらのツールを使うためのスキルには長い尾がある可能性があるよね。何百時間も使った後にしか気づかないこともあるし。私たちの研究はこの点にはあまり触れていないけど、今後の文献がもっと探求してくれると嬉しいな。一般的に、これらの結果が驚くべきものであることは、論文を読みやすくして、一つの要因を見つけて「これがスローダウンを説明しているんじゃないか」と結論づけるのを簡単にする。私の予想では、要因は一つじゃなくて、いくつかの要因がこの結果に寄与していると思う。少なくとも5つはありそうで、9つは排除できない(11ページの要因表を見てみて)。 重要なポイントとして、AIを使った後の開発者の自己報告がスピードアップ/スローダウンの観点で過剰に楽観的であることは、どのツールを使っているかには関係ないってことも挙げておくよ。生産性の向上を正確に判断するためには、しっかりした現場での測定が必要だってのが、私にとっての重要な教訓だね!(論文のC.2.7セクション「AIツールの平均以下の使用」にもっと詳しい情報があるから、そっちも見てみて。)

Burn(Rustの深層学習フレームワーク)の定期的なコードレビュアーの一人だよ。最近、提出者のバグ修正が完全にAIエージェントによって書かれたことが明らかだったので、PRをクローズしなきゃならなかった。「修正」は、根本的な原因に対処するのではなく、単にエラーをミュートするだけだった。これは、AIが実際の問題を特定できないときにやりがちなことだよね。コードは不必要に冗長で、エラーをミュートするためのテストまで含まれていた。その人のプロフィールから察するに、彼らの動機は単にコミットを記録に残したかっただけだと思う。これはAIツールに関する厄介なトレンドになってきてるね。

Rustの深層学習フレームワーク [...] これはAIツールに関する厄介なトレンドになってきてるね。蛇が自分の尾を食べている。

これは本当に深刻な問題で、これからもっと悪化する一方だと思う。主要なモデル提供者がほとんどすべてのデータを自分たちで保持している現状は、正直言って長期的には好きじゃない。

余談だけど、俺はAIの仕事をしてるけど、主にPythonと理論的な仕事が多い。Burnにどうやって飛び込むのがベストかな?Rustにはずっと興味があるんだ。

これがLLMの好きなところ。答えがわからないときに「それは違うよ」って言うと、「その通りだね。じゃあ直すよ」って返してくる。経験の浅い人や、もう気にしなくなった人が作るコードがどれだけ多いか考えると怖い。脆弱性が出始めたら、すごいことになるだろうね。

これがLLMがやる最もイライラすること。コードの周りに広いtry:catch構造を作って、問題の原因を追跡するのが不可能になる。開発中はコードがすぐに、しかもしっかり失敗してほしい。そうすれば、すぐに問題を解決できるから。

彼らの動機は、ただ記録にコミットを残すことだったんじゃないかな。これはAIツールに関して問題になってきてるトレンドだね。しばらく前から、AIはスパムをより効果的にしてるんだ。

PRを拒否すべきなのは、修正が不十分だからであって、AIが書いたからじゃないよ。悪いコードは、出所に関係なく悪いコードなんだから。コードがどう生成されたかにこだわるのは、生産的じゃないと思う。

最近、同僚のMRをレビューしたんだけど、テストが明らかにAIによって書かれてたんだ。どうやってプロンプトを出したのか分からないけど、「thing1」とか「thing2」とか、かなりひどい変数名がテストケースに使われてた。基本的に、結果セットに表現する必要があるデータの複数の組み合わせだったんだよね。だから、特別なものに基づいて、名前を明確にしてほしいってお願いしたんだ。そしたら、彼はそのフィードバックを受けてAIに変更を頼んだみたいで、すごく長くてユニークな名前をつけてきたんだけど、結局それがノイズになっちゃった。あの開発者にとってPRを書くのはすごく早かっただろうし、自分で書くよりX倍早いって感じたと思う。でも、これはツールにとっても良い結果じゃないよね。もし彼が俺と同じくらいレビューしてたら、得た時間の多くは消えてたと思う。

一般的にデバッグって、例えば、知らないコードベースでの厄介なレースコンディションを解決するには、ログを追加したり、ライブラリの呼び出しをリファクタリングしたり、既存のログを調べたり、プログラムの一部をもっとモジュール化したり理解しやすく書き直したりする必要がある。これは理論構築の一部なんだ。AIが「ここにレースコンディションがあって、これを直すためのコード変更がある」って言ってくれるのは、短期的には「速い」かもしれないけど、プログラムを理解する助けにはならないし、他の人が理解しやすくすることにもつながらない。さらに、このプロセスが持続可能かどうかも疑問だよね。AIが編集したプログラムが「普通」からどれだけ外れてしまうと、AIが正しい反応をモデル化できなくなるのか。

「AIが知らないコードベースで知らない言語で機能を作ってくれた」って聞くたびにいつも思うこと。素晴らしいけど、何を学んだの?小さな貢献にはいいかもしれないけど、長期的なメンテナンスの話はあまり聞かない。少数派の意見だけど、わかってる。

気づいたこと: AI開発は常に私の流れを壊す。疲れやすくなって、コーディングの時間も短くなる。1日中コーディングできるなんて神話だよ。私は通常、1〜3時間のインターバルでコーディングして、その合間に休憩を入れる。仕事関連でも、他のプロジェクトメンバーのコードや変更を1時間読んでいるだけで先延ばしになっちゃうこともある。ある程度のメリットはあるけど、その間に仕事が進まない。エージェンティックAIが私には一番合ってる。選んだコードスニペットの小さなリファクタリングタスクは役立つけど、大きな時間節約にはならない。最悪なのはAIのコード補完(最初のバージョンのCopilotスタイル)。助けよりもノイズが多すぎる。

この研究の要約として言えるのは、「AIは実際以上の生産性向上の印象を作り出す」ということだと思う。研究の中でも、生産性が少し向上した参加者もいたけど、大半は生産性が大幅に落ちたんだよね。このスレッドには、AIで大きな生産性向上を実現したって話をしてる人がたくさんいるけど、どのコメントもこの研究の核心的な洞察には触れてない。「その生産性向上は幻想だ」ってことだよ。AIは、製品を価値あるものに見せるために設計されたものなんだ。個人の価値に関しては、認識が現実そのものだから、間違いない。AIに依存しすぎてる人は、自己認識を歪めるための道具になってることを心配した方がいいよ。それは依存を生み出し、偽の達成感を与えるものだから。結局、AIは最適化されたトークンの流れを話しかけてくるわけで、その最適化の目的が何だったのか、疑問に思わざるを得ないよね。

確かに、何かを学ぶのに役立てることができるけど、理解がより抽象的でLLMっぽくなる傾向があるよね。学ぶときは、いろいろと混ぜてやった方がいいよ。

開発者がツールによって自分の作業が早くなったのか遅くなったのか判断できないというのは、それ自体が面白いね。多くの他の人間の努力にも当てはまるだろうし、なぜ多くの人がAIによって10倍生産性が上がったと思っているのか、なぜ私がVimを使い続けるのか、ロンドンで運転する人々がいるのかを説明している。ボートの世界では、「セットとドリフト」という概念があって、風や流れがボートをコースから外れさせる様子を表している。航海者が注意しないと、目的地から遠く離れてしまうことになる。これは、ボートに座っているとき、動きの認識が相対的で局所的だからだ。顔に風を感じたり、ボートが周りの水を切り裂く様子を見たりする。これを目的地に向かって進んでいると解釈するけど、実際には風や流れによって動いている場合もある。私は、これと似たような効果がすべてのことを説明していると思う。「進展している」という認識は、主に自分の周りでの動きや「何かが起こっている」という感覚に基づいている。目標が近づいているという認識には基づいていないから、それを測るのは難しいし、直感を育てるのも難しい。だから、人々は最も効果的な戦略でなくても、進展していると感じる戦略を選びがちなんだと思う。これが、運転中に実際には長い「近道」を取る理由だと思う。曲がりくねった道やターンが彼らを忙しくさせて、退屈な高速道路でぼーっとするよりも進展していると感じさせるんだ。

そうそう!ナビアプリのWazeは、ユーザーを長いルートに誘導することが多いけど、実際には速く感じるんだよね。運転中は、実際の距離じゃなくて、何が起こったかの記憶で旅を速いか遅いか判断するから。Wazeは、人間のドライバーが時間や距離が長くても、曲がりくねった道を進んでいると進捗を感じて幸せだって知ってるんだ。AIツールはプログラミングを楽に感じさせるけど、実際には生産性が下がるかもしれないのは興味深いね。でも、俺たち人間は楽なショートカットを好むから。AIを使ったコーディングの記憶は、苦労しなかったから進歩したって教えてくれる。