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

AIコーディング

概要

  • AIによるコーディング の実態を批判的に論じる内容
  • コンパイラ との比較を通じてAIの限界を指摘
  • 英語プロンプト の曖昧さや非決定性に言及
  • ツール・言語の未熟さ がAI利用を促進しているとの見解
  • 本質的な技術進化 よりも過剰な期待や投資を問題視

AIによるコーディング幻想批判

  • 高齢になり 他人を説得することを諦めた心境
  • 多くの人々 は真実よりも自分の利益拡大(bag pumping)を重視
  • 「認識こそ現実」「真実は構築物」 と信じる人々への強い反感
  • 自動運転企業への巨額投資 が無駄だった理由の指摘
  • 「真実」より「儲かる真実」 の方が市場価値が高い現実

AIとコンパイラの本質的な違い

  • 「AIがコーディングできる」 という考えへの疑問
  • AIはコンパイラと同等、もしくは現状ではそれ以下 との主張
  • プログラミングAIの最適なモデルはコンパイラ という見解
    • プロンプト(「コード」)を入力し、出力を得る工程
    • インタラクティブな利用も可能だが、元のプロンプトを修正し再実行する方が効率的
  • 英語プロンプト の問題点
    • 英語は仕様の明確化に向かない曖昧な言語
    • 汎用的なワークフローでは機能するが、新規性が増すほど詳細な指定が必要
  • AIワークフローの非決定性
    • 同じプロンプトでも結果が異なる
    • コンパイラは言語仕様に従うが、英語には仕様がない
    • プロンプトの一部変更が全体に非局所的な影響を及ぼす

AIツールがもたらす誤解と問題点

  • AIコーディングが評価される背景 は、既存のコンパイラや言語、ライブラリの未熟さ
  • AI技術が極めて優れたツールを生み出す可能性 は認める
    • ただし、それは「AIがコーディングしている」からではなく、検索・最適化・パターン抽出能力によるもの
    • 実際には人間がコーディングしており、AIは単に異なるプログラミング言語として機能
  • LLMの導入はツール・言語の劣悪さの証左
  • AIが開発者を置き換える現象 は、過去のコンパイラやスプレッドシートによる職業変化と同様

今後のあるべき姿

  • AIをワークフローやコンパイラの一部として捉える視点 の重要性
  • 本質的な技術進化 を無視し、過度な期待や投資が繰り返されている現状への批判
  • 自動運転分野でも同様の批判 を受けた過去
  • 「真実」よりも「金儲け」を優先する思考への憤り
  • AI利用で生産性が20%向上したと感じても実際は19%遅くなる という研究結果
  • 本質的な課題解決(良い言語・コンパイラ・ライブラリ開発) への投資の必要性
    • だが、それは「 hype 」にならず巨額投資を集めにくい現実

Hackerたちの意見

Claude Codeを使って本格的にコーディングを始めたんだけど、ただの雰囲気コーディングじゃなくて、AIを使ったコーディングなんだ。2年間ずっとこのコードベースを扱ってきたのに、全体の理解度がかなり下がってるのを感じる。仲間の質問に答えるのが苦労してるよ。AIを使うべきじゃないって言ってるわけじゃないけど、その影響をちゃんと測って、必要な対策を講じるべきだと思う。生産性が上がるだけじゃないからね。

これが、俺が統合機能を使わない主な理由なんだ。チャットだけ使ってるのは、自分でコードを理解して挿入したいから。そうしないと、コードが理解を超えちゃうからね。

今週、MIDI統合プロジェクトのためにいくつかのPythonスクリプトを書いたよ(異なるケーブルタイプのデバイスが3つある)。何かが失敗したときのために、すぐにデバッグできるようにね(そう、こういうツールはあるけど、学ぶのが好きなんだ)。LLMを使って手伝ってもらうこともできたけど、そうするとあんまり学べなかったと思う。でも、オプションのメニューを表示するための管理ラッパーを作るのにLLMを使ったよ(今はCLIだけど)。それで簡単に1時間は節約できたかな。これが自分にとって「ちょっと複雑」なことに対する快適なレベルだね。

