屎山是如何形成的?

你好,我是加百利
今天我們要聊的話題是,『屎山』是如何形成的
每當(dāng)我在項(xiàng)目里,看見那種屎一樣的代碼時(shí)
總是會(huì)禁不住感嘆:
這后浪們的屎,果然是比前浪的種類更加繁多啊
所謂青出于藍(lán),而勝于屎。

接下來,我想來探討一下關(guān)于屎山形成的真正原因
以及如何的避免它
如果,你就是那個(gè)創(chuàng)造屎山的后浪
甚至,你就是那個(gè)直到今天還在創(chuàng)造屎山的前浪
那么,請(qǐng)你現(xiàn)在屏住呼吸
跳出屎來
好好反思一下自己。
屎山形成的第一大原因:

大概的意思就是說,你總是會(huì)繞開問題本身
只解決表面現(xiàn)象,至于會(huì)不會(huì)埋下更多的坑,根本不在考慮范圍
這是一種的思維方式上的嚴(yán)重缺陷
我還是舉個(gè)例子吧
比如你要修改一個(gè)BUG
就是有個(gè)按鈕在手機(jī)A和B上面正常,但是在手機(jī)C上面太大了
測(cè)試希望你改小一些

一開始,你還挺納悶,為什么之前沒發(fā)現(xiàn)這個(gè)問題呢?
然后你一查代碼不要緊, 發(fā)現(xiàn)這個(gè)按鈕的大小,用的PX這種單位
你心中暗罵,這TM是哪個(gè)SB寫的代碼
移動(dòng)端難道不知道做適配嗎? 怎么能用PX這種單位呢?
可是又轉(zhuǎn)念一想
移動(dòng)端適配?!
老子我好像也不會(huì)啊
于是你靈機(jī)一動(dòng),想出了另一條妙計(jì)。。。。?!懊浇椴樵儭?/p>
雖然媒介查詢你也不熟,但感覺比移動(dòng)端適配簡(jiǎn)單多了
最終,在百度的幫助下,你使用媒介查詢,修復(fù)了這個(gè)按鈕大小
并且更重要的是,你所做的修改
僅僅只是修復(fù)了BUG
并沒有對(duì)之前的代碼造成任何影響
你覺得自己簡(jiǎn)直就是個(gè)編程小天才

