コードの死についての報告は、実際よりも大きく誇張されています。

2026/03/22 20:09

コードの死についての報告は、実際よりも大きく誇張されています。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

この記事は、AI が曖昧な英語を迅速に動作するコードへと変換し、「バイブ・コーディング」ワークフローを可能にする一方で、ソフトウェア開発における明確な仕様、厳密な抽象化、および慎重な設計の必要性が消えるわけではないと主張しています。ブートランド・ラッセルの曖昧さ論、ディクストラの作業記憶限界、そしてダン・シッパーのエディタバグやソフィー・アルペルトによる Slack の通知フローチャートのリファクタリングなど、実際の事例を引用し、適切な抽象化が複雑さを管理しエラーを防ぐ方法を示しています。

歴史的背景として、Google Docs や Notion などの初期共同作業ツール、著者自身の10年にわたる協働機能追加への取り組み、そして Val Town の React‑Router 問題を解決するために開発された Opus 4.6(50 行デモフレームワーク)の創設が紹介されています。

記事は、AI が AGI に近づくにつれ、人間の知能と区別がつかなくなるだろうと予測しながらも、コーディング上の課題は残ると述べています。AI は協働エディタなど複雑なシステムに対してより良い抽象化を生成する手助けができるものの、コード自体は依然として不可欠であると指摘しています。

開発者や企業にとって「バイブ・コーディング」はイテレーションを加速させる可能性がありますが、規律ある抽象化慣行は引き続き維持されるべきです。高度な AI アシスタントが普及しても、ソフトウェア業界は高品質コードと熟練したコーダーを継続的に重視し続けるでしょう。

読者への主なポイント:

  • AI はコーディングを高速化するが、明確な設計の必要性を置き換えることはできない。
  • 抽象化は複雑さを管理する上で不可欠であり、AI はそれらを支援するにすぎない。
  • コーディング専門知識は AI の進歩に関わらず依然として重要である。

本文

2026年3月21日

十分に詳細な仕様はコードです

まず、こんな可愛い漫画から始めます。


1. 「英語の仕様は直感的に正確に思える」――だが…

英語で書かれた仕様は、直感上は正確さを感じさせます。
しかし、苦い経験を経て学ぶと、その正確性が実際には曖昧なままであることに気づくのです(最後のフレームの表情で全てが語られています)。

“Everything is vague to a degree you do not realize till you have tried to make it precise.” – Bertrand Russell

プログラミングは、執筆と同様に「行いながら何をしているか」を反復的に鋭利化していく作業です。
このエッセイを書き上げるまでに何度もドラフトを書いたことを想像できません。AI はその手助けをします:英語を瞬時に実行可能なコードへと変換し、さらに「ボタンをここに移動させて」「色を青くして」などと指示すれば、欲しいものが少しずつより正確に形作られます。

これこそが vibe coding(雰囲気でコードを書く) が完璧な表現なのです。
自分の英語レベルの「雰囲気」で操作しながら、AI が生成した成果物を受け取り、自分の思考を磨くというイメージです。

しかし、vibe coding は「雰囲気が正確な抽象化である」という錯覚を与えます。
それは機能や規模が増えるときに漏れ出し、想定外の振る舞い(バグ)が低レベルの抽象化から現れ、あなたの一日全体を台無しにします。

これは Dan Shipper が自らの雰囲気で作ったテキストエディタアプリがバイラルになり、その後クラッシュした経験です。結局「ライブコラボレーションはただ単に極めて難しい」ことが分かりました。


2. ライブコラボレーション――直感的には完璧に見える仕様

Google Docs や Notion を使ったことがあるなら、ライブコラボレーションは「正確な仕様」であると感じるでしょう。
しかしそれが本当でないことを最初から察知するのは極めて難しいです。私自身も10年前に協働テキストエディタをプロダクトに追加しようとした際、予想外の複雑さに直面しました。その困難さを覚えていません――それこそが問題の一つです。
複雑さは退屈で不快、そして詳細や境界条件をすべて記憶することも困難だからです。