claudecodeを使いたいと思うんだけど、この問題が心配なんだ。どうやって自分を補完するように使えばいいの?裏で全てを書き換えられないようにするには?最適なプロトコルは何かな?常にコミットリクエストとレビュー?

私も似たような経験してる。約15万行のバックエンドコードのコードベースがあるんだけど、一方で、実際にコードを書くときはかなり生産性が上がって、たぶん400%くらい効率的になった気がする。同じ機能を何度も繰り返し改善して、完璧にすることができる。ただ、課題はコードレビューに移ってきた。今は、コードを書くよりも読む時間が圧倒的に多い。強いコード読みのスキルを身につける必要があるよ。私のプロセスは、読む、捨てる、書き直す、再度読む… って感じで、完成するまで繰り返してる。このアプローチは私には良い結果を生んでる。ただ、AIの助けを借りているときに、みんなが同じようにしっかりしたコードを作れるわけじゃないのが問題。多くの開発者は、コードが動けば満足しちゃうからね。私はすべてを手動でレビューするから、言及されていない問題を見つけることがよくある。レビューの際は、全体のコードベースを視覚化して、システムの範囲をしっかり理解するようにしてる。

もうすぐ50歳で、90年代後半からプロとしてコーディングしてる。頭の中でプロジェクトが見えるし、何を作るべきかもわかってる。やってることに対して結構いい報酬ももらってるし、AI反対派のプロトタイプみたいに思われるかもしれないけど、実はそうじゃない。何でも作れるけど、基本的な作業に時間を取られることが多いんだ。AIが退屈な作業をサクッと終わらせて、いい部分にたどり着くのが好き。AIの開発は、ジュニアとミッドレベルの間の開発者に似てると思う。考え抜いた指示を1、2段落渡せば、1時間の作業をこなしてくれる感じ。実際のジュニアが明日のシニア開発者に成長するのを妨げる可能性があるのは深刻な問題だけど、別の問題だね。

AIの助けを借りて作ったプロジェクトを見てみたいな。リンクをシェアしてくれない?

AIが退屈な作業をサクサク終わらせて、いい部分にたどり着くのが好き。特に、うちの組織のシニア開発者たちの中には、いい部分を恐れてAIに反対する人もいる。開発者はしばらくの間、退屈で簡単な作業の安全さを求めることが多いから。AIは仕事を常に難しい問題との闘いに変えてしまう。それが必ずしも良いこととは限らない。もし実際にスキルよりも時間でシニアだとしたら、挑戦的なことを限られた数だけ連続してこなすのは疲れるよね。企業は、AIを使って速くなるのは素晴らしいけど、人々には認知的な影響があることを理解する必要がある。ハードな作業から少し休むのは、時には本当に役立つこともある。全部を取り去っちゃうのは人にとって悪いことだと思う。それに、退屈で簡単な部分が嫌いで、逆に活躍できる開発者もいるから、個々の管理が大事だね。

その通りだね。Hotzは好きなんだけど、彼の説明によれば、すべての開発者は「コンパイラ」でもあるから、無意味な議論だよ。スタートアップの共同創業者として、いろんな役割をこなしている私の生活の質は、Cursorのようなツールが奪われたらかなり落ちると思う。退屈な作業を自分でやるのはすごく精神的な労力がいるから、先延ばしになって、遅れが出て、フラストレーションが溜まるんだ。そういう作業をAIに任せられるのは本当に価値があるし、私は「初日」からこの分野にいるから、どんなタスクを信頼してやらせられるかをよく理解していると思う。例えばこんな感じ: - コード全体にログを追加する - 深すぎる関数呼び出しをきれいなインターフェースのクラスにまとめる - データベースのテーブルから基本的な統計を表示するStreamlitダッシュボードを作る - このLLMプロンプトを修正して、誤字や不一致を直す - そう、英語の指示を英語のコードに「コンパイル」するのもすごくうまくいく! - このSQLテーブルの「create index」行をすべて書いて、パフォーマンスを良くする。実際、今はCopilot Chatに戻ってるけど、あんまり関係ないかな。

