為什麼圖靈獎獲得者戴克斯特拉如此痛恨BASIC語言
戴克斯特拉先生是一位經常會被人們拿來引述的著名電腦科學家,人們談論最多的是那些被他挑破的讓人難以接受的事實真相。經常被人反覆提到的一個就是他對BASIC語言的痛斥,但往往人們談論這件事情時都忘了提到當時的背景——
對於一個之前接觸過BASIC語言的學生,你基本上不可能教會他如何正確的程式設計:因為作為一個程式設計師苗子,他們已經腦殘,無可救藥。
戴克斯特拉先生的這番言論是來告訴大家“如何看出事實背後可能是對你有害的真相”——對有些事實人們廣為接受,所有沒有人思考它們,或不屑一顧,或避而不談。戴克斯特拉先生對於這個問題給出的答案被證明極具轟動性。他用這種方式非常有效的挑起了爭論,時至今日我們仍在討論。
人們經常會忘記,在1975年,那時的程式設計跟我們如今有很大的不同。戴克斯特拉先生斥責的Dartmouth Basic——這是一種享有榮耀的組合語言,它不是我們如今使用的BASIC語言——
- 變數名稱只有一個字元,或外加一個數字
- 儘管有For語法可用,但迴圈,break,以及其它邏輯都用無約束的goto語句實現。
- 空格在表示式間可有可無。
- 有子程式。子程式通過行號呼叫或通過return轉向。
- 所有的引數都通過全域性變數來傳遞。
- 26個使用者自定義函式可以排列成FNA—FNZ,裡面可以有一行程式碼。
- if語句被限制在一行上。
這樣的限制我可以繼續列下去,但事實非常明顯:你很難用它寫出可讀性好,易於理解的程式。我們如今想當然應該有的一些語言特徵它都沒有。這種狀況一直等到BASIC之後的語言發展起來才結束,成為我們如今熟知的程式語言。
當我們在學習第一種程式語言時,你可能會一直在用其它語言風格進行程式設計(“你可以用任何語言寫出FORTRAN風格程式碼”)。程式設計師的成長過程中最難的不是如何獲取新知識,而是如何拋棄陳腐的舊習慣。
學會如何小心的堆起一灘爛泥,這對你寫出結構化的程式不會帶來任何幫助。即使今日,你也能很容易的發現有些人被教育了basic的現代變體——儘管他們對這種basic老祖先知之甚少。後繼者對此有很大責任。
程式設計很難。荒誕的語言特徵讓它變得更難,這無助於初學者,同樣也無助於專家。戴克斯特拉痛恨basic,其實你也應該痛恨它。殘酷的是我們只記住了戴克斯特拉先生尖銳的批評,但卻忘了他對計算機程式設計卓著的貢獻——這完全是另外一個話題了。
人物簡介:
艾茲赫爾·戴克斯特拉(Edsger Wybe Dijkstra,1930年5月11日-2002年8月6日)曾在1972年獲得過素有電腦科學界的諾貝爾獎之稱的圖靈獎,之後,他還獲得過1974年AFIPS Harry Goode Memorial Award、1989年ACM SIGCSE電腦科學教育教學傑出貢獻獎。2002年,在他去世前不久,戴克斯特拉獲得了ACM PODC(分散式計算原理)最具影響力論文獎,以表彰他在分散式領域中關於程式計算自穩定的貢獻。為了紀念他,這個每年一度獎項也在此後被更名為“Dijkstra獎”。他曾經提出“GOTO有害論”訊號量和PV原語,解決了有趣的“哲學家就餐問題”。
相關文章
- 《圖論》——最短路徑 Dijkstra演算法(戴克斯特拉演算法)圖論演算法
- 演算法(四):圖解狄克斯特拉演算法演算法圖解
- 為什麼Lisp語言如此先進?Lisp
- (轉)陳寶權教授訪談圖靈獎獲得者Ivan Sutherland圖靈
- 為什麼Lisp語言如此先進?(譯文)Lisp
- 轉-為什麼Lisp語言如此先進?(譯文)Lisp
- 《演算法圖解》總結第 7 章:狄克斯特拉演算法演算法圖解
- 為什麼那麼多人要學習go語言?go語言有什麼特點?Go
- 什麼是Go語言?Go語言有什麼特點?Go
- 為什麼動態型別程式語言會如此流行?型別
- 圖靈獎獲得者:資料科學家或將取代業務分析師?圖靈資料科學
- 作為一門程式語言 Python為什麼如此受歡迎Python
- Java語言有什麼特點Java
- Rust語言最獨特的特點是什麼? - RedditRust
- 迪傑斯特拉演算法感悟演算法
- 最短路-迪傑斯特拉(dijkstra)
- 何為程式語言?為什麼要學C語言?C語言
- 圖靈獎獲得者:大資料、AI、網路安全將是改變世界的“三大元素”圖靈大資料AI
- 兩次獲獎,Steam特別好評,為什麼玩家會說這款遊戲很酷?遊戲
- 【民間圖靈獎】讀《圖靈的祕密》寫讀後感獲圖靈水杯圖靈
- 淺讀 John Backus 圖靈獎獲獎演講論文圖靈
- 是什麼讓ChatGPT變得如此聰明?仍然未知的大語言模型“能力湧現”現象ChatGPT模型
- 為什麼Julia語言這麼棒?
- 圖靈社群回饋讀者獲獎名單(第二期)圖靈
- 圖靈社群回饋讀者獲獎名單(第一期)圖靈
- 為什麼C語言屹立不倒?C語言
- 使用者介面設計:為什麼動效如此重要?
- 為什麼遊戲主機的向下相容會變得如此艱難?遊戲
- 獲得檔案的大小(c語言)C語言
- 兒童程式語言small basic
- 一個簡單的字串,為什麼 Redis 要設計的如此特別字串Redis
- Python語言無處不在,是什麼原因讓它如此火?Python
- 為什麼很多公司都轉型go語言開發?Go語言能做什麼Go
- 為什麼Web前端語言只有JavaScript?Web前端JavaScript
- 為什麼需要更多的程式語言
- 為什麼我們需要一門新語言——Go語言Go
- 清華大學、北京語言大學獲得 CCL 2018 最佳論文獎
- 為什麼美國遊戲業加班如此普遍?這得從勞動法說起……遊戲