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

AI・テクノロジー

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

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

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

今回の配信内容🎧

  • 無秩序なジャンプ命令が引き起こした、解読不能な「スパゲッティコード」の恐怖。
  • ダイクストラの意図を超えて大バズりした「go to文有害説」という宗教改革。
  • あらゆるプログラムを記述できる、構造化プログラミングの「3つの積み木」。
  • インデント(字下げ)が、1次元のテキストに「2次元の美学」をもたらした理由。

地下鉄の路線図?機械語がもたらした「ジャンプ」の嵐とスパゲッティの森

初期のプログラミングの世界、すなわち機械語やアセンブリ言語が支配していた時代、コンピュータへの命令はメモリの上にデータと隣り合わせで格納されていました。当時のプログラミング手法の根幹は、条件に応じて特定のメモリ番地へ強制的に移動する「ジャンプ(go to)」命令の繰り返しでした。

しかし、この「どこへでも飛べる自由」こそが、人類にとっての呪いとなります。あちこちに無秩序にジャンプした結果、プログラムの構造は人間の脳が処理できる限界を軽々と超えてしまいました。

コンピュータ科学の巨人、ドナルド・クヌースが書いた当時のフローチャートを見て、堀本氏は思わずこう叫びました。
「地下鉄です。すごすぎないこれ、処理の流れがもうぐちゃぐちゃすぎて!」

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

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

この混沌とした状況を打破しようと立ち上がったのが、オランダの計算機科学者、エドガー・ダイクストラです。彼は「無秩序なジャンプ命令(go to)は有害であり、禁止すべきだ」と提唱しました。

面白いのは、この思想が世界中に広まった、あまりに人間臭い経緯です。ダイクストラ本人は、より良いプログラミング手法の提案として、非常に控えめなタイトルで論文を執筆しました。ところが、その論文を掲載した雑誌の編集者が、内容をセンセーショナルに伝えるために勝手にタイトルを書き換えてしまったのです。

それが、今や伝説となったタイトル『Go To Statement Considered Harmful(go to文は有害である)』です。

「ダイクストラが何が言いたいかと言ったかというと……ジャンプみたいなね。あっちに飛ぶゴートゥーブンっていう言い方をされること。有害である」

この「釣りタイトル」に近い強烈な一言が、当時の技術者たちに凄まじいショックを与え、図らずも大バズりしました。本人の意図を超えて議論が加速し、古い習慣に固執する派閥と、新たな秩序を支持する派閥に分かれて激しい論争が巻き起こったこの様は、まさにルターが教会の権威を批判した「宗教改革」そのものでした。
正直なところ、ダイクストラも自分の論文が編集者のセンスでバズったときは、現代のインフルエンサーのような複雑な心境だったのかもしれません。しかし、この「不本意なバズ」こそが、プログラミング界の歴史を塗り替える革命の狼煙となったのです。

カオスを封じ込める「3つの積み木」。数学が証明した秩序の最小単位

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

  1. 順次実行 (Sequence):命令を一つずつ、上から順番に進める。
  2. 選択 (Selection):条件分岐(もし〜なら)。いわゆるif文。
  3. 反復 (Repetition):条件を満たす限り繰り返す。いわゆるwhile文やfor文。

「あらゆるフローチャートはこの3つを組み合わせれば表現できる」

どれほど複雑な迷路のようなアルゴリズムも、この3つの「型」を組み合わせ、入れ子構造(ネスト)にするだけで組み上げられる。これは、人間が数学的な論理によって、カオスな機械の挙動に勝利した瞬間でもありました。
これにより、プログラミングは「次にどこへジャンプするか」を管理するパズルから、「論理をどう美しく組み合わせるか」という秩序ある設計へと劇的に変化しました。この3つの積み木こそが、私たちが今、何気なく書いているコードの最小単位であり、秩序の守護神なのです。

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

構造化プログラミングを視覚的に、そして美的に支えているのが「インデント(字下げ)」です。現代のプログラミング言語では、前述の3要素を記述するための構文が用意されており、それに応じてコードを一段深く書くスタイルが定着しています。

「インデントできない人は死んだほうがいい」

大学の教授が投げかけたというこの過激な言葉は、インデントが単なる「見た目の整頓」ではなく、構造化プログラミングの本質である「秩序ある思考」そのものであることを物語っています。

人間が話す言葉(自然言語)は、一列に並ぶ「線状性」という制約に縛られています。しかし、プログラミングコードはインデントによって、「どの処理の中に、どの処理が含まれているか」という階層構造を視覚化しました。

「線状性に従った1次元の文なのに、2次元になってる」

このインデントによる階層化は、1次元のテキストに2次元的な奥行きを与え、人間の脳が論理の構造を一目で理解できる「空間的な秩序」をもたらしました。美しいインデントは、それだけで「このコードは正しく構造化されている」という信頼の証となるのです。

もちろん、構造化は万能薬ではありません。階層が深くなりすぎた「ネストの地獄」は、新たなスパゲッティを生みます。しかし、無秩序なジャンプが許されていた時代に比べれば、私たちはなんと贅沢な悩みを抱えていることでしょうか。


まとめ:構造化プログラミングの夜明け

この記事をまとめると…

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

構造化プログラミングとは、コンピュータの物理的な都合を押し付けられていた人間が、「自分たちの理解しやすさ」のために機械を飼い慣らした、勝利の記録です。あなたが今日、当たり前にインデントを使い、if文やwhile文を書いているその指先には、カオスを憎み、秩序を愛した先人たちの壮絶な革命の記憶が宿っているのです。

配信元情報

番組名:ゆるコンピュータ科学ラジオ
タイトル:構造化プログラミングが、混沌だったフローチャートに秩序を与えた【プログラミングパラダイム・シフト2】#65
配信日:2023-03-26

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