AIがコードを書く時代に「コードを理解すること」の価値はどこにあるのか

「AIに話しかければアプリが作れる」——そんな言説が広まる中、ソフトウェアエンジニアのSteve Krouseが興味深い論考を公開した。タイトルは「コードの死亡報告は大げさすぎる」。Hacker Newsで400以上のポイントを集め、300件超のコメントが寄せられた注目の記事だ。

バイブコーディングの本質と落とし穴

「バイブコーディング(vibe coding)」とは、自然言語(英語)で指示を出し、AIが生成したコードに対して「ボタンをそこに移動して」「もっと青くして」と反応しながらイテレーションを重ねるスタイルだ。英語レベルの感覚(バイブ)のまま操作できるため、非エンジニアでもアプリ開発が可能になる。

しかし、Krouseはここに根本的な問題を指摘する。**「バイブは精度の高い抽象化であるという錯覚を生む」**のだ。

実際、AIエッセイストのDan Shipperがバイブコーディングで作ったテキストエディタアプリがバイラルヒットした後、リアルタイム共同編集機能の実装で致命的な壁にぶつかった事例が紹介されている。「ライブコラボレーション」は誰もがGoogle DocsやNotionで使ったことがあるため、仕様として完全に理解できている気がする。しかし実際には、競合状態の管理、操作変換(Operational Transformation)やCRDTといった複雑なアルゴリズム、ネットワーク障害への対処など、膨大なエッジケースが潜んでいる。

英国の哲学者バートランド・ラッセルの言葉が重く響く。

「物事はすべて、精密にしようとして初めてわかるほど、曖昧なのだ」

抽象化こそがプログラミングの本質

Krouseが強調するのは、抽象化(abstraction)の力だ。人間の脳は同時に7±2個の物事しか扱えない。それ以上の複雑さを扱うには、複数の概念を一つにまとめる「圧縮」が必要であり、この圧縮こそが抽象化だ。

コンピュータサイエンスの先駆者Edsger Dijkstraはこう述べた。

「抽象化の目的は曖昧にすることではなく、その中で絶対的に精確に語れる新たな意味レベルを作ることにある」 具体例として、SlackがいつユーザーにPush通知を送るかを示した複雑なフローチャートが紹介される。エンジニアのSophie Alpertはこれを巧みな抽象化でシンプルなダイアグラムに整理した。ReactJSがUI開発の複雑さを、TailwindCSSがスタイリングの複雑さを抽象化したように、良い抽象化は困難な問題を扱いやすくする。

AGI時代でもコードは必要か

記事は最後にAGI(汎用人工知能)到来後の世界を展望する。月額1000ドルでAndrej Karpathy級の天才エンジニアを100人雇えるとしたら、細かい実装の詳細にこだわる必要はあるのか?

Krouseの答えは「それでも抽象化の理解は不可欠」というものだ。どれだけ高性能なAIがあっても、何が精確な仕様であるかを人間が理解・判断できなければ、AIが生成したシステムの品質を評価することすらできない。コードを書くスキルではなく、複雑さをどう構造化・抽象化するかという思考の枠組みこそが、AIと協働する時代に求められる能力だという主張だ。

日本でも「ノーコード/ローコード」や「AIペアプログラミング」への注目が高まる中、この論考はエンジニアとして何を学ぶべきかを問い直す良い機会を提供してくれる。プログラミングの本質は「コードを書く行為」ではなく「複雑さをコントロールする知的営み」にあるのかもしれない。


元記事: Reports of code’s death are greatly exaggerated