打球像做人
上圖是筆者幾年前拿網路上的圖來東湊西湊,拼出來的桌面,本只是拿來練 Photo Impact,沒想到幾年後發現蠻多人轉發的,甚至有人拿來再創作,放在自己的影音作品內。感覺很有意思。
在筆者成長的年代,那時台灣的棒球正在經歷一個史無前例的黑暗時代。職棒簽賭案一椿又一椿,當時搞得社會氛圍甚至有種「打棒球就是賭博」的氣氛。有一個人帶領我們撐過來了,那就是台灣巨砲-陳金鋒。
陳金鋒曾在一次訪談中說到:「打球像做人,就是真誠。」這對社會起來多少作用我不知道,但對一個棒球迷的我來說,在往後一些決策上,著實起了不小影響。一句話是不是你說的、一個 Solution 是不是你想出來的、一個技術你究竟會不會、熟不熟,你可以騙人,但總有一天你會需要拿真相出來驗證,到時你還是得面對真實。
不會,就練。練多了,你就會了。
本篇將藉一個公開的練習題,進行 TDD 的實彈演習。
各位如果常用一些繪圖軟體,或是畫 UML 流程圖的工具,應該有體驗過一個功能,就是在一個已存在的點附近按一下,不用按太準,滑鼠會自動「滑」到原有的點上去,就像被磁鐵吸過去一樣。Magneto Effect 這個題目就是在實踐這樣的工具。
例如,畫面上已存在了一個錨點(50, 50),而磁力作用的範圍假設是 5,當滑鼠在(49, 50)的座標上被按下時,因為在錨點的範圍內,所以就自動被「吸」到錨點(50, 50)上了。如果同時有多個錨點在附近,就「吸」到最近的點上去。
我們要先來列個測項,這些測項能幫助我們待會寫程式時有個目標物可以參考。同時,要注意測項的順序。一般來說,會先做簡單的 case,再一個一個慢慢加複雜,或是先處理介面等細節,再慢慢加入重要運算。最後,需注意測項間的依賴。如果做到一半發現測項有要新增、修改,或換順序的,就來把它改掉:
假設磁力作用的範圍是 5
錨點 | 滑鼠原位置 | 滑鼠新位置 | 測試功能 |
---|---|---|---|
- | (49, 50) | (49, 50) | 定介面、沒有錨點 |
(50, 50) | (49, 50) | (50, 50) | 距離夠近 |
(0, 0) | (49, 50) | (49, 50) | 距離很遠 |
(50, 50)、(0, 0) | (49, 50) | (50, 50) | 兩個錨點,一個在附近 |
(50, 49)、(50, 50) | (49, 50) | (50, 50) | 兩個錨點,都在附近 |
題目不難,但因為篇幅有限,而 TDD 過程每一步還是比較繁瑣,所以這裡我們就用影片來演示整個過程:
請注意,此完全沒有經過美化與剪接,意在真實呈現真實工作中會出現的情形,中間有一些卡住與 debug的過程,請耐心服用。覺得語速較慢著,請加快成 1.5 倍速服用 :)
透過這個小小的題目,我們稍稍對 TDD 的運作情形,有了一點點了解。然而,光是看是不夠的。要想享受 TDD 帶來的好處,是要一定程度的練習的,而筆者其實不建議各位一開始就拿工作的專案來練習。也許一段時間後可以,但一開始不要,尤其「絕對不要」在上班時間練習。
寫工作的 code 會有時間壓力。壓力一來,你會很難很難堅持使用你剛學、還沒掌握訣竅的方法,你會更傾向用你原本就熟悉的方式,就練習不到了。效率不彰的練習不如不練。所以,如果要練習,就空出個下班時段,上網找個與工作無關的題目來練吧!譬如 Code Wars。
謎之聲:「天才與庸才之間的差別不在基因、不在天分,而在刻意練習!」
ithelp2021