練習 (Practicing) #
科技在變,核心不變 #
作者首先透過自身經歷,對比了早期電腦與現代 Mac Pro 的巨大差異:
硬體演進的驚人數據
與作者最早使用的電腦相比,現代 Mac Pro:
處理速度:快了 8,000 倍
記憶體:大了 2,000,000 倍
儲存能力:多了 16,000,000 倍
耗能:僅為 0.01 倍
體積:僅為 0.01 倍
價格:僅為 0.04 倍
儘管硬體經歷了指數級的飛躍,但軟體工程師的核心工作本質卻驚人地相似:
我們依然在寫 if 判斷、while迴圈和賦值(assignment)敘述。這意味著,要提升開發速度,關鍵不在硬體,而在於人的操作熟練度。
任何事情想要做得快,都離不開練習。對程式設計師而言,練習的重點在於加快「編碼/測試」這個循環的過程。
練習的核心方法:Kata (對打) #
作者借用武術術語 Kata (形/對打) 來描述程式設計的練習法。
| 關鍵維度 | 核心定義與意涵 | 實踐細節與重點 | 預期效果 |
|---|---|---|---|
| 定義 | 固定招式 (Kata) | 一套預先設計好、模擬真實搏鬥(開發)情境的固定動作序列 | 建立結構化基礎 |
| 練習目標 | 肌肉記憶 (Muscle Memory) | 透過反覆演練將招式化為本能,確保在壓力下能反射性地做出正確回應 | 達到技術純熟度 |
| 核心意義 | 磨練過程而非答案 | 重點不在解決未知難題,而是針對已知解案重複鍛鍊解決時的動作與決策 | 優化執行精確度 |
當你練習得足夠多,你將能窺見程式碼流動的韻律 (Rhythm)。這種直覺能讓你在面對真實世界的複雜問題時,迅速正確反應。
作者推薦的經典 Kata #
作者常用「保齡球計分」來示範 TDD,以下是他鍾愛的練習題目:
| 題目 | 核心目標 | 重點與挑戰 | 連結 |
|---|---|---|---|
| 保齡球 (The Bowling Game) | 複雜邏輯處理 | 處理補投 (Spare) 與 全倒 (Strike) 的計分邏輯狀態轉移 | 點此前往 ↗ |
| 質因數 (The Prime Factors) | 演算法演進 | 體現 TDD 如何引導出最簡潔的遞迴或迴圈演算法 | 點此前往 ↗ |
| 自動換行 (Word Wrap) | 邊界條件處理 | 練習處理字串切分、空值以及最短邊界等極端情況 | 點此前往 ↗ |
多元練習模式 #
除了獨自練習 Kata,作者也提倡與他人互動的練習方式。
1. 雙人練習:Wasa #
這是一種類似桌球的互動練習:
- 角色 A:撰寫一個會失敗的單元測試。
- 角色 B:撰寫程式碼讓測試通過。
- (交換角色繼續)
2. 參與開源專案 #
如何跟上技術的最新進展?最好的方式就是為開放原始碼專案 (Open-source project) 貢獻程式碼。這能讓你接觸到不同的設計思維與高標準的審查。
專業職責:利用「自我時間」 #
最後,作者強調了練習的時間點與職業道德。
| 執行面向 | 核心觀點 | 實踐建議與細節 | 最終價值 |
|---|---|---|---|
| 責任歸屬 | 專業發展自負盈虧 | 老闆負責提供工作,而防止技能退化則是工程師個人的責任 | 維持職涯競爭力 |
| 時間管理 | 運用非辦公時間 | 應利用下班後的自我時間進行技術練習與深度鑽研 | 確保技術不落伍 |
| 回報機制 | 能力即資產 | 練習當下雖無直接薪資,但投入會轉化為專業能力,換取未來豐厚回報 | 實現職涯長遠收益 |
就像音樂家不會在演奏會上才開始練習音階,專業程式設計師也不該在客戶的專案上練習基本功。