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

コードは安い。話を聞かせてください。

概要

  • LLM(大規模言語モデル)によるコーディングツールの登場で、従来のソフトウェア開発は根本的に変化
  • 開発プロセスの労力・コスト・スキル要件が劇的に低減
  • 従来のコード品質指標や努力の価値が揺らぎ、プロジェクト評価基準も変化
  • 人間とAIが生成するコードの境界が曖昧になり、ソフトウェアの価値観が再定義されつつある
  • 今後の開発者の役割やソフトウェア文化の変容が不可避な時代に突入

ソフトウェア開発の終焉:LLM時代の到来

  • LLMコーディングツールの普及により、数十年続いた従来のソフトウェア開発手法の終焉
  • Linus Torvaldsの「Talk is cheap. Show me the code.」という格言の時代背景と意味
  • かつては、アイデアの実現自体が高コスト・高スキル・高労力の象徴
  • 複雑なシステム開発に伴う予期せぬ困難やトレードオフ、アーキテクチャの度重なる変更
  • 物理的・生理的制約(集中力、時間、体力)が開発のボトルネック
    • 複数人開発特有のコミュニケーション・調整コスト
  • 多くのアイデアが実現されず、無限のウィッシュリスト化
  • 25年間の開発経験を経て、AIによるコーディングが「手作業より遥かに優れている」現実
  • FOSS、インターネット進化、ツール・プラットフォームの変遷を体験した開発者視点
  • コーディングスタイルや価値観の変化、LLMの登場による根本的なパラダイムシフト

コード品質・プロジェクト評価の変容

  • 従来のコードベース評価指標(年齢、コミット頻度、フレームワーク、ドキュメント品質など)の崩壊
  • LLMによるREADME、ドキュメント、UI、コード整理の自動生成
  • 「美しいリポジトリ=良質」とは言えない時代
  • コードの出自や運営体制、作成者の信頼性を重視する必要性の高まり
  • 一見完璧な成果物ほど「低労力・一発生成」の疑念
  • 専門的な解析なしには真の品質を見極めにくい現状

労力と成果の再定義

  • 従来、1万行の良質なコードは長期間の努力・反復・スキルの証明
  • LLMは数秒で同等のコード生成、テストやデプロイまで自動化可能
  • 人間の専門性とLLMの組み合わせで高品質な成果物も実現可能
  • 個人開発者の「やりたかったことリスト」を現実化できる時代
  • 労力・思考・感情コストが劇的に減少し、自由度の高い創造的活動へシフト
  • 「プログラミング=90%思考・10%タイピング」が現実に

コードの価値と「スロップ」問題

  • 誰でも瞬時に大量のコードを生成できる時代の「コードの価値」再考
  • 人間によるコードも多くが「ジャンク」レベルであり、AI生成との境界が曖昧
  • 医師や土木技師のような厳格なライセンス制度が存在しないソフトウェア業界
  • 現実世界を支える多くのシステムが、実は質の低いコードで構成
  • AIスロップ(低品質AI生成物)への警戒心と、形式的な美しさとの皮肉
  • 人間の創造性・不完全さ・個性があってこそ価値が生まれる文化的側面
  • 無限に生成可能な成果物の「価値の希薄化」問題

今後のソフトウェア開発と開発者像

  • AIによる自動生成が前提となる時代のプロジェクト評価軸の再構築
  • 開発者の役割が「生成」から「設計・検証・運用・監督」へシフト
  • コードの「誰が・なぜ・どのように」作ったかというプロセス重視の傾向
  • ソフトウェア文化・コミュニティ・価値観の再定義が不可避
  • AIと共存する新たな開発者像の模索と、創造性・人間性の再評価

Hackerたちの意見

「話は安い」という元のフレーズは、「たくさんのことを言うのは簡単だけど、その言葉には本当の価値がないことが多い」という意味で使われることが多いよね。だから、この巧妙な見出しは、コードはその話よりもさらに価値がないって言ってるわけだ。それだけで、著者の作品からは予想される無知さが見える。記事を読んでみたら、やっぱり私の疑念が確認されたよ。

これは直接的に逆転した内容だね。

どこまで読んだ?彼らはそのフレーズのかなり特定の文脈での使い方(リーナス、2000年)を指しているんだよ。

ヘッドラインに過剰に反応してると思うよ、あれはただのジョークだから。記事の内容からは、著者がコードについて無知だとは思えないし、調べてみれば、かなりの数のオープンソースへの貢献があることが分かるよ。要するに、2000年には良いデザインを良いコードで支えるのがすごくコストがかかったけど、今はずっと安くなったってこと。だから、デザインが良いことがより重要だってことだね。ほんとそれだけ。

