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

コードを書けよ

2025年9月30日原文(antonz.org)

概要

  • AI活用 のアドバイスが増えている現状
  • 問題分割やプロンプト改善だけに頼る危険性
  • 実際にコードを書く ことの重要性
  • AIは補助として活用する姿勢
  • エンジニア本来の役割 を見失わないことの提案

AI時代のプログラミング助言再考

  • 最近よく聞くアドバイス:「問題を小さく分解」「具体的な要件設定」「適切なAIモデル選択」「プロンプトの反復改善」
  • 問題分解 は有効だが、 プロンプト反復 には依存しすぎない姿勢
  • 実際のコード作成に積極的に関与することが肝要
    • AIに初期バージョンを生成させ、自分で リファクタリング
    • 自分で初版を書き、AIに レビュー・改善 を依頼
    • 重要部分は自分で書き、 残りをAI に任せる
    • コードの アウトライン を作り、AIに詳細部分を補完させる
  • AI任せ にせず、工程に自ら関与する姿勢が良い結果を生む

プロンプト反復の落とし穴

  • AIが 一発または二発目 で期待通り動作すれば問題なし
  • それ以上 プロンプト改善 に時間をかけるのは非効率
  • コードを書いてからAIに戻ることで 成果向上
  • AI活用 自体は推奨、ただし「英語でプログラミング」的な無限ループは回避
  • 曖昧さ・遅さ・ストレス の原因となるため、実装作業を重視

エンジニアとしての本分

  • 手を動かしてコードを書く ことが本来の強み
  • ソフトウェアエンジニア としての役割を忘れず、プロンプト職人にならない意識
  • AIは 補助ツール として積極活用しつつも、主導権は自分に

まとめ・推奨行動

  • AIと協働 しつつ、コード作成の主導権を持つ姿勢
  • 無限プロンプト改善 の罠に陥らず、実装作業を優先
  • エンジニアの本質 を見失わない
  • 新着記事の購読推奨

Hackerたちの意見

AIをペアリングバディとして使ってるんだ。APIやアルゴリズムをすぐに調べてくれるし、リファクタリングやDRYを理解してる賢いテキストエディタみたいな感じ。でも、アーキテクチャを決めたりテストを書くのは自分でやってるよ。自分にはうまくいってる。この記事が批判してるのは、ソフトウェア工場みたいに使うことだね。欲しいものをプロンプトとして与えて、間違ったらプロンプトを修正するっていう。プログラミングが仕様の問題なら、プログラミング言語から自然言語にシフトするだけじゃ解決しないのは分かる。

4] そうなんだけど… AIは生のプログラミング言語よりも、私たちの業界についての文脈をずっと多く持ってるんだ。「購入イベントのためにストライプのWebhookプロセッサを追加して」って言えば、どのライブラリをインポートするか、APIコールの構造、イベントの形、ストライプ関連のデータベーステーブル、APIの冪等性の問題とか、全部わかってる。だから、指定しなきゃいけないことはあるけど、通常の言語よりも、やってるタスクに関連する暗黙の理解や知識がたくさん引き出せるんだよね。

今、HNのフロントページには「クソコードを書け」と「バカなコードを書け」があるけど、「良いコードを書け」はないね。

7] 良いコードなんて幻想だよ。

問題を解決する最初の5回は、その問題について十分に理解してないから、良いコードを書くことができないんだよね。

著者にちょっと同意するな。十分なコーディング経験がある自分には、AIにコードを書かせることからあまり価値(もちろん、楽しみも)を感じない。ただ、少しでも不慣れな環境で作業する時には貴重だよ。問題を解決するために使える(たいていは間違ったり不完全な)コードの例を提供してくれるから、メインの「エネルギーバリア」を乗り越えられる。例えば、新しいプログラミング言語の広大な標準ライブラリをナビゲートしたり、物事のやり方を示すイディオム的な例を提供してくれる。自分は何をしたいかは分かってるけど、特定のフレームワークや言語でそれを表現するための正確な構文は分からないんだ。

3] Context7っていう製品があって、APIの使い方を実践的に簡潔に示してくれるんだ(具体的な例はここを見てね: https://context7.com/tailwindlabs/tailwindcss.com)。これはLLMがより良い例を提供するために使うことを想定してるんだよね。例えば、モデルのトレーニングデータにあるライブラリの新しいバージョンを使うとか。よく考えるんだけど、MCPサーバーを使うよりも、ドキュメントを漁るよりも、この高信号対雑音のリソースを自分でクエリしたいなって思うことがある。良いドキュメントリソースがあるとき、LLMはどんな追加価値を提供してくれるんだろう?

5] うん、あんまりLLMを活用してないけど、vscodeの拡張を書くためにAPIを調べるのに使ったことはある。生成されたコードはそのまま使えなかったけど、動くコードに変えられる例をくれたんだ。個々のAPIコールを調べることなくね。昔はWindows APIを調べるのにも使ったな、何十年もWindowsのコードを書いてなかったから。(パイプ、フォーク、エグゼックの相当するものね。)生成されたコードにはリソースリークがあったけど、それに気づいたし、始めるには十分だった。Stack Overflowにもその答えがあったと思う。あと、面白いことに、コパイロットに自分の作った言語(Idris/Agdaに似てる)でパーサータイプのモナド実装を生成させたら、かなり近いものができたよ。

ほんの少しでも不慣れな環境で操作しているときは非常に貴重だね。 車のナビやGoogleマップみたいなもんだよ。地元では面倒であまり役に立たないけど、旅行中や不慣れな場所ではすごく助かる。

2ヶ月くらい前に、会社がCursor/claude AIのライセンスを取得したんだ。最初は何ができるのか理解するのがすごく楽しかった。特にリファクタリングみたいなことには本当に強力だと思った。でも、だんだん邪魔に感じるようになった。最初はTABからctrl+spaceに自動挿入のバインドを変更しないといけなかった。コードをタブでインデントしようとすると、ブランモ!って感じで行が挿入されて、消すのに余計な手間がかかることに。次に、AIが生成したオートコンプリートを読むのに時間を取られることに気づいた。ポップアップして、生成されたものを読むために集中を移して、それが自分の欲しいものか判断して、元々何を打ってたか思い出そうとする。だから、全部オフにした。文脈を意識したチャットにはまだアクセスできるけど、オートコンプリート機能は使ってない。そしたら、もっと記憶できて、コードを理解するのも増えた(驚き)。コードにもっと関わるようになったし、理解しようとする努力も増えたかも。もしかしたら、記憶力や注意力、コンテキストを切り替える能力が自分より優れてる人もいるかもね。若い人たちは、気を散らすものや注意を奪うコンテンツに慣れてるからかもしれない。

うん、自分もオートコンプリートは無効にしてる。自分にとっては、知ってる分野で作業してる時に一番役立つ。例えば、暗号技術は知ってるけど、Node.jsの暗号APIは知らないから、Claudeはそのコードを書く時にすごく助かる。

Cursorが大好きで、オートコンプリートもすごく役立つんだけど、時には邪魔になるよね。ホットキーを再バインドしようと思わなかったのが不思議。ありがとう。

Hacker Newsで議論の続きを見る