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