|
本文是從 Great code is written twice (or more) 這篇文章翻譯而來(lái)。
最近這些年,越來(lái)越多的人開(kāi)始轉(zhuǎn)向敏捷開(kāi)發(fā)。各種敏捷開(kāi)發(fā)技術(shù)并不新鮮,大多是在80和90年代發(fā)展形成。但只是在最近這些年,程序員和(更重要的是)一些商業(yè)顧問(wèn)、架構(gòu)師、客戶(hù)開(kāi)始變得喜歡和擁抱敏捷開(kāi)發(fā)。
進(jìn)化中的需求
現(xiàn)在的一種普遍的認(rèn)識(shí)是,在開(kāi)始編碼前,你不可能把所有的需求都寫(xiě)完備。這些需求的確定是一個(gè)逐漸發(fā)展進(jìn)化的過(guò)程。使用短開(kāi)發(fā)周期/springts,我們一步步的開(kāi)發(fā)程序,使用多次迭代的方式完成從客戶(hù)方得到的最新需求。這些都是基于一個(gè)進(jìn)化的思想。就像生活中,我們總是通過(guò)一步步的改進(jìn)來(lái)達(dá)到最好一樣。
進(jìn)化中的代碼!
可是,這就完事了嗎?如今大部分的程序員都認(rèn)識(shí)到了需求必定是一步步的挖掘出來(lái)的。但他們卻忘了自己的工作!?他們?nèi)匀徽J(rèn)為他們的框架和架構(gòu)在項(xiàng)目開(kāi)始之初就定型了。同樣,代碼一旦寫(xiě)成,程序就完成了… 不是嗎?
錯(cuò)!以我的經(jīng)驗(yàn),所有好的程序都至少要寫(xiě)兩遍。第一編是你過(guò)于倉(cāng)促,不能很好的理解需求、實(shí)現(xiàn)需求。不錯(cuò),當(dāng)看到了某種業(yè)務(wù)模式,我們知道要提煉出方法,圍繞著它實(shí)現(xiàn)業(yè)務(wù)職責(zé)。你最終寫(xiě)成的代碼是非常好的,但,它不是優(yōu)秀的。
在我們目前的項(xiàng)目中,幾乎所有的重要功能模塊都從頭重寫(xiě)過(guò)數(shù)次。慢慢的但明顯的,代碼變得越來(lái)越好。一旦你對(duì)某段程序做了第三或第四次增補(bǔ),或又找到了一個(gè)bug,你能感覺(jué)到這程序什么地方有異味。你開(kāi)始躲避觸碰這段程序,你為不需要在處理這段程序而高興。當(dāng)有了這樣的感覺(jué)后我會(huì)怎么做?我會(huì)刪了這些代碼。
可是… 可是… 這樣你就要完全從頭開(kāi)始了!?
你又錯(cuò)了! 當(dāng)然,IDE里空了,代碼全沒(méi)了,也許一些測(cè)試程序會(huì)存留下來(lái)。但你卻對(duì)你的代碼應(yīng)該做什么有了扎實(shí)的認(rèn)識(shí)。你也知道以前這段代碼是什么樣的,你知道它以前的內(nèi)傷和異味在哪里!有了這些認(rèn)識(shí),你能寫(xiě)出更好,甚至是非常優(yōu)秀的代碼!不錯(cuò),我們也可以保留這些代碼,使用一些重構(gòu)措施…但你可能再也找不到這樣好的從頭開(kāi)始、更好的編寫(xiě)它的機(jī)會(huì)了。
再次,就像生活中的所有事情:要讓事情變的完美,你需要經(jīng)過(guò)多次的進(jìn)化迭代。對(duì)你的需求是這樣,對(duì)你的架構(gòu)和代碼也是如此。
寫(xiě)兩遍,就意味著兩倍的時(shí)間嗎?
當(dāng)告訴人們我的觀(guān)點(diǎn)是所有的程序都至少寫(xiě)兩遍時(shí),他們擔(dān)心花費(fèi)兩倍的項(xiàng)目時(shí)間。但事實(shí)遠(yuǎn)非如此。下面是原因:
- 第二次寫(xiě)代碼只是用去你初次寫(xiě)代碼的很少一部分的時(shí)間。
- 重寫(xiě)之后,代碼的質(zhì)量會(huì)有明顯的提高,可維護(hù)性,可擴(kuò)展性都有改善,包括編程的速度。
祝你好運(yùn),堅(jiān)持重新改進(jìn)你的代碼!
it知識(shí)庫(kù):好程序需要你寫(xiě)(至少)兩遍,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。