1984 Niklaus Wirth —— 「好程式語言」的定義權之爭#
「他寫出 Pascal 只為教學;一本 66 頁的報告,成為 1980 年代 全球大學的標準語言。什麼樣的語言配得上『簡單』二字?」
案件檔案#
| 項目 | 內容 |
|---|---|
| 得主 | Niklaus Wirth (1934–2024) |
| 得獎理由 | 語言設計:EULER、ALGOL-W、MODULA-2,特別是 Pascal |
| 關鍵詞 | Pascal、簡單性、Algorithms + Data Structures = Programs |
前因#
1960s 末,ALGOL 語言世系臃腫化(ALGOL 68 的複雜設計分裂 了委員會)。Wirth 之問:語言的價值是否與功能數量成正比? 他在蘇黎世聯邦理工(ETH)的觀察:學生被複雜性淹沒。
線索與推理#
線索一:Pascal(1970)#
設計目標:教學 + 系統實作皆可。關鍵取捨:
強型別 + 豐富資料結構(record、set、列舉)
遞迴下降語法 → 單趟編譯器可寫成 ~4000 行
刪除:字串內建、可變長陣列、泛型(當時的「先進」功能)
著名的公式化宣言(1976 書名):
演算法 + 資料結構 = 程式
——語言的任務是給兩者合適的容器,而非更多花招。
線索二:遞迴下降與語言可編譯性#
Wirth 主張:語言應該設計得可被簡單編譯器解析。 LL(1) 文法的紀律倒逼語法簡潔——語言設計與編譯器理論 (2020 案)互為鏡像。他連編譯器也親寫:Pascal-P 系統使 語言隨原始碼擴散。
線索三:漸進降級的後續作#
Modula-2(模組化)、Oberon(1988,與作業系統合體,整個 系統含 GUI 僅約萬行程式碼)——每代都比前代小。這在 膨脹的業界是逆行,卻是他「簡單性」美學的執行證據。
理論評析#
Wirth 定律(他自嘲式總結):
軟體變慢的速度,快過硬體變快的速度。
拆解:功能蔓延 + 抽象層疊加 → 效能與可靠性的複利負債。 對策不是更快的機器,而是拒絕不必要的複雜。此案與 Brooks(1999 案)「沒有銀彈」同聲:複雜性是本質之惡, 管理它才是工程的核心。
後果#
- Pascal 統治 1980s 教學界與早期 Mac 開發;Delphi 為其 商業後裔。
- Ada 語言委員會、Modula、Oberon 的模組化思想進入 Java 的 package 與 Go 的 module。
- 他的格言:「把簡單做對,比把複雜做對難得多。」
關聯案件#
→ 1977-John-Backus與FORTRAN高階程式語言、1999-Frederick-Brooks與System360及軟體工程、2020-Aho-Ullman與編譯器理論