The programmers who live in Flatland

2025/11/28 0:44

The programmers who live in Flatland

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

要約

Japanese Translation:

改良版要約

この記事は、特にClojureでのLispスタイルマクロシステムが「高次元的」なプログラミング手法を提供すると主張している。これは、Flatland が二次元以上の次元をイメージ化した例と同様である。コードがコンパイル時に他のコードを生成・変換できることで、マクロは単なる構文操作から強力な意味論的制御へプログラマーを移行させ、新たな表現層を実質的に追加する。

著者はこの主張をいくつかの具体例で裏付けている。Paul Graham の 2001 年エッセイ「Beating the Averages」(Viaweb の成功を Lisp マクロに帰したもの)や、十五年にわたる個人的な Clojure マクロ作成経験、コンパイル時ロジックと構文木の書き換えデモなどである。また、エコシステムへの懸念や括弧の奇妙さという実際的障壁を取り上げ、それらに対抗して Clojure のシームレスな Java 連携を強調している。

「ブルーブ・パラドックス」(Graham が指摘する、強力な言語がしばしばニッチであるという観察)は、多くの開発者がマクロ採用に躊躇する理由を説明するために使われている。記事は、この本能的バイアスを克服すれば、プログラマーが「Flatland」に留まるのではなく、高次元プログラミングを受け入れられるようになると結論付けており、Clojure や類似 Lisp を使用する企業の生産性向上やコンパイル時メタプログラミングの業界全体への採用拡大につながる可能性があると示唆している。

本文

「フラットランド」から学ぶプログラミングのメタファー

「フラットランド:多次元のロマンス」 という書籍は、三角形や四辺形、円といったポリゴン型の生物が暮らす二次元世界「フラットランド」を舞台にしています。主人公である正方形は、第三次元から来た球体(スフィア)に訪問されます。正方形は他の次元の存在を理解しようと苦闘しますが、球体は不可能と思われる事柄を見せつけていきます。この本は、私が初めて読んだころから約30年間、ずっと頭に残っている素晴らしい作品です。

私は気づいたのです。「フラットランド」は、多くのプログラマの心構えを象徴する完璧なメタファーであるということ。2001 年、テック界で最も影響力のある人物の一人、ポール・グレアムはエッセイ「平均を打ち破る(Beating the Averages)」を書きました。彼はリスプが他言語より根本的に強力であり、そのために自分のスタートアップ Viaweb が競合他社を凌駕できたと主張します。そしてマクロがリスプならではの特徴だと挙げています。グレアムはこう述べます。

コードの大部分は、ほかの言語で実装するのが非常に難しいことを行っていました。その結果として、私たちのソフトウェアは競合他社のソフトウェアにはできないことを可能にしました。何らかのつながりがあるのではないでしょうか。ぜひその線を追いかけてみてください。

私はその「線」を辿りました。そして、このエッセイこそ、過去 15 年間で私が主に使用してきたプログラミング言語として Clojure を選んだ大きな理由です。グレアムが指摘したマクロの力は確かに真実でした。しかし、同じ好奇心を持つ人はほとんどおらず、Lisp / Clojure は世界中のプログラマのほんのわずかな割合でしか使われていません。どうしてでしょう?

多くの人が「エコシステム」が障壁だと指摘します。これは Common Lisp には当てはまる議論ですが、Clojure は最も大きなエコシステムの一つと容易に相互運用できるため、そうではありません。誤解が支配しており、特に「括弧が奇妙だ」という反射的な反応があります。もっと重要なのは、これらの認知されたコストを Clojure の膨大なメリットと比較することがほぼ見られない点です。本稿ではマクロに焦点を当てますが、Clojure が状態と同一性(identity)に対して持つアプローチも変革的です。その利点のスケールは採用率を圧倒します。

グレアムのエッセイで彼が紹介した「ブルブ・パラドックス(blub paradox)」は、この不一致を説明する一例でした。多くの場面で私はこのメタファーを引用してきました。本稿では、ブルブ・パラドックスに補完的な別の観点から同じ問題を解説します。

リスププログラマがその力を伝えようと試みてきた歴史は 50 年以上あります。心変わりを期待することは難しいかもしれません。しかし、「フラットランド」のメタファーが非常に当てはまるため、書く価値があると感じました。


プログラミングの次元

