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