動機
翻翻The Pragmatic Programmer 20週年紀念版的一些紀錄我感覺很重要的部分
節錄
- Easy to change(ETC)
- DRY: 在一個系統中,每一條知識都必須有一個、單一、明確、權威的表現
- ex: code, API, schema, 功能, 文件
- 正交性: 不互相影響,元件是self-contained
- 可逆性: 可以變動
- DRY: 在一個系統中,每一條知識都必須有一個、單一、明確、權威的表現
- 曳光彈: 可以即時反饋、最簡化的系統
- 原形主要用在proof of concept,用完即丟,但曳光彈可以繼續發展下去
- 評估: 一項應該培養起來的技能
- question -> build model -> design components -> give some assumed vals -> compute -> analyze estimates
- 用VCS(like git)控管
- user setting (like .bashrc)
- editor setting (like .vimrc)
- 已安裝的software列表
- ansible腳本
- 開發的repo
- 工作日誌 (以天為單位)
- 做了什麼
- 突然出現的想法
- debug的變數
- 等等…
- 合約式編程: precond, postcond, class invariant
- 如果有cond被打破就要跑補救措施
- 關於assertion
- 用assertion寫下不可能發生的事
- assertion不要有state
- (X)
assert(iter.next() != NULL)
- (O)
obj=iter.next(); assert(obj != NULL)
- (X)
- 除非這個assertion會有重大效能影響,不然就留著,可以對debug(from end-user)有很大的幫助
- 將設定(setting)用成一種service不是只有text file,可以方便取得數值與控制access
- 測試以attribute為基礎: 設定參數的範圍,之後random生,去測試
- 需求是一種流程(沒有一次就定下來的): 想法 <=> 疑問(某些edge case之類) 之間的反覆來回
- 不是跳出框框思考,而是找到框框 (邊界在哪)
- 支撐project的三項支柱
- 版本控制: drive build, test, deploy 的流程
- 回歸測試
- 完全自動化