アンクル・ボブ: 「自分でコードを書く時代は終わった」
(reddit.com)- 『Clean Code』で知られるUncle Bobが、AIが開発者より圧倒的に速くコードを書く時代の到来を宣言し、開発者の役割の変化を促す
- 1日かかっていた作業をAIが5分で完了できるため、開発者が自分でコードを書く時代は終わった
- しかしそれは開発者に莫大な力を与え、以前は夢にも思わなかったことができるようになる
- テストカバレッジは苦痛だったが、開発者はAIにテストカバレッジの確保を指示し、ミューテーションテスターを活用してテストの実質的な有効性を検証できる
- 循環的複雑度(cyclomatic complexity) 分析ツールと組み合わせることで、AIにコード品質を以前よりはるかに高い水準へ引き上げさせることが可能
添付動画のスクリプト
> 直視しよう。AIはあなたたちより何倍も速くコードを書く。あなたたちが1日かかる仕事を、AIは5分で終える。もう終わりだ。あなたたちが自分でコードを書く時代は終わった。わかっている。受け入れよう。
>
> だが実のところ、それはむしろあなたたちに莫大な力を与える。今や、以前なら夢にも思わなかったことができるようになったからだ。
>
> たとえばテストカバレッジを考えてみよう。どれほどつらかったかはわかっている。あのうんざりするテストを全部書かなければならなかった。しかもテストがあるからといって、コードが正しく動くという意味でもなかった。コードカバレッジを回して、にやりと笑いながら「まあ、そうだな。でもこれでコードが動くってわけじゃない……ただ実行されたというだけだ」と言っていた。
>
> 今はそれを直せる。馬力(horsepower) があるからだ。AIにコードをカバーさせ、そのあとミューテーションテスターを回せ。そう、それはツールだ。そのツールもAIに作らせればいい。5分で作れる。 そしてAIにそのツールを実行させる。そのツールはソースコードに変更を加え、すべてのテストを走らせる。テストが失敗しないなら? 失敗するようなテストを書かせればいい。そうすれば本物のテストカバレッジを手にできる。
>
> 断言するが、本物のテストカバレッジを手にできる。
>
> そして他に何ができるか知っているか。コードの品質を分析できる。循環的複雑度を見るツールを書くことができる。実際、すでにすばらしいツールがある。20年前のツールだ。名前はCRAPだ。いい名前だ。何の略かは知らない。知りたくもない。テストカバレッジと循環的複雑度の組み合わせだ。AIにCRAPスコアを5以下、4以下まで下げろと指示できる。するとAIは大きな関数を細かく分割し、すべてをテストでカバーするようになる。
>
> 考えてみてほしい、あなたたちが持つ力を。これまで見たことのないレベルまでコード品質を引き上げられる。
>
> わかっている。私はあの年老いたClean Codeおじさんだ。だが正直に言おう。AIを徹底的に働かせれば、あなたたちはコードをはるかに、はるかにクリーンにできる。
2件のコメント
Redditの反応
普段のMark Hamillの悪役ボイスみたいに聞こえる
これは本当に修羅場をくぐり抜けてきた開発者って感じ
if (f == -1) { printf("open failed\n"); exit(1); }みたいなコードは二度と書かない気がするAIが代わりに書いてくれて、あり得るすべての失敗理由ごとに意味のある引数付きの個別エラー型とメッセージまで付けてくれるだろうから。AIは自分みたいに怠け者じゃないので、これからはファイル処理ロジックに集中できる
もうコードの大半がボイラープレートな時代に入った気がする。必要なのは要件をうまく伝える能力と、生成されたコードのセキュリティ(OWASP)と性能を継続的に点検する方法だ
極端に非決定的だし、最新モデルでも一日の中で性能が「これなら十分」から「ほぼ使い物にならない」まで揺れることがよくある
自然言語は昔も今もこれからも曖昧で多義的だから、この問題はたぶん解決しない可能性が高い。だからこそ「うーん、XをYに足してZに入ったらいい感じに考えて」ではなく数式を使うんだ
今もClaudeと権限をうまく扱う方法を模索しているところだけど、新しいアクション/権限変更の実装方法は「だいたい動くけど、そのうち壊れる」コードの完璧な例だった
Claudeはコードを書くのはうまいが、常に良いコードを書くわけではない
AIについて理解すべきなのは、「考える力」に関しては人間より優れているわけではなく、ただ速いだけだということ。言われたら大抵の人がやりそうなやり方で進めるけど、コードではそれがしばしばあまり良くない
昔から開発者を何人も雇って、やりたいことを伝えればバグだらけの成果物が返ってくることはあったし、新しい変更ひとつで別の三か所が壊れるのも珍しくなかった。Claudeも放っておけばまったく同じことをする。実際に見たし、答えは結局、中に入って書かれたコードを読み、もっと壊れにくく堅牢になるようリファクタリングしろと指示することなんだ
Claudeでコードを書く限り、そのコードが妥当かどうか判断する能力は引き続き必要だ。履歴書や会計資料を代わりに書かせても、成果物を確認しなきゃいけないのと同じ
昔ながらのやり方でコードを書くことはなくなるかもしれないが、生成物を読んで経験に照らしてレビューする能力は依然として必要だ
問題は、みんなが「英語ができるからClaudeにプログラムを作らせられる」と思っていること。でも英語が話せるからといって、ClaudeにHawking radiationを反駁する博士論文を書かせられるわけじゃない。結果が正しいかどうか判断する方法がまったくないからだ
Microsoftがスキャフォールディングを導入したときより、今のほうが雇用されているプログラマーは多い。Basicのような言語のおかげでアセンブラの代わりに人が読める命令を入力するようになったときも、その前にパンチカードへコードを打ち込んでいた時代よりプログラマーは多かった
コンピュータは常に、より制約が少なく、読み書きしやすい命令セットでプログラミングされる方向へ進んできた
Bob Martinは尊敬している人物だけど、今回は間違っていると思う。人はこれからもコンピュータへの命令を書き続ける。ただし、制限された具体的な命令セットではなく、もっと制約が少なく、もっと人間が読みやすい言語で書くようになるだけだ
終わったものなんて何もない。ようやく始まったところだ。プログラミングは新しい言語をリリースした。その名前はEnglishだ
すでに今でも記録的な量のソフトウェアを作っているし、それはもっと速くなる。私たちは以前より多くのコードを書くようになるし、ずっと高速化しても、結局はより多くの人が何らかの形でソフトウェアと関わるようになる。産出物があまりにも安くなったからで、これはJevonsのパラドックスに近い
「今回は違う」と考えるのは傲慢だし、頭のいい人でも多面的な指数成長が何を意味するかを想像するのは難しい。良くなっているのは大規模言語モデルだけじゃない
だから正しい見方だと思う
これがまさにバブルの頂点ってやつだよね? いまここで宣言しておく ☎️
彼の言っているやり方には、ソフトウェア品質指標、専門的なテスト、コード品質についての長年の理解が必要だ
まだそういうツールは十分ではない。少なくとも広く採用されてはいない。業界がそれを受け入れるかどうかも確信が持てない
CI/CDの実践だって、実装自体はそこまで難しくなかったのに、多くの会社は全面導入せず、人を増やして非効率なまま働き続けた。AIがそれら全部をデフォルトで処理してくれない限り、今後もそうなるだろう。現在のClaude Code、Cursor、Codes系ツールだけでは足りない
この人をAgentにしたMatrixみたい
AIをちゃんと導くには最高レベルの技術的な深さが必要。AIにただコードを継ぎ足し続けさせるだけでは保守可能にならない
しかも、まだAIだけで運営されている市場レベルの製品は一つも聞いたことがない。だから落ち着け
次は人間の脳もバイブコーディングするのかな
reddit の意見は、否定的だったり皮肉っぽいものが多いように見えますね。
実際、AI のおかげでテストカバレッジや E2E Test など、これまで先送りしてきた部分を着実に進められている状況では、むしろシニカルすぎるように見えます。