分而治之是人類解決問題的基本手段。普通人與高手之間的差異,很大程度上取決於任務分解的粒度大小。

大師級程式設計師的工作秘笈是任務分解,分解到可以進行的微操作

為什麼要任務分解#

軟體變更成本會隨著時間和開發階段逐步增加。越早發現問題,修復成本越低。任務分解讓我們:

  • 更早發現問題
  • 更準確估算時間
  • 更容易追蹤進度
  • 更少被打斷後迷失

分解到什麼程度#

任務拆小,越小越好。每一步都應該非常容易執行。

任務分解實例:修復一個 RPC 介面的 Bug
  1. 列出每個程式碼的修改點
  2. 要修改的測試
  3. 要增加的測試
  4. 合併到哪個分支
  5. 修改 RPC 文件
  6. 文件中有哪些點要修改

這樣做的好處:

  • 事前思考:不會造成遺漏
  • 抗打斷:被中斷後知道該從哪一步繼續

任務分解的順序#

按照完整實現一個需求的順序安排開發任務,而不是按技術層次(先資料庫、再後端、最後前端)。

先寫思路、需要用到的知識點、API 等,寫出各個小任務,然後對應寫出關鍵程式碼段。最後真正敲程式碼可能只花很少時間。

測試金字塔#

行業中測試組合的最佳實踐:

flowchart TB
    subgraph pyramid [測試金字塔]
        E2E[🔺 E2E 測試<br/>少量]
        INT[🔶 整合測試<br/>適量]
        UNIT[🟩 單元測試<br/>大量]
    end

    E2E --> INT --> UNIT

    style E2E fill:#ffcdd2,stroke:#c62828
    style INT fill:#fff9c4,stroke:#f9a825
    style UNIT fill:#c8e6c9,stroke:#2e7d32

多寫單元測試。單元測試運行快、覆蓋廣、定位問題準確。

測試驅動開發(TDD)#

TDD 的節奏是:紅 → 綠 → 重構

flowchart LR
    R[🔴 紅<br/>寫失敗的測試] --> G[🟢 綠<br/>最少程式碼通過]
    G --> RF[🔵 重構<br/>改善結構]
    RF --> R

    style R fill:#ffcdd2,stroke:#c62828
    style G fill:#c8e6c9,stroke:#2e7d32
    style RF fill:#bbdefb,stroke:#1565c0
  1. :先寫一個失敗的測試
  2. :寫最少的程式碼讓測試通過
  3. 重構:改善程式碼結構,保持測試通過

重構是 TDD 區別於「測試先行」的關鍵。 TDD 帶來的思維改變是:編寫可測的程式碼。

好測試的標準:A-TRIP#

特性說明
Automatic自動化,可重複執行
Thorough全面,覆蓋各種情況
Repeatable可重複,結果穩定
Independent獨立,測試之間不互相依賴
Professional專業,測試程式碼也要有品質

需求管理:艾森豪威爾矩陣#

將事情按照重要緊急兩個維度劃分:

quadrantChart
    title Eisenhower Matrix
    x-axis "Not Urgent" --> "Urgent"
    y-axis "Not Important" --> "Important"
    quadrant-1 "Do First"
    quadrant-2 "Schedule"
    quadrant-3 "Eliminate"
    quadrant-4 "Delegate"
緊急不緊急
重要立即做重點投入精力
不重要委託別人做盡量少做

重要但不緊急的事情應該是我們重點投入精力的地方。許多人把時間都花在緊急但不重要的事情上。

最小可行產品(MVP)#

「剛剛好」滿足客戶需求的產品。

實踐原則: 用最小的代價找到一條可行的路徑。

技術 Spike#

對不了解的技術任務:

  1. 先進行一次技術 Spike(技術探針)學習新技術
  2. 丟棄 Spike 過程中開發的原型程式碼
  3. 然後再做正式的任務分解

實戰指南#

情境行動指南
動手做一個工作之前先對它進行任務分解
編寫測試多寫單元測試
設計程式碼編寫可測的程式碼
分解任務越小越好
安排任務順序按完整實現需求的順序
管理需求先把需求拆小
做產品開發採用 MVP
安排工作優先級盡量做最重要的事