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

コードを書くことは決してボトルネックではなかった

2025年7月1日原文(ordep.dev)

概要

  • コードを書く作業 自体はソフトウェア開発の ボトルネック ではない
  • LLM の登場でコード生成速度が向上
  • 理解・レビュー・信頼 のコストは依然高い
  • チーム連携 や品質確保が重要な課題
  • 本質的な課題 は依然として解決されていない

コード作成のボトルネックは「書くこと」ではない

  • ソフトウェア開発における 本当のボトルネック は、コードレビューやナレッジ共有、テスト、デバッグ、コミュニケーションコスト
  • チケット管理や アジャイルの儀式 などのプロセスによる複雑化
  • これらのプロセスは 品質向上 のために設計されているが、実際には 開発スピードを遅くする要因
  • コードを書く作業自体は 比較的速い 工程

LLMによるコード生成の影響

  • LLM(大規模言語モデル) の普及で、動作するコードの生成が 簡単かつ高速
  • 新たなナラティブとして「 コードを書くことがボトルネック」という誤解が広がる
  • 実際には、 コード追加の限界コストはゼロに近づいている
  • しかし、 理解・テスト・信頼 のコストは これまで以上に高騰

LLMがもたらすワークロードの変化

  • LLMは 初期実装のスピードアップ には有効
  • その反面、 レビュー・統合・保守 の担当者への負担が増加
    • 作者が 十分に理解していないコード の提出
    • 慣例を逸脱 したパターンや未知の手法が混入
    • 副作用やエッジケース の見落とし
  • コード生成は容易になったが、 検証や理解はより複雑化

コピー&ペーストエンジニアリングの加速

  • 以前から存在した「 コピペエンジニアリング」の問題が LLMによって拡大
  • 生成されたコード手書きコード の区別がつきにくくなる
  • なぜその実装が選ばれたのか を理解しにくい状況

コード理解こそが最大のコスト

  • コードの最大コストは理解にある」という現実
  • LLMは 作成コスト を下げるが、 動作理由やバグ特定、保守性確保 の負担は減らない
  • レビュアーやメンター の負担増加

チームの信頼と共通認識の重要性

  • ソフトウェア開発は 共同作業 であり、 信頼関係と共通認識 が不可欠
  • コード生成速度が レビューや議論の速度を上回る と、 品質保証が形骸化
  • レビュアー・メンターへの 心理的・実務的な負担

LLMの限界と本質的な課題

  • プロトタイピングや自動化 の加速には価値あり
  • しかし、 明確な思考・丁寧なレビュー・設計力 の必要性はむしろ増大
  • コード作成コスト は下がったが、 チームで理解し合うコスト は依然高い
  • 真のボトルネック は変わらず、「コード理解と品質保証」に残存

Hackerたちの意見

LLMがなくても、ソフトウェア開発は市場の需要や資金によってボトルネックになってきてたよね。コードの不足じゃなくて。今のツールはすごくパワフルで、プログラミングそのものは二の次になってる。業界が始まった頃とは全然違うよ。ビル・ゲイツの話で、彼がコードを書く能力がすごく貴重だった頃のことがあるんだけど、ある会社がプログラマーを切実に探してて、彼とポール・アレンをティーンエイジャーの時に雇ったんだ。「だから、彼らはペナルティを払ってた…彼らは『子供だから気にしない』って言ってたんだよね。で、僕はそこに行ったんだけど、16歳だけど見た目は13歳くらいだった。彼らは僕たちを雇って、給料も払ってくれた。すごく面白いプロジェクトだったよ…僕がどれだけ早くコードを書けるかに彼らは驚いてた。」この話は、どれだけ変わったかを思い出させてくれるね。昔はコードを書くことがボトルネックだったけど、今は「どう作るか?」から「何を作るべきか、ビジネスになるのか?」に問題が移ってるんだ。

LLMがなくても、ソフトウェア開発は市場の需要や資金によってボトルネックになってきてたよね、コードの不足じゃなくて。 それは市場の需要だけだったと言っても信じられると思う。AIブーム前、マーク・アンドリーセンが言ってた主な不満は「良いアイデアを資金提供するよりも、もっと資本がある」ということだった。個人的には、現実とズレてると思うけど、彼はお金を持ってるけどアイデアがない人だから、信頼できる第一手の情報源だね。

ちょっと脱線するけど…この種の問題は「AIの影響」の見積もりにとても関連してると思う。効率を過大評価する傾向があるよね…それは、私たちにとって重要だったマージンでの中心的な役割のせいだと思う。でも、経済は複雑な方法でボトルネックになっている。市場の需要やお金など、100倍のコードが使えるものだとは明らかじゃない。