そう、元のフレーズには特定の意味があるよ。でも別の文脈では、「話す」ことがコードよりも重要な場合もあるんだ。ソフトウェア開発では、コードは開発者が頭の中に持ってる理解やモデルよりも実際には重要じゃない。コードは、あまり良い表現じゃないけど、プロセスの一種の排泄物みたいなもので、人間の解釈なしには意味がないんだ。たとえ運用上の価値があってもね。モデルは実装の一部ではなくて、ソフトウェアは人間の観察者なしでは純粋に文法的な構造に過ぎないから(それすらも、文法は心や言語に属するから、そうじゃないって言えるかも)。これはLLMの使い方に影響を与えるよ。

こういう盲目的な盛り上がりの記事が出るたびに、ここで同じような(よく考えられた)反論をよく見るけど、私がこの「エンジニアリングは終わった」という意見に対して一番異議を唱えたいのは、あまり見かけないことかも。もしかしたら私のビッグテック眼鏡のせいかもしれないけど、大きくて成熟した製品の場合、変更を本番環境に持っていくために必要な時間と労力を分解すると、実際のコードを書くことは… 10%、いや20%くらいのものじゃないかな?確かに、プロセスの他の部分に「エージェント」を活用することはできるけど、設計や仕様策定、実験、分析、反復のプロセスにおける彼らの価値は、コーディングプロセスに比べて劇的に低いんだよね(コーディングの重要性はすでに過大評価されてるし)。それに、会社全体でのコミュニケーションや調整については、通常それが本当の制約要因で、重いLLMの使用はほとんどの場合、状況を悪化させるだけ。こういう意見は、「ソフトウェア開発」が何を意味するのかについて、私とはまったく違う理解を持っているように感じるし、どう折り合いをつければいいのか分からない。はっきり言うと、これらのツールには絶対に役割があると思うし、適切な場面で使っていて、しばしば価値を得ているよ。間違いなく、これはこの分野の一部だ。でも、エンジニアリングの代わりになるという意見は、実際のユーザーがいる本物の製品をサポートしたことがない視点から来ているように感じる。

そうだね、いろんな意味で、私の主張は「コードは安い」というのは、実際にはみんなが思っていることの逆を意味しているってこと。ソフトウェアエンジニアリングは、ここ20年ほどで発展させてきた実践にもっと関係しているんだ。リーナスの観察は今でも当てはまるよ。君が提供したコードが、君が思っている通りに正確に動くことを示してみて。LLMに数行入力するのは簡単だけど、低レベルのコードを安全かつ効果的に変更する方法を正確に理解するのは別の話だよ。リズ・フォン=ジョーンズがLinkedInでHoneyCombのことについて話してたけど、彼女は悪いPRをリポジトリに落としたことで批判されたんだ。変更の提示の仕方をあまり考えていなかったからね。

こういう意見は、「ソフトウェア開発」が何を意味するのかについて、私とはまったく違う理解を持っているように感じるし、どう折り合いをつければいいのか分からない。君の言う通り、コーディングは全体の努力の20%未満だよ。私の経験では、10%が中央値に近いと思う。このことは、企業がLLMを適用してROIを追跡することで解決されるだろう。一年単位で見ると「まだ活用方法を学んでいる」と言えるかもしれないけど、数年経つと100倍の生産性向上の主張は崩れるだろうね。まだガートナーのハイプサイクルの上り坂にいるから、どれだけ早く失望の谷に落ちるか見てみたいな。

デザインドキュメントを書くのにもすごく便利で、これもSWEにとっては大きな時間の無駄なんだよね。

実は、君はこの作品の著者と全く意見が対立しているわけじゃないと思うよ。彼らは「ソフトウェアエンジニアリングは終わった」とは言ってない。彼らが言ったのは、> 「数十年にわたって行われてきたソフトウェア開発は終わった。」君は、コーディングを書くことがその技術の10-20%だと主張している。それは彼らも同じポイントを言っているんだ!彼らは残りの部分を「話すこと」としてフレーミングしていて、今はコードを書く部分がずっと安くなったおかげで、以前よりもさらに重要になっているんだよ。

Googleの「ソフトウェアエンジニアリング」って本では、ソフトウェアエンジニアリングとプログラミングの違いが説明されてるよ。主な違いは、ソフトウェアエンジニアリングはプログラミングよりも長い時間をかけて行われるってこと。この意味では、AIツールはプログラミングを速くするけど、ソフトウェアエンジニアリングを速くするわけではないんだ。

