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