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