IT記者会Report

IT/ICTのこと、アレヤコレヤ

ソフトウェアとコトバ(11) プログラムの構造

 わたしがコンピュータ・ソフトウェアの世界に足を踏む入れたきっかけは,ただの学生アルバイトの仕事だった.大学をドロップアウトしなければならない期限が近づいてきたので,飯の種を探そうと考えていたとき,たまたま見つけたのが小さなセミナー会社での英文資料翻訳者募集という新聞広告だったのである.「これを訳してみてくれ」といって手渡されたのは,1冊の新刊書であった.
 Joachim Jeenel, “Programming for Digital Computers, McGraw Hills, 1959.
 何ヶ月かかけて翻訳が終わったのと時を同じくしてそのセミナー屋さんが潰れてしまったので,訳稿はいまもわたしの机の抽斗の中に眠っている.富永仲基のいう「言に世あり」が示す通り,この本は機械語によるプログラミングの入門書だったが,著者は単なる命令文の解説ではなく,プログラムの論理構造をモジュール化し階層化されたフローチャートを用いて表現する方法をシステマティックに解き明かすことに努めていた.それまでコンピュータなどに触ったことのないわたしにも(当時の大学ではコンピュータ関連の授業など存在しなかった),楽しく読み進むことができた.

 後日調べてみたら,この本は,アメリカ海軍がIBMに作らせた当時としては世界最大のスーパーコンピュータ NORC (Naval Ordnance Research Calculator) のプログラマ教育をニューヨークのコロンビア大学で行うための教科書だったらしい.著者の Jeenel は IBM 社 NORC チームのチーフ・プログラマ.ネット上でNORC に関する歴史アーカイブを見ると,マシンが完成した時のセレモニーには,John von Neuman 他の著名人の顔が写っている.ただし,記憶容量はわずか2,000語(のちに10,000語に増強),サイクルタイムは15μ秒だったから,スーパーコンピュータといっても現在のノートPC と比べたらまるでおもちゃのようなものであった,時代の進歩は恐ろしい.
 そのころのわたしは,大学での学業を放棄して抽象表現主義を標榜する絵描きの卵としての活動を日常生活の中心ね据えており,美術史を専攻する友人の手伝いで,パウル・クレーの著書 “Bildnerishce Denken” を読みふけっていた.この本は,後に『造形思考』というタイトルで新潮社から訳本が出版されたが,当時は500ページを越える分厚い原書をドイツ語で読むしかなかった.教育者としてのクレーの語り口はなかなかユニークであり,わたしはこの本に収められたバウハウスでの講義録から,絵画の基本要素である「かたち」の構造について,いろいろなことを教えられた.たとえば,分割可能な構造を持つかたちと分割不可能なかたち(Individual)との区別,そして,意味を持つかたち(ゲシュタルト)と意味を持たないかたち(フォルム)との違いについて,etc, etc.

 Jeenel のプログアミング教科書は,そんなわたしに,コンピュータ・プログラムに表現されているアルゴリズムについて,その内容ではなく,そこに示された論理構造の「かたち」についての興味を掻き立てる働きをした.記憶容量やスピード上の制約もあって,そのころのマシンで扱われていた問題は,数学的な内容のものが多かった.一般のデータ処理問題としては,特定のコードを基準とするデータの並べ替え(Sorting)問題があった.たしか1961年の CACM 誌(何月号だったか忘れた)は Sorting特集であり,さまざまなアルゴリズムが載っていた.この問題はすぐに Tony Hoare によるQuick Sort の提案で決着がついたのだが,ほぼ同時期に日本の下條武男さんが Quick Search という類似のアルゴリズムを発案していたことはあまり世の中に知られていない.
 その後,奇妙な偶然の連鎖で,英文翻訳者からフリーランスプログラマの時期を経て,あるコンピュータ・メーカーの小会社でチーフ・プログラマ兼セールス・エンジニアの職に就いたわたしが手がけたのは,線形計画法による鉱石の最適配分問題や,複雑な微分方程式の解法,難解な統計数理学問題の処理などであった.こちらは一介のプログラマに過ぎないのに,顧客のほうでは自分が抱えている問題の解決法すべてを「お任せ」という態度で接してこられるので,しかたなく何冊かの数値解析の本(ほとんど洋書)を買い求めてプログラム作りに励んだ.しかし,わたし自身の関心は,そうした計算処理の内容ではなく,必要とされるアルゴリズムの構造が,抽象的なフローチャートとしてどのように表現されるか(表現したらよいか)ということにあった.

 同じビルの別フロアで仕事をしているメーカ所属のプログラマ諸氏の描くフローチャートを見ると,いずれも蜘蛛の巣状の複雑怪奇なかたちをしており,画家としての修行を積んだわたしの目にはとても見られないありさまであった.どうしてそうなるのか,蜘蛛の糸を解きほぐすにはどうしたらよいかを思案していたとき,CAAM 誌の1968年5月号にひとつの数学論文が発表された:
 C. Boehm and G. Jacopini, "Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules", Comm. of the ACM, Vol. 9, No. 5, pp.366--371, May 1966.
 後にプログラム構造化定理と呼ばれるようになったこの論文(すべてのプログラムの構造は連接・分岐・反復という単純なパターンの組み合わせに還元できるということの証明)は、わたしの頭の中を整理するのにきわめて役立つヒントであったが、この論文から同じような知的刺激を受けた人たちが何人かヨーロッパにもいて、いわゆる「構造化プログラミング」の流れが始まったのであった.