事件:一篇改變軟體業思維的小論文
1991 年,Richard Gabriel 寫了一篇當時沒什麼人讀的短文,標題叫做〈Lisp: Good News, Bad News, How to Win Big〉。他在裡面做了一件在當時幾乎算是異端的事:承認 MIT 的設計哲學輸了。
MIT 的 Lisp 是精心工程的產物——型別正確、記憶體安全、語意完整。Bell Labs 的 C 和 Unix 相比之下像是粗製濫造:指標運算容易踩雷、換行符號在不同系統不一致、錯誤處理靠程式員自律。
但 Unix 從實驗室外洩到全世界。Lisp 沒有。
Gabriel 給這個現象命名:Worse is Better。
---
原則的四個核心主張
Gabriel 的論文提煉出一套「New Jersey 風格」(對應 Bell Labs 所在地)的設計原則,與 MIT 風格形成對比:
1. Simplicity 比 Completeness 重要 MIT 哲學要求 interface 和 implementation 都簡單,但兩者衝突時,implementation 可以犧牲。New Jersey 哲學反過來:implementation 必須簡單,哪怕 interface 因此變得奇怪或不一致。
理由很務實:一個容易實作的東西,才能被複製、被移植、被非原作者理解和維護。完美的 interface 如果需要 10 倍複雜的 implementation,它就永遠只會活在少數專家手裡。
2. 解 80% 的問題,剩下 20% 留給用戶 完整的解決方案要處理所有邊界條件,這讓系統變重、變慢、變難懂。「夠好」的設計選擇主流路徑,把罕見情境的責任推回給用戶。
這聽起來像設計者的偷懶,但實際上是一種認知摩擦的重新分配:把複雜度從系統核心移到邊緣,讓核心容易傳播。
3. Easy to implement 比 Elegant 重要 Elegance 服務的是讀者;easy to implement 服務的是複製者。在技術擴散的早期,複製者的數量決定生態系的大小。生態系大小決定一切。
4. 先存活,再優化 Gabriel 有一個後來被廣泛引用的比喻:Worse-is-Better 像病毒。它夠簡單,所以能感染大量宿主;一旦感染夠多,它就有資源進化。完美主義的設計像精心培育的蘭花——在溫室裡無懈可擊,出了門就死。
---
歷史重演:三個後繼案例
JavaScript(1995) Brendan Eich 花了 10 天設計 JavaScript。這個事實幾乎成了笑話——型別強制轉換詭異、`this` 綁定讓人抓狂、`null` 和 `undefined` 同時存在。
2025 年,JavaScript 是全球使用人數最多的程式語言。曾被寄予厚望的「正確」替代方案——ActionScript、Dart 的早期版本、甚至 CoffeeScript——都消失了或邊緣化了。JavaScript 的醜陋反而是它的護城河:每個人都能快速上手,每個瀏覽器都內建,生態系滾雪球。
HTML vs XHTML(2000 年代) W3C 在 2000 年推出 XHTML,要求嚴格的 XML 語法——標籤必須閉合、屬性必須加引號、大小寫必須一致。這是工程師眼中「更好」的 HTML。
HTML 4 允許各種不嚴謹寫法,瀏覽器遇到錯誤就猜測開發者意圖。XHTML 遇到一個錯誤直接報錯停止渲染。
結果:XHTML 在 2009 年實質上被放棄,HTML5 回歸容錯設計。「嚴格」的設計在真實世界的凌亂開發者面前,不敵「夠用」的設計。
Python 的 pragmatism Python 並不是學術上最嚴謹的語言——它的物件系統不純粹,動態型別帶來隱患,GIL 長期被詬病。但它解決了資料科學家、研究員、初學者的 80% 問題,語法接近英文,安裝一個指令。AI 時代的到來讓 Python 的生態系優勢進一步碾壓一切「更正確」的競爭者。
---