數感實驗室/朱倍玉
我們經常會為天才貼上各種標籤,例如:小學就會解聯立方程式、跳級錄取大學、破解幾百年來無人能解世紀大難題等。還有一種天才,他們靈巧地穿梭在多種不同領域間,提出讓世人眼睛為之一亮的發現。
今天要介紹的是一位靈巧穿梭在物理、數學、計算機科學、教育的男人:戴克斯特拉(Edsger. W. Dijkstra, 1930-2002)。
戴克斯特拉出生於荷蘭,父親是化學家,母親是數學家。儘管成長在濃厚的理科氛圍中,他高中時卻想成為律師,期待有一天能代表荷蘭出席聯合國。不過這個夢想在畢業考時被迫中止,理由不是常見的「沒考上自己的第一志願」,而是戴克斯特拉在數學、物理、化學與生物都拿到滿分,促使老師和父母力勸他往自然科學方面發展。
某種程度上,就像許多原本對文科有興趣的學生,卻因為理科表現太好而選擇唸理工科系。有些人遇到這個狀況會選擇抗議,或之後適應不良,但戴克斯特拉沒有這些問題,順利進入萊頓大學的理論物理系。而後,戴克斯特拉的父親再次提供建議,鼓勵他去參加「程式設計」課程,順服的戴克斯特拉開始學習程式設計。這項能力幫助他獲得第一份工作──在阿姆斯特丹數學中心擔任程式設計師。
也因為多會了程式設計,戴克斯特拉開始思考下一步該往哪裡走,他認為程式設計和理論物理學不容易結合,請教了阿姆斯特丹數學中心的上司,同時也是阿姆斯特丹大學資訊工程學系的教授韋恩加登(A. van Wijngaarden)。韋恩加登相當看好戴克斯特拉,認為他有程式設計的天份,將來搞不好會成為計算機科學領域的關鍵人物,大力鼓勵戴克斯特拉。事後證明韋恩加登不僅眼光正確,他也是一位很好的說服者。
這場改變戴克拉斯特一生的會談,多年後回憶起來,記憶猶新。
「就在離開他的研究室之後的幾個小時內,我感覺到自己完全是另一個人了。」
於是,在父親與長官的鼓勵下,他決定不再研究理論物理,進入阿姆斯特丹大學攻讀資工博士學位,正式走上計算機科學這條路。
不只是程式設計專家,也是一位數學家
戴克斯特拉在程式設計、演算法等領域中提出許多創新概念,對計算機科學有著巨大的影響。這些貢獻讓他在 1972 年獲得了有計算機科學界諾貝爾獎之稱的圖靈獎(ACM Turing Award)。這個領域的朋友對他絕對不陌生,沒錯,鼎鼎大名的 Dijkstra 演算法正是以他命名的。
戴克斯特拉被認為是計算機科學的先驅之一。他的回憶錄裡有這麼一個小插曲:他博班第一年時結婚,辦理手續時必須說明自己的職業,戴克斯特拉說自己是「程式設計師」。然而,當時這個職業類別在荷蘭尚未受到認可,幾乎沒有人靠寫程式維生,當局因此駁回。最終註記在計算機科學大師的結婚證書上的職業,依然是「理論物理學家」。
戴克斯特拉的第二份工作是埃因霍溫科技大學的數學系教授。他認為,數學邏輯與程式設計相輔相成,唯有明確的邏輯思路與數學分析能力,才能在程式設計中清楚思考出每個步驟。
戴克斯特拉說過許多名言,其中包括:
「計算時,我們容易搞砸一切。數學的簡潔與精確不是可有可無的奢侈品,是生死攸關的大事。
(In the practice of computing, where we have so much latitude for making a mess of it, mathematical elegance is not a dispensable luxury, but a matter of life and death.)。」
從這句話讓人充分感受到讓人充分感受到,「他不只是程式設計專家,也是一位數學家」
在數學系教書的 11 年裡,戴克斯特拉致力於融合程式編寫與數學研究,將數學分析帶進程式編寫的環節中,讓數學與程式設計不再只是兩個獨立的學科,而是關係緊密的孿生領域。
戴克斯特拉在 1984 年,58 歲時離開荷蘭,越洋來到美國,在陌生環境重回熟悉的領域,擔任德州大學奧斯汀分校資工系教授。如果你以為他只是重新回到電腦前面研究程式碼的話,那就錯了!他開始與其他學者共同撰寫謂詞演算註1的書,倡導透過方程式真假值的計算來證明定理,用數學運算來推理程式語言。同時,他把研究觸角伸到更多的數學領域,如座標幾何、線性代數、圖論等。
不論在數學系或資工系教書,戴克斯特拉都緊緊將兩個領域交織在一起。
在研究手稿中窺見作育英才的熱情
作為一位教授,戴克斯特拉最為人所知的是他相當喜歡以手寫文書當作記錄,甚至是學術界公認文筆好,用字遣詞簡潔又清楚的「作家」。他親筆記下多數的研究成果,幫自己的研究手稿逐一編號。他喜歡手寫的程度,讓他連課程大綱也手寫。
為了讓更多人可以接觸到戴克斯特拉的研究,德州大學建立一個網站註2,裡面整理了他的手稿,除了課程大綱之外,還有不少手稿是論文的前身。這個網站就像是一座倉庫的大門,打開這扇門就可以看到知識被整齊地堆疊在裡頭。
以 1995 年他開設的微積分課程為例(手稿編號:EWD1213),細讀這篇課程簡介,你可以完全感受到戴克斯特拉不只是數學家、計算機科學家,還是一位充滿人文氣質的教育家。
他告訴他的學生,上課不是為了「傳授知識」,因為如果僅僅是那樣,學生很快就會忘記了。他希望能給學生帶來可觀的、不可逆的改變。他要讓學生感受到數學的效益,讓他們知道優美的證明不是靠反覆嘗試錯誤,而是奠基在精巧的應用經過設計的數學準則。他想提升每一位學生對自己的標準。
他這麼說:「我的意思是:如果從現在起的 10 年內,當你貪圖快速、想方便行事的時候,你會忽然彷彿看見我在替你擔憂,你會提醒自己『戴克斯特拉不會喜歡我這樣做。』如果真的能這樣,那對我來說一切都值得了。」
投身教育超過 25 年,戴克斯特拉教學生如何腳踏實地追求知識。計算機科學界也好,數學界也好,不管從什麼角度來看,戴克斯特拉都是那個時代不可抹去的光輝。
註釋
- 謂詞演算(或稱述詞演算):以邏輯述句進行表示及推理的基本記法。把命題看作整體,分析命題的各部結構,使成主詞與述詞的邏輯形式。
- the manuscripts of Edsger W. Dijkstra 1930–2002
參考資料
- In Memoriam Edsger Wybe Dijkstra (1930–2002)
- A.M. TURING AWARD
- EDSGER W. DIJKSTRA: BRILLIANT, COLOURFUL, AND OPINIONATED
- Edsger Wybe Dijstra (1930–2002): a portrait of a genius