學會 TDD?用 TDD?落實 TDD?到底什麼時候該用 TDD 呢?
TDD 其實是一種修煉的過程,讓你可以在每一次寫程式的過程,都逐步在累積功力,就像金庸的射雕英雄傳中,馬鈺教郭靖修煉內功的方式,無外乎就是一些呼吸、走路、睡覺的法子。
(圖片來源:獵人 Hunter x Hunter)
前言
很多朋友都會問我,在實務上所有需求、每一行程式碼,你真的都用 TDD 來進行開發嗎?
需求變動頻率很高的時候,你也 TDD 嗎?寫不了測試或很難寫測試的情況,你也 TDD 嗎?時間很吃緊的時候,你也 TDD 嗎?
就如同我常常強調的:
TDD 是種修煉過程
TDD 是一種輔助開發的方式,同時也是一種養成好的開發習慣跟好設計的修煉過程。
舉個例子來說,在沒修煉以前,畫直線要用尺,畫圓要用圓規。這都是修煉過程。
當你已經練到很進階了,當你沒有尺的時候,你畫出來的線也「足夠」直。不給用圓規時,你也能畫出個「夠圓的圓」。
而這個修煉是持續不斷、沒有盡頭的,但任何時間在實務需求不允許你修煉,而需要應急時,你的修煉就會展現出成果。
即使你不用 TDD,你的 design 仍會有足夠的可用性、擴充性、可維護性跟品質,因為已經習慣總是從需求思考,從呼叫端設計,腦袋總能自由地把實作的細節與抽象的互動分離。
結論
練武的人不會因為練成了某個招式就停止修煉,因為停止修煉就會生疏,TDD 也是一樣的。(葉問再熟詠春,也是要繼續跟木人樁繼續練功)
最近幾個月加入 wechat 的幾個技術社群,不得不說對岸的大牛跟技術狂熱者真的相當多,他們的技術社群活躍能量也遠遠大於台灣。他們有人可以每天早晚以練習 kata 來暖機(Uncle Bob 也是這樣建議),以練習 kata 來當作睡眠的儀式。(如果你跟我一樣有睡眠障礙,不要常幹這件事,很容易太嗨睡不著的)
不管是李小龍講的「練習一萬次踢腿」或是「一萬個小時的練習」,刀是越磨越利,就算你的 kata 已經練習過成千上百次,每一次的練習都還是有可能激出更進一步的火花。可能是思路、可能是寫 code 的技巧、可能是 IDE 的某個熱鍵、可能是命名、可能是演算法,而這些都會一點一滴的累積在你的體內跟腦袋裡面,進而在實務上默默地發揮出效果。
說再多都沒用,開始動手做吧。
(圖片來源:來自網路)
Kata Reference
- KataCatalogue
- 一场说练就练的 Kata
- LiveCoding 第十期 — TDD Hangman by 姚若舟 (很多 live coding 過程的影片)
- 程式碼演進過程 by cyber-dojo
標準「這是個 feature, 不是 bug」的體現。
blog 與課程更新內容,請前往新站位置:http://tdd.best/