老代碼,到底能不能動
2019-04-02290
你入職一家新單位,被告知需要維護(hù)一個老產(chǎn)品,經(jīng)理找質(zhì)管給你開通了SVN權(quán)限,告訴你遷出哪個分支,然后告訴你說,就在這個分支上改,添加一個新接口,以便支持H5 Video。
于是你開始看代碼,云山霧罩,各種痛苦,完全搞不懂業(yè)務(wù)邏輯和代碼的關(guān)系,也鬧不明白這塊代碼為什么這么寫那塊代碼是幾個意思。你去問進(jìn)來5個多月還沒轉(zhuǎn)正的老同事,他告訴你他也不懂,讓你湊合著加個新接口實現(xiàn)了功能就行。加了新功能就行。
你去問干了快一年的資格更老的同事,他叮囑你千萬別動里面的代碼,千萬別管里面什么樣,就在外面包一層,先交付新功能,其它的有時間再說,里面的邏輯十年沒人動過了,沒有一個人能說清楚怎么回事,你要是改,一不留神就遍地狼煙。
你怎么辦?
正方觀點:不能動——“我還有老婆和孩子”
@Mangiacapra
動完之后,會不會只剩下刪庫跑路這個結(jié)果了。
@李傅博
不動才10個bug,動完1000個bug。
@qqwenqqqi
·理想的維護(hù)狀態(tài)
用適配器的思維進(jìn)行一點一點的重構(gòu),盡可能的熟悉業(yè)務(wù)邏輯,找出業(yè)務(wù)邏輯的缺陷,接著寫文檔,干擦屁股的活兒(這是在時間有限,只維護(hù)這一項產(chǎn)品的時候)最后這個項目就可以隨意的揉捏了。
·普遍的狀態(tài)
當(dāng)然上面說的情況是理想狀態(tài),但是一般老板和pm有時間預(yù)算的,在這種情況下,普遍只有先從經(jīng)理說的分支哪兒入手,嘗試寫H5 VIdeo code. 最后出來的結(jié)果有可能有BUG。只有BUG出現(xiàn)了從點到面去維護(hù)了,因為先讓產(chǎn)品上線就是金錢。
·Boss希望的狀態(tài)
1.如果是希望快速的開發(fā)出來走第普遍狀態(tài)解決
2.如果是希望走產(chǎn)品質(zhì)量優(yōu)先走理想狀態(tài)重構(gòu)解決
·閑談
從接手這個項目開始,你會發(fā)現(xiàn)代碼不可控是多么的糾結(jié)和無奈,你在該基礎(chǔ)上開發(fā)就很容易有BUG。所以接手這個項目的第一思維就是獲取代碼的控制權(quán)!從這個角度解釋就會發(fā)現(xiàn):代碼的易讀性多么的重要,要寫通用的代碼,寫規(guī)范的代碼,項目文檔對交接是多么的重要。你為公司擦屁股,雖然是吃力不討好的活兒,但這是對自己的負(fù)責(zé),對公司的負(fù)責(zé),對下一任程序員的負(fù)責(zé)。你不擦屁股,總有人擦屁股,優(yōu)質(zhì)的程序員普遍具有擦一切屁股的能力,還熱衷于擦屁股。
反方觀點:文檔會過時,代碼不會說謊
@安曉輝,CSDN知名博主
一旦老代碼沒人能夠把握,這些作為資產(chǎn)的代碼實際上已經(jīng)丟了,不再有價值增長,原本領(lǐng)先的優(yōu)勢隨著同行們百舸爭流的追趕漸漸失去。這是對企業(yè)是一種損失。讀程序員其實也是一種損失。
自己不寫文檔卻老抱怨別人的代碼沒文檔,而碰見了有文檔的代碼卻又往往棄文檔如敝履。業(yè)界的代碼和文檔,少見匹配的。我們只能接受這個現(xiàn)實:代碼即文檔。
對維護(hù)老產(chǎn)品的程序員來講,弄明白產(chǎn)品設(shè)計邏輯和代碼實現(xiàn)邏輯是非常重要的,就只要如下兩個辦法:找到熟悉產(chǎn)品的前輩,讓他給你講講。如果你找了產(chǎn)品經(jīng)理,他只能告訴產(chǎn)品設(shè)計上如何如何。如果你找了程序員,他通常會說就是這樣那樣,然后說一句高深莫測又拉仇恨的話:看看代碼就明白了。自己啃代碼,啃代碼,啃代碼。
所以,也可能有在外圍包裝的辦法,比如你封裝一個本地的HTTP Server,用舊API拿到數(shù)據(jù)作為HTTP流轉(zhuǎn)發(fā)一下就能支持H5 Video標(biāo)簽了。也可能很多情況都存在折衷的替代辦法。
然而,能弄懂代碼是如何實現(xiàn)產(chǎn)品和業(yè)務(wù)的,還是有非常重要的好處——對程序員來講很重要的好處:文檔是會過時的,代碼是不會說謊的,讀懂代碼,你就真真正正明白了業(yè)務(wù)是如何實現(xiàn)的。對于沒人敢動而又核心的老代碼,你搞明白了,就占領(lǐng)了戰(zhàn)略要地,唯有掌握核心業(yè)務(wù)和代碼,才能彰顯自己的價值。
除此之外,讀代碼也是非常重要的學(xué)習(xí)途徑,尤其是經(jīng)歷過線上考驗的代碼,必然尤其過人之處。在閱讀的過程中,我們可以學(xué)到很多東西,既可以學(xué)到業(yè)務(wù),也可以學(xué)到設(shè)計。只要有心,處處都是成長的機(jī)會。最不濟(jì),也鍛煉了閱讀代碼的能力,庖丁解牛之技成了,也可以在將來以無刃入有間,發(fā)揮用武之地。