抵制代碼重寫,程序員開發(fā)之道
昨天,一位老上級邀請我一起吃午餐。當(dāng)坐在哪里等待上菜時(shí),我們緬懷起早期這個(gè)公司的往事。他有一句話讓我心里一虛:
啊,你這個(gè)判官…我記得當(dāng)你看到Dan(公司的第一位程序員)寫的代碼時(shí)的樣子。你說:“這代碼寫的真爛,需要重寫!”
我恐怕是沒有足夠的勇氣告訴他,我這“代碼需要重寫”的主張是錯(cuò)誤的。不錯(cuò),我認(rèn)為這代碼寫的很亂。但是,據(jù)過去歷次的經(jīng)驗(yàn),我感覺大部分的程序員看著別人寫的程序時(shí)都會想:這代碼寫的真爛。事實(shí)上,當(dāng)一個(gè)程序員數(shù)年后再看自己寫過的程序時(shí)也會想:這代碼寫的真爛。也許他們想的是對的;這代碼確實(shí)很爛。
但是,如果你認(rèn)為代碼需要重寫,你將犯下一個(gè)低級錯(cuò)誤。
公司里有一些想當(dāng)然的看法會讓你可能現(xiàn)在不能認(rèn)識到這點(diǎn)。大量的不成文的想當(dāng)然的觀點(diǎn)可能會讓你無法解釋清楚。
我喜歡Joel Spolsky說的關(guān)于這種事情的話,有些事情你永遠(yuǎn)不要去做:
我們是程序員。程序員,在他們自己的心里,是建筑師,當(dāng)他們來到一個(gè)地點(diǎn),第一件想要做的事情就是:把這地方推平,蓋上輝煌的建筑。他們對慢慢的修繕沒有興趣:小修小補(bǔ),改善,培植花草。
有一種不可捉摸的原因讓程序員們總是希望丟掉這些代碼、重新再寫。原因是他們認(rèn)為老的代碼是混亂的??墒?,你會觀察到一種非常有趣的現(xiàn)象:他們的判斷通常是錯(cuò)的。他們之所以會認(rèn)為老的代碼很爛的原因來自于一個(gè)重要的、基本的編程定律:
讀代碼比寫代碼要難。
這就是為什么代碼很難重用的原因。這就是為什么每個(gè)團(tuán)隊(duì)喜歡用自己不同的函數(shù)來做把字符串拆分成數(shù)組操作的原因。他們要寫自己的方法,這更容易,更有趣,不需要弄清楚老的函數(shù)的工作原理。
根據(jù)這種定律必然得出這樣的一個(gè)結(jié)論,你現(xiàn)在可以問一問任何一個(gè)程序員,問他們對正在寫的程序感覺如何?!皝y的不能再亂了,”他們會這樣告訴你?!拔覍幵赴阉鼈兌紕h了重新再寫?!?/P>
當(dāng)你招募來了一個(gè)程序員,如果他想重寫看來工作的不錯(cuò)的程序,你要抵制。他也許會說Java過時(shí)了,太慢,Ruby on Rails如何的酷。也許他會向你拋了一大堆專業(yè)名稱術(shù)語。不管他如何做,你要三思而行。
你覺得呢?
【編輯推薦】