低程式碼可能鏟不掉“屎山”,但能讓這個它更有「型」

低程式碼可能鏟不掉“屎山”,但能讓這個它更有「型」

本文作者:知乎 神們自己

原標題:為什麼祖傳程式碼被稱為「屎山」?

駕馭屎山的唯一方法,不是重構,而是不重構。

為什麼有人可以在屎山裡加功能?

很簡單:把屎山扒拉開,每塊聞一聞,找出和你要改的功能對應的那坨屎,把這坨屎包起來(封裝),你就可以假裝它不是屎,是巧克力。然後,在旁邊拉一泡新的屎,等它風乾成型(測試透過)就可以收工了。

當然,怎樣優雅地在一座屎山裡閃轉騰挪,做到“百屎叢中過,片屎不沾身”,還是需要很多經驗和技巧的。不過說白了,就算失誤了摔個嘴啃屎,臭也只臭你程式設計師一個,老闆還覺得你很努力,客戶還覺得真香。

很多愣頭青覺得自己是天才,可以把屎山重構了。他們中的大部分人引發了屎崩,永遠埋在了幾千米高的屎山之下。

極少數人活了下來。他們真的做到了,他們真的重構了整座屎山!

重構之後的那個東西,被後人稱為——屎山2.0.

當一個系統複雜度増加的時候它的熵也會增加,這是宇宙規律。而某些有潔癖的碼農,他們非要強行降低這個複雜系統的熵——不是做不到,但需要巨大的能量,也就是成本。

你想讓誰來付這個成本?老闆還是客戶?

屎山不是一天拉成的。每一代屎山的建設者,都是非常聰明的人。他們非常清楚繼續堆高屎山,未來將產生的代價。他們理性中立客觀地評估了推翻屎山重建的成本,然後做出了一個充滿智慧的決定:

在屎山上繼續拉屎。

這個決定對於每一個人都是最優解,因為每一個人只需要對他當下的目標負責。每一次“繼續拉屎”的決定都是正確的,不這樣做才令人匪夷所思。如果重構屎山,客戶很生氣,因為交付時間更長了,還會冒出許多以前沒有的 bug 。老闆很生氣,因為成本大增,而客戶毫無多付錢的意思。就連重構屎山的人自己也很生氣:天天鑽在屎山裡996,搞得渾身屎味,工資卻一分錢沒漲。

尿海不擇細流,故能成其大;屎山不拒細壤,方能就其高。屎山就這樣一天天長大,終於令最後接手的碼農感嘆:高山仰止,景行行止。

其實,屎山,是任何複雜系統的終極歸宿。

無論你使用何種語言,師從什麼流派,哪怕23種設計模式樣樣精通,最終還是會踏上前往屎山的道路。因為,條條大路通屎山。

就連微軟、谷歌、 Oracle 這樣的大公司,他們的產品也都是屎山。Oracle 每改一個功能,全公司的伺服器需要全速測試幾個月。chromium 瀏覽器的原始碼有十幾個 G ,雖然是開源的,但沒有人敢在如此險的屎峰上提交自己微不足道的跟坷垃,高處不勝基。

至於微軟,呵呵…。…從win8到win11,10年了,控制面板還是有兩種口味:一種是古早味的,一種是蘋果味的。office 從2016到2021,5年了,不拿放大鏡都看不出有什麼區別。

這段話可能會讓你誤以為,微軟、谷歌都是垃圾。但實際上,他們是地球上最強的軟體公司。世界上最高的屎山,都是最聰明的屁股拉出來的。換了一般的程式設計師,屎山還沒壘出一個小屎包,就屎崩了,就這點水平還天天嚷嚷著要重構

喬布斯曾說:死亡是最好的創新。

所有程式碼的最終歸宿都是墳墓,而絕大多數程式碼早已死無葬身之地。屎山是不可能重構的,這輩子都不可能重構的。打敗屎山的唯一方法,唯有另起爐灶,建一座新的屎山。這就是為什麼在巨頭們巍峨連綿的屎山腳下,總能有新的小屎包崛起。

當然,對於血氣方剛的少年,我知道,你很可能覺得我在扯淡,屎山有什麼好怕的,重構就是了。

明知山有屎,偏向屎山行。來,壯士,乾了這碗屎,我絕不會攔著你。

作為一名有理想的程式猿,我也在努力建造自己的屎山。

TAG: 重構他們微軟客戶碼農