兩種價值觀的故事

兩種價值觀的故事 (A Tale of Two Values) #

任何軟體系統都為利害關係人(Stakeholders)提供兩種不同價值:行為(Behavior)結構(Structure)。 開發者的悲劇往往在於:他們雖知道兩者都重要,實際上卻總犧牲後者來滿足前者,最終導致系統價值的崩毀。

一、軟體的兩個價值 #

類型定義內容與焦點 (Content & Focus)利害關係人角度
行為價值
(Behavior)
」什麼功能需求、修復 Bug業務邏輯常與賺錢或省錢有關
結構價值 (Structure/Architecture)」什麼架構設計、程式碼的可讀性可維護性長期成本迭代速度

「軟體」的真義 (The meaning of “Soft” ware)

為什麼稱為「軟體(Soft-ware)」而非「硬體(Hard-ware)」? 因它被設計成「軟(Soft)」的——也就是易被改變

  • 當需求改變時,軟體應能輕易地隨之調整
  • 修改難度應只與「變更範圍」成正比,而不該與「系統形狀(Shape)」有關。如果新增一個功能需要大幅改動既有架構,這就代表系統變「硬」了。

二、價值悖論:哪個更重要? #

Uncle Bob 提出一個極端思想實驗來證明結構的重要:

情境軟體狀態 (結構 vs. 行為)結構/修改性最終結果與價值
A功能完全正常 (行為優異)無法修改(僵化)隨著需求變更,它很快就過時,最終毫無價值
B功能目前無法運作 (行為不佳)容易修改(靈活)開發者可輕易修好它,並持續適應未來需求,它將持續保有價值

結論: 從長遠來看,結構價值大於行為價值

三、艾森豪矩陣的啟示:重要 vs. 緊急 #

既然結構如此重要,為何開發者常忽略它?因為我們混淆了「重要性」與「緊急性」。

  • 行為(Behavior): 通常是緊急的(Urgent)
  • 結構(Structure): 通常是重要的(Important)

利用艾森豪矩陣(Eisenhower Matrix)來檢視軟體開發的任務:

優先級屬性內容處理方式
1重要 且 緊急核心功能的嚴重 Bug立即處理
2重要 但 不緊急架構設計、重構、測試這通常是被忽略的重災區
3不重要 但 緊急瑣碎的功能微調經常被誤認為第一優先
4不重要 且 不緊急瞎忙避免

開發者的常見錯誤: 我們往往把第 3 類(不重要但緊急)誤判為第 1 類,從而犧牲了第 2 類(架構)。 業務部門和管理者通常只看到「緊急性」(行為),他們不會自動意識到架構重要性。

四、為架構而戰 (Fight for the Architecture) #

如果管理者只在乎功能(行為),那架構(結構)該由誰負責? 答案是:你(開發者)。

  • 職責所在: 就像受雇建築師有責告訴業主「這柱子不能拆」,軟體工程師受雇職責就是捍衛系統結構
  • 必要的鬥爭: 業務部門為功能而戰是他們的職責;開發團隊為架構而戰是你的職責。這是場必要角力(Struggle)
  • 結論: 如果系統因為架構混亂而難以修改,那是你的失職,不能怪罪需求變更太快