最近の経験がこれを示してるんだ。数週間、Claudeの助けを借りて新しいコードやリファクタリングをサクサク進めてたんだけど、その後の1週間は完全に停滞してる感じがして、今はまた高速度に戻った。真ん中で何が起こったかっていうと、自分が何をしたいのか分からなかったんだ。アプリケーションのための正しいデータモデルがまだ決まってなかったから、Claudeに何をしてほしいか言えなかった。で、その時に「もっとコード書いて」って言うと、すごく悪いことが起こるんだよね。

記事読んだ?著者はこういうことに関して、もっとも考え深くて、過剰な宣伝をしない人の一人だよ。

最近、この「コードは安い。話を見せてくれ。」っていうオチが、釣り文句として使い回されすぎてる気がする。記事自体はまあまあだけど、知ってることを伝えるのにこんなに言葉を使う必要ある?ここには新しい情報なんてないよ。AIの波に乗ってるのは欲張りな企業だけじゃなくて、ブロガーやインフルエンサーも同じ。彼らは、キャッチーなタイトルでAIについてポジティブでもネガティブでも言えば、HNやRedditでトレンドになるって知ってるんだよね。あと、オチの元ネタにはちゃんとクレジットを。元ネタはこちら: https://nitter.net/jason_young1231/status/193518070341689789... https://programmerhumor.io/ai-memes/code-is-cheap-show-me-th...

ソフトウェア開発は、数十年やってきたようにはもうできない。2005年のやり方と2015年のやり方は全然違ってたと思うし、2015年と2025年も同じ。1995年のやり方は知らないけど、2005年とはかなり違ったはず。確かに大きな変化が起きてるけど、「数十年やってきたようには」っていうのはもう通用しない。

自分がやってきた20年の間に、そこまで大きな変化はなかったと思う。ツールは進化したし、新しいものも増えたけど、開発者の基本的なワークフローはあまり変わってない。

1995年から2005年の変化は、その後の数十年よりも大きかった。1995年には、ほとんどの情報が紙媒体かリバースエンジニアリングで集められてたからね。

そうそう、何年も前にVisual Age for Javaで保存時に即時インクリメンタルコンパイルに驚いたのを覚えてる。今のneovimユーザーは、その当時の最も進んだIDEにもなかった機能を持ってる。業界の多くの人は、30年間のインクリメンタルな進歩からどれだけの変化があったかを忘れてると思う。

話はもっと安っぽいけど、コードを見せてくれって言いたい。人々は月に10倍の生産性があるって主張してるけど、2025年11月からOpus 4.5が出てるのに、そんな兆候は見たことがない。AIは現代のシステムの複雑さを耐えられるレベルにしてくれたけど、以前はかなりひどかったし、AIが助けてくれた感じ。非自明なReactアプリを書くのはまだ苦労するし、AIが提供する非決定論的APIのためのハーネスを作るのも面倒。少なくとも、タイプミスに悩まされたり、コピー&ペーストする前に関連する例を探したりする必要はなくなったけど、AIはタイピングを自動化するのが得意でも、推論ができなかったり知識のカットオフがあったりするから、コーディングはまだまだ面倒だよ。

これの一番の例が、Claudeのターミナルプログラムだね。どうやら60fpsでreactをレンダリングして、それをANSI文字に変換してターミナルの内容を差分取って上書きするみたい。要するに、cursesが簡単にできることを真似してるだけなんだよね。

もしあなたの仕事が、提供されたツールと事前にトレーニングされたプロセスを使って、仕様に基づいて車の一部を組み立てることなら、巨大なロボットアームが自分の代わりに取り付けられることを心配するのも理解できる。でも、もしあなたの仕事が、デザインの改良を探るために車を組み立てたり、単一のプロトタイプで実験したり、そのロボットアームをプログラムする方法を決めたりすることなら、自動化のリスクについて考えることはあまりないと思う。多くの反論が「でもAIはその第二のクラスの仕事を自動化してる!」って形になってるけど、実際にはそういうのはあまり見てない。見てきたのは、前者が後者として誤分類されていることだね。

これは実際に状況をよく表してると思う。でも、あなたが言った第二のクラスの仕事をしていることを誇りに思っていた自分としては、自分の仕事がどれだけ誤分類されているかに非常に懸念を抱いている。第二のクラスでやっていた仕事が自動化されているように感じるし、以前はそれが自分の自尊心を過剰に膨らませていたかもしれない。

