為什么程序員千萬不要重寫代碼?

重寫代碼其實意味著重新開始丢郊,而且也存在著更多的風險!

想要推倒舊代碼盔沫,重寫代碼的程序員們,請注意:保持冷靜枫匾,繼續(xù)前行!

程序員都有一顆工程師的心架诞,所以當他們到一片新的場地想做的第一件事就是,將舊的一切推倒重來干茉。是的谴忧,他們決不會滿足于簡單的增量勞動。

或許這種微妙的心理定位可以解釋:為什么程序員進入新項目組后寧愿丟掉舊代碼重新寫角虫,也不愿意修修補補沾谓。他們認為舊代碼簡直一團糟。

但是戳鹅,事實上真是這樣嗎?你之所以認為舊代碼一團糟均驶,其實是由編程的一個基本定律決定的,那就是:寫代碼容易枫虏,讀代碼難妇穴。

為什么你覺得舊代碼異撑朗混亂?因為讀代碼更難。

這大概就是代碼Reuse難以實現(xiàn)的原因腾它。 這就是你組里的每個人都喜歡用不同的功能將分割的字符串轉(zhuǎn)換成一個數(shù)組跑筝。比起猜測舊的功能是怎樣實現(xiàn)的,重新寫一個自己的功能要簡單和有趣多了瞒滴。

作為這個公理的推論继蜡,你可以問問身邊的程序員他們正在奮戰(zhàn)的代碼怎么樣?「簡直是一塌糊涂!」他們肯定會這樣說」渫龋「我簡直想推倒重來!」

為什么認為代碼這么糟糕呢?「額稀并,看看這個功能,竟然有兩頁長!完全不知道這些東西為什么在這里!完全不知道這些API是干什么的单默〉饩伲」他們會這樣回答你。

曾經(jīng)搁廓,Borland的創(chuàng)始人 Philippe Kahn當初就是向記者們吹噓:Quattro Pro會比Microsoft Excel要好用得多引颈,因為它是從頭開始編寫的,全部都是新的源代碼!

但是境蜕,認為新代碼比舊代碼好簡直就是荒謬蝙场。舊代碼是已經(jīng)運行過的策治,測試過的未檩。無數(shù)的bug在被發(fā)現(xiàn)前都上線運行過,發(fā)現(xiàn)之后程序員們可能在花了好些日子才修復了這些bug悄雅。這種修復可能是一行代碼台诗,也可能是幾個字符完箩,無數(shù)的時間和精力都花在了這些bug修復上。

當你決定拋棄這些舊代碼從零開始的時候拉队,你也丟掉全部前任努力的結(jié)果弊知。

新代碼一定比舊代買好?NO,重寫可能會帶來更大的風險粱快。

對技術(shù)領(lǐng)導者來說秩彤,重寫項目的代碼也是一個異常艱難的決定。因為從公司層面說事哭,重現(xiàn)代碼甚至會威脅產(chǎn)品的市場競爭力漫雷。一旦決定重寫代碼,那么與競品相比慷蠕,你可能落后了2~3年——在軟件行業(yè)珊拼,這時間可夠長的食呻。

你理想中的新代碼會帶來產(chǎn)品功能的提升

但事實上流炕,即便重寫的新代碼可以實現(xiàn)舊代碼的所有功能和需求澎现,但是為產(chǎn)品帶來的市場競爭力只有邊際提升。因為重寫用的新技術(shù)每辟、新語言剑辫、新框架并沒有給產(chǎn)品帶來質(zhì)的飛躍。

更不用說在重寫的漫長過程中可能會遇到一些意外情況渠欺,比如:

缺錢:資金鏈的斷裂

缺人:核心程序員離職

最終導致效果不佳:達不到原產(chǎn)品應有的所有功能和需求妹蔽,白白浪費了時間和金錢,也丟掉了市場競爭力挠将。

所以重寫代碼意味著胳岂,你在把自己置身于非常危險的境地,可能幾年后你也寫不出比以前更好的代碼舔稀。你只是花了一大筆錢把已經(jīng)存在的代碼又寫了一遍乳丰。

當你覺得眼前的舊代碼很爛時,該怎么辦?

你覺得舊代碼寫的很爛内贮,那又怎樣呢?它們已經(jīng)上線产园,已經(jīng)在實際運行中經(jīng)受住了考驗。所以當你發(fā)現(xiàn)前任留下的代碼亂七八糟的時候夜郁,不妨冷靜下來什燕,從以下三個方面入手理解代碼、改善代碼:

