專業主義

專業主義 (Professionalism) #

專業主義的核心:當責 (Accountability) #

作者在本章開宗明義地指出,專業軟體工程師與業餘愛好者的區別在於專業主義(Professionalism)。 而專業主義的本質,就是當責(Accountability)

這意味你須對自己負責的事務感到榮譽與驕傲。專業人士不會將責任推卸給他人,而是主動承擔,確保高品質產出。 以下是落實專業主義的具體方法。


1. 首要原則:不製造傷害 (Do No Harm) #

如同希波克拉底誓詞,專業人士的第一準則是不對現有軟體造成破壞。

追求零失誤率 #

雖然在軟體開發中,要達到絕對「零失誤」不可能,但專業人士須以此為目標,盡一切努力將失誤率逼近於零

  • 對 QA 的態度轉變:不要依賴 QA 幫你找 Bug。當 QA 團隊發現問題時,你不應覺得習以為常,而應感到震驚與羞愧
  • 自動化 QA:你應建立自動化測試機制,能自信地確信 QA 團隊找不到任何問題

藉由測試確信一切正常 #

你如何證明程式碼是運作正常的?答案是測試。

  • 追求 100% 測試覆蓋率:這不僅是品質保證,更是迫使你寫出「易於測試」程式碼的動力
  • 不破壞結構:軟體結構須保持彈性。你須經常修改它(Refactor)以保持整潔,而完整測試是你敢修改結構的後盾

你的程式碼若讓 QA 找出一堆錯誤,代表你將品質責任外包。專業人士會自行確保程式碼在交付前是完美運作的。


2. 職業道德:自我精進 #

專業主義不僅限於朝九晚五的工作時間。作者強調,專業人士會用工作以外的時間來提升自我,這是你的職業道德。

熟稔專業領域知識 #

作為一名工程師,你須掌握廣泛的知識體系。若你尚未熟悉以下領域,應安排時間補足:

項目內涵與實踐溝通與品質保證
Design Patterns熟讀並能應用 GOF (Gang of Four) 的 24 種設計模式建立通用設計語彙
Design Principles精通 SOLID 原則、元件設計原則及高內聚低耦合概念確保系統可擴展性
Methods掌握 XP、Scrum、Lean、Kanban、瀑布流及結構化設計選擇合適的交付流程
Disciplines實踐 TDD (測試驅動開發)、OOP、結構化程式設計與 CI (持續整合)提升代碼穩健度
Artifacts運用 UML、DFD、狀態圖、流程圖與決策表進行規格溝通視覺化複雜邏輯

堅持學習與練習 #

  • 持續輸入:閱讀書籍、瀏覽技術文章、參加技術研討會
  • 刻意練習:重複練習簡單的程式設計問題(如 Code Kata),以維持手感與思維敏捷度

如果你只依賴雇主提供的培訓學習,那你只是勞工,而非專業人士。
專業人士會為自己的職涯能力負責。


3. 團隊協作與導師制度 #

軟體開發很少是單打獨鬥的。專業人士深知合作的重要性:

  • 彼此學習:保持開放心態,與團隊成員互相交流
  • 輔導新人:專業人士會視「輔導新人」為己任。教導初階工程師正確的觀念與技術,是資深人員的責任

4. 了解業務領域 (Domain Knowledge) #

你寫程式是為創造價值,而非單純堆砌代碼。

  • 理解業務:你須深入了解程式碼所服務的領域,這樣才能訪談客戶與使用者
  • 與老闆/客戶立場一致:你的目標是解決他們的問題。確保開發功能確實是對方所需,而非盲目執行需求

5. 保持謙遜 #

程式設計本質上是種容易讓人自負的行為(因為我們創造規則)。但作為專業人士,必須認知到:

  • 出錯在所難免:承認自己會犯錯
  • 建立防護網:正因知道會犯錯,所以更依賴測試、Code Review 與團隊合作來彌補個人不足
補充:為什麼需要謙遜?

因軟體系統極度複雜,人類腦容量有限,過度自信往往是災難的開始。
謙遜能讓你聽進別人建議,並重視自動化測試帶來的安全網。