背景:IE 8 開發團隊的口水戰#

2008 年,微軟 IE 8 開發團隊正好處於兩種截然不同世界觀的交界點——保守派(實用主義者)自由派(理想主義者) 的衝突。這場關於「Web 標準」的爭論,讓工程師與電腦科學家互不相讓。

用火星人耳機理解相容性問題#

Joel 用一個精妙的比喻來解釋問題的本質:假設你在火星上賣 MP3 播放器和耳機。

  • 一對一(One-to-One):你同時控制播放器和耳機,相容性完全沒問題
  • 一對多(One-to-Many):多家廠商生產相容耳機,透過事實標準(de facto standard)運作
  • 版本對多(Sequence-to-Many):你推出新版播放器,必須向後相容舊耳機,同時引入協議協商(protocol negotiation) 機制
  • 多對多(Many-to-Many):多家廠商、多個版本,互不相容的配件滿天飛——這正是 HTML 瀏覽器面對的現狀

在「多對多」市場中,標準化看似是解方——讓所有廠商遵循統一規範,就能大幅減少測試量。但現實中,Web 標準存在根本性的問題:沒有可靠的合規性測試工具,而標準文件本身極其難讀,充滿歧義。

Web 標準為何失效?#

  • DOCTYPE 是個神話:網頁設計師加上 DOCTYPE 宣告就聲稱「符合標準」,但實際只在一兩種瀏覽器上測試過
  • 標準文件難以理解:連專家都無法完全正確地實作標準規範
  • Jon Postel 的魯棒性原則反而幫了倒忙:「對自己的行為要保守,對他方的行為要寬容」——這導致早期瀏覽器容忍各種錯誤的 HTML,結果網路上到處都是有問題的網頁

魯棒性原則在部署新軟體時會造成嚴重問題:新軟體遵循寬容原則,就無法發現舊軟體中的錯誤。最終,所有軟體都會遇到那些從未被嚴格測試的邊界情況。

IE 8 的兩難抉擇#

IE 開發團隊做了兩個關鍵決定:

  1. 第一個決定(實用主義路線):IE 8 預設相容現有網頁,不破壞用戶體驗
  2. 第二個決定(理想主義路線,180 度轉彎):只要網站聲稱「符合標準」,IE 8 就按標準模式渲染——結果幾乎每個網站都出了問題

最終結局:理想主義者在大原則上是對的,實用主義者在現實中也是對的。兩個陣營之間的口水戰將持續很多年,沒有正確答案。這場爭論精確地把世界分成兩半。

核心啟示#

  • 向後相容性在大型專案中至關重要——你無法召回已經出售的所有「耳機」
  • 當設備有了新版本,必須讓新版本在接上舊附件時自動切換成像舊版本一樣工作
  • 標準很重要,但不能迷信標準——標準有時會引發誤解、困惑甚至爭議