例として Slack が通知を送るタイミングを決定するフローチャートがあります:

(ここに図が入ります)

しかし物語はまだ終わっていません。私たちは複雑さをマスターするための極めて強力なツール――抽象化 を持っています。


3. 抽象化とは何か

人間の脳には基本的な制限があります。一度に考えられる情報は約七(±二)項目です。
それ以上を扱う唯一の方法は、複数のものを一つに圧縮すること――抽象化 です。

“The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.” – Edsger Dijkstra

Sophie Alpert は巧みな抽象化で Slack の図を次のようにシンプル化しました:

(図)

プログラミングの最大の魅力は、複雑さを制御するためにより良い抽象化を生み出すことです。私のお気に入りは関数型プログラミング概念、特にFunctional Reactive Programming であり、私はそのテーマについて素晴らしいエッセイを書きました。協働テキストエディタは本質的に複雑ですが、それは私たちが常により良い抽象化を探し続けているということです――ReactJS や Tailwind CSS がそれぞれの領域で行ったように。


4. AGI(汎用人工知能)への展望

AI は速度・精度・コストが驚異的なスピードで向上しています。いつになるかは分からないものの、魔法を信じていない限り、機械知能が人間知能と区別できなくなる時点――AGI ―まで時間が経つだけです。

AGI 世界は「雰囲気」世界に見えるかもしれません。誰もが 100 Karpathy レベルの天才を月額1,000ドルで手に入れることができれば、細部に悩む必要はないでしょう。しかしそれは私にはジョークです。実際には、技術が到達する前から抽象的にしか考えられません。

もし私がそのレベルの知性を持っているとしたら、私はもっと汚いコードを書き出すことは決してありません。そうじゃないでしょうか?

多くの人は「コードはソフトウェアだけでなく、その自体も重要な成果物だ」という事実を誤解しています。正しく書ければコードは詩です。私がこれを語るのは、スチューデントシンドロームや利益追求ではありません――車が発明されたとき馬術師が持つように。


5. 執筆との類推

「vibe writing(雰囲気で書く)」という言葉が存在しないのは、まさにその証拠です。
文法的に正しい文章には何も神秘的なものはありません。ChatGPT が偉大な小説家やジャーナリストを職業から追い出すとは誰も主張していません。私たちはそれが非論理だと知っています ―ただし AGI になるまでは。

定義上、機械は素晴らしいノン・スロープコードを書き、作り出すことができます。同じ状況がコーディングに当てはまります:AI はますます悪いコードを減らします。私たちはこの限界を乗り越えるために AI を活用し続けています。

Simon Willison が言うように、AI はより良いコードを作る手助けをすべきです。AGI が登場するとそれは容易になります。最初に取り組むのは最も難しい抽象化問題でしょう。私たちは AI を使ってより良い抽象化を設計し、複雑さを理解・制御できるようにします。

AI が賢くなるにつれて「良いコード」の必要性がなくなると考える人もいますが、それは ChatGPT で汚いコードを書き続けることに他なりません。AGI が出現したら、私たちは AI を使って抽象化を改善し、協働テキストエディタライブラリなどをよりよく作ります。

例えば、Opus 4.6 の成功例として、私は Val Town 用のフルスタック React フレームワーク構築に役立てました。React Router 7 を完全に統合した問題を一発で解決し、結果は私の新しい VTRR フレームワークです。


6. 50 行で完結するフルスタック React アプリのデモ

(コードサンプルが入ります)

もしこれと同等に複雑さを美しくマスターできる別のスニペットをご存知なら、ぜひ拝見したいです。


7. 「コードは死んだ」という報道は大げさ

社会の約99%がコードは死んでいると同意しています。昨日、ポッドキャスター Sam Harris が自信満々に「誰もコードを学ぶ必要はなくなった」と語っていました。これは非常に悲しいことです。印刷機が発明された頃に物語性が死んだと考えるのと同じです。実際、コードは始まったばかりです。AI はコーディングを大きく前進させるでしょう。

このトピックについてもっと話したいですが、すでに三倍以上長くなってしまいました。ここで一旦止め、私のお気に入りのフォーマリズムに関する名言を残します。