プログラミングは抽象化を中心に回ります。ビットや機械命令、メモリ階層という低レベルのプリミティブから遠く離れた、高水準でコードを考える方法です。すべての抽象化が同じ価値を持つわけではありません。多くは自動化であり、名前の背後に一連の操作をまとめるパッケージのようなものです。関数はその典型例です――入力を受け取り出力を返します。その内部実装を知る必要はなく、仕様と性能特性だけで考えれば十分です。

対照的に、稀に見られる抽象化は「プログラミング自体の代数」を拡張します。つまり、利用可能な基本概念やそれらの間に存在できる関係の種類を増やすことで、新たな次元を創出します。

リスプ/Clojure のマクロは言語の均質性(uniformity)から派生し、言語自身を再構築することを可能にします。コンパイル時にも実行時と同様にロジックを走らせることができ、同じ関数やテクニックを使って構文木(syntax tree)を自在に操作・変換できます。これによりコード自体の意味論(semantics)を制御できるようになります。コンパイル時をこんなに簡単に扱えることは、プログラミングにおける新しい次元です――それは低い次元で書けるよりも根本的に優れたコードを書く手段を提供します。

リスププログラマならマクロの力とその落とし穴を知っています。私の説明が退屈に聞こえるかもしれません――それはあなたが既に何千回もやってきたからです。しかし、まだ経験したことがない人にとっては、私が語る内容は「狂ったようでありながら実行可能」だと感じるでしょう。

フラットランドでは、正方形は第三次元を理解できません。なぜなら彼は 2D のみでしか思考できないからです。同様に、新しいプログラミングの次元を理解するには、その次元で考える方法を学ばなければなりません。新しい次元が提供するものを把握するための表現機構(representational machinery)が欠如していると、2D に閉じ込められたプログラマは 3D の概念を客観的に誤っていると結論付けてしまいます――それは理解したわけではなく、自分の座標系に押しつぶされるからです。


新しい次元への学習

2D にいる人を 3D で説得することはできません。これはフラットランドで球体が正方形に「上」や「下」を説明できない理由と同じです。

しかし、このメタファーには限界があります。脳は四次元空間を完全に把握できなくても、プログラミングの新しい次元へ適応できます。リスプ/Clojure を採用した人々は、「最初は戸惑い、次に一瞬の明晰さ、そして最後には戻れないと感じる」という体験をよく語ります。

必要なのは好奇心と「最高のプログラミングアイデアはしばしば最初に評価できない」ことを理解する姿勢です。この認識こそが会話で失われやすい鍵洞察です。私たちは皆、そうした認知バイアスを抱えています。それを認めるだけで打破でき、プログラマとして成長する最良の方法の一つです。マクロはその次元シフト性を持つ素晴らしいアイデアの一例に過ぎません。


結論

結局のところ、フラットランドに住むかどうかは選択です。その選択は、未知の概念に対して本能的に反発する瞬間に現れます――「これは意味が取れない」 versus 「まだそれを理解できる概念が足りない」。その瞬間にあなたが何をするかで、フラットランドに留まるか、それとも抜け出すかが決まります。

同じ日のほかのニュース

一覧に戻る →

2025/12/08 2:18

I failed to recreate the 1996 Space Jam website with Claude

## Japanese Translation: ## 要約 著者は、Claude AI を使って 1996 年の Warner Bros の「Space Jam」ランディングページをスクリーンショットとアセットフォルダから再構築しようとしました。元のサイトは 200 KB 未満の単一 HTML ファイルで、絶対位置決め、テーブルレイアウト、およびタイル状の星空 GIF 背景に依存しています。 **プロセスと所見** 1. **初期試行:** Claude は概算レイアウトを生成しましたが、惑星軌道を誤った位置に配置しました。軌道パターンは認識できたものの、それを再現することには失敗しました。 2. **構造化プロンプト:** 著者は Claude に「知覚分析」「空間解釈」「再構築計画」の各セクションで理由を説明させ、正確なピクセル座標を要求しましたが、Claude はそれらを提供できませんでした。 3. **カスタムツール:** 精度向上のために 50 px → 5 px のグリッドオーバーレイ、ラベル付き座標参照点、色差比較、スクリーンショットサイドバイサイドビューア、およびスクリーンショットを 6 区域に分割するスクリプトを構築しました。 4. **結果:** Claude の調整は目標から 5–10 px 内に留まりましたが、正しい軌道半径(約 350–400 px)には決して収束しませんでした。内部レイアウトが生成されると、その後のフィードバックは元のスクリーンショットではなく、この誤ったモデルに基づいて行われました。 5. **トークナイズ仮説:** 著者は Claude が 16×16 パッチで画像をトークナイズしているため、細かい視覚的粒度が欠如し、セマンティック理解はあるもののピクセル精度が低いと考えました。 6. **ズームインテスト:** 200 % に拡大したスクリーンショットを提供して、大きなパッチで解像度が向上するか確認しましたが、Claude は依然として比例スケーリング指示に従いませんでした。 **結論** このタスクは未解決のままです。実験は Claude の空間推論限界をベンチマークとし、ピクセル単位で正確な画像再構築におけるモデルの現在の制約を示しています。

