計算機大師Dijkstra談Haskell和Java

vaikan發表於2014-02-27

  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

  1. On the cruelty of really teaching computing science
  2. Real mathematicians don’t prove

相關文章