そうだね、残念ながら退屈な部分はジュニア開発者がやっていたから、シニア開発者が良い仕事に集中できたんだ。今やAIが退屈な作業をやっているから、あの厄介なジュニア開発者を雇う必要がなくなった。やったね?問題は、ジュニア開発者がシニア開発者を育てる存在だってこと。だから15年後、これはアメリカが得意だったけど、もうできなくなっていることの一つになるだろうね。製造業の重要な職業も同じように。製造業者は自分たちの即時的な利益しか考えていなくて、労働力の基本的な持続可能性や、彼らの業界を支える職業の健康を他の誰かに任せてしまった。まあ、他の人たちも同じことをしていたけど。

AIの力でつまらない部分をサクサク進めて、いいところにたどり着くのが好きなんだけど、問題はそのスピードランが時々すごく時間がかかって、効率が悪くなること。少しずつ改善してるけど(gpt5はすごいよね)、時々すごく地味な問題でつまずいて、介入しない限り無限に戻っちゃうことがあるんだ。しかも、単純な機能的なコードの話をしてる。

AIについては似たような考えを持ってる。私は「パーソナルアシスタント」として使うのが一番だと思ってる。必要な情報を瞬時に、時には非常に焦点を絞って提供してくれるから。 > 実際のジュニアを明日のシニア開発者に育てる成長を妨げる可能性があるのは、深刻な懸念だと思う。これは本当に現実的な問題だと思う。若い人たちがキャリアの初めに業界から締め出されているのを見ていて、すごく悲しい。経営者たちは、AIがまだシニアレベルを置き換える準備ができていないことを知っていると思うけど、すぐにできると自信を持っているから、若者からシニアが育たないことを心配していないんじゃないかな。もし彼らが間違った賭けをしたら、最悪だよね…

自分はコーディング以外のニッチな分野でAIを使ってコードを書いてるんだ。Rustを書くのがめっちゃ楽しくて、ボイラープレートのあちこちに todo!(...) を追加するだけで済むのが最高。AIはそのニッチな分野の専門知識を実装するのが苦手だけど、今は専門知識を説明することに集中できるようになった(英語や擬似コードじゃうまく説明できないから、実際のRustコードでね)。それから「todosを埋めて、テストを書いて、コンパイルとリンティングを通過するか確認して」と言えば、テストがちゃんとチェックしてくれるか確認して終わり。特にニッチな問題に必要な正確な10行のコードを書くのに苦労してたけど、もうそれは諦めた。でも、その魔法の10行の周りの100行のコードを書いてもらうことで、めっちゃ楽になるし、他のプロジェクトにも挑戦できるようになった。

自分の頭の中でプロジェクトがほぼ見えて、何を作るべきかもわかってる。ここでAIが実際に役立つんだ。自分が欲しいもののビジョンがすごく明確だけど、特定のAPIメソッドの名前を忘れちゃったりすることもあるし、すべてのケースを手動で実装したくないこともある。自分が探しているものが何かを知っていれば、出力を検証するのに数秒しかかからないことが多い。出力を自分の望む形にするためには、自分のビジョンの最も重要な制約を捉えたプロンプトを書く能力が必要なんだ。自然言語でアイデアをうまく表現する能力が、ほとんどの開発者にとってのボトルネックだと気づいたよ。アイデアを伝える練習は、他のスキルを磨くのと同じくらい重要なんだ。

何でも作れるけど、基本的な作業に時間を取られることが多い。AIが退屈な作業をサクッと終わらせて、いい部分に早くたどり着けるのが好き。自分も同じような感じだけど(10年は少ないけど)、この点にはあまり共感できないな。退屈な作業になると、自動化や一般化を始めちゃうから、うまくやるのはすごく難しい。そうすると、退屈な作業がほとんどなくなって、自分でタイプする方が早く終わらせられる。経験上、真ん中の部分、つまり重要だけど大きな視点ではない部分が、自分でコードを書くことで常に改善の方法を見つけるところなんだ。だから、オフロードしたいと思うコードの行はほとんどない。ほぼすべてのコード行が、ソフトウェアの未来や自分のスキルを向上させるものだから。長い間同じ場所で働けたのは運が良かったのかも。もし自分のコードを持っていけず、毎回ゼロから始めなきゃいけなかったら、違う意見を持ってたかもしれない。

