ディスカッション (11件)
AIの台頭により「もう人間がコードを書く必要はない」という極論をよく目にしますが、それはあまりに誇張された表現です。マーク・トウェインの名言をもじったこのフレーズが示す通り、プログラミングの本質が失われることはありません。今はただ、開発のスタイルが次なるフェーズへ進化している過程に過ぎないのです。
チャットボットでのコーディングが当たり前の世界で、どうやって新しい技術に進歩していくんだろう?AIは多くの人の過去の成果物で学習してるわけじゃん。もし新しい言語やフレームワークみたいに「先行例」がなかったら、AIモデルは苦戦するよね。開発者のクリティカル・マス(十分な数)がいなかったら、AIが必要とする膨大な学習データって一体どうやって生成されるんだろう。
社会の知的な才能の多くがソフトウェアに割り振られすぎてる。優秀な人たちの多くがアドテクや監視システム、あるいは隣人の注意をいかに引きつけるかってことに心血を注いでるんだよね。今の技術者の配分は市場の失敗かもしれないし、コーディングへの破壊的変化が、人材の再配置を促すきっかけになるかもしれない。
r0mlの第三法則によれば、「データ交換に基づく分散システムは、プログラム交換に基づくシステムに置き換わる」らしい。コンピューターへの命令を生成するための、より抽象度の高いインターフェースでも、同じパターンが避けられないと思う。言語の使用は、最終的には厳密な構文に従い、決定論的な結果、つまり「コード」を生成しなきゃいけないんだ。ソース: https://www.youtube.com/watch?v=h5fmhYc4U-Y
Swiftの生みの親、クリス・ラトナーが最近Claude AIが書いたコンパイラを見たらしいんだけど、生成されたコードに革新的なものは何一つなかったって[1]。だからこそ、最先端を切り拓くには人間が必要なんだ。AIは「常識」を受け入れがちで、そのせいで真の意味での批判的思考が苦手だし、自力で技術を進歩させることはできない。AIは膨大な人間の成果物を学習して、既存の思考のど真ん中にある答えを出す。人間は時として立ち止まって常識を疑うけど、AIは自発的にはそんなことしない。挑戦するよりコンセンサスに合わせちゃうんだよね。結局、知識を独自に押し進めることはできない。AIの助けを借りてイノベーションを起こすことはできても、AIにはまだ人間の方向性が必要なんだ。AIに批判的に考えるよう促すことはできるけど、結局は平均に回帰しがち。会話が共通認識から外れると、安全な中間地点に引き戻そうとするのを感じるよ。90年代後半のAppleの「Think Different」キャンペーンにある通り、「世界を変えられると本気で信じているクレイジーな人間こそが、本当に世界を変える」んだ。はみ出し者や反逆者、厄介者。AIはそういうのじゃない。AIは順応者だ。それが強みであり、弱点でもある。[1] https://www.modular.com/blog/the-claude-c-compiler-what-it-r...
1週間前、ドナルド・クヌースがAIに未解決の証明を頼んだら解を見つけたって記事があったね。クヌースほどの人でも既存の真実を見つけられなかった可能性はあるけど、みんなが(その時の俺も含めて)疑ったのには理由がある。俺はCコンパイラなんて書いたことないけど、もし金をもらって書いたとしても(数年はかかるだろうけど)、この分野はやり尽くされてるから革新的なことなんて何一つできないと思う。他のコンパイラと違う点があるとしたら、それはきっと、コンパイラの書き方を知ってる人なら絶対にやらないようなバカなことを俺がやらかした時だけだろうな。
Krouseがサイモン・ウィリスンの素晴らしい記事を引用してるけど、そこでは「バイブ・コーディング(vibe coding)」のキラーコンテンツは、単に速く書くことじゃなく、コードを「より良く」することだって提案されてる。異なる設計モデルに基づいたプロトタイプを生成することで、可読性、信頼性、耐障害性といった特定の基準で成果物を評価して、より目的に叶うように素早く修正を繰り返せるようになる。そうなれば、バイブ・コーディングの成功体験は、単に「動いた!」とか「こんなに早く作れた!」なんてレベルじゃなくなるはずだ。
新しい技術が出てくるたびに、可能性に興奮して極限まで使い倒そうとするフェーズを経て、それが何に長けていて何ができないのかを理解し始めるのは避けられないことだよね。ハイプ・サイクルは鼻につくけど、人間が物事を理解するプロセスとして受け入れているよ。子供みたいに、正しく使えるようになる前に、まずは使い倒してボロボロにする必要があるんだ。エージェント型プログラミング(agentic programming)の約束事があまりに話が良すぎて怪しいってことは、エンジニアとしての経験から多くの人が感じてるはず。でも、専門家は常に少数派だから、他の人たちが苦労して同じ直感にたどり着くのを待つしかないんだよね。
プログラミング言語の方が自然言語よりも意図を正確にカプセル化できる、っていう意見には同意する。でも、その逆、つまり自然言語の方が意図を濃密かつ正確に伝えられる場合の方が多いんだ。ラッセルの名言をこういう文脈で使うのはちょっと皮肉だよね。機械の実行コンテキストにガチガチに縛られた言語で記述されると、読み手にとって僕の意図がかえって不透明になることがよくある。優れた抽象化はそのズレを削ぎ落としてくれるし、強力な言語のDSLは自然言語に近いものを反映してきた。コードはただのコードじゃない。意図を情報量と意味の詰まった形でカプセル化しているコードはもはや詩だし、おそらく最良の表現方法だよ。一方で、実装の詳細に過ぎないコードも多い。Electric Clojure版の方が、意図をはるかにうまく表現できている(https://electric.hyperfiddle.net/fiddle/electric-tutorial.tw... )。既存のクライアント・サーバー構成があるなら、自然言語で「サーバーとクライアントのUnixエポックタイムをライブ更新で表示して、そのズレを表示して」ってやるのが、おそらく一番いい。最後はウィトゲンシュタインで締めよう。「ぼんやりした画像をくっきりした画像に置き換えることは、常に利点なのだろうか? ぼんやりした画像こそが、まさに我々が必要としているものだということはないだろうか?」
AIがすぐに俺の代わりになるとは思ってないけど……。でも、AIのおかげで言語のことよりアルゴリズムに集中できるようになったし、テストを書くのも手伝ってくれる。コンパイル前に改善案を出したりバグを見つけたりもするし、ツールも書いてくれる。毎月数千円払う価値は十分あるよ。会社が払ってくれてるから自腹じゃないんだけど。半年前は「AIは大したことない、英語よりコードの方が正確だ」なんて言ってたけど、前者の「大したことない」はもう当てはまらなくなった。後者の「コードの方が正確」っていうのは今も正しいけど、多くのケースではもはや重要じゃなくなってるんだ。AIについて指図するような記事にはもううんざり。極端な議論はどれも聞き飽きたし無意味だよ。
今、ツリー構造内で墓石(tombstone)を使わずに移動・並べ替え・削除ができる新しいタイプのCRDTを書いてるんだ。Claude Codeは便利なんだけど、削除処理のたびに「正当性には墓石が必要だ」って勝手に戻してくるんだよね。普通のやり方ならそうなんだけど、そもそも墓石を避けるためにこれを書いてるんだっての! 結局、最終的には俺が正しいってことをClaudeに納得させたけど、そのためにはあらゆるケースで順序が守られることを示す構造的証明をほぼ自前で書く羽目になった。それでも、コードを整理させるとまたリセットされがち。こういうシステムには、まだ理解しきれていない微妙なニュアンスがたくさんあるね。