そうだよね、みんな知ってることだよ。LLMは現実的にレビューできないような悪いコードをたくさん書くし、ジュニアから提出されたコードが全然意味不明なこともあった。なんでそうしたのか聞くと、「わからない、LLMがやったから」とか言うし。新しいトレンドは、メンテナンスにたくさんのノイズとオーバーヘッドを生んでるだけだよ。LLMを受け入れるなら、レビューやメンテナンスにもLLMを使うしかないけど、そうするとややこしいスパゲッティになるだろうね。でも、重要なのはほとんどのビジネスにとって、品質はあまり重要じゃないってこと。使い捨てのLLMコードで十分だし、もしそれがダメなら、必要だと思うまでLLMを追加すればいいんだ。

最近の例としては、若くて野心的だけど経験のないインターンを指導していることがある。彼らは、以前は1週間(または2週間)で書いていたのと同じ量のコードを1日で作り出したんだ。でも、いくつかのことが僕の仕事を以前よりも難しくした。 - レビュー中、彼らは自分のコードについて深く考えていなかったから、僕のコメントがしばしば彼らの頭を超えてしまった。議論の代わりに「いい指摘、直すね」みたいな返事が来ることが多かった(これもLLMを思い出させる)。 - 些細な問題にかける時間がほとんどゼロに近くなって、残りの問題はもっと微妙で、見つけて説明するのに時間がかかるものになった。 - 多くのバグは新しい種類のもので、コードは正しいことをしているように見えるけど、実際には全く機能しなかったり、通常そのレベルの「仕上がり」ではあり得ないほど壊れていたりする。パターンマッチングの崩壊が「オーガニック」なコードと比べて、オーバーヘッドを大きくした。何十年もコードをレビューしたり、Stack Overflowの質問に答えたりしてきた経験があれば、バグだけでなく、著者がどうやってそこにたどり着いたのか、そして今後同じことを避けるためにどう助けるかを特定することができる。 - 簡単だけど悪い(非効率的、間違ってる、違法、見た目が悪い…)解決策は話し合うのに良いけど、LLMを使ったジュニア開発者は、もっと複雑なものを作り出すことが多くて、いろんな面で悪いことになることがある。少し壊れたPRを徐々に成長させて、デザインや他の考慮事項を考えながら、最終レビューの準備が整うまで高品質にするという文化は、同じようには機能しない。 - 元のPRの問題を直す代わりに、最初のレビューに対する返事として全く異なるアプローチが来ることが多かった。また、しばしば新しく微妙な方法で壊れていた。これが、シニア開発者がジュニアの著者よりもこれらのPRにずっと多くの時間を費やすような努力の逆転を引き起こした。ジュニア開発者は(おそらく)もっと生産的で有能だと感じるだろうけど、彼らの仕事に対する反応は、最終的にはシニア開発者からの通常の熱意や励ましが欠けてしまうことが多い。こういう問題にどう対処すればいいんだろう?最初にうまくいったのは、常に多くの(合格する)テストを要求することだったけど、結局これらのテストも同じような問題に悩まされることになる。

コードは正しいことをしているように見えるけど、実際には全く機能しなかったり、通常そのレベルの「仕上がり」ではあり得ないほど壊れていたりする。 それが理解できない。彼らが書いたコードをテストしない(手動でさえ)なら、それはLLMの問題じゃなくてプロセスの問題だよ。彼らは、レビューのためにPRが準備できているとはどういうことかを教わっていない。ここではLLMは関係ない。

中期的には、実際に機能やバグ修正を設計するために労力をかけたことを示すために、作業を上流にシフトする必要があると思う。シニアエンジニアやプロダクトマネージャーが機能をスコープしデザインし、IC開発者(簡単な作業のためのジュニアも含む)がそれを実装し、シニアエンジニアがコードレビューに参加するというメンタルモデルは、常に持っていたものだけど、変える必要があると思う。今のところ、特定の機能をどうデザインすべきか考えられないジュニアエンジニアがチームにいることの価値が見えない。以前はコードベースや新しい技術を理解しようと必死に時間を費やしていたジュニアエンジニアは、その時間を使ってその機能が全体の中でどうフィットするか、エッジケースを考え、機能のデザインを提案することに使うべきだと思う。そういう仕事を任せられないジュニアエンジニアも多いし、正直言って今は雇えるとは思えない。短期的には、プルリクエストが完全であることを確認するために、この追加の注意義務を伝える必要があると思う。そうしないと、作業の非対称性が生まれるし、そのインターンやジュニアがどれだけそれを尊重しているかで評価すべきだと思う。

