要解決的問題: I. 當要程式中增加功能、解決 bug 時,能: 1. 有概念知道「要修改的地方們」在哪 2. 能快速切換到「要修改的地方們」 3. 能在「要修改的地方們」之間快速切換 4. 「修改的地方們」很容易修改 5. 「修改的地方們」不多 II. 當程式要重構時,能: 1. 測試重構後,外部行為是否一樣 2. 輕易搬移搬動程式、不產生 bug 解法: 把程式切成小區塊,每個區塊只負責單一功能,幫這些區塊建立資訊架構,架構中設計狀態的流程管理。對應工作內容規劃工作環境。用多次微重構,代替大改。先重構、再解 bug、最後才寫新功能。在多人開發、或經常重構的專案,對穩定的外部 API 建立自動化測試。 好習慣: 把程式切成小區塊 ( ex: 4 - 30 行的小 chunks) 好處: 好理解、好修改、也容易增加新功能、能塞進人腦的工作記憶裡 方法: 每個程式區塊 = 一個檔案 or 一個 function or 一個 folding 每個區塊行數 (after folding),大於一個螢幕可以顯示時就要 Refactoring 每個區塊只負責單一功能 好處: 容易重複利用、減少 dependency、容易理解、容易找到 debug 方法: 多寫純函數 / Stateless API、良好函數/模組命名、註解輸入/輸出參數 建立程式碼的資訊架構 好處: 容易找到要修改的地方 (在人很有限的 short-term memory 消散之前) 方法: 把程式碼區塊分類 依功能:模組 / MVC / 前後端 / 測試 / Layout or 細節 / Stable or Develop / Web or iOS or Android 依架構:樹狀主從架構 / 分階層 / Data Layer / Rendering Layer 依時間:version 在架構設計中使用流程管理 好處: 增加可預測性、減少程式碼依賴 方法: 單向資料流、State Machine、Single Source of Truth 對應的工作內容建立環境 好處: 在程式碼區塊 / 外在環境中移動時,大腦不會 context switch Web 互動環境設計: 1. 要規劃在下列環境簡單移動的方法 (環境一樣要有架構、資訊權重) a. editor & browsers b. shell / server / database / git c. editor 中的不同檔案 d. 同個檔案中的 區塊、行、字母 e. MDN / stack overflow / Google Search / Github Search 2. IDE / shortcut switch / 多螢幕環境 / 切割螢幕畫面 3. Font / Syntax Highlight / AutoComplete / 文法檢查 Micro-Refactoring 好處: 一次改一點比較好測試、失敗的損失也比較低 改程式碼的優先順序:重構 > 修 bug > 增加功能 好處: 重構會讓修 bug 變簡單、修完 bug 會讓增加新功能變得簡單 為不常改變行為的外部 API 建立自動化測試 好處: 每次重構時能夠確定沒有破壞這些 API — Simplicity is the prerequisite for reliability — by Dijkstra. 因為我們是人類,只有相當有限的注意力、短期記憶和工作記憶空間。
2016年3月4日 星期五
如何讓程式可維護 / 重構的方向 / 程式開發中的互動設計
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言