そのコード、まだ”スパゲッティ”のままですか?混沌を秩序に変えたダイクストラの宗教改革と、インデントという名の2次元の美学

スパゲッティコードとは?構造化プログラミングとダイクストラの革命 IT・テクノロジー史
スパゲッティコードと構造化プログラミングの対比図解

「コードがぐちゃぐちゃで、どこを修正すればいいか分からない」「昨日の自分が書いたはずなのに、もはや解読不能な迷宮に見える」

現代のエンジニアでも、スパゲッティコードの絶望に突き落とされる瞬間は少なくない。しかし、かつての開発現場はそれとは比較にならない暗黒時代だった。命令があちこちにジャンプし、もはや誰も全容を把握できないカオス。その混沌に終止符を打ち、現代の整然としたプログラミングの礎を築いたのが「構造化プログラミング」という知の革命だ。

あなたが「読みにくい」と叫びたくなるコードの正体は、形を変えて生き残っている古の「go to」の亡霊かもしれない。伝説のプログラマー、エドガー・ダイクストラが放った不本意なバズの真相と、世界を秩序で塗り替えた「3つのルール」を紐解く。

この記事でわかること

  • 機械語時代の「スパゲッティコード」がどれほどカオスだったか
  • ダイクストラの「go to文有害説」がなぜ「宗教改革」と呼ばれるか
  • あらゆるプログラムを記述できる「3つの積み木」とインデントの本質

1. 地下鉄の路線図?スパゲッティコードの正体

📌 要点:初期の機械語・アセンブリ言語では、「go to」という任意の番地へのジャンプ命令が多用された。その結果、処理の流れが地下鉄路線図のようにぐちゃぐちゃになり、誰も全容を把握できないカオスが生まれた。

地下鉄の路線図?スパゲッティコードの正体

機械語やアセンブリ言語が支配していた時代、プログラムの処理命令はメモリの上にデータと隣り合わせで格納されていた。当時の基本手法は、条件に応じて特定のメモリ番地へ強制的に移動する「ジャンプ(go to)」命令の繰り返しだった。

しかし「どこへでも飛べる自由」こそが呪いとなる。あちこちに無秩序にジャンプした結果、プログラムの構造は人間の脳が処理できる限界を軽々と超えた。コンピュータ科学の巨人、ドナルド・クヌースが書いた当時のフローチャートを見た人が思わず言い放ったのが「地下鉄です。処理の流れがもうぐちゃぐちゃすぎて!」という言葉だ。

はちゃめちゃに発展した国の地下鉄路線図。一度潜り込んだら最後、どこへ連れて行かれるか分からない。ある命令を実行したと思ったら遥か彼方のメモリ番地に飛ばされ、そこからまた別の場所へ。この嵐が「スパゲッティコード」の正体で、一流の天才ですら全容を把握できないカオスが、かつての「当たり前」だった。

2. 編集者が歴史を動かした「go to文有害説」という不本意なバズ

📌 要点:ダイクストラの論文は雑誌編集者によって「go to文は有害である」という強烈なタイトルに書き換えられ、意図せず大炎上した。この「釣りタイトル」が業界の宗教改革を引き起こした。

この混沌を打破しようとしたのが、オランダの計算機科学者エドガー・ダイクストラだ。

面白いのは、この思想が世界に広まった経緯の人間臭さだ。ダイクストラ本人は控えめなタイトルで論文を書いた。それを掲載した雑誌の編集者が、内容をセンセーショナルに伝えるために勝手にタイトルを書き換えてしまった。

それが伝説のタイトル『Go To Statement Considered Harmful(go to文は有害である)』だ。この「釣りタイトル」が当時の技術者に凄まじいショックを与え、本人の意図を超えて議論が加速した。古い習慣に固執する派閥と新たな秩序を支持する派閥に分かれて激しい論争が起きた様は、まさにルターが教会の権威を批判した「宗教改革」そのものだった。

ダイクストラも自分の論文が編集者のセンスでバズったときは、複雑な心境だったはずだ。しかしこの「不本意なバズ」こそが、プログラミング界の歴史を塗り替える革命の狼煙となった。

3. カオスを封じ込める「3つの積み木」

📌 要点:ダイクストラは、「順次・選択・反復」という3つの論理構造だけでこの世のあらゆるプログラムを記述できることを数学的に証明した。これが現代のクリーンなコードの根幹だ。

ダイクストラは無秩序なジャンプを封印する代わりに、たった3つの論理構造でこの世のあらゆるプログラムを記述できることを証明した。