これは教育の同じ問題に似ていて、評価のために書かれた資料を消費する時間を減らさなければならないという答えになると思う。効果的なコードレビューはもっと継続的になり、チェックインや説明を求めることがもっと必要になるだろう。「あなたのコードを全部読んでフィードバックをあげる」というスタート地点ではなくて。今のテキストの出力速度を考えると、それは持続可能ではない。AIは採用においても同じ問題を引き起こす。知識の見かけを生み出すからだ。私たちがその知識を評価する者として抱える問題は、知識に対する他のインターフェースが言語しかないことだ。ある意味、これは存在する最古の哲学的問題に似ている。ソクラテスは、真実ではなく言語や議論に関心を持つ人々、すなわちソフィストに対して異常なほどの時間を費やしていた。今、私たちはその同じ問題を、産業規模で抱えている。テストについてのあなたの指摘に関しては、最初は自動テストに焦点を当てず(もちろん最終的にはそれを持つべきだけど)、実際にコードを実行しながら説明してもらうことを求めるべきだと思う。それがもっと良いテストになる。「どう機能するのか見せて、説明して。」

大企業でちょっとジュニアなチームを持ってる。みんな「バイブプラン」をすることが多くて、コードを書くよりもそっちが重要だよ。 - プロダクトをもっと考え抜く必要がある。本当に明確にできているか確認して。みんなそれぞれのプロセスがあるけど、ラバーダッキングや批評、作業をフェーズに分けて、それをタスクに分ける感じ(やるべき仕事、ビジネス要件ドキュメント、ドメイン駆動設計、UXライティングのプロダクトレキシコンドキュメント、あらゆる資料) - ツールやフィードバックループの設定を優先すること(コード品質ツールは必須)。計画中に決めたことを強制するためのカスタムルールも含まれる。これに時間をかければ、みんなの生活がずっと良くなるよ。 - すごく詳細な計画を立てて、エージェントが「IVI」する(自動リンティング、単一テスト、テストスイート、手動評価)ことが多い。できるだけ多く、かつ多様な自動フィードバック信号を設定する。 —- 2〜4時間計画と文書化をしてから、「1ストーリーポイント」くらいの小さな「PRD」をたくさん印刷する。完了の明確な定義がある。こうすることで、ジムに行ったり、会議をしたり、1〜2時間手を離しても大丈夫になる。 —-

いいこと言ったね。私も同じような経験があるけど、自分でこのツールを使っている視点からだよ。確かに、今は何千行ものコードを比較的早く生成できるけど、実際にそのコードをレビューして、ちゃんと動くか確認したり、バグを直したり、セキュリティの問題を探したり、リファクタリングしたり、コードを簡素化したり削除したりするのが大変なんだ。自分でコードを書く方が、ずっと生産的だと感じることが多いし、簡単なオートコンプリートのタスクにはLLMを頼る感じかな。経験の浅い人とコミュニケーションを取らなきゃいけない場合、さらにLLMに翻訳する必要があるから、もっと難しくなると思う。こういうツールが生産性を上げてるって言ってる人の大半は、こういったタスクをまるっとスキップしてるか、最初からやる気がないんじゃないかな。そうなると、コードの品質を維持するのは、実際に気にしている少数の人たちに負担がかかることになって、今はその量がすごく増えてる。残念ながら、そういう人たちはしばしば「うるさい人」や「細かいことを気にする人」として見られて、無駄にPRをブロックすることもある。でも、実際にはユーザーに届ける製品を気にしている人たちなんだよね。これを改善する提案はないけど、状況が悪化するだけだという厳しい見通しを持ってる。業界はLLMの使い方だけを学んだソフトウェア開発者で溢れ続けるし、こういうツールを作ってる会社は、同じようなマーケティングの嘘を広め続けるだろうから、盛り上がりを作って、結果的に自分たちの評価を上げるんだ。

なんか面白いね、これが他のML駆動のツールの使い方と似てるのは。例えば、電子工学なんかでは、経験豊富なエンジニアでも理解するのがほぼ不可能な解決策があるし。

  • 多くのバグは新しいタイプのもので、コードは正しいことをしているように見えるけど、実際には全く動かないか、あるいはそのレベルの「仕上げ」がされているコードよりもずっと壊れていることが多かった。これを聞いて、以前の雇用主が別の国のチームに契約した25万ドルのソフトウェアプロジェクトを思い出したよ。表面的には、特に仕様書をチェックすれば、すべて揃っているように見えたけど、実際にはまとまりがなかった。彼らは仕様書を超えて一秒もかけず、仕様から「当然に」導かれる常識的なことが全くなかった。結局、そのプロジェクトはすぐに廃棄された。今やLLMを使えば、こういう作業は基本的に無料で自動化できるようになった。
Hacker Newsで議論の続きを見る