01代碼的機構(gòu)有問題

如果一段網(wǎng)絡(luò)代碼突然彈出了自己的對話框竞端,應該是UI代碼需要被處理屎即。這些問題可以被解決掉,你要一次次小心地移動代碼事富,重構(gòu)剑勾,改變接口。還需要一位細心的工程師立馬仔細地檢查這些改變是否有問題赵颅,從而不打擾到其他人虽另。事實上,甚至比較大的結(jié)構(gòu)變化也可以不扔掉代碼來完成饺谬。

大牛程序員回憶說捂刺,曾經(jīng)在某個項目中,他和他的團隊花了好幾個月重新架構(gòu)在一點上:把代碼動來動去募寨、清理族展、創(chuàng)建有意義的基類,并創(chuàng)建了模塊之間的完美接口拔鹰。但是他們始終非常小心翼翼仪缸,并沒有產(chǎn)生新的bug、也沒有丟掉任何舊代碼列肢。

02代碼的效率不高

曾經(jīng)恰画,Netscape的渲染代碼被傳非常緩慢宾茂。但事實上,這只會影響該項目的一小部分拴还,這部分是你可以優(yōu)化甚至重寫的跨晴。你完全不必重寫全部代碼。優(yōu)化速度的1%工作量片林,會讓你獲得99%的爆炸性提高端盆。

03代碼寫得很丑

有些代碼真的寫的很丑,比如Joel曾參與一個項目费封,開始用下劃線做開始的成員變量約定焕妙,但后來改用更標準的「M_」。所以一半的功能用「_」開始弓摘,一半用「M」開始访敌,這看起來真的很丑陋。但這個問題5分鐘就能解決衣盾,而不用從頭開始寫全部的代碼寺旺。

最后,你要記住势决,從頭開始再寫一遍并不意味著你會寫出比以前更好的代碼阻塑。因為你沒有參與到上一個版本的創(chuàng)建,所以你其實根本就不算有經(jīng)驗果复。一旦你準備推倒重寫陈莽,你可能會再犯一遍版本一犯過的錯,甚至會產(chǎn)生更多的新問題虽抄。

100offer說:面對糟糕的舊代碼走搁,Keep Calm & Carry On !

在大型商業(yè)項目中,推倒重來是非常危險的行為迈窟。當然私植,如果你是在做實驗,想到新算法可以隨時重寫车酣。

如果你跳槽曲稼、或剛接手一個新項目,面對看上去異澈保混亂的舊代碼贫悄,請冷靜下來,忍住推倒重寫的沖動娘摔,想想上面這些經(jīng)驗之談窄坦。

作為一個開發(fā)者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的iOS交流群:776598941,不管你是小白還是大牛歡迎入駐 鸭津,分享BAT,阿里面試題彤侍、面試經(jīng)驗,討論技術(shù)曙博, 大家一起交流學習成長!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怜瞒,一起剝皮案震驚了整個濱河市父泳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吴汪,老刑警劉巖惠窄,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漾橙,居然都是意外死亡杆融,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門霜运,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脾歇,“玉大人,你說我怎么就攤上這事淘捡∨焊鳎” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵焦除,是天一觀的道長激况。 經(jīng)常有香客問我,道長膘魄,這世上最難降的妖魔是什么乌逐? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮创葡,結(jié)果婚禮上浙踢,老公的妹妹穿的比我還像新娘。我一直安慰自己灿渴,他們只是感情好成黄,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逻杖,像睡著了一般奋岁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荸百,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天闻伶,我揣著相機與錄音,去河邊找鬼够话。 笑死蓝翰,一個胖子當著我的面吹牛光绕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畜份,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼诞帐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爆雹?” 一聲冷哼從身側(cè)響起停蕉,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钙态,沒想到半個月后慧起,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡册倒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年蚓挤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驻子。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡灿意,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崇呵,到底是詐尸還是另有隱情脾歧,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布演熟,位于F島的核電站鞭执,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芒粹。R本人自食惡果不足惜兄纺,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望化漆。 院中可真熱鬧估脆,春花似錦、人聲如沸座云。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朦拖。三九已至圃阳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間璧帝,已是汗流浹背捍岳。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锣夹。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓页徐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親银萍。 傳聞我的和親對象是個殘疾皇子变勇,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容