一般我是晚上做Kata,第二天早晨寫文章記錄。不過今天這個Kata比較簡單,我又比較閑,做完干脆就把文章寫了。
經歷過一段(10行的)算法訓練之后,我們又可以偷懶——哦不是,我們又可以進行思維訓練了。
這次的任務很簡單,找到一段自己一年前寫的代碼,幾百行左右,然后閱讀三遍,每遍角度不同。
- 第一遍把代碼作者看作大牛,找他寫的好的地方
- 第二遍把代碼作者看作新手,找他寫的爛的地方
- 第三遍把代碼作者看作二逼,找他出BUG的地方
我之前的代碼在GitHub上,所以直接找了一段看,那個項目的名稱叫worldline,感興趣的可以去看看,雖然我覺得肯定沒人看,哈哈。
那個項目大概是兩年前寫的,當時用了canvas,工作量主要在前端。印象中實現功能的時候遇到了很多坑,比如jQuery的animation并發的時候必須手動stop之前的動作什么的。說起來似乎也算不上是坑,只是自己不理解jQuery罷了,不過當時很是痛苦了一段時間。
功能實現之后代碼爛到自己也看不下去了,就認真地重構了一下——當然,是基于我兩年前的實力進行重構——當時自己還感覺挺叼的,提取了好多公共函數,重構之后大概減少了40%代碼,一直以此為榮,雖然從來沒告訴過別人。
這次打開這段代碼一看,果然,就像看自己一年前的QQ空間一樣,圖樣圖森破。當然,幸運的是比兩年前的QQ空間好點,兩年前就不是幼稚了,是SB,恨不得穿越回去抽丫幾嘴巴子。
具體代碼我就不貼了,直接說結論:
寫的好的地方主要是提取了公共函數,用canvas畫圖時候方便了許多
寫的爛的地方主要有三點:
- 代碼沒有格式化。當時的我可能還不知道有自動格式化插件,所以代碼亂七八糟的。
- 抽象程度不夠。只是提取公共函數,其實代碼仍然很亂,應該用類或者原型繼承方式重構的。這次切實體會到了類的重要性,類看起來比較有調理,從init開始一步一步深入。函數的話只能一大片代碼慢慢往下看,很難建立整體的邏輯關系。
- 細節做得不好。具體來說就是命名不規范,很多函數直接就叫a、b,還有就是賦值不恰當,應該加var的地方沒有加,可能會污染全局空間。
這個練習就像“好好學習天天向上”一樣,說起來簡單做起來難。做起來難的原因很簡單——自以為是,覺得沒必要做,其實錯過了許多提高的機會。
以后有機會的話要經常溫故而知新,最后把CodeKata作者的一句話送給大家:
Moving Forward By Looking Back