為什么祖?zhèn)鞔a會(huì)被稱為“屎山”?


有一天,有幾條蟲(chóng)子,干擾了老板賺錢(qián),老板希望你能抓住它們。

圖片來(lái)自 Pexels
你帶著年輕的銳氣,青春的活力,學(xué)藝多年積累的程序設(shè)計(jì)藝術(shù),打開(kāi)了公司的代碼倉(cāng)庫(kù)。
遠(yuǎn)看,似乎一個(gè)運(yùn)轉(zhuǎn)的機(jī)器,巨大的代碼堆積在一起形成了大致的輪廓,蠕動(dòng)著前進(jìn)。
湊近了一看,在不凈的框架中,亂碼般的語(yǔ)句在運(yùn)轉(zhuǎn),像生了麻風(fēng)病的蛞蝓一樣在噴吐,粘稠的水在流動(dòng),而穿著格子衫的人群則在焰柱旁圍成了一個(gè)半圓,這就是碼農(nóng)的儀式。
他們環(huán)繞著那不可名狀植物,不斷的伸手進(jìn)去撥弄,又不斷的掏出一些東西填上去,使他堆積的更高,為了防止到他,又掏出黏糊糊的糊糊,用力的涂抹,試圖把它們黏在一起。

你滿心熱血,要對(duì)這座山進(jìn)行清理,使它成為一個(gè)魯棒的鋼鐵巨獸,可以隨時(shí)更換最新的部件,奔騰如飛,堅(jiān)固異常,帶著兄弟們走向人生巔峰。
你經(jīng)過(guò)縝密的分析,順著蟲(chóng)子留下的痕跡,終于找到了問(wèn)題的源頭,發(fā)現(xiàn)一坨很多年前某碼農(nóng)因?yàn)闀r(shí)代局限或者水平有限拉的陳年舊屎。
你覺(jué)得只要對(duì)它改良一下,梳理清楚結(jié)構(gòu),加強(qiáng)判斷與容錯(cuò),就可以變化成一個(gè)鋼鐵部件,讓這坨怪物離巨獸更近一步。
你用力的挖掘其中的信息,卻發(fā)現(xiàn),事情沒(méi)有那么簡(jiǎn)單,這一坨實(shí)際上不是孤立的一坨,而是和整個(gè)山體融合在一起。
或者說(shuō),這座山實(shí)際上是一坨坨粘稠滑膩的克蘇魯,通過(guò)無(wú)數(shù)的觸角和粘液連接在了一起,這些克蘇魯伸出無(wú)數(shù)的觸角,伸進(jìn)這座山體中未知的角落。
有看起來(lái)結(jié)構(gòu)相同,但是出現(xiàn)了幾十上百次的重復(fù)邏輯,有無(wú)數(shù)道不知道伸向何處的判斷分支。
有七零八落到處都是又無(wú)法解釋的神秘?cái)?shù)字,有從表面直接伸向最底層的神秘調(diào)用。
還有猜不出,看不懂,無(wú)法預(yù)計(jì)什么時(shí)候會(huì)觸發(fā),什么時(shí)候會(huì)爆發(fā)的無(wú)數(shù)定時(shí)器。
還有無(wú)數(shù)神秘的線程在獨(dú)立的掛在那里,猜不出哪個(gè)什么時(shí)候會(huì)忽然啟動(dòng),什么時(shí)候會(huì)忽然掛起,什么時(shí)候會(huì)忽然互相搶資源而死鎖,哪些資源會(huì)莫名其妙的被改動(dòng)。
神秘的鏈接,神秘的任務(wù)隊(duì)列,神秘的池,神秘的環(huán)形緩存,神秘的堆棧。
他們耦合在一起,互相支撐,構(gòu)成了一坨更大的克蘇魯屎怪,緩慢的蠕動(dòng)。
你極其困難的清理和修改了其中的一點(diǎn)點(diǎn)內(nèi)容,讓這一點(diǎn)點(diǎn)的內(nèi)容脫離出耦合態(tài),看起來(lái)清晰一點(diǎn)。
結(jié)果,忽然屎山對(duì)面十萬(wàn)八千行外,你永遠(yuǎn)意想不到的一塊功能,忽然掛了。
一個(gè)你完全在工作上沒(méi)接觸過(guò)的同事,通過(guò)他的盤(pán)查,發(fā)現(xiàn)是他維護(hù)的一個(gè)函數(shù)/方法、類、線程、內(nèi)存塊,池,和你改動(dòng)的部分是深度耦合的,你的解耦導(dǎo)致了難以理解的錯(cuò)誤使他們的部分產(chǎn)生了錯(cuò)誤。
于是你被罵了,你只能再退一步,在一個(gè)更小的范圍內(nèi)進(jìn)行調(diào)整,但是發(fā)現(xiàn),蟲(chóng)子不止是由這一塊構(gòu)成的,于是你追蹤者蟲(chóng)子的足跡,去改良一個(gè)一個(gè)的模塊。
在經(jīng)歷了一輪又一輪的批評(píng),幾乎結(jié)識(shí)了全公司所有模塊的負(fù)責(zé)人之后,你終于抓住了一條蟲(chóng)子。但是在這個(gè)漫長(zhǎng)的過(guò)程中,你早已忘卻初心。
在無(wú)數(shù)次的趕工加班熬夜的迷糊中,被同事老板挨罵后的憤懣中,表白失敗/和女朋友吵架/發(fā)現(xiàn)自己頭頂有點(diǎn)綠的低落中。
無(wú)數(shù)次當(dāng)做臨時(shí)代碼寫(xiě)下,計(jì)劃單元測(cè)試完成后就重寫(xiě)卻忘記的過(guò)程中,因?yàn)橥祽谢蛘卟簧岬么驍嗨悸范鴳械贸槌鲚喿佣a(chǎn)生的超大代碼塊中。
留下了無(wú)數(shù)看起來(lái)結(jié)構(gòu)相同,但是出現(xiàn)了幾十上百次的重復(fù)邏輯。無(wú)數(shù)道不知道伸向何處的判斷分支。
大量的無(wú)法解釋的神秘?cái)?shù)字。從表面直接伸向最底層的神秘調(diào)用。猜不出,看不懂,無(wú)法預(yù)計(jì)什么時(shí)候會(huì)觸發(fā),什么時(shí)候會(huì)爆發(fā)的無(wú)數(shù)定時(shí)器。
無(wú)數(shù)猜不出哪個(gè)什么時(shí)候會(huì)忽然啟動(dòng),什么時(shí)候會(huì)忽然掛起,什么時(shí)候會(huì)忽然互相搶資源而死鎖,莫名其妙改動(dòng)資源的神秘線程。
神秘的鏈接,神秘的任務(wù)隊(duì)列,神秘的池,神秘的環(huán)形緩存,神秘的堆棧。
你要抓的哪條蟲(chóng)子確實(shí)抓出來(lái)了。然而,在你沒(méi)看到的地方,隨著運(yùn)轉(zhuǎn),更多的新的蟲(chóng)子正在茁壯的成長(zhǎng)。
這時(shí),你突然發(fā)現(xiàn)你的腳抽不出來(lái)了,幾條觸手順著你的腿向上攀延,你的手被深深地吸入泥沼一樣的屎山,你使盡全力想要抽出胳膊,但越是掙扎,陷得越深,仿佛屎山中心有一個(gè)冰冷的黑洞,要將所有接近的物體吞噬殆盡。
你的精氣在一點(diǎn)點(diǎn)流失,一種極度的疲憊,但是又釋然的感覺(jué)涌了上來(lái)。
此刻,你覺(jué)得舒適又滿足,漸漸地閉上了雙眼,你甘愿奉獻(xiàn)頭發(fā)與生命,將自己化作一塊補(bǔ)丁,維系著系統(tǒng)的茍延殘喘。
它再也沒(méi)法離開(kāi)你了,你和你的頭發(fā),成了它的一部分。
不知道過(guò)了多久。終于又有一條蟲(chóng)子在運(yùn)行中暴露,干擾了老板賺錢(qián)。
老板又安排了一個(gè)年輕人來(lái)抓住這條蟲(chóng)子。這個(gè)年輕人帶著銳氣,青春和活力來(lái)到這座山前。
看到這搖搖欲墜的克蘇魯大山,不僅倒吸一口冷氣。
oh shit!shit mountain!


程序員過(guò)關(guān)斬將--少年派登錄安全的奇幻遐想

程序員過(guò)關(guān)斬將--請(qǐng)不要誤會(huì)redis 6.0 的多線程