まず順次実行(Sequence)。命令を一つずつ、上から順番に進める。次に選択(Selection)。条件分岐(if文)だ。そして反復(Repetition)。条件を満たす限り繰り返す(while文やfor文)。この3つだけだ。

どれほど複雑なアルゴリズムも、この3つの「型」を組み合わせ入れ子構造(ネスト)にすれば組み上げられる。これは人間が数学的な論理によってカオスな機械の挙動に勝利した瞬間でもある。プログラミングは「次にどこへジャンプするか」を管理するパズルから、「論理をどう美しく組み合わせるか」という設計へと劇的に変わった。

4. 1次元から2次元へ:インデントがもたらした階層構造の美学

📌 要点:インデント(字下げ)は単なる見た目の整頓ではない。1次元のテキストに「どの処理の中に何が含まれるか」という2次元の階層構造を与え、人間が論理を一目で把握できる空間的な秩序をもたらした。

1次元から2次元へ:インデントがもたらした階層構造の美学

構造化プログラミングを視覚的に支えているのが「インデント(字下げ)」だ。「インデントできない人は……(過激な言葉が続く)」という大学教授の発言が伝わるほど、インデントは単なる見た目の整頓ではない。

人間の言葉(自然言語)は一列に並ぶ「線状性」に縛られている。しかしプログラミングコードはインデントによって「どの処理の中に、どの処理が含まれているか」という階層構造を視覚化した。1次元のテキストに2次元的な奥行きを与え、人間の脳が論理の構造を一目で理解できる空間的な秩序をもたらした。

美しいインデントは、それだけで「このコードは正しく構造化されている」という信頼の証となる。もちろん、階層が深くなりすぎた「ネストの地獄」は新たなスパゲッティを生む。しかし無秩序なジャンプが許されていた時代に比べれば、なんと贅沢な悩みだろうか。


よくある質問

Q
スパゲッティコードとは何ですか?今も存在しますか?
A

制御フローが複雑に絡み合い、読解・保守が困難なコードの総称です。
現代でもネスト(入れ子)が深すぎる、関数が長すぎる、変数の命名が不適切といった形で「現代版スパゲッティ」は生き続けています。構造化プログラミングはルールを提供しましたが、書き手のスキルがなければ悪用できてしまいます。

Q
「go to文は有害である」論文はどこで読めますか?
A

「Go To Statement Considered Harmful」というタイトルで1968年にACM(米国計算機学会)の Communications of the ACM に掲載されました。現在も論文データベースで閲覧可能です。わずか数ページの短い論文ですが、プログラミング史上最も影響力のある論文の一つとされています。

Q
「順次・選択・反復」だけで本当にあらゆるプログラムが書けますか?
A

はい、数学的に証明されています(ベームとヤコピーニの定理・1966年)。
どれほど複雑なアルゴリズムも、この3つの構造の組み合わせで表現できます。現代のすべてのプログラミング言語はこの3要素を基本として設計されています。

Q
構造化プログラミングの後にはどんなパラダイムが来たのですか?
A

構造化プログラミング(1960〜70年代)の後、データと処理を一つのオブジェクトにまとめる「オブジェクト指向プログラミング」(1980〜90年代に普及)が登場しました。
さらに「関数型プログラミング」「アスペクト指向プログラミング」など、異なる視点のパラダイムも発展しています。

Q
ダイクストラはどんな人物ですか?
A

エドガー・W・ダイクストラ(1930〜2002)はオランダの計算機科学者です。「go to文有害説」のほか、最短経路問題を解く「ダイクストラ法」の考案者としても有名です。手書きの手稿を好んで万年筆で書き続け、コンピュータをほとんど使わなかったことでも知られています。


まとめ:構造化プログラミングはカオスへの宣戦布告だった

  • 機械語時代の「go to」による無秩序なジャンプは、一流の天才ですら把握できないスパゲッティコードの森を生んでいた
  • ダイクストラの提案は編集者の「釣りタイトル」によって宗教改革のように爆発的に普及し、プログラミング界の常識を塗り替えた
  • あらゆるプログラムは「順次・選択・反復」という3つの構造だけで記述可能。これが現代のクリーンなコードの根幹だ
  • インデントは見た目の問題ではなく、1次元の羅列に2次元の階層構造を与える人類の知性が生んだ視覚的秩序だ

プログラミングの仕組みをもっと学ぶならこちら。

タイトルとURLをコピーしました