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