你看, 這就叫用打補(bǔ)丁來解決問題
當(dāng)然你也不用抬杠,我這個(gè)例子舉的確實(shí)非常含蓄
因?yàn)檫^于現(xiàn)實(shí)的例子,可能會(huì)傷害到我身邊的人
所以,
不能,
過于,
真實(shí)。
我還是再舉個(gè)例子吧
比如說這是一個(gè)json字符串,原本你需要將它解析為對(duì)象
但是由于這個(gè)字符串的內(nèi)容不符合json的標(biāo)準(zhǔn),導(dǎo)致你解析失敗
于是你決定。。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
。。。。。。。
改為用字符串提取的方式,將對(duì)象的內(nèi)容取出來
作者此處采用了暗諷的方式
主要表達(dá)了對(duì)那些年輕人清奇的腦回路無法理解的情緒
為了顯得高大上一些,你甚至寫了一段連自己都解釋不了的正則表達(dá)式
來提取字符串的內(nèi)容
可喜可賀,最終效果實(shí)現(xiàn)了,BUG修復(fù)了
不過,從這一刻開始,形成屎山的慣性,就已經(jīng)被打開了。
通常, 這種補(bǔ)丁打到第4層以上時(shí), 就基本無法再解決了
通??偸且氐角?層,或前2層重新打補(bǔ)丁
總結(jié):? 形成屎山的第一大原因,就是不解決或者故意忽略問題的本質(zhì)
選擇在之前錯(cuò)誤的基礎(chǔ)上進(jìn)行修補(bǔ)。
屎山形成的第二大原因:拿項(xiàng)目練手
你是不是發(fā)現(xiàn)項(xiàng)目中莫名其妙的使用了$nextTick方法卻不知何意?
你是不是發(fā)現(xiàn)項(xiàng)目中莫名其妙的使用了provide和inject特性卻毫無作用?
你發(fā)現(xiàn)在一個(gè)根本沒必要使用 vuex的地方使用了vuex?
你發(fā)現(xiàn)在在一個(gè)沒有圖表的地方,引入了echarts?
你發(fā)現(xiàn)在一個(gè)根本沒有分享功能的地方,有微信API的代碼?
你發(fā)現(xiàn)項(xiàng)目中有大量毫無卵用的工具類根本沒有被用到?
你還發(fā)現(xiàn),通用組件庫(kù)中
經(jīng)常有名字類似、功能一樣,但實(shí)現(xiàn)完全不同的兩個(gè)組件
是的,你沒猜錯(cuò),
這就是一個(gè)(可能不止一個(gè))菜鳥,把公司的項(xiàng)目當(dāng)成了自己的實(shí)驗(yàn)室
更可怕的是,由于水平低下, 它的試驗(yàn)品通常都是漏掉百出
要么最終淪為廢代碼(項(xiàng)目中沒有用到)
要么最終就形成潛在的隱患
這種行為,幾乎在所有職場(chǎng)新人里都不可避免的出現(xiàn)過
無論是從職業(yè)素養(yǎng),還是個(gè)人道德,這種行為都是不可取的
屎山形成的第三大原因:變量與注釋
說起來,變量名和注釋可以很好的幫助我們理解程序的含義
但是,一旦它們到了某些人手里之后
那真的是能發(fā)揮出你無法想象的毀滅性災(zāi)難
把視頻起名叫做audio,把音頻起名叫做video
把數(shù)組起名叫obj,把對(duì)象起名叫arr
把數(shù)據(jù)叫date,把日期叫time
把暫停叫stop,把查詢叫g(shù)oto
一些新人由于英語(yǔ)水平不佳,同時(shí)又極度的不自信
有時(shí)候在相同的頁(yè)面,會(huì)把同樣一個(gè)東西叫出很多種名字
輪播圖 一會(huì)叫banner,一會(huì)叫slide,一會(huì)叫swiper? 一會(huì)叫PPT
還有一些變量的數(shù)據(jù)類型也非常的詭異:
isWifi 是字符串類型?!
network 是布爾類型?!
這個(gè)時(shí)候,我們只能寄希望于注釋能夠?qū)懙那宄稽c(diǎn)
然而,邏輯自洽的地方就在于
一個(gè)能把變量名起成這樣的鱉孫
你指望他寫注釋??
所以很多時(shí)候,遇到這種情況
因?yàn)閷?shí)在搞不清楚,那些通用的變量方法以及組件,到底用在了多少地方
而且開發(fā)時(shí)間又比較緊迫
即便是我本人,也只能放任這些屎一樣代碼,繼續(xù)存在
直到有天,你離開這個(gè)項(xiàng)目組或?qū)嵲谑懿涣肆藶橹埂?/p>
總結(jié): 混亂的變量名與注釋是導(dǎo)致項(xiàng)目邏輯混亂且難以修復(fù)的重要原因。
奉勸各位同仁一句話,當(dāng)英語(yǔ)不好的時(shí)候,寫拼音和注釋是一種美德。
屎山形成的第四大原因
這個(gè)比較簡(jiǎn)單了,甚至無需解釋。
一句話:項(xiàng)目組里全是菜鳥
解決方案呢??
不好意思,我暫時(shí)也不知道。
剛才講的這些,聽起來只是在吐槽,似乎沒有什么真正的解決方案
其實(shí),在我看來,解決方案并不重要。
重要的是,我們找到了問題的真正所在
當(dāng)你敢于去直面它的時(shí)候,
當(dāng)你能在內(nèi)心里,勇敢的承認(rèn)自己符合上述情況的時(shí)候
我相信,你已經(jīng)有了解決方案
最后,再給一條價(jià)值連城的建議
一般人我不告訴他
那就是
在大多數(shù)時(shí)候,很多人從來沒打開過官方文檔
而在大多數(shù)時(shí)候,百度沒有官方文檔好用——加百利
以上,就是今天的分享
我是加百利
我們下期再見。