2025/12/08 7:18

How I block all online ads

## Japanese Translation: > **概要:** > 著者は、ウェブブラウザとモバイルアプリの両方で広告を排除するために長期的かつ多層的なアプローチを説明しています。彼は **Firefox + uBlock Origin** と最小限のフィルタリスト(組み込みのuBlockフィルタ、EasyList、AdGuard – Ads)と「広告でない不快要素」のためのカスタム非広告フィルタを使用します。 > DNS フィルタリングには **Pi‑hole(または AdGuard Home)** を Docker 上で $5 の DigitalOcean ドロップレットに稼働させ、WireGuard VPN の DNS サーバとして設定しています。トラフィックは **クラウドベースの VPN**(DigitalOcean、Hetzner、Azure、Google Cloud、または AWS)を経由し、プラットフォームが公的クラウド IP を検知して広告配信を減らします。 > この設定では **Cloudflare のキャプチャや HTTP エラー** が発生する場合があるため、著者は該当サイトで VPN を無効化しています。また、**Consent‑O‑Matic**(クッキーポップアップ)、**Buster**(キャプチャ)、**SponsorBlock**(動画広告)などのブラウザ拡張機能を推奨します。iOS では **Background App Refresh** をオフにするとデータ収集が減少し、Android では **ReVanced がアプリをパッチできますが、セキュリティリスクがあります** と指摘しています。 > 著者はこの統合戦略を 3 年以上使用しており、現在ほとんど広告を見ることはありません。プラットフォーム別の効果は異なります:YouTube は uBlock Origin + VPN(1週間〜1か月)が必要;Instagram は uBlock Origin のみで十分;Twitch は主に VPN に依存し、数日で効果が現れます;TikTok は両方のツールを使用しますが、数時間だけです。**AdMob** を利用するアプリも DNS ブロックの恩恵を受けます。 > 広告配信ネットワークは数日から数週間でパターンを観察し調整する可能性があるため、継続的な監視が必要です。著者は **Firebog** をブロックリストの良い情報源として引用し、正当なサイトを壊さないように許可リスト(allowlist)を維持する重要性を強調しています。

2025/12/07 23:37

Dollar-stores overcharge cash-strapped customers while promising low prices

## Japanese Translation: ドルジェネラルとファミリードラーは、棚に貼られたタグの価格よりも高い価格で顧客を頻繁に請求し、低所得層の買い物客に不釣り合いな過剰課金が広く発生しています。州検査と独立調査では、一部店舗でエラー率が88%に達するケースや、両チェーン全体で価格設定失敗が一貫して報告されています。 主な例としては、ノースカロライナ州ウィンザーのファミリードラーで23%のスキャンアイテムが過剰請求(同店の4回連続失敗)、オハイオ州ハミルトンのドルジェネラルで76%のエラー率(2022年10月)、ニュージャージー州バウンドブルックのファミリードラーで68%の不一致(2023年2月)があります。2022年1月以降、ドルジェネラルは4,300件以上、ファミリードラーは2,100件以上の価格失敗事例を記録しています。 アリゾナ州(60万ドル)、コロラド州(40万ドル)、ニュージャージー州・バーモント州・ウィスコンシン州・オハイオ州(最大100万ドル)など複数の州がチェーンと訴訟を和解し、連邦および州の司法長官は追加訴訟を提起しています。株主訴訟では、経営陣がシステム的問題を認識していたと主張されています。ニュージャージー州の連邦裁判所は、モバイルアプリ利用に関連する仲裁条項を理由にドルジェネラルに対する集団訴訟を停止し、消費者の救済手段を制限しました。 規制当局は現在の1検査あたり5,000ドル上限を超えるより厳格な執行や高い罰則を課すことができ、さらに州が調査を進めるにつれて追加の和解が生じる可能性があります。影響としては顧客信頼の低下、チェーンへの潜在的財務損失、評判へのダメージ、およびドルストア業界全体での価格設定と人員管理の強化への動きが挙げられます。