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

プログラミングの美しさ (2001)

2025年9月24日原文(brynmawr.edu)

概要

  • Linus Torvalds によるプログラミングの魅力についてのエッセイ
  • プログラミングは 創造性論理性 を融合させる活動
  • 物理学数学 との共通点と違いについての考察
  • オペレーティングシステム 開発の意義と難しさ
  • 問題解決における 美しさ発見 の喜び

プログラミングの魅力

  • プログラミングは チェス 以上に奥深いゲーム
  • 自分自身でルールを作り出す ことができる自由度
  • 外から見ると 退屈 に見える活動
  • コンピュータは 命令通りに動作 し、永遠に従順
  • ただし、 盲目的な従順さ だけでは魅力に欠ける
  • 自分で方法を考え出す 必要性がプログラミングの面白さ

物理学・数学との比較

  • コンピュータサイエンス は物理学に似ている側面
  • 物理学は 既存の世界の仕組み を探究
  • プログラミングは 自分で世界を創造 できる点が異なる
  • コンピュータ内の世界 では自分が創造主
  • 制約は マシンの能力自分自身の能力

芸術と工学の融合

  • ツリーハウス の例で、機能性と美しさの違いを説明
  • プログラミングは 芸術性と工学的思考 の融合
  • 機能性よりも 創造性や美しさ が重視される場合も多い
  • 創造的な活動 としてのプログラミング

数学的世界とプログラミング

  • プログラミングの魅力は コンピュータの仕組み を理解する過程
  • コンピュータは 数学の世界 と同様、独自ルールで構築可能
  • 自己矛盾のない世界 を作る必要性
  • 美しい世界には 欠陥がない ことが重要

新しい世界の創造と視覚化

  • コンピュータは 新しい世界の創造可能性の発見 を可能にする
  • Mandelbrot集合 のようなフラクタル図形の視覚化
  • 純粋に数学的な世界を コンピュータで可視化 できる意義
  • プログラミングによる 新しいパターンや美しさ の発見

問題解決とプログラマの資質

  • 多くの場合は 特定のタスク解決 のためのプログラム作成
  • 思考力 が求められる作業
  • 長時間画面を見つめて考え抜く オタク的資質

オペレーティングシステム開発の意義

  • OS はコンピュータ上の全てのプログラムの基盤
  • OS開発は 究極の挑戦
  • OSは 仮想世界の憲法 のような役割
  • 他のプログラムは 通常法 に相当

問題解決の美しさ

  • 最適な解法 を見つける喜び
  • 問題の本質を見抜き、 新しい視点 で解決する重要性
  • Carl Friedrich Gauss の逸話による説明
    • 1から100までの合計を パターン認識 で瞬時に解決
  • プログラミングでも 美しい解法 が最良とされる

発見の喜び

  • 壁にぶつかりながらも、美しい解決策を見つけた時の達成感
  • 三日間悩んだ末の発見 が最高の瞬間
  • プログラミングの本質的な魅力は 創造と発見

Hackerたちの意見

その頃はもっと楽しかったな。

同意!誰かがご飯をくれて、寝かせてくれて、おむつを替えてくれるなら、指一本動かさずに済むよね。

もちろん、でも夜間にC言語でプログラミングして、1999年のように振る舞うこともできるよ。誰かが指摘したように、家ではKubernetesやマイクロサービスなんて必要ないし。

まだ2001年みたいにコーディングしてるよ!

フレデリック・ブルックスの言葉が好きだな: 「プログラミングはなぜ楽しいのか?プログラマーが期待する報酬は何か?まずは、ものを作る楽しさだ。子供が泥団子を楽しむように、大人も自分のデザインで何かを作ることに喜びを感じる。この喜びは、神がものを作ることに対する喜びのイメージだと思う。それは、葉っぱや雪の結晶の独自性や新しさに表れている。次に、他の人に役立つものを作る楽しさがある。心の奥底では、他の人に自分の作品を使ってもらい、役立ててもらいたいと思っている。この点で、プログラミングのシステムは、子供が「パパのオフィス用」に作った最初の粘土のペン立てと本質的には変わらない。三つ目は、複雑なパズルのような動く部品を組み合わせて作り、それが微妙なサイクルで動くのを観察する魅力だ。プログラムされたコンピュータは、ピンボールマシンやジュークボックスのメカニズムの魅力を最大限に引き出している。四つ目は、常に学ぶ喜びだ。タスクの非繰り返しの性質から生まれる。問題は常に新しく、解決者は何かを学ぶ:時には実用的で、時には理論的、時にはその両方だ。最後に、扱いやすいメディアで作業する喜びがある。プログラマーは詩人のように、純粋な思考の素材から少し離れたところで作業する。彼は空気から空気で城を作り、想像力を駆使して創造する。創造のメディアの中で、これほど柔軟で、磨きや再作成が簡単で、壮大な概念構造を実現できるものは少ない。しかし、プログラム構造は詩人の言葉とは異なり、実際に動いて機能し、構造自体とは別に目に見える出力を生み出す。結果を印刷したり、絵を描いたり、音を出したり、腕を動かしたりする。神話や伝説の魔法が私たちの時代に現実になった。正しい呪文をキーボードに打ち込むと、ディスプレイが生き生きとし、存在しなかったものや存在できなかったものを見せてくれる。だからプログラミングは楽しい。私たちの内に深く根付いた創造的な欲望を満たし、全ての人間が共通して持つ感性を喜ばせるからだ。」

それは素晴らしかった。シェアしてくれてありがとう。

最後に、扱いやすいメディアで作業する喜びがあります。これが、多くのプログラマーがAIコーディングをあまり好まない大きな理由の一つです。プロンプトとLLMの出力の関係は、あまり扱いやすくないですからね。

素晴らしい抜粋ですね。出典はどこですか?

プログラマーは詩人のように、純粋な思考から少し離れたところで働いている。彼は空中に城を築き、空気から作り出し、想像力を駆使して創造する。これがプログラミングが楽しい理由の一つであり、同時に、なんとか動く巨大な混乱に陥りやすい理由でもある。

個人的には、自動化の側面が好きで、時間を節約してエラーを減らすものを作ったり、非現実的な物理法則みたいなルールを考えたりして、それがどう展開するかを見るのが楽しい。インタラクションやフィードバックを加えるとさらに良くなるし、デバッグやエッジケースを考慮するのに頭を悩ませるのも、すごくいい気分なんだ。

何かに没頭して、ビジョンを達成するために無理して起きているのが懐かしい。

2001年から

Hacker Newsで議論の続きを見る