newsence

戴克斯特拉的危機:Algol 的終結與軟體工程的開端

Hacker News·27 天前

本文探討了以 Algol 程式語言衰落為標誌的電腦科學歷史轉折點,以及艾茲赫爾·戴克斯特拉的思想危機如何促成現代軟體工程基礎的建立。

背景

這篇由電腦史學家 Thomas Haigh 博士撰寫的論文,挑戰了關於「軟體工程」起源的傳統敘事。文章指出,1968 年 NATO 軟體工程會議與所謂的「軟體危機」,實際上是一群學術研究者為了推廣將程式設計視為「數學學科」的願景而建構出來的說法。其中,艾茲赫爾·戴克斯特拉(Edsger W. Dijkstra)對 Algol 68 的反叛與他對軟體危機的利用,成為了這場歷史轉折中的核心爭議。

社群觀點

社群對戴克斯特拉的評價呈現兩極化。有留言者指出,戴克斯特拉對 Algol 68 的抵制帶有一種深刻的諷刺:他雖然批評該語言過時,但其真實目的並非為了減輕一般開發者的負擔,而是希望藉由「軟體危機」的論點,主張將龐大的平庸程式設計師群體,替換為像他一樣具備高度數學素養的「數學工程師」精英。這種觀點認為戴克斯特拉傾向於一種「象牙塔式」的開發哲學,強調嚴謹的邏輯與結構,而非實用的工程工具。

然而,也有人為戴克斯特拉辯護,認為將他描述為反對「勞工階級」程式設計師過於牽強。支持者指出,戴克斯特拉相信透過正確的教育,本科生也能掌握他的數學方法,使程式設計變得更簡單且易於管理。這種爭論延伸到了程式設計的本質:我們是否因為缺乏美感與嚴謹性,而撰寫了比實際需求多出數倍的冗餘程式碼?有觀點認為,現代軟體產業雖然蓬勃發展,但本質上卻是在用低效率的方式解決問題,若能採納戴克斯特拉的嚴謹性,或許能以極小部分的資源達成相同的成就。

針對 Algol 68 本身的失敗,討論也十分熱烈。有評論認為 Algol 68 在技術上其實優於當時 Wirth 提出的 Algol W 或後來的 Pascal,它包含了許多超前時代的語言特性。其失敗的主因在於文件編寫的災難:主事者 Van Wijngaarden 僅發布了極其晦澀、如外星文字般的正式規範報告,卻缺乏教學手冊、設計原理解釋或入門指南,導致連戴克斯特拉這類專家都難以消化。此外,編譯器實現的極高複雜度,加上當時硬體資源的限制,使得各機構只能實作互不相容的子集,最終導致該語言無法形成生態系。

最後,關於「抽象化」的爭論反映了理想與現實的鴻溝。雖然有人批評軟體工程界過於依賴模糊的術語如「滲漏的抽象」(leaky abstraction)來規避嚴謹性,但實務派則反駁,軟體必須跨越數代硬體演進,完美的抽象在現實中幾乎不存在。這場討論顯示,即便過了數十年,戴克斯特拉所代表的「數學嚴謹派」與追求產出的「實務工程派」之間的張力依然存在。

延伸閱讀

https://tomandmaria.com/Tom/Writing/DijkstrasCrisis_LeidenDRAFT.pdf