ちえの和webページ
Edsger Wybe Dijkstra
1930 - 2002
構造化プログラミングを切り開いたアルゴリズムの大家
プログラミングをちょっとでも学んだことのある人は、きっとどこかでGOTOは使わないようにと 言われたことがあるだろう。これは言い換えると、GOTO文を使わなくてもすむような 構造をもったプログラムを作れということだが、実際にプログラミングしてみると初心者 にはなかなか容易ではない。GOTOは手軽な方法として真っ先に思いつくからである。 しかし、これがいけない。 GOTOは行き先だけ言って、その後の予定を告げずに旅に出てしまったドラ息子のようなものなのだ。 行方知れずで連絡のとりようもないというのがGOTO文だ。したがって逆に言うと、行った先の行動がよくわかっているGOTO文は使ってもかまわないということではあるが、一般的にはGOTOは絶対使わないという決心でプログラミングしたほうが良い結果がえられる(ただし、上の議論には例外がある。非常にシビアな効率を要求されるプログラミングなどのことで、構造なんかよりスピードが優先される場合はGOTOはだめなど言っていられない)。
ダイクストラの趣旨も同じで、 構造化されたプログラムは必然的にGOTOをほとんど含んでいないはずだ、ということを言ったものだ。 ダイクストラはプログラミングの暗黒時代に構造化の光を持ってきた恩人である。
アルゴルはヨーロッパのコンピュータ学者たちが1950年代後半から草案作りを始め、 1960年に発表された。 ダイクストラはアルゴル60(Algol-60)の草案つくりに主要な役割をはたした。 アルゴルは現代では古くさい言語と見なされているが、パスカル(Pascal)の父であり、エイダ(Ada)やPL/Iのおじいさん、さらにC言語のひいおじいさんでもある。現代的なコンピュータ言語の祖先であるといってもよいのではないかと思う。アルゴル以前にはフォートラン(Fortran)とコボル(COBOL)があったが、いずれもまだ構造化された言語ではなかった。アルゴルは構造化プログラミングを実装した最初のコンピュータ言語だった。
エズガー・ダイクストラは1930年オランダ国のロッテルダムに生まれた。 両親ともに学者という環境に生まれたダイクストラは1942年名門エラスムス・ギムナジウム に入学した。しかしすぐに第二次世界大戦で祖国オランダは戦火にまみれ、一時疎開したりした。 戦争が終わってまもなくライデン大学に入学し物理学を専攻した。
1951年英国のケンブリッジ大学のサマースクールに参加し、 初めてコンピュータ・プログラミングを学んだ。 1952年にはアムステルダムの数学センターでパートタイムの職を得て、 プログラミングの研究を続けた。1962年アインホーヘン工科大学の数学教授になった。 1973年オランダ在住のまま米国バロース社(現在のユニシス社)のフェローを引き受けた。 1984年家族でアメリカに渡り、テキサス州オースティンにあるテキサス州立大学で コンピュータ科学のシュルンベルジェ記念100周年教授という変わった職にありついて、 彼の原点としての数学に研究を行っている。
ダイクストラは、その後1999年11月にテキサス大学の職を辞し、生まれ故郷のオランダに帰った。 2002年8月6日オランダのニューネンにある自宅でガンのため亡くなった。72歳だった。
今ダイクストラの名前をよく聞くとすると、最短経路を求める手法として標準的なダイクストラ法 にかれの名前が残されているためだろう。一方ダイクストラはバロース社のフェローをしていた頃、いろいろなデータの競合問題を研究していた。今で言う排他制御だが、 セマフォ(semaphore)というプロセスの制御方式は彼が考え出したものである。セマフォは鉄道の腕木式信号機のことで、信号機のアナロジーがわかりやすく名前もそこからとられた。
アルゴリズムの大家である ドナルド・クヌース は彼の著作の中でダイクストラの "Short Introduction to the Art of Programming"(1971)という珍しい論文を紹介している。プログラミングのスタイルを論じている箇所だ。
「筆者の目的は、プログラミングにおける好みのよさとスタイルの重要性を伝えることである。 [しかし]本書の中で示すいくつかのスタイルの見本は、一般に「スタイル」からはどんな有益なことを導くことができるかを説明するためだけのものである。この意味で、筆者は音楽学校で作曲を教える教師のようなきもちである。生徒たちに特定の交響曲の作曲方法を教えるのではない。 生徒たちが自分自身のスタイルを発見できるような教育をするのである 」
ダイクストラの論文には現在のプログラミング教育に忘れられた 「自分自身のスタイル」を持つ という原点が明白に語られている。プログラミングは作曲ばかりでなく、料理をつくることや建物を作る、小説を書くことなどにも喩えることができるが、いずれも創造的な活動のことで、むろん工場の流れ作業の中で決まった部品をつくるような事とは違うのである。
| 「コンピュータの時代を開いた天才たち」 | デニス・シャシャ/キャシー・ラゼール著 竹内郁雄/鈴木良尚訳 | 日経BP社 | 1998年11月 | 2400円 |
|---|---|---|---|---|
| インタビューをベースに、14人の偉人の業績を紹介している。なかなかふだんは聞けないような話も入っているのでおもしろい。バッカスは言語の研究者として最初に登場する。 | ||||
| 「ダイクストラプログラミングの方法」 | E.W.ダイクストラ/W.H.J.フェイエン著 玉井浩訳 | サイエンス社 | 1990年12月 | 2500円 |
| 「構造化プログラミング」 | E.W.ダイクストラ著 野下浩平訳 | サイエンス社 | 2800円 | |
| 「プログラミング原論―いかにしてプログラムをつくるか 」 | E.W.ダイクストラ | サイエンス社 | 1983年1月 | 0円 |
感想、ご意見など自由にご記入ください