LLMを持ってるソフトウェアエンジニアは、一般人が持ってるLLMよりも無限に強いよ。エンジニアはデバッグしたり、指導したり、アプローチを変えたり、何をすべきか分かってれば具体的な指示も出せるからね。一般人は「これ動かないんだけど、直してくれない?」ってプロンプトを繰り返すだけ。だから、確かに仕事は急速に変わってるけど、すぐに廃れるとは思わないな。

「AIがその第二のクラスの仕事を自動化してるんだ!」って反論が多いのは知ってるけど、うーん、それが問題じゃないんだよね。問題は、その第二のクラスの仕事に対する需要があまりないってこと。少なくとも今はね。第一のクラスの仕事は、何十億もの家族を養ってるから。うん、労働の塊の誤謬については知ってるよ。

僕の仕事は、お金を持ってる人に自分が彼らの目標達成に欠かせない存在だと思わせることだよ。AIがこれを十分に偽装できる可能性が高い。競争が少ない経済では、偽装するだけでも十分かもしれないし、これが今の経済かどうかはみんな自分で判断できると思う。

あなたが言ってるのは、AIの前の伝統的な(決定論的な?)自動化だね。今日の最先端のLLMのような一般的なAIシステムは、クラスIかクラスIIに関係なく仕事を引き受けるよ。「今年の車のデザインをどう改善すべきか?」ってロボットアームに聞いたら、絶対に行き詰まるだろうけど、AIに聞いたら人間の意見と同等の本物の意見をくれるよ。もし会社が「AIがアイデアを出す -> AIがプロトタイプをデザインする -> AIロボットが実際に車を作る -> AIロボットが車を試乗する -> AIがすべてのプロトタイプを評価して来年のデザインを確認する」ってフィードバックループを完成させるためのツールを十分に整備したら、理論的にはこれが機能することもある。だからAIが大きな話題になってるのは、これまでの技術とは根本的に違うからなんだ。AIにとっては、クラスIとクラスIIを区別するラインなんて存在しないんだよ。

まだこれが問題だとは思わないな。どんなクラスであっても、CEOは気にしないってことだ。平凡なAIの仕事でも、彼らには大きなリターンと出口をもたらすからね。彼は不運な持ち株者のことなんて考えてない。世界は常に、分散したクソみたいなものには寛容だから。Windowsを見てみて。

たくさんのマネージャーは、従業員が前者のようにやってると思ってるけど、実際には後者をやってるんだよね。

今日はCodexにReduxのユニットテストを書いてもらったんだ。一見問題なさそうだったから、そのまま進めたんだけど、後で手動でテストを追加しようとしたら、出力をよく見たら50個くらい「なんじゃこりゃ」っていうものが散らばってた。確かにテストは通ったけど、いろんな意味でひどかった。しかも、これはすごく基本的なことを書いただけなんだ。AIを使うたびに感じるのは、表面的には問題なさそうに見えるけど、コードを拡張しようとすると大惨事だって気づくこと。で、「コードは安い」っていう問題は、実際にはそうじゃないってこと。コードを生成するのは今は安いけど(LLMが無限のVC資金で支えられてるからね)、そのコードを所有するコストは安くない。コードの1行1行が負債で、毎日何千行も生成するのは、クレジットカードで数千ドルの借金を抱えてるのに無料のものを手に入れたと思って、拒否されたときに驚くようなものなんだ。

いつも言ってるけど、1行1行が負債なんだよ。それを制限するのが私たちの仕事なのに、最近はそれがほとんど無視されてるよね。

コードを生成するのはいつも安いんだ。それがこの技術をチームに強制しなきゃいけない理由の一部でもある。クラウド移行と似てて、そのコストは後でしか現れないタイプなんだよね。クラウド移行よりも早く現れると思うけど、場合によっては正しい選択になることもある。

私が見てきた主な問題は、テストが通るコードを書くことなんだ。コードが正しいっていうのは大きな(しかもしばしば間違った)前提なんだよね。

現在、LLMによるテスト作成はちょっと危険な気がします。 使えるケースもあれば、そうでないケースもあります。 どちらのケースを特定するための体系的な基盤を明確にできるとは思えませんが、見ればわかると思います。 例えば、先日、いくつかのユースケースを与えてテストを書かせたんですが、ユースケースは正しかったのにコードは間違っていました。 そのテストが壊れているのを見て、テストを再作成しようとしました。 エージェントが自分の成功基準を決めると、最適でない結果を招くリスクがあります。 一度、別のClaudeのインスタンスを使ってテストを書かせ、その後、テストを知らない別のインスタンスに実装を書かせようとしましたが、ちょっと手間がかかりすぎました。

