为什么代码越写越复杂
代码复杂程度可以用“熵”来表示,“熵”是物理学中的概念, 表示所有“无序”的总和, 尽管软件开发不受任何物理定律的约束,然而熵对软件开发的影响非常之大, 当代码中的无序增长到一定程度时,代码复杂到了程序员难以掌控, 软件就“腐烂”了。
追本溯源,导致软件腐烂的原因其实并不复杂, 跟我们现实世界中的方方面面有着密切的关系。
随便拿一则经常被报道的新闻事件来说
国外某处著名旅游景点的墙壁上被中国游客刻满了“ xxx到此一游”, 国外媒体表示从中国旅客的这种行为上可判断出中国人民的素质普遍低下; 国内人民表示要声讨这群破坏国外景点,另国人蒙羞的游客,让他们滚出中国人的行列。
为什么好好的一堵墙上会被刻满了字? 为什么这群人不去别的地方刻非看准一个地方刻? 其实道理很简单, 当这堵墙上有一个人刻过了字,那么第二个人便会认为:“别人可以刻, 那么我也可以刻”, 然后第三第四第五和后面所有的人都会这么想, 字越刻越多, 墙也越来越破坏的严重, 毕竟人都有喜欢留纪念的天性。 然而, 假如是一面干净没有一丝被损坏的痕迹的墙,我想会敢冒天下之大不韪去上面搞破坏的人肯定不多, 因此,墙会一直保持着原样; 但如果先例一开,之后的场面往往是一发不可收拾。 就像我们过马路, 本来大家等红灯等的好好的, 某一个人按捺不住闯了红灯, 接下来仿佛有一股无形的力量牵引着大家一起去闯红灯, 这可能就是所谓的乌合之众吧。
回到软件开发的话题,软件会腐烂其实也是同样的道理。 刚才开始的时候, 代码写的井井有条, 然而, 某一个时刻为了实现一个特殊的需求,一时犯懒图方便, 没有按照原来的方式继续保持代码的井然有序, 让软件的熵值增加了那么一点点。 当时这么做的程序员可能认为:“就弄脏了这么一小块地方, 没什么大影响的”, 但是随着软件功能的演进, 问题会日益严重。 当下次再碰到类似于这种与原来代码构造格格不入的特殊问题, 肯定会再次为了方便而抵挡不住诱惑继续犯错, 脑子里肯定会蹦出这样的想法:“反正代码已经脏了, 再脏一点点又有何妨”,这和在景点刻字的游客的想法何其相似。 毫无疑问, 软件开发中特殊的需求实现永远不可能避免,然后接下来肯定是一而再再而三的纵容自己继续“把代码弄脏”, 就算是换个程序员来开发还是一样, 最多只是抱怨下:“哪个SB程序员怎么写出了这么烂的代码”,然后就是:“既然那个SB这么干了, 那我也这么干, 反正已经理不清了”。 所谓的软件腐烂就是这么形成的。
因此, 要避免软件腐烂, 就一定要把软件熵值降到最低。 因为一时偷懒图方便增加代码无序性,哪怕只是一点点,这个头不能开, 不然会让整个软件走向无法回头的深渊。当看到软件中某处有那么一点“脏”的时候,一定要尽心尽力的把它清理干净,否则这个污点会越来越大, 并且向其它地区扩散, 最后整个软件中所有地方都臭不可闻, 捏着鼻子写代码的这种感觉真的很不好。
知乎:https://www.zhihu.com/people/aspwebchh
github:https://github.com/aspwebchh
email: aspwebchh@gmail.com