從 Illustra 的慘痛教訓說起#

Joel 回憶 1995 年在維亞康姆(Viacom)公司的經歷。當時團隊選用了一家叫 Illustra 的公司的資料庫管理系統來建構電子商務網站。Illustra 宣稱它的 DBMS 非常適合在網際網路上使用,還推出了一個叫 Web Blade 的產品。

然而 Web Blade 根本不是成熟的產品:

  • 每幾分鐘就當機一次,即使沒有當機也問題百出
  • 其程式語言不符合圖靈等價(Turing-equivalent)
  • 自帶的許可證管理器總是提示未經許可,導致網站無法訪問

使用不成熟的第三方工具,一旦它崩潰,如果你沒有原始碼,就完全無法自救。他山之石,你只能拿它當石頭,無法攻玉。

核心教訓:使用「可被信任」的工具#

從這次經歷中,Joel 學到了軟體開發最重要的一課:

  • 對於最重要、最關鍵的部分,一定要使用更原始的工具
  • 例如寫 3D 射擊遊戲,你不能依賴別人的 3D 函式庫,必須自己寫一個
  • 一旦決定不再信任任何其他人寫的應用程式伺服器,Joel 選擇自己用 C++ 和 Netscape Server 的底層 API 重新開發

什麼是「可被信任」的工具#

「可被信任」不是指大公司製造的,而是你百分之百確信它會正常運作:

  • Visual C++:大多數 Windows 程式設計師都信任它
  • MFC:雖然不完全信任,但它提供原始碼,至少你可以維護
  • Oracle DBMS:大家都知道它有效運行
  • Berkeley DB:開源,就算出問題也能查看原始碼解決

你可以把職業生涯賭在那些既不開源也不知名的工具上,但它們不值得你押上未來。

FogBugz 開源原始碼的決定#

Joel 最終決定公開 FogBugz 的原始碼(ASP 頁面本身就是公開的),讓使用者安心:

  • FogBugz 是一個 bug 追蹤軟體,沒有什麼神秘的演算法
  • 即使使用者自行修改原始碼會有升級風險,但 Joel 承諾將有效的使用者修改納入下一個版本
  • 軟體仍然收費(每月營運費用高達 40000 美元),但借鏡開源社區的好做法

對於關鍵的軟體元件,選擇那些你有能力自行維護的工具。即使不開源,至少要確保它足夠成熟可靠。