これがこのゲームに新しく参加する人がやるべきことです。 他の二つの異なるLLMにコードを徹底的にレビューさせてください。 もし自動化された方法がなければ、苦労して最終的に仕事を失うことになります。 このアプローチを使えば、ほとんどのソフトウェア開発者が出すコードよりも良いコードが得られます。 それがあれば、仕上げを加える必要があるときに良い基盤になります。

「今日はReduxのユニットテストを書いて」 これは「犬を描いて」と同じくらいのもの -> 傑作じゃないの!? 誰がそんなことを思ったでしょう? テスト方法論を考え出して、それを書き留めてから、モデルにそれを通過させるように頼む必要があります。 指定されていないことについて仮定を作るのが好きなので、注意が必要です。 もっと根本的には、テストが私たちが考えるべき核心的な要素になっていると思います。 AIコードを「バイブチェック」するのではなく、コードチェックすべきです。 もちろん、実際のテストコードは書いてくれますが、あなたの主な優先事項は「これをどうテストするか?」を考えることです。 コードの価値は、そのテストのレベルまでしかわかりません。 リポジトリに目をコミットできないので、AIコードの「LGTM」バイブテストはしないでください。 それはバイクに乗っているようなものです。

こんにちは、私は主なReduxのメンテナーです。 生成された例を見てみたいです! (これに影響を与えることができるかは疑問ですが、ここで何が起こったのか興味があります。) 参考までに、私たちのテストアプローチに関するドキュメントがありますし、しばらくの間、より統合的なスタイルのテストアプローチを推奨しています: - https://redux.js.org/usage/writing-tests

明確なソフトウェア開発計画とそれを実装するための正確なノウハウ。 これは、専門のプログラマーが働く方法ではありません。 プログラミングは計画であり、プログラミング言語は意外と良い計画ツールです。 でも、もちろん、専門家になるのは難しく、一般的な適性だけでなく、かなりの時間、経験、努力も必要です。 私の理論では、これがプログラミングに対するLLMの見解の違いの原因だと思います。 プログラミング言語を思考の道具と見る人と、コンピュータに何かをさせるための道具としか見ない人がいます。 前者はプログラミング自体にもっと価値を見出すのは当然で、後者はコードを隠すことに満足しています。 基本的な問題は、コードでやる価値のあることは、大量の小さな詳細を押さえることが必要だということです。 プログラミング言語は、まあまあ良いユーザーエクスペリエンスを持つ形式的なシステムで、形式的なシステムは詳細を指定するのに適していますが、人間のテキストはそうではありません。 とはいえ、詳細がたくさんある一方で、詳細がほとんど重要でないアプリケーションもたくさんあります。 だから、ブラックボックスに小さな決定を任せてもいいんじゃない? 問題は、どこにもっとエネルギーを使いたいかです。 事前に良い概念モデルを開発して明確にするのか、後で混乱したシステムをデバッグするのか。 ここでも、プログラマーは二つの異なるグループに分かれることが多いです。 おそらく、LLMに対する見解の違いと同じ理由で。 原則として、LLMの能力は事前思考重視のプログラミングパラダイムに適しているかもしれません。 でも、実際には、今日人気のあるツールやアプローチのどれも—私が知っているものは特に—その方向には向いていません。 本当にツールのギャップがありますね。

私の理論では、これがプログラミングに対するLLMの見解の違いの原因だと思います。 プログラミング言語を思考の道具と見る人と、コンピュータに何かをさせるための道具としか見ない人がいます。 前者はプログラミング自体にもっと価値を見出すのは当然で、後者はコードを隠すことに満足しています。 私はこう仮定します:ほとんどの人はLLMを思考の道具として見ています。 プログラマーもLLMをプログラミングの道具として見ています。 現在、一部のプログラマーは両方に非常に優れたスキルを持ち、二つを結びつけています。

たくさんの人が「手書きでコードを書くというソフトウェア制作のアートは終わった」と言っても、それが本当に終わったわけではありません。 このような誇張は、あなたの理性を圧倒し、自分の専門性を忘れさせ、恐れを持ってその話題に関わらせようとするものです(文字通りFOMO)。 この安っぽい手口に騙されないでください。

「Smalltalkは安い」。 ごめん、我慢できなかった、これは数十年前にSmalltalkを推奨していたときの私のスローガンです。