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