熵是一个来自物理学的概念,指的是某个系统中的“无序”的总量。当软件中的无序增长时,程序员们称之为“软件腐烂”(software rot)。
有许多因素可以促生软件腐烂。其中最重要的一个似乎是开发项目时的心理(或文化)。
不要留着程序中的“破窗户”不修,低劣的设计,临时的糟糕的方案等等。而往往我们又面对着诸多的“现实”,没时间重构,重构风险大没资源测试。
可是我们会永远生活在“现实”里面,不可能有某一天万事具备、良辰吉日等着让你开始着手去修理这些“破窗户”。
我们可以借助自动测试等手段来帮助我们降低风险。如果真的没办法立即修复,请一定要做到:把发现的“破窗户”记入TODO List,并且定期Review它。
他是一个富得让人讨厌的富翁,拥有一所完美、漂亮的房子,里面满是无价的古董、艺术品,以及诸如此类的东西。
有一天,一幅挂毯挂得离他的卧室壁炉太近了一点,着了火。消防人员冲进来救火——和他的房子。
但他们拖着粗大、肮脏的消防水管冲到房间门口却停住了——火在咆哮——他们要在前门和着火处之间铺上垫子。
这的确是一个极端的事例,但我们必须以这样的方式对待软件。如果你发现你所在团队和项目的代码十分漂亮——编写整洁、设计良好,并且很优雅——你就很可能
会格外注意不去把它弄脏,就和那些消防员一样。即使有火在咆哮(最后期限、发布日期、会展演示,等等),你也不会想成为第一个弄脏东西的人。
给予计算机两项自相矛盾的知识,是James T. Kirk舰长(出自Star Trek,“星际迷航”——译注)喜欢用来使四处劫掠的人工智能生命失效的方法。
遗憾的是,同样的原则也能有效地使你的代码失效。
我们觉得,可靠地开发软件、并让我们的开发更易于理解和维护的惟一途径,是遵循我们称之为DRY的原则:系统中的每一项知识都必须具有单一、无歧义、权威的表示。
重复是代码中最坏的味道,大家可以回想一下,有多少Bug是因为重复代码漏改引起的,修改重复代码又浪费了多少时间。这么坏的东西一定要深恶痛绝!
书中归纳了常见的重复类型:
强加的重复(imposed duplication)。开发者觉得他们无可选择——环境似乎要求重复。