1. 軟體開發的多樣性#
每種工作都有其特有的困難(bugbears)。軟體開發的世界並非鐵板一塊——不同類型的軟體有截然不同的約束條件、品質要求與開發文化。許多開發方法論的爭論,根源在於忽略了這些差異。
2. 五個世界#
2.1 套裝軟體(Shrinkwrap Software)#
面向大量使用者的商業軟體,如 Microsoft Office、Adobe Photoshop。
- 使用者基數龐大,任何小問題都會被放大
- 極度重視易用性與穩健性
- 安裝體驗、效能表現、錯誤處理都必須精緻打磨
- 投入在使用者介面上的心力遠超其他類型
2.2 開源軟體(Open Source Software)#
由志願者社群驅動的軟體開發。
- 開發者通常是自願參與,動機來自興趣與社群認同
- 品質參差不齊,取決於核心維護者的投入程度
- 易用性是關鍵挑戰——若使用門檻太高,難以吸引非技術使用者
- 文件品質往往是薄弱環節
2.3 內部軟體(Internal Software)#
為特定組織量身打造的系統,如企業 ERP、內部工具。
- 只有一個「客戶」——使用它的組織
- 優先考量開發速度,因為內部使用者可以被訓練
- 易用性要求較低,因為使用者沒有其他選擇
- 大多數企業程式設計師的日常工作
2.4 嵌入式軟體(Embedded Software)#
燒錄在硬體中的軟體,如汽車引擎控制、醫療設備、家電韌體。
- 不可更新或更新成本極高,沒有「推送修補」的機會
- 品質要求最高——出錯可能危及生命安全
- 必須在開發階段就做到接近零缺陷
- 測試與驗證流程最為嚴格
嵌入式軟體沒有「之後再修」的選項。一旦產品出貨,修復成本可能是召回整批硬體。
2.5 遊戲軟體(Games)#
以娛樂為目的的軟體,受經濟驅動。
- 上市時間至關重要——錯過聖誕季等於錯過一整年的收入
- 首發品質必須到位,因為玩家的第一印象決定口碑
- 通常只有一個版本的機會,不像企業軟體可以持續迭代
- 效能最佳化是核心技能
3. 另一種類型:拋棄式程式碼#
Throwaway Code 是為特定任務寫的臨時程式碼,例如資料遷移腳本、一次性報表產生器。這類程式碼的價值在於完成任務,不需要維護性或擴展性。
確保拋棄式程式碼真的會被拋棄。許多「臨時」腳本最終變成了永久的生產系統,但品質卻停留在原型階段。
4. 為何區分很重要#
大多數軟體開發方法論是為企業內部軟體設計的,因為那是最大的市場。但將內部軟體的方法論套用到套裝軟體或嵌入式軟體上,往往會產生問題。
認識這五個世界的差異,有助於:
- 在技術社群討論中減少無謂的爭論
- 選擇適合自身環境的開發方法論
- 理解為何其他領域的開發者做出不同的決策
沒有一種開發方法論適用於所有情境。開發者應該根據自己所處的「世界」,調整方法論與實踐,而非盲目套用。