1990年,在戴克斯特拉(Edsger Wybe Dijkstra)60歲生日時,美國德州大學奧斯丁分校計算機科學系為他籌備了為期兩天的研討會。他希望對後世有如下影響:「如果10年後,當你在做一些粗製濫造的事時,突然想像我在你的肩膀後看著並喃喃自語:『戴克斯特拉不會喜歡這個。』若能如此,對我來說則已是流芳後世。」他鼓勵年輕人「盡可能地提高你的品質水準,避免在日常問題上浪費時間,並始終嘗試在你能力的極限上努力研究。這將是把你能力極限向上推進的唯一方法。」
時間回到1968年左右,戴克斯特拉正思考抽象(abstract)與模糊(vague)截然不同之處。他開始建構程式設計的數學規則,把眾人對計算機的模糊想法轉換成嚴謹的抽象數學。他倡議,設計程式時必須放入診錯(debugging)機制。要提升程式品質,他堅信程式設計方法應該成為一門科學領域,研究如何避免軟體設計的複雜性。因此計算機科學家的主要挑戰是,要能化繁為簡,而不受到自己製造的複雜性所迷惑。簡單性是可靠性的先決條件。簡單是一種偉大美德,需要付諸心力才能實現,需要教育才能欣賞。診錯是博大精深的問題,他體認到程序測試充其量只能顯示錯誤的存在,但永遠不會顯示錯誤的不存在。
戴克斯特拉撰寫〈結構化程式設計〉,徵詢了幾位朋友的意見。該文章很快引起轟動,許多大公司嚴格實踐他的想法,整合到自家公司的程式設計專案。這篇文章在近40年後仍不斷重印,其應用從第一門程式設計課程的教學到複雜軟體的設計,產生了深遠的影響。程式設計和規範的數學分析已成為計算機科學的核心研究。
1973年戴克斯特拉加入寶來(Burroughs)擔任研究員,重大貢獻是發展了不確定性(nondeterminacy)理論這個超越傳統數學的概念。他是首位觀察到處理不確定性問題是解決分散式系統元件非同步運作的核心要點。即使不涉及非同步,處理不確定性的方法也是推理程式和簡化程序設計的有效工具。在此期間,他的另一個主要貢獻是開發了「謂詞轉換器」,成為定義程式語義的基礎和演繹程式的工具。
1970年代後期,戴克斯特拉常駐在奧斯丁的研究中心。他認為在寫程式的過程,我們有很大的自由度來製造混亂,因此導入優雅的嚴謹數學不是一種可有可無的奢侈品,而是生死攸關的關鍵。在奧斯丁的日子,戴克斯特拉處於指導研究生的最佳狀態。他很欣賞傑出的學生,把講課當做一種挑戰和特權,並敦促學校鼓勵激進且新奇的教學方式。他對學生有所期許:「我的目的不是『轉移知識』給你,然後你又再次忘記。我的目的是在你們每個人身上實現不可逆的改變。我要你們真正吸收有效的計算論據,永遠牢記。」他還說:「你的義務是積極參與。你不應該只是吸收知識的海綿,而應該是塊磨刀石,我們所有人都可以在磨刀石上磨練自己的智慧。」
他認為腦力是人類迄今為止最稀缺的資源。我們使用的工具對個人思維習慣有深遠而微妙的影響。學生問他:要成為有潛力的研究學者,如何選擇研究題目?他說:「只做只有你能做的事。」如何成為好的程式設計師?他說:「除了喜好數學,對母語的掌握是一個稱職的程式設計師最重要的資產。」
本專欄感謝中華民國資訊軟體協會、中華民國資訊協會支持
