程序员修炼之道-软件的熵

尽管软件开发几乎不受任何物理定律的约束,熵对我们的影响却很大。熵是一个来自物理学的概念,指的是某个系统中的“无序”的总量。遗憾的是,热力学定律保证了宇宙中的熵倾向于最大化。当软件中的无序增长时,程序员们称之为“软件腐烂”。

有许多因素可以促进软件腐烂。其中最重要的一个似乎是开发项目时的心理(或文化)。即使你的团队只有一个人,你开发项目时的心理也可能是非常微妙的事情。尽管制定了最好的计划,拥有最好的开发者,项目在其生命期中仍可能遭遇毁灭和衰败。而另外一些项目,尽管遇到巨大的困难和连接而来的挫折,却成功地击败自然的无序倾向,设法取得了相当好的结果。

是什么造成了这样的差异?

在市区,有些建筑漂亮而整洁,而另一些却是破败不堪的“废弃船只”。为什么?犯罪和城市衰退领域的研究者发现了一种迷人的触发机制,一种能够很快将整洁、完整和有人居住的建筑变为破败的废弃物的机制。

一扇破窗户,只要有那么一段时间不修理,就会渐渐给建筑的居民带来一种废弃感——一种职权部门不关系这座建筑的感觉。于是有一扇窗户破了。人们开始乱扔垃圾。出现了乱涂乱画。严重的结构损坏开始了。在相对较短的一段时间里,建筑就被损毁的超出了业主愿意修理的程度,而废弃感变现实。

“破窗户理论”启发了纽约和其他大城市的警察部门,他们对一些轻微的案件严加处理,以防止大案的发生。这起了作用:管束破窗户、乱涂乱画和其他轻微违法事件减少了严重罪案的发生。

Don't Live with Broken Windows
不要容忍破窗户

不要留给“破窗户”(低劣的设计、错误决策、或是糟糕的代码)不修。发现一个就修一个。如果没有足够的时间进行适当的修理,就用木板把它钉起来。或许你可以把出问题的代码放入注释,或是现实“未实现”消息,或是用虚设的数据加以替代。采取某种行动防止进一步的损坏,并说明情势处在你的控制之下。

我们看到过整洁、运行良好的系统,一旦窗户开始破裂,就相当迅速地恶化。还有其他一些因素能够促生软件腐烂,我们将在别处探讨它们,但与其他任何因素相比,置之不理都会更快地加速腐烂的进程。

你也许在想,没有人有时间到处清理项目的所有破碎玻璃。如果你继续这么想,你就最好计划找一个大型垃圾罐,或是搬到别出去。不要让熵赢得胜利。

灭火

作为对照,让我们讲述Andy的一个熟人的故事。他是一个富得让人讨厌的富翁,拥有一所完美、漂亮的房子,里面满是无价的古董、艺术品,以及诸如此类的东西。有一天,一幅挂毯得离他的卧室壁炉太近了一点,着火。消防人员冲进救火——和它的房子。但他们拖着粗大、肮脏的消防水管到房间门口却停住了——火在咆哮——他们要在前门和着火处之间铺上垫子。

他们不想弄脏地毯。

这的确是一个极端的事例,但我们必须以这样的方式对待软件。一扇破窗户——一段设计低劣的代码、团队必须在整个项目开发过程中加以忍受的一项糟糕的管理决策——就足以使项目开始衰退。如果你发现自己有好些破窗户的项目里工作,会很容易产生这样的想法:“这些代码的其余部分也是垃圾,我只要照着做就行了。”项目在这之前是否一直很好,并没有什么关系。在最初得出“破窗户理论”的一项实验中,一辆废弃的轿车放了一个星期,无人理睬。而一旦一扇窗户被打破,数小时之内车上的设备就 被抢夺一空,车也被翻了个底朝天。

按照同样的道理,如果你发现你所在团队和项目的代码十分漂亮——编写整洁、设计良好、并且很优雅——你就很可能格外注意不去把它弄脏,就和那些消防员一样。即使有火在咆哮(最后期限、发布日期、会展演示,等等),你也不会想成为第一个弄脏东西的人。

挑战

  • 通过调查你周边的计算“环境”帮助增强你的团队的能力。选择两或三扇“破窗户”,并与你同事讨论问题何在,以及怎样修理它们。
  • 你能否说出某扇窗户是何时破的?你的反应是什么?如果它是他人的决策所致,或者是管理部门的指示,你能够做些什么?

你可能感兴趣的:(程序员修炼之道-软件的熵)