“Instead of regarding the obligation to use formal symbols as a burden, we should regard the convenience of using them as a privilege: thanks to them, school children can learn to do what in earlier days only genius could achieve.”
– Edsger W. Dijkstra, On the foolishness of “natural language programming”

“There are two ways of constructing a software design: one way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies.” – Tony Hoare (h/t Paul Buchheit)

“The quantity of meaning compressed into a small space by algebraic signs is another circumstance that facilitates the reasonings we are accustomed to carry on by their aid.” – Charles Babbage, quoted in Iverson’s Turing Award Lecture, quoted in Succinctness Is Power by Paul Graham


同じ日のほかのニュース

一覧に戻る →

2026/03/23 3:23

**PC Gamer 推奨RSSリーダー(37 MBの記事でダウンロードが止まらない場合)** - **Feedly** - クラウドベースでデバイス間同期が可能。 - カテゴリー分けやタグ付け機能が充実しています。 - **Inoreader** - 高度なフィルタリングと検索機能を備えています。 - オフライン閲覧モードもサポートします。 - **The Old Reader** - シンプルで軽量、Googleアカウント連携が可能です。 - 共有リストやコメント機能があります。 - **NewsBlur** - AIによるトピック分類と学習機能を提供。 - モバイルアプリも充実しています。 - **Reeder (macOS/iOS)** - Appleデザインに合わせた直感的なUIです。 - 多数のリーダーサービスと連携可能です。 **注意点** - 大容量の記事をダウンロードし続ける場合は、**「オフライン保存」機能**をご利用ください。 - **キャッシュクリア**や**ブラウザ拡張機能無効化**で問題が解決することもあります。 - それでも解決しない場合は、PC Gamerのサポートへ問い合わせるか、別のリーダーを試してください。

## Japanese Translation: PC Gamerの記事は、読者に通知ポップアップ、背景を暗くするニュースレターオーバーレイ、そして少なくとも5つの閉じにくいバナー広告でページを襲撃していることを示しています。ウェルカムマットを回避した後でも、その広告は記事のタイトルとサブタイトルの横に残ります。初期ページロードは37 MBです;5分以内にサイトはさらに約0.5ギガバイトの広告素材をダウンロードします。NetNewsWire、Unread、Current、Reeder など多くの RSS リーダーはこれらの侵襲的要素をフィルタリングでき、よりクリーンな閲覧体験を提供します。これはユーザーが PC Gamer サイトの煩わしさを避けるために広告なしの RSS フィードに切り替える可能性があることを示唆しており、出版社は読者の関与を維持するために過度な広告戦術を減らす圧力を受けるかもしれません。

2026/03/23 4:02

「最適化のゴールドスタンダード:ローラーコースター・タイクーンの内部を探る」

