Dijkstra, ALGOL 60, 與 van Wijngaarden

Maarten van Emden 的 blog 上看到這段關於 Edsger Dijkstra 與第一個 ALGOL 編譯器的軼事

1966 年 van Emden 到阿姆斯特丹數學中心念博士時,Dijkstra 已在四年前離開數學中心到艾恩德霍芬科技大學任教。兩人的指導老師都是 Adriaan van Wijngaarden. 雖然 Dijkstra 已經離開四年,中心的人仍樂此不疲地談著他的輝煌事蹟:ALGOL 60 標準一定稿,Peter Naur 在哥本哈根 Regnecentralen 公司的團隊立刻與 Dijkstra 比賽寫出第一個 ALGOL 60 編譯器; Dijkstra 決心在完成前不刮鬍子,果然在六週內完工, 用組合語言寫成,邊寫又邊發明了包括如何實作傳名呼叫 (call by name) 等的許多新技巧,大勝 Regnecentralen… Dijkstra 並沒被遺忘,反而越傳越神了。

2000 年,van Emden 回到數學中心,剛好 Dijkstra 也將訪問。Van Emden 把握機會問當年到底是怎麼回事?Dijkstra 回答:

  1. 他從來沒有和 Peter Naur 比賽。他的清教徒教育教他必須付出全力,但不可爭先。計畫剛開始,Aad van Wijngaarden, Jaap Zonneveld 和 Dijkstra 就到哥本哈根訪問 Peter Naur 並與他討論一些細節。當時也只有 Naur 的團隊能與他們對話。
  2. 一開始的時候有五個人一起做: Aad van Wijngaarden, Jaap Zonneveld, Joke Feringa, Freek Barning, 和 Dijkstra. 不久 Feringa 和 Barning 便離開了。Van Wijngaarden 沒有貢獻什麼,但對外公關卻給人他有出力的印象。Dijkstra 聽說 van Wijngaarden 有把別人的東西放到自己名下面的記錄。當時 Dijkstra 沒留鬍子,Zonneveld 留著八字鬍,於是兩人決定不刮鬍子,讓大家都看到辛苦的是誰。當時(推算)是六月初。到了八月,編譯器完成了。Zonneveld 把鬍子剃了,Dijkstra 則覺得留著也不錯。
  3. Dijkstra 生平唯一一次拍了 van Wijngaarden 的桌子。Van Wijngaarden 要他們用 Harry D. Huskey 建議的方法,Dijkstra 說,如果這樣他就不做了。Van Wijngaarden 只好讓步。「Niklaus Wirth他的 Turing Award 演講裡好像有評論過 Huskey 的程式設計風格。Huskey 是他的指導老師。」

聽了這樣的故事,van Emden 覺得蠻為難。畢竟 van Wijngaarden 對他而言是個盡責的老師。在 Dijkstra 的 Turing Award 演講中,他也生動地描寫了 van Wijngaarden 對他的影響:

寫了大概三年程式後,我與我在數學中心的老闆 A. van Wijngaarden 有了一次讓我一輩子心懷感激的懇談。當時我同時在萊頓大學念理論物理,覺得兩邊越來越難兼顧了。我得下定決心,要不就不寫程式、當個真的、受人尊敬的理論物理學家;要不就把物理學位用最低限度的心力拿到,然後當個.. 什麼?寫程式的?可是這算正當職業嗎?

畢竟,什麼是寫程式?有什麼嚴謹的知識體系支持它成為一個智性上正當的學門呢?我還記得我多羨慕念硬體的人。別人問他們會什麼,他們至少能回答凡是和真空管或放大器有關的我都懂。我面對這個問題卻覺得自己兩手空空。

我焦慮地敲了 van Wijngaarden 的門,問「可不可以跟你聊一下?」幾小時後當我離開他的辦公室時,我已是個不同的人。耐心地聽完我的煩惱後,他同意在當時程式設計還不是一個成形的學門,但他接著解釋既然一切都剛開始,為什麼我不能成為那個讓程式設計日後成為一門受人尊敬的學門的人呢?

這是我一生的轉捩點。我於是盡快念完了物理學位。當然,這故事給我們的啟示是,給年輕人建議時要小心,有時候他們真的會聽你的!

後來 Dijkstra 確實成為了那個人。他形塑了計算科學的樣貌,讓我們一直感激著他。


左起為 Edsger Dijkstra, B.J. Loopstra 和後來成為 Dijkstra 妻子的 Ria Debets。由 Gerrit Blaauw 攝於 1953 年阿姆斯特丹數學中心。
(來源: People Behind Informatics 線上展覽。)

參考資料

關於 Dijkstra-Zonneveld ALGOL 編譯器的更多資料可看這篇文章,含歷史背景、技術解說,完整程式碼、以及 Zonneveld 刮鬍子的照片。

F.E.J. Kruseman Aretz (2003), The Dijkstra-Zonneveld ALGOL 60 compiler for the Electrologica X1. historical note SEN-N0301, Centrum voor Wiskunde en Informatica.

This entry was posted in 人物, 計算算計 and tagged , , , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

2 Comments