read the world, read my soul


The Clean Coder notes

前言

最近常買一些奇怪的書,寫一些奇怪的筆記。

讓我們繼續看下去

The Clean Coder

The Clean Coder

中文書名:程序員的職業素養

小牢騷

作者的媽媽提及,只有傻子才在沒找到下個工作前就提辭呈。放眼望去,我工作以來一直都是這樣傻,沒為自己留後路。之後應該也是一樣吧,也希望老天繼續讓我這傻人有些傻福。

素養

  • 素養,強調的不是天賦的神秘,也不是技術的高深,而是持續積湛的結晶。
  • 職業素養,讓你成為專業人士。讓你的小孩可以說:爸爸,我以後要跟你一樣當軟體工程師!
  • 專業,象徵著榮譽與驕傲,而且也明確意味著責任與義務。
  • 非專業人士,收拾殘局的,通常是雇主;專業人士通常都是自己擦屁股。
  • 軟體釋出前,一定要做好測試!你不知道你這行 code 也許帶來的是 1 億元的損失。

測試

  • 開發、修補軟體功能前,「先研究不傷身體,再講求效果」,如果作不到這樣,那麼至少也應該要:
    • 不要破壞既有軟體的功能
      • 讓 QA 找不出任何問題
      • 要求百分百程式碼測試覆蓋(提到了 TDD)
      • 自動化 QA
    • 不要破壞結構
      • (如果你希望自己的軟體靈活可變,那就應該時常修改它)

職業道德

  • 請靠自己;不該將自己的職業發展寄望在雇主,那是自己該做的事。

    • 雇主沒有義務確保你在職場處於不敗之地
    • 雇主沒有義務送你參加各種研討會或買書籍給你充電
    • 如果你的雇主作到上述幾點,只能說明他們待你不薄,但這不代表是他們該做的
    • 如果你的雇主沒有為你作到這些,你就自己想辦法作
    • 你應該計畫每週工作 60 小時,前 40 小時給雇主,後 20 小時你應該自己看書、練習、學習自己的職業技能
    • 那 20 小時,就是你的熱情、動力來源,就是你升級的時刻!
    • 所謂術業有專攻,那也是投入時間去作的
  • 瞭解你的工作領域

    • 瞭解舊的思維,投入新的想法
    • 堅持學習下去,不能落伍;就像你不會找不會變通的律師跟會計師
    • 練習:專業人士往往勤學苦幹
    • 合作:與他人一起編程、一起練習、一起設計、一起計畫;但也珍惜獨自開發的時光
    • 輔導:教學相長
    • 雇主要解決的問題就是你要解決的問題
    • 謙遜:專業人士不會嘲諷別人,只會在自作自受時先笑自己

懂得說「不」

  • 「能就是能,不能就是不能。不要說『試試看』」
  • 要有團隊精神,對隊友伸出援手
  • 別忘記客戶隨時都會新增功能,儘管他給你很急的 deadline;該說不,還是要說不。
  • 如果你該說不時卻沒有說不,那你正在把你的 PM 推向懸崖。

承諾

  • 口頭承諾自己將會去作
  • 心裡認真對待說出的承諾
  • 實際付出行動
  • 只能作自己的承諾,不作他方的承諾

編程

  • 程式碼必須可以正常運作
  • 程式碼必須可以幫你解決客戶的問題
  • 程式碼必須跟既有系統結合地天衣無縫
  • 其他程式員必須可以讀懂你的程式碼
  • 不在以下情況產出代碼:
    • 熬夜
    • 焦慮
    • 無法專注
  • 讓自己進入高效率狀態

被打擾時

  • 當別人打擾你時,請別惡言相向;禮貌地問一下有什麼可以協助對方的地方

寫不出 code 時

  • 離開座位、別死盯螢幕,找人聊天或中斷一會兒、讀一下自己有興趣的書,或試試 pair programming 應該有效
  • 累了就要休息,懂得休息
  • 很多想法會在你洗澡時冒出來
  • 幫助別人,也接受別人的幫助

測試

  • 一定要寫測試
  • 一定要保留 QA 時間

TDD

  • TDD 的三項準則(希望每 30 秒測試一次 ):

    • 在寫好失敗的單元測試前,不要撰寫任何代碼
    • 只要有一單元測試失敗,就不要再寫測試代碼
    • 產品代碼只要讓當前失敗的單元測試通過就好,不要多寫
  • TDD 的優勢

    • 你對程式碼的確定及把握
    • 缺陷的掌握度
    • 給予你更動既有代碼的勇氣
    • 單元測試的程式碼,就是最好的代碼範例
    • 是一種好的程式設計方式
    • 專業人士會使用 TDD

時常練習

  • 沒什麼好說的,就是多練習

驗收測試

  • 需求溝通
  • 完成驗收的定義
  • 自動化測試
  • 驗收測試是寫給業務方的,單元測試是寫給程式員看的
  • QA 應該找不到任何錯誤
  • CI 系統
  • 自動化測試金字塔(底 -> 頂):
    • 單元測試
    • 組件測試
    • 集成測試
    • 系統測試
    • 人工探索式測試

時間管理

  • 不要有太多會議,要懂得拒絕
  • 站著開會,大家依序回答:
    • 我昨天做了什麼
    • 我今天預計作什麼
    • 我遇到了什麼問題
  • 如果遇到爭論,超過 5-30 分鐘,那麼就停止爭論,用「數據」來說話
  • 蕃茄工作法(廿五分鐘工作,五分鐘休息,完成四段蕃茄鐘後,休息 30 分鐘)

面對壓力時

  • 不要驚慌失措
  • 記得溝通
  • 還是要依照紀律原則做事
  • 尋求幫助

有凝聚力的團隊

  • 12 人(最少 3 人或最多 20 人)
  • 程式員x7、測試人員x2、分析師x2、項目經理x1

結語

又囫圇吞棗讀完這本(簡體)書了,很多想法還是要自己 try 才會知道。

如果對這本書有興趣的人可以跟我索取 :)

2013-06-02 02:40:02