新人一優(yōu)化,系統(tǒng)就會(huì)炸!
阿粉最近在刷知乎的時(shí)候發(fā)現(xiàn)了一個(gè)很有意思的問(wèn)題,那就是:為什么程序員會(huì)有代碼能跑就不要?jiǎng)拥挠^點(diǎn)?
說(shuō)實(shí)話(huà)這句話(huà)在阿粉的工作中經(jīng)常會(huì)聽(tīng)到,不僅僅是對(duì)于一些長(zhǎng)期沒(méi)人維護(hù)的代碼,對(duì)于日常維護(hù)的系統(tǒng)哪怕是之前實(shí)現(xiàn)的代碼,大家更是敬而遠(yuǎn)之,能不動(dòng)一行代碼絕不加個(gè)空格,更有甚者哪怕是復(fù)制一下之前的代碼改改,也不考慮復(fù)用之前的代碼,畢竟復(fù)制粘貼大法實(shí)在好用。
那么為什么程序員會(huì)有這種想法呢?
不得不說(shuō)知乎的答主都說(shuō)人才,同意一句:新人一優(yōu)化,系統(tǒng)就會(huì)炸!
容易改出問(wèn)題
首先當(dāng)我們對(duì)系統(tǒng)不熟悉的時(shí)候,最容易改出問(wèn)題,你是不是也遇到過(guò)明明就改了一行人畜無(wú)害的代碼,結(jié)果服務(wù)就掛了,然而還找不到任何原因,最后只能回滾!這種情況往往是因?yàn)閷?duì)系統(tǒng)的設(shè)計(jì)不了解的人,不知道哪里有坑,看著只是改了一行很簡(jiǎn)單的代碼,結(jié)果導(dǎo)致了服務(wù)宕機(jī)。
經(jīng)驗(yàn)告訴我們?cè)傩薷娜魏未a的時(shí)候我們都需要搞清楚這段代碼的真實(shí)意圖和邏輯,不管是誰(shuí)如果面對(duì)的是一段自己不熟悉的代碼的時(shí)候千萬(wàn)不能隨便動(dòng),因?yàn)楹苡锌赡軙?huì)改出問(wèn)題,動(dòng)手之前一定要搞清楚代碼的具體邏輯。
特別是新人!特別是新人!!特別是新人!!!
這里的新人指的是剛剛接觸項(xiàng)目的人,跟工作年限關(guān)系不是特別大,新人雖然說(shuō)因?yàn)闆](méi)有經(jīng)驗(yàn)偶爾會(huì)改出問(wèn)題,但是并不代表有經(jīng)驗(yàn)的人就不會(huì)改出問(wèn)題,特別是有一些有多年工作經(jīng)驗(yàn)的人,在面對(duì)新的環(huán)境和編程風(fēng)格的時(shí)候,往往還是習(xí)慣自己的那一套,上來(lái)就大刀闊斧的改東西,結(jié)果導(dǎo)致各種問(wèn)題發(fā)生。
這其實(shí)也是為什么有些公司愿意招聘一些畢業(yè)生,因?yàn)楫厴I(yè)生就好比一張白紙,可以慢慢培養(yǎng),當(dāng)然也可以理解成容易洗腦,哈哈哈。
成本問(wèn)題
動(dòng)不動(dòng)代碼取也決于我們對(duì)這段代碼的投入是一次性的還是長(zhǎng)久的,如果是一次性的那能不動(dòng)就不動(dòng),因?yàn)椴恢档脼榱艘淮涡缘墓δ芑ㄙM(fèi)時(shí)間和精力去改動(dòng)原有的東西,更不要隨便就重構(gòu)(雖然我知道很多程序員動(dòng)不動(dòng)就喜歡說(shuō)重構(gòu))。
但是在工作中很多時(shí)候我們都會(huì)接手別人的項(xiàng)目,接手的項(xiàng)目肯定是后續(xù)我們需要維護(hù)和迭代的,這種項(xiàng)目未來(lái)會(huì)有很多需求和迭代,我們要?jiǎng)?,而且要精雕?xì)琢好好的動(dòng),弄清楚系統(tǒng)中的每個(gè)細(xì)節(jié),在適當(dāng)?shù)臅r(shí)候該重寫(xiě)就重寫(xiě),該重構(gòu)就重構(gòu),因?yàn)槲覀兊哪康氖亲尫?wù)長(zhǎng)久的運(yùn)行下去,如果長(zhǎng)期不動(dòng)舊的代碼,只往里面添加,那么系統(tǒng)只會(huì)變動(dòng)臃腫,最后想維護(hù)都維護(hù)不起來(lái)。這個(gè)時(shí)候我們就需要通過(guò)一些設(shè)計(jì)思想和設(shè)計(jì)模式來(lái)改造我們的系統(tǒng),使其變得更加活力。所以就要?jiǎng)恿?,也該?dòng)了。
真的改不動(dòng)
其實(shí)阿粉覺(jué)得還有一種可能,那就是真的改不動(dòng)啊~網(wǎng)上經(jīng)常有段子,說(shuō)一個(gè)程序員看到一段代碼,不由自主的罵了一句:這代碼寫(xiě)的就跟狗屎一樣,然后看一下提交記錄,打臉了,原來(lái)是自己幾個(gè)星球前寫(xiě)的。說(shuō)真的,這種情況經(jīng)常會(huì)發(fā)生,很多代碼只有在面臨當(dāng)時(shí)的業(yè)務(wù)需求的時(shí)候才知道為什么要這樣寫(xiě),時(shí)間一長(zhǎng)根本記不起來(lái)當(dāng)時(shí)為啥這么寫(xiě),更不用說(shuō)再重構(gòu)了,要想重構(gòu)也需要花費(fèi)很多的時(shí)間去重新理解當(dāng)時(shí)的業(yè)務(wù)邏輯,但是在業(yè)務(wù)推動(dòng)的社會(huì),老板哪有那個(gè)時(shí)間給你重構(gòu)!
知乎網(wǎng)友的一個(gè)回答也很有意思,截圖給大家看看。
是不是有一種蝴蝶效應(yīng)的感覺(jué),軟件開(kāi)發(fā)有的時(shí)候真的就跟蝴蝶效應(yīng)一個(gè)樣,不然也不會(huì)經(jīng)常出現(xiàn)往往自己就改了很簡(jiǎn)單的一行代碼,結(jié)果就崩了。
總結(jié)
總結(jié)一下該動(dòng)舊代碼的時(shí)候就要?jiǎng)印?/p>
技術(shù)是為了業(yè)務(wù)服務(wù)的,當(dāng)我們的技術(shù)或者系統(tǒng)在不滿(mǎn)足業(yè)務(wù)發(fā)展的時(shí)候就需要?jiǎng)?,即使?xiàng)目能正常運(yùn)行,我們也需要進(jìn)行適當(dāng)?shù)闹貥?gòu),作為一個(gè)合格的工程師,在設(shè)計(jì)系統(tǒng)的時(shí)候,我們要把眼光放到未來(lái)一年,提前做好設(shè)計(jì)和布局,這樣就不會(huì)被業(yè)務(wù)追著跑,導(dǎo)致系統(tǒng)臃腫從而最后改不動(dòng)!