專業主義 (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 與團隊合作來彌補個人不足
補充:為什麼需要謙遜?
因軟體系統極度複雜,人類腦容量有限,過度自信往往是災難的開始。
謙遜能讓你聽進別人建議,並重視自動化測試帶來的安全網。