100%同意。これが自分の働き方をどう変えるか楽しみだよ。今はAIをどうやって忙しくさせるか、出力の質をどうやって高く保つかにもっと気を使ってる。プロジェクトの構造やドキュメントに関係があると思う。マージコンフリクトを避けるためのプロジェクト構造など、いくつかの面倒な問題もあるし、1年後にはAIとの関係が、要件やタスク定義のレイヤーで主に作業を管理するTLのようになると思ってる。新しい開発ツールチェーンも、IDEにあまり重点を置かず、効率的なタスクやプロジェクト管理にもっと重点を置くようになると予想してる。でも、ジュニア開発者の「成長の機会を逃した」というのは大げさだと思う。高レベルの技術が広まったことで、明示的なメモリ管理をしなきゃいけなかった時代を逃した開発者のキャリアに本当に悪影響を与えたのかな?スキルセットがシフトして、不必要なオーバーヘッドがなくなっているだけだと思う。技術的な深さが重要だという議論は尽きないけど、自分の経験では、キャリアで成功するために本当に必要だったことはない。高レベルの言語と同じように、まずは外側から解決策の特性や不変量に焦点を当てて、これらの問題を軽減していくと思う。

これって、AIラボがAIを売り込む方法に根本的な問題があると思う。みんな「AIは実際に考えてる」とか言うけど、実際にAIツールを使ってる身としては、AIを実際の知能として扱うより、パターンマッチングの次のトークン予測として扱った方がずっと役立つんだ。もしコンテキストに詳細を詰め込みすぎると、突然AIが一般化できなくなる。それってパターンマッチングや次のトークン予測に聞こえる。> 「これは『AI』技術が素晴らしいツールを生み出さないって言ってるわけじゃない。ただ、これは検索や最適化、パターンの増加から来てるんだ」と主張するよ。* 基本的なCRUD APIを作るようにClaude Codeに指示すると、1分でできちゃって、1時間分の時間を節約できる。* GitHubで何度もコーディングされたアルゴリズムの実装が必要なとき、AIに頼むと正しい実装を出してくれる。AIを得意な分野で使えばうまくいくけど、そうじゃないとダメだね。

これは知能のレベルに関わると思う。知識じゃなくて、知能ね。特定のタスクにどれだけの思考や推論が必要かを過小評価しがちだよね。時々、AIが驚くような思慮深いことをすることもあって、それは魔法のように感じる。

CRUDやボイラープレートは、ツールの問題だと言えるけど、AIにしかできないこともたくさんあるよ。フルトレースレベルのログを有効にしたテストは、すごく冗長になることがある。人間が100行のテキストの中から関連部分を見つけるのにはかなりの時間がかかるんだ。ただAIに「テストを実行して、根本原因を特定して」って言うだけで、十分にうまくいくから、今ではこれが私の最初のステップになってる。

俺の意見はつまらないかも。冷たい意見?冷凍庫からそのまま出した感じ。彼の言ってることは正しいけど、AIはやっぱりめちゃくちゃ便利なんだ。彼が示唆してるのはパターンのこと。既存のクラスがあるときに新しいクラスのテストスイートを書くのは簡単だし、思いつかなかったテストを提案してくれたり、時間がなくてチェックできなかったテストも考えてくれる。これはテスト以外のコードにも当てはまるよ。構造があれば、新しいものを作ってくれる。DRY原則を守ったLispの装置があれば、ボイラープレートがゼロになることもある。でも実際には、完璧なコードベースを作ってるわけじゃなくて、仕事では読みやすくて、魔法が少なくて、ボイラープレートが多いコードを作ってるんだ。

でも、テストの有用性はどうなの?テストは契約を強制するもので、契約は実装ではなくドメインに関するものだよ。テストの数よりも、実際に何を検証しているかが重要なんだ。コードを見てテストすべきことを知ろうとするのは、間違ってるよ。

