計算機大師Dijkstra談Haskell和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
相關文章
- 世界五大計算機程式設計師計算機程式設計師
- 阿里面試回來,和Java程式設計師談一談阿里面試Java程式設計師
- 漫談計算機編碼計算機
- 漫談計算機架構計算機架構
- 計算機視覺隨談計算機視覺
- 阿里面試回來,想和Java程式設計師談一談阿里面試Java程式設計師
- 一,認識計算機和Java基礎計算機Java
- 計算機編碼方式雜談計算機
- 面試Java後端開發之後想和Java程式設計師談談我的感受面試Java後端程式設計師
- 程式設計師的計算機配置程式設計師計算機
- 讀《程式設計大師訪談錄》程式設計
- 羽夏閒談——我與計算機計算機
- 計算機專業學習淺談計算機
- POJ 1556 The Doors(Dijkstra+計算幾何)
- 談談程式設計師的離職和跳槽程式設計師
- OpenCV計算機視覺學習(15)——淺談影像處理的飽和運算和取模運算OpenCV計算機視覺
- 影響計算機演算法世界的十位大師計算機演算法
- Java (計算機程式語言)Java計算機
- java面試--計算機網路Java面試計算機網路
- 程式設計師喝酒的計算機文化程式設計師計算機
- 軟體設計師:計算機網路計算機網路
- 計算機專業從事web前端是否有前景,老程式設計師談市場計算機Web前端程式設計師
- 淺談雲端計算與安全沙箱機制!
- 雲端計算和大資料大資料
- 談談程式設計師程式設計師
- 外聘的計算機老師講課計算機
- 全球八大科學家談計算機視覺的研發和應用:眼見為實計算機視覺
- 四面阿里成功定級P6,想和Java程式設計師談一談阿里Java程式設計師
- Haskell影片和課程Haskell
- 計算機愛好者 VS 程式設計師計算機程式設計師
- Java計算機二級(上機真題)Java計算機
- 用python和計算機對話(計算機的語句)Python計算機
- 淺談Java的反射機制和作用Java反射
- Alink漫談(五) : 迭代計算和Superstep
- 程式設計大師訪談人物——比爾·蓋茨程式設計
- 從計算機CPU設計談P\NP問題(0)計算機
- 從計算機CPU設計談P\NP問題(1)計算機
- 林建:計算機專業學習淺談計算機