選單

祖傳程式碼成“屎山”了,千萬別動

上面這個公號「澀郎」,是我的一個備用號,為了防止萬一哪天大號失聯,平時一週我也會發三篇左右的我的思考,讀書筆記,認知感悟等文章,帶領大家一起探索精神與財務自由之路。

大家好,我是校長。

我看有人問了這麼一個問題:

為什麼程式設計師會有程式碼能跑就不要動的觀點?

這個問題還是很有代表性,而是是非常有意思的一個問題,我從「程式碼系統生態學」(我自己造的一個詞)給大家回答了一波。

如果程式碼能跑,最起碼說明程式目前沒有問題,而且是經過測試人員測試過的。

既然能跑,也不影響專案運營的程式碼,你感覺有必要改麼?

很多程式設計師肯定經歷過這樣的事情,

比如:你剛接手了一個專案,而專案的程式碼風格可能跟你的程式碼風格不太一樣,亦或者感覺對方寫的程式碼太亂,不簡潔,忍不住動手就去改了。

然後呢?改了之後,發現出問題了,然後又開始連夜熬夜改 bug,改了一晚上,感覺改回去了,咋還是有問題呢?rollback 好像都失效了。

有了這個教訓之後,很多程式設計師再也不會亂改程式碼了,尤其是那種祖傳程式碼,年久失修的程式碼,更不敢動。

為什麼?從「程式碼系統生態學」(我自己造的一個詞)上來講,要想動能夠正常執行的老程式碼,尤其是你作為一個新人,不知道整體的業務邏輯和目標以及內部很多細節的話,你可能就僅僅就是程式碼生態上的一小環,就感覺自己稍微改了一下,可能會影響整個系統生態的穩定。

《狼圖騰》這本書大家都看過吧,這本書講的是草原上打狼的故事:在盛行打狼的年代,流行著一個京劇唱段,“打不盡豺狼,絕不下戰場”,就有一些人認為,狼是草原人的天敵,它給人造成了太多禍害,要想過上好日子,必須要把狼消滅。

草原上當地的老人說 “狼是草原的守護神,你們打了會遭到天譴的”,但有志有為的年輕人只會把這麼充滿迷信色彩的話當成笑話。

他們開始用大運動的方式打狼,一直打到都沒有狼了,就開始挖狼窩,把剛剛出生的小狼崽也消滅。他們以為這樣做了就會贏得大勝利大成功,但接下來發生的事情大出他們所料。

首先,狼被消滅以後,草原上發生了兔災。兔子繁殖速度非常快,當兔子數量以幾何級數增加時,它們一方面和羊搶草吃,更要命的是,兔子窩非常隱秘,牧羊人牽著馬或者騎著馬經過的時候,馬不小心踩到兔子窩,就會陷進去骨折。骨折的馬就沒用了,只能殺掉。

其次是獺災。沒有了狼,旱獺的數量也以幾何級數增加。和兔子窩不同,旱獺的洞是隧道式的,它把大量的草弄到洞裡過冬保暖,這樣一來,天一冷,大量的蚊子就鑽進了旱獺的洞裡。顯然,蚊子的數量也是幾何級數增長的,多一隻蚊子,來年就會多許許多多的蚊子,所以,在兔災、獺災之後,就是蚊災。馬身上鑲蓋了一層毯子式的蚊子,很多馬的血被吸乾,倒下了。

兔災、獺災、蚊災還都只是災難的序曲。

過去,牧羊人白天出去放羊,需要騎著馬拿著套馬杆時時刻刻巡視提防狼,累了一天回家就倒頭大睡,而草原上的婦女則幾乎一晚上不睡覺地看著羊圈,防止狼吃羊 —— 這種生活方式無意中抑制了草原人口的增長。但狼沒有了之後,牧羊人白天躺在草地上睡大覺就夠了,婦女們晚上也不用看著羊圈了,於是在短短几年內,草原人口迅速增加。

人口增加導致畜牧業不足以養活當地人,他們就開始用農業的方式 —— 以較少的土地面積來養活更多的人。但是,草原上緯度高,土層薄,冬天風很大,土地很快沙化,草原人只好繼續開荒,以至於後來草原上像長了牛皮癬似的沙地越來越多。

這時候,他們才明白老人說的那句話:狼是草原的守護神。

《狼圖騰》的故事告訴我們:

大自然裡有另外一種演算法和規則。

同樣的道理,程式碼系統生態當中也有另外你不為人知的演算法和規則,就像是草原上當地的老人說 “狼是草原的守護神,你們打了會遭到天譴的”,但有志有為的年輕人只會把這麼充滿迷信色彩的話當成笑話一樣。

程式設計師千萬別當草原上的年輕人,動不動就像修改一下能夠執行的祖傳程式碼。

其實,我們目前看到的任何一個系統,任何一個軟體,乃至正常執行的一機器,它都是由各個功能組合而成的,之所以能正常執行就說明各個功能之間,各個部門之間是相互平衡,相互協調運作的,你如果不知道整體,亦或者遇到問題,改 bug ,只知道從區域性去「堵」,而不知道從整體去「疏」,基本上就無法平衡整個系統,可能只是改了一個小地方,一個小區域性,都極有可能引發整個系統崩潰。

堵不如疏,大禹治水也是這個道理。

bug,改,其實可以,但是,你改的前提是:

要了解整個程式碼系統生態,整體的程式碼業務邏輯,以及你要修改的程式碼部分的具體功能,當你從全域性看,在切入到區域性的時候,可能你會發現:原本執行的程式碼,是有道理的,而不會認為自己比別的程式設計師聰明,就不會亂改別人的程式碼了。

其實,不管是程式,還是生活,還是工作,不管我們面對的是人生 bug,還是程式 bug,都是需要利用系統生態學原理去解決,才能獲得長治久安,才能獲得長期的收穫。