計算機大師Dijkstra談Haskell和Java
英文原文:Dijkstra on Haskell and Java
2001 年,出生于荷蘭的計算機大師、 圖靈獎獲得者 Edsger W. Dijkstra 給德州大學預算委員會寫信,力勸不要將計算機入門課程改為 Java。這封信的 PDF 版可以從這里下載。不幸的是,學校最終還是用 Java 課程替換了 Haskell。相關聯的,麻省理工的計算機程序結構和分析課程(6. 01)中的 Scheme 語言也被 Python 語言替換掉。
致預算委員會成員
我寫這封信給你們是因為有謠言說,大學教學中的計算機入門課程將不再使用函數式編程語言 Haskell,而是使用命令式語言 Java,鑒于此,我認為預算委員會有責任去阻止這項錯誤的決定。
你們知道,這不是小事。其它州的同行經常好奇于我如何能在德州奧斯汀這樣的地方生存下來,他們都以為德州頑固的保守主義必然造就了同樣頑固的平 庸。我的回答通常是,“不要擔心,教育系統還是一個比較開明的地方,例如在計算機入門課程上,我們教新生 Haskell 語言”;他們的反應起初通常都是懷疑,然后是嫉妒——大多是因為他們的大學課程無法再從 Pascal 語言向 C++ 或 Java 這樣的語言的轉變中恢復回來。
我偏愛函數式編程的一個非常現實的原因是,對于新生的課程,大多數學生都已經對命令式編程有一定的熟悉。讓他們面對新奇的函數式編程,能立即傳 達一個信息:編程比他們想象的要豐富的多。并且,他們很快就會觀察到,對于他們用高中時學到的編程知識很難表達或無法表達的問題,函數式編程能提供優雅的 解決方案。
而選擇函數式編程的一個最根本的原因是,相比起命令式編程語言,它更容易當成數學對象來使用,在教學中你可以用它精確的解釋程序是什么。另外一個優勢是函數式編程的“延遲執行(lazy evaluation)”,它提供了一個環境來防止操作性的推理12。
最后,在 Haskell 語言跟 Java 的具體方面對比中,盡管 Haskell 不完美,但仍然比 Java 好幾個數量級,Java 就是一個大雜燴(它是通過大范圍的廣告和銷售員夸張的宣傳才達到它的商業接受)。總得來說,這事非常的糟糕,業界把有目共睹的低劣的設計當作了“事實”標 準。我個人的認為,大學里應該讓更健康的編程方式存在。
不僅僅是小提琴能塑造小提琴家,我們全都被我們使用的工具塑造,而在編程語言方面,影響是潛移默化的:它們塑造我們思考的習慣。這使得第一種編 程語言的選擇非常的重要。我們應該把入門課程當成一種工具來創造一種為計算機科學教學服務的文化,而不是去強迫丟掉過去的那些知識(如果非要這樣,那我們 的過去算是什么,成了永遠的遺物)。這種選擇擔負著對我們的大學生的沉重責任,這也就是為什么這種事不能讓某個什么主席來決定,而是應該由預算委員會來決 定。這種事情不能讓什么公務員或政客辦理,這里需要有遠見的政治家。
Austin, 12 April 2001
Edsger W. Dijkstra
<span id="shareA4" class="fl"> </span>