## Japanese Translation: クリス・ソーヤーの *RollerCoaster Tycoon*(1999)は、ほぼすべてのコードをアセンブリで書き、細部にわたる低レベル最適化を施したことで、滑らかなゲームプレイのベンチマークを確立しました。金額は最大想定範囲にちょうど合ったデータ型(ショップ価格は1バイト、総公園価値は4バイト)で保存されており、後にオープンソース再実装 OpenRCT2 ではこれらを統一的な8バイト変数へ移行し、現代のCPUアーキテクチャに合わせました。乗算・除算の代わりにビットシフト(`<<`/`>>`)が使用されており、コンパイラが自動で行うはずだった処理を手動で実装しています。 ゲームデザインの決定は性能制約と密接に結びついています。ソーヤーはデザイナー兼プログラマーとして、CPUフレンドリーな計算を優先する設計選択が可能でした。ゲストの移動はアトラクションへ向かう完全な経路探索ではなくランダムウォークに依存しており、多数のエージェントによる高価な計算を大幅に削減しました。パスファインディングは特定のシナリオ(例:乗物修理のメカニック、出口を探すゲスト)でのみ呼び出され、深さ制限が設けられています—デフォルトでは5つのジャンクション、条件に応じて7または8に増加し、フレームスパイクを回避します。混雑した道では同一タイルに複数のゲストが存在でき、衝突回避は完全に省かれ、近接による幸福度計算のみが影響を受けます。 OpenRCT2 はこの元のロジックをリバースエンジニアリングし、現代CPU向けに変数サイズを標準化し、パスファインダーの制限を拡張することで更新しました。これにより、レガシートリックが新しいハードウェアに適応できることが示されました。将来のアップデートでは、衝突チェックや厳密なデータサイズといった古い制約を緩和しつつ、今日のマシンで性能を損なわずにコア体験を保持することが可能です。 これらの洞察は、デザイナーとプログラマーの緊密な協働と意図的な低レベル最適化が、小規模チームでも高性能ゲームを構築できることを示しており、大手スタジオも採用すべきアプローチです。 ## Text to translate (including missing points):** Chris Sawyer’s *RollerCoaster Tycoon* (1999) set a benchmark for smooth gameplay by writing almost all of its code in Assembly and applying meticulous low‑level optimizations. Money values were stored in data types sized exactly to their maximum expected range (1‑byte for shop prices, 4‑bytes for total park value), and the original engine later shifted these to uniform 8‑byte variables in the open‑source reimplementation OpenRCT2 to match modern CPU architecture. Bit shifting (`<<`/`>>`) was used instead of multiplication/division by powers of two, a manual trick that compilers no longer perform automatically. Game‑design decisions were tightly coupled with performance constraints: Sawyer served as both designer and programmer, allowing design choices to favor CPU‑friendly calculations. Guest movement relied on random walking rather than full pathfinding toward attractions, drastically reducing expensive calculations for thousands of agents. Pathfinding was invoked only in specific scenarios (e.g., mechanics repairing rides, guests seeking exits) and had a depth limit—default 5 junctions, increased to 7 or 8 under certain conditions—to avoid frame‑spikes. Overcrowded paths allowed multiple guests on the same tile; collision avoidance was omitted entirely, with only happiness calculations affected by proximity. OpenRCT2 reverse‑engineered this original logic and modernized it—standardizing variable sizes for current CPUs and extending pathfinder limits—showing how legacy tricks can be adapted to new hardware. Future updates could relax some of these old constraints (such as collision checks or strict data sizing) without harming performance on today’s machines while still preserving the core experience. These insights underscore that close collaboration between designers and programmers, coupled with deliberate low‑level optimization, enables small teams to build high‑performance games—an approach larger studios might emulate.

2026/03/23 0:16

**バージョン管理の未来** バージョン管理は、従来型のリポジトリやブランチモデルを超えて進化しています。新たに浮上している動向としては、AI 主導の変更分析、分散したチーム間でのリアルタイム協働、および継続的デリバリー・パイプラインとの緊密な統合が挙げられます。コードベースがより大規模かつ複雑化するにつれて、これらの革新はワークフローを合理化し、マージコンフリクトを減少させ、全体的なソフトウェア品質を向上させることを約束しています。

## Japanese Translation: **Manyana** は、Conflict‑Free Replicated Data Types(CRDTs)がバージョン管理にどのように利用できるかを示すデモプロジェクトです。ユーザー体験を向上させます。 ファイルは *weave* として表現されます——1 つのデータ構造が、追加または削除された各行とメタデータを記録し、行順序を永続化し、同時挿入に対してマージ全体で一貫した順序を提供します。 CRDTs は順序非依存ですので、マージが失敗することはありません。衝突はファイルの同じ部分を編集したときだけ発生し、不透明なマージブロブではなく明確な競合マーカーが生成されます。 システムはまた、リベースが履歴を破壊せずに行えることも示しています:コミットは新しいベース上で再実行され、「プライマリー・アニサスター」注釈によって完全な祖先関係が保持されます。 チェリーピッキングとローカル Undo はまだ実装されていませんが、470 行の Python デモ(パブリックドメイン)は、CRDTs がバージョン管理における難しい UX 問題を解決し、現在のツールよりも明確な競合表示を提供できることを示しています。