程序員必須養(yǎng)成良好的代碼習(xí)慣
養(yǎng)成良好的代碼習(xí)慣,就是將代碼寫的漂亮,執(zhí)行效率也自然就得到了提升。軟件開發(fā)中包含太多東西了,需求的、設(shè)計的、測試的、管理的、文化的、心里的、溝通的,需要大家自己去琢磨。
前天在AgileChina2009上聽了Fred George的演講,他說他以前拿自己的代碼給Kent Beck看,結(jié)果Kent說這代碼很垃圾,你去看看我寫的Smalltalk best practice patterns吧。然后Fred George就看了這本書并且完全按照書上的要求去做,5年后當(dāng)他再給Kent看自己的代碼時,Kent說很漂亮的代碼。
考慮到Fred比Kent要老,可以看出Fred是非常虛心的,聽了Kent的評價不僅沒有生氣,而且還完全聽從了建議。當(dāng)然這也可能是Kent太出名的緣故,若是我說他的代碼不好,或許他就不會這樣做了。
這讓我聯(lián)想到有一次和8x一起面試,8x的手工重構(gòu)讓我很是驚訝。雖然我也看過《重構(gòu)》,雖然我平時也重構(gòu),但是不論從步伐還是安全性上,都相差深遠。我讀《重構(gòu)》的時候?qū)θ绱诵〔椒サ母淖兪遣惶澩?,因為效率比較低。我認(rèn)為書中之所以把條目分的很詳細,每個條目的步驟很小很謹(jǐn)慎,完全是為了可以讓支持重構(gòu)的工具得以實現(xiàn),對于人來說,保持這樣小的步驟太難了,不管是從記憶還是從操作的角度來看。然而8x的表現(xiàn)讓我改變了看法,不僅速度并不慢,而且安全性非常的高?;叵肫鹞业闹貥?gòu)經(jīng)常出現(xiàn)改錯以后沒法返回的問題,不禁感嘆--差距啊。
經(jīng)常在國內(nèi)的論壇上看到各種討論設(shè)計、架構(gòu)的帖子,然而每每show代碼的時候卻發(fā)現(xiàn)一塌糊涂。當(dāng)然他們自己不覺得,可是我覺得很不好。最近 Kent Beck和Robert C.Martin出的兩本書《Implementation Patterns》和《Clean Code》都是討論一些很細節(jié)的東西的,如何命名、方法應(yīng)該要多長、注釋怎么寫、格式怎么排等等,這些東西早在《The Element of Programming Style》中其實都有對應(yīng)的東西,只不過語言不同了,細節(jié)方面也不同。然而為何這么多年來,一直有人不停的寫本質(zhì)上相同的東西呢?我覺得還是大家不重視,沒有養(yǎng)成良好的習(xí)慣,自然就需要有人去寫這些東西,反反復(fù)復(fù)的提醒大家。
這里再一次很慚愧的說,我沒有好好去讀,也沒有按照書中的東西認(rèn)真去做,總是以為大概了解個概念,知道怎么回事,然后差不多做到了就行了。然而現(xiàn)在想來,卻完全不是那么回事。記得XP中有很多非?!皹O限”的要求,都是“一定”要如何如何,可實際上很多人都不以為然,認(rèn)為太過激進,實際操作不現(xiàn)實或者不必要,因此在實施的時候,做了一些妥協(xié)和變通,***失敗了還說XP不好。當(dāng)然XP不可能是包治百病的靈丹,在某些情況下確實也不應(yīng)該用它,但是很多人明明可以從中獲益,卻因為沒有領(lǐng)悟到其中的精髓而早早放棄。
比如說TDD,看起來與一般的單元測試的不同只是把寫測試的工作放在了寫代碼之前,而Pair Programming也不過就是兩個人坐在一起寫程序罷了。然而在實際應(yīng)用中,卻會發(fā)現(xiàn)TDD并不是那么簡單,它帶來的好處是你在使用之前完全想不到的,甚至很多都和Test是無關(guān)的。而Pair也不簡單的就是兩個人干一份工,如何根據(jù)技能的不同組合Pair,兩人如何分工都有很大的講究,甚至一般的對于Pair目的的理解可能也是錯誤的。因此要想證明一件東西能不能起作用,首先要完全按照他要求的方式去做,等到你真的把該遇到的問題都遇到了,你才能真正知道它是什么,能做什么,不能做什么,***才知道它到底能解決什么問題,不能解決什么問題。
在說回到代碼習(xí)慣的問題,軟件開發(fā)中包含太多東西了,需求的、設(shè)計的、測試的、管理的、文化的、心里的、溝通的……要想掌握這么多東西是很大的挑戰(zhàn)。如何將一件事記住而不忘掉,***的辦法就是將之變成習(xí)慣,就像呼吸一樣自然,不需要刻意去想就能做到。良好的代碼習(xí)慣是一個開發(fā)人員最基本的技能,使之成為習(xí)慣,會獲益很多。
決定在看一遍《重構(gòu)》和《實現(xiàn)模式》并完全按照其中的要求去做,爭取也能在5年之內(nèi)將之養(yǎng)成習(xí)慣。
原文標(biāo)題:代碼習(xí)慣
鏈接:http://www.cnblogs.com/wangyh/archive/2009/09/15/clean-code.html
【編輯推薦】