天天看點

為什麼代碼越寫越複雜

代碼複雜程度可以用“熵”來表示,“熵”是實體學中的概念, 表示所有“無序”的總和, 盡管軟體開發不受任何實體定律的限制,然而熵對軟體開發的影響非常之大, 當代碼中的無序增長到一定程度時,代碼複雜到了程式員難以掌控, 軟體就“腐爛”了。

追本溯源,導緻軟體腐爛的原因其實并不複雜, 跟我們現實世界中的方方面面有着密切的關系。

随便拿一則經常被報道的新聞事件來說

國外某處著名旅遊景點的牆壁上被中國遊客刻滿了“ xxx到此一遊”, 國外媒體表示從中國旅客的這種行為上可判斷出中國人民的素質普遍低下; 國内人民表示要聲讨這群破壞國外景點,另國人蒙羞的遊客,讓他們滾出中國人的行列。

為什麼好好的一堵牆上會被刻滿了字? 為什麼這群人不去别的地方刻非看準一個地方刻? 其實道理很簡單, 當這堵牆上有一個人刻過了字,那麼第二個人便會認為:“别人可以刻, 那麼我也可以刻”, 然後第三第四第五和後面所有的人都會這麼想, 字越刻越多, 牆也越來越破壞的嚴重, 畢竟人都有喜歡留紀念的天性。 然而, 假如是一面幹淨沒有一絲被損壞的痕迹的牆,我想會敢冒天下之大不韪去上面搞破壞的人肯定不多, 是以,牆會一直保持着原樣; 但如果先例一開,之後的場面往往是一發不可收拾。 就像我們過馬路, 本來大家等紅燈等的好好的, 某一個人按捺不住闖了紅燈, 接下來仿佛有一股無形的力量牽引着大家一起去闖紅燈, 這可能就是所謂的烏合之衆吧。

回到軟體開發的話題,軟體會腐爛其實也是同樣的道理。 剛才開始的時候, 代碼寫的井井有條, 然而, 某一個時刻為了實作一個特殊的需求,一時犯懶圖友善, 沒有按照原來的方式繼續保持代碼的井然有序, 讓軟體的熵值增加了那麼一點點。 當時這麼做的程式員可能認為:“就弄髒了這麼一小塊地方, 沒什麼大影響的”, 但是随着軟體功能的演進, 問題會日益嚴重。 當下次再碰到類似于這種與原來代碼構造格格不入的特殊問題, 肯定會再次為了友善而抵擋不住誘惑繼續犯錯, 腦子裡肯定會蹦出這樣的想法:“反正代碼已經髒了, 再髒一點點又有何妨”,這和在景點刻字的遊客的想法何其相似。 毫無疑問, 軟體開發中特殊的需求實作永遠不可能避免,然後接下來肯定是一而再再而三的縱容自己繼續“把代碼弄髒”, 就算是換個程式員來開發還是一樣, 最多隻是抱怨下:“哪個SB程式員怎麼寫出了這麼爛的代碼”,然後就是:“既然那個SB這麼幹了, 那我也這麼幹, 反正已經理不清了”。 所謂的軟體腐爛就是這麼形成的。

是以, 要避免軟體腐爛, 就一定要把軟體熵值降到最低。 因為一時偷懶圖友善增加代碼無序性,哪怕隻是一點點,這個頭不能開, 不然會讓整個軟體走向無法回頭的深淵。當看到軟體中某處有那麼一點“髒”的時候,一定要盡心盡力的把它清理幹淨,否則這個污點會越來越大, 并且向其它地區擴散, 最後整個軟體中所有地方都臭不可聞, 捏着鼻子寫代碼的這種感覺真的很不好。

知乎:https://www.zhihu.com/people/aspwebchh

github:https://github.com/aspwebchh

email: [email protected]