もちろん、君の言ってることには一理あるよ。でも、ビジネスは新しい技術を求めて必死なんだ。誰が大きくて誰が小さいかを再定義できるからね。短期的なリターンを追いかけるために、数十億が浮いてる。ファンドマネージャーは、新しい流行に乗らなければ解雇されるし、CIOやCEOもAIに乗らなければ解雇される。まるで核兵器競争みたいだね。誰にとっても良くないけど、他の人がやってるから、自分もやらなきゃいけない。考えてみて。道路に車がなかった頃、人々は同じように幸せだった。車が来て、都市は車のために再設計されて、建物は何マイルも離れたところに建てられ、通勤が新しい常識になった。もはや車が無駄だとは言えない。周りの状況が変わって、車が基本的なニーズになったから。AIも同じことをする。私たちの働き方の文脈を変える。みんなAI(と車)を使うことを期待してる。それが強制的な基本的ニーズになってるんだ。さらに言うと、科学や技術が生み出すもののほとんどは人間にとっての基本的なニーズじゃない。文脈が歪んで、基本的なニーズになってしまった。技術的な解決策は、彼らが解決すると主張する問題を生み出す。問題は解決策が現れる前には存在しなかったんだ。これがビジネスの核心的な推進力だよ。

これはAIに関する一般的なハッカーニュースの集団思考のもっと極端な例だね。Geohotは99.999パーセンタイルの開発者だけど、他の99.999パーセントが彼が理解できないような基本的なことをやっていることを認められないみたい。これは専門家の逆説みたいなもので、もしみんなが専門家と同じくらい賢くて有能だったら、彼らは専門家じゃなくなる。AIのように振る舞う開発者にたくさん出会ったことがある。自分が作ったコードベースを説明できなかったり、一貫性を保てなかったり。まるで航空宇宙エンジニアが、Kinderエッグのおもちゃをデザインする人が流体シミュレーションを理解していないことを信じられないみたいだ。

Geohotは間違いなく99.999パーセンタイルの開発者だと思う。この人を称賛する人をよく見るけど、正直言って彼がやったことに感心したことは一度もない。彼は生産的でエネルギーがあるように見えるけど、同じくらい才能のある人はたくさん見てきたよ。

これだね。彼の専門性が99%の人たち、つまり仕事をこなしたいだけの人たちの視野を狭めてしまったと思う。最近、どれだけの開発者が直接コンパイラを扱ってるんだろう?コードを書いて、赤い下線を直して、プッシュして、祈って、パイプラインが通過するのを待つだけだよね。LLMはこのプロセスで神のような存在になるし、今のがうまくいかなかったら別のを頼むこともできる。

AIについての一般的なハッカーニュースの集団思考には驚かされる。自分の視点から見ると、コメントを読んでどの投稿が上に上がるかを見る限り、HN全体としてはこの技術に対してかなり楽観的に見えるね…

航空宇宙業界で働いてるけど、信じて、航空宇宙エンジニアもあんまり変わらないよ。でも心配しないで。会社は彼らを、何も壊さない場所に配置してるから。大抵はマネージャーになるね。

私は100%バイブコーダーだよ。AIやコンピュータサイエンスは私の分野じゃない。自分にとって役立つアプリをたくさん作ってきたけど、どうやって動いているかは聞かないで。単に動くんだ。確かにエンジニアリングはひどいかもしれないけど、動くには十分だよ。これらの結果を出すのに基本的な英語だけで済むし、「GUIが醜くて混雑してる。もっと良くして、ダークモードにして。」ってAIエージェントに文句を言うだけでいい。仕様が欲しい?「specs.mdを含めて」って感じ。これは20%生産性が上がったって感じじゃない。自分一人では絶対にできない生産性を生んでる。これはAIが優れたコンピュータサイエンスのエンジニアたちの素晴らしい仕事で訓練されたから可能なんだ。でも、この記事はかなり偏った意見だよ。博士号を持っている人だけが科学者だとか、プログラマーだけがコンピュータハッカーだって言ってるようなもんだ。でも実際には、すべての人間が現実の世界で科学者でありハッカーなんだ。インドの街角にいる人は、自分の製品を作って売るための新しい方法を考えたけど、それについて研究論文を書いたわけじゃない。四度目の結婚をした人は、バーで女性と会うのと教会で会うのとで結果に統計的な相関があることに気づいた。岩の隙間に生えた植物は、78.3度の角度で日光を最適に吸収することに気づいて、その方向に成長したんだ。

