為什么程序員會(huì)有代碼能跑就不要?jiǎng)拥挠^點(diǎn)误趴?
今天就和大家說說這個(gè)有趣的話題。
針對(duì)這個(gè)問題某乎上有個(gè)小哥講了一個(gè)小故事务傲,先分享給大家:
新來的程序員小哥覺得代碼不規(guī)范凉当,內(nèi)存釋放的模塊很混亂。這可能有隱藏的風(fēng)險(xiǎn)售葡。接下來纤怒,他做了整合,把內(nèi)存釋放進(jìn)行了模塊化天通,專門整好了泊窘。代碼變的更優(yōu)質(zhì)了,對(duì)吧像寒?到這里算是好的烘豹。
然后過幾天,就出事了诺祸,生產(chǎn)出現(xiàn)重大故障携悯。系統(tǒng)內(nèi)存泄漏,系統(tǒng)崩了筷笨,影響客戶使用憔鬼」昃ⅲ客戶投訴,扣錢轴或。然后整個(gè)項(xiàng)目組開始大排查昌跌。排查到最后,就是這個(gè)內(nèi)存釋放的優(yōu)化照雁,有個(gè)位置漏了蚕愤,沒改到。但是其他位置全改掉了饺蚊。然后這個(gè)沒改到的位置萍诱,內(nèi)存長(zhǎng)期不釋放。好了污呼,內(nèi)存爆了裕坊,內(nèi)存泄露,系統(tǒng)崩潰燕酷。就是這個(gè)優(yōu)化籍凝,導(dǎo)致了重大故障。
然后全公司通報(bào)批評(píng)悟狱。要求項(xiàng)目組整改,并且出檢討堰氓,現(xiàn)在能理解了嗎挤渐。代碼能跑,就別改双絮。
辣條對(duì)這個(gè)倒是沒有太大感覺浴麻,也沒有很多工作這塊的經(jīng)驗(yàn),不過之前暑假實(shí)習(xí)囤攀,有位前輩和我聊過這個(gè)話題软免,他大致是這么看的:
很多中小型公司和一部分大公司對(duì)于代碼質(zhì)量、開發(fā)效率等基礎(chǔ)設(shè)施建設(shè)沒有什么追求焚挠。這些公司的商業(yè)模式側(cè)重在業(yè)務(wù)邏輯方面膏萧。由于各種原因(比如壟斷等),用戶對(duì)于產(chǎn)品質(zhì)量沒有什么話語權(quán)蝌衔,不得不容忍系統(tǒng)和應(yīng)用的缺陷榛泛。這使得此類公司的技術(shù)團(tuán)隊(duì)從KPI的角度沒有足夠的動(dòng)力去改良代碼和系統(tǒng)的質(zhì)量,除非這種改良可以直接帶來商業(yè)利益噩斟。
具體來說曹锨,比如一個(gè)提供打車或者外賣服務(wù)的平臺(tái),它的商業(yè)收益主要來自于線下的用戶行為剃允。改善代碼質(zhì)量只有在用戶數(shù)量增長(zhǎng)需要擴(kuò)容服務(wù)沛简、提高性能的時(shí)候才有正的商業(yè)收益齐鲤。除此之外,改善代碼質(zhì)量幾乎沒有可見的商業(yè)收益椒楣。這給中層管理者帶來很大的挑戰(zhàn)给郊,因?yàn)樗麄冃枰プC明投入工程資源的產(chǎn)出。如果這種產(chǎn)出無法直接或間接地通過銷售增長(zhǎng)撒顿、用戶增長(zhǎng)等指標(biāo)反映出來的話丑罪,中層管理者就不會(huì)愿意讓自己管理的開發(fā)者去改善代碼質(zhì)量。
長(zhǎng)此以往凤壁,代碼庫中會(huì)逐漸累積各種技術(shù)債和潛在的缺陷吩屹。隨著時(shí)間的推移,重構(gòu)代碼的代價(jià)會(huì)越來越大拧抖,風(fēng)險(xiǎn)也越來越高煤搜。這種情況下從風(fēng)險(xiǎn)收益比來看,盡量不要改動(dòng)能夠運(yùn)行的代碼是一種局部最優(yōu)的策略唧席。
只有當(dāng)代碼質(zhì)量嚴(yán)重影響了系統(tǒng)的穩(wěn)定性以后擦盾,中層甚至高層管理者才會(huì)有動(dòng)力去投入資源做大范圍的重構(gòu)和改良。而這種時(shí)候通常伴隨著技術(shù)團(tuán)隊(duì)人員流動(dòng)淌哟,很容易出現(xiàn)全部推翻重寫的局面迹卢。
辣條個(gè)人認(rèn)為倒也不是絕對(duì)的。這取決于你個(gè)人對(duì)整個(gè)項(xiàng)目的熟悉和理解程度徒仓。
可以動(dòng)的情況如下:
- 你是項(xiàng)目的主要代碼貢獻(xiàn)者之一腐碱,你對(duì)每個(gè)模塊做什么都有充分的理解,知道修改帶來的影響掉弛。
- 項(xiàng)目成敗責(zé)任在你症见,你需要判斷某個(gè)模塊如果不修改的風(fēng)險(xiǎn),以及事故發(fā)生時(shí)會(huì)造成什么損失殃饿。
- 雖然之前的代碼很亂但能跑起來谋作,但項(xiàng)目還沒上線,為了日后系統(tǒng)的穩(wěn)健乎芳,你決定大動(dòng)干戈遵蚜,重構(gòu)一下。
不要?jiǎng)拥那闆r:
- 你往一個(gè)巨大的項(xiàng)目里面添加了小功能奈惑,為小功能而且修改已經(jīng)存在很久的部分谬晕,風(fēng)險(xiǎn)是很大的,除非你有充分的理由携取。
- 項(xiàng)目bug很多攒钳,改了一個(gè)bug會(huì)有n個(gè)新bug出現(xiàn)。
- 項(xiàng)目已經(jīng)上線雷滋,如果需要大改動(dòng)不撑,需要測(cè)試文兢。
個(gè)人建議:
- 如果你的代碼能跑,但你不知道它為啥能跑焕檬,你還是不要提交這種代碼了姆坚,搞懂了再提交。
- 寫單元測(cè)試实愚,以后修改了跑一次全部測(cè)試兼呵,也知道修改帶來了什么影響。
** 元芳腊敲,你是怎么看的呢击喂?歡迎在評(píng)論中留言。**