一直想分享一些有關於維護程式碼的心得,但始終沒有時間,今天晚上竟然意外的空下來,就讓我碎念一下吧~XD

今天想分享的主軸是Clean code 意識(註 *1)。

Clean Code 是什麼?

Clean code 其實包含著許多部分,像是:遵守Coding style 、替變數或函式取一個有意義的名字、資料封裝、減少重複的程式碼… 等等,這或許對我們來說都是上課就教過的事情,但實務上卻因為偷懶或英文不夠好而很難做到。

而我這些日子以來遵守著所有我知道的Clean code 規則,不過當然一定有漏網之魚是我還不知道的,但當我學習一個新的規則,我將會盡力遵守。

Clean code 有什麼好處?

過去,我不認為把Code 寫的乾淨除了程式碼潔癖之外還有什麼好處,但在維護了這麼多舊功能,在現有功能上添加新功能時逐漸發現,乾淨的程式碼絕對有助於你找到小蟲子,有彈性的添加新功能、刪減功能,儘管寫了Clean  code 後不代表從此之後考試都考100 分程式永遠沒Bug,卻能讓整支程式當中的Bug 所遁形。

Clean code 與軟體工程

其實,撰寫乾淨的程式碼只是一種習慣,他跟多麽高深的軟體工程技術並沒有直接的關係,套用了經典的Design pattern 也不一定會讓Cdoe 變得乾淨(但是通常會,畢竟軟體工程多半遵守SOLID principle )。

但是當你想要套用經典的Design pattern 幫你解決某個問題時,你卻會發現自己的Code 若耦合性過高,將會導致使用上的困難,這時候,重構將會幫助我們通往Clean code 之路,進而可以更加容易套用Design pattern 。

Clean code 與重構

這些日子以來,我不斷的重複看著自己的Code ,每一次打開某一支程式碼,都會看看是不是有什麼地方可以重構,每一次都告訴自己,你看到它、Commit 它之後,他都應該比你看到之前更加乾淨,日積月累後,你所維護的程式碼將逐漸受自己的控制,越來越容易維護。

Clean code 與工作時間

很多人為了趕專案dead line ,不斷地複製、貼上的寫著程式(這樣還叫寫嗎?)總告訴自己「有空再回來改這個地方」,但有經驗的人或許都知道,不變的定律就是永遠都不會再有空了,當你產生一次又一次的duplicate code 之後,將距離Clean code 越來越遙遠。

因此,我確保自己的程式碼在我的最低Clean code 標準當中,盡可能地減少程式碼並且重複利用,看到舊的程式碼缺少複用時則盡量利用重構手段加以優化,或許也因為這樣,我才能一邊增加功能,又一邊減少程式碼的數量吧(註 *2)!

當然,我也會被工作時間所擠壓,我看到原本不是我維護的程式碼,不遵守Clean code 原則時,只能選擇性地睜一隻眼閉一隻眼,但我會將它筆記起來,總有一天將回頭將它優化,成為Clean code 城堡的一小塊積木。

Clean code 與時間演進

專案一定都會隨著演進而有需求改變,當我們寫的Code 耦合過高,將會發現Code 一點一點地與原本不相同,最後回頭一看,竟發現自己都不知道自己到底在幹麻?(就連不斷遵守Clean code 原則的我也得不斷修改自己的程式碼)

唯有在每次checkout 與commit 之間,不斷地抱持著Clean code 的意識,不斷優化自己的程式碼,才能確保在時間的演進中,一切都還在自己的掌握之中(註 *3)。想一想,你現在維護的專案,是不是有哪一個角落已經長了蜘蛛網?

寫在後頭…

稍早提到,Clean code 是一種習慣,人都會有壞習慣,而且通常比好習慣多,因此要保持Clean code 意識以及維持不斷的重構程式碼真的是一件相當不容易的事,但當你發現一隻又一隻的小蟲,從你的程式碼中「快速」消失,而不用再過一隻500 行的Class 或200 行的Method 時,這一切似乎變得很值得。

如果你對Clean code 也有興趣的話,可以考慮讀一讀無瑕的程式碼:敏捷軟體開發技巧守則,當中提到許多相當多有關於撰寫Clean code 的觀念,另外同一系列則是無瑕的程式碼 番外篇:專業程式設計師的生存之道,專門用來對付現實所面對的問題,也相當值得一讀。

若是對重構有興趣的話,則可以讀一讀重構:改善既有程式的設計這本重構聖經,裡面Step by step 的教你如何透過重構的手段讓程式碼變得更加具有彈性、好維護且遵守Clean code 的原則。

文章當中,是我工作以來以及讀過以上幾本書的心得,若有什麼不對的地方或者對於這些議題有興趣,也歡迎大家討論指教!

 

P.S. 最後想跟自己說,多一點包容,少一點責怪(即便只是在心裡),盡可能讓身邊的人也擁有Clean code 意識,如此一來,專案將會走向更好的道路。

 

註 *1:其實我有點忘記「Clean code 意識」這個詞是從哪本書看來得,印象中應該是無瑕的程式碼:敏捷軟體開發技巧守則

註 *2:這並不代表我同事做了「重構」與「加功能」這兩件事哦,在重構:改善既有程式的設計這本書當中提到,應該一次只做其中一件事來確保重構過程之正確性。

註 *3:無瑕的程式碼:敏捷軟體開發技巧守則所提到的「童子軍規則」(每次離開營地都讓營地比使用前更乾淨)。