重要なのはセキュリティだね。アプリがローカルで動いているなら問題ないけど、ネットに接続されていると次のMiraiボットネットの種になるかもしれない。

何を実際に作ったの?

あなたは森の小屋を作って、高層ビルを建てている人たちを批判してるんだね - ゲートキーパー。

CMSやページビルダーが、HTMLやサーバーの知識なしで自分のウェブサイトを作れるようにしてるのと同じだと思う。ウェブ開発者が消えるわけじゃなくて、むしろそういう人たちがページビルダーを使いこなせるようになると、結局はウェブ開発者を雇う必要が出てくるから、今はもっと多くのウェブ開発者がいるんだよね。

「俺は100%バイブコーダーだ。AI/CSは俺の分野じゃない。自分にとって便利なアプリをたくさん作ったよ。これ、俺に結構当てはまるけど、ちょっとだけプログラミング経験はある。1995年から2024年の間に、無援助で5000行くらいのコードを書いたかな。ほとんど楽しめなかったし、自分が特に得意だとも思わなかった。もっと複雑なものを作ると、動くコード数百行を作るのに数週間かかることもあった。2025年に進むと、物流の問題を自動化するための本当に役立つバックオフィスのコードを(LLMと一緒に)共著したんだ。ここにいるほとんどの人には、このプログラムを書くのはそんなに難しくないと思う。APIコールをして、基本的な算数をして、結果をTUIに表示するだけだから。でも、自分で何度も挑戦したけど、APIのドキュメントがクソで、自分の経験不足もあって、結局一つのAPIコールすらできなかった。LLMsがその壁を乗り越えさせてくれて、残りのコードベースを書くのにも大いに助けてくれたけど、一部は手で書いたり、エッジケースの問題を解決するためにデバッグもしたよ。OPとは違って、俺はコードの90%以上が何をしてるかはちゃんと理解してると思う。> これは20%もっと生産的な感じじゃない。これは、自分が一人でやることのはるかに超えた生産性だ。だって、これは俺の分野じゃないから。だから、上の感情がBSだって言ってる人たちには、そうじゃないよって言いたい。プログラミングやテクノロジーで働いたことがない人にとって、これらのツールはものすごく役立つから。」

METRの研究は見出しで注目を集めてるけど、全体を読んでる人は少ないと思う—長かったしね—でもデータは、Cursor/AIに最も経験のある開発者が50%のスピードアップを示していて、学習曲線や小さなサンプルセットでの統計的変動を示唆してる。後の訂正で、スピードアップがなかった別の開発者が経験を正しく表現していなかったことが指摘されたけど、それでも結果の重要性に疑問を投げかける。研究で測定された具体的な時間の無駄は、より速いLLMや並列エージェントを使った改善技術で対処できる。研究は3月にClaude 3.7を使って行われ、Claude Codeの前だったからね。実際にもっと時間を使っていても、20%少なく働いたという感覚を大切にすべきだと思う。楽しんでいると時間があっという間に過ぎるからね!

同じように、ソフトウェア開発者はコンパイラに例えられるかもしれない。言語や視覚情報を入力として受け取り、それをコードに変換するからね。

なんて攻撃的なトーンなんだ。著者の暗黙のコンパイラの定義によれば、人間もコンパイラだよ。(コーヒー入れて、コード出すって言うしね。)でも、コードはデザインとは異なるし、コンパイラとは違って、人間はデザインの合成者なんだ。LLMsを使うことで、コードモンキーじゃなくてシステムアーキテクトとしてもっと時間を使えるようになるよ。