重复的危害

来源:互联网 发布:外交学院 知乎 编辑:程序博客网 时间:2024/04/27 00:45
重复的危害---《程序员修炼之道》节选

作为程序员,我们收集、组织、维护和利用知识,我们在规范中记载知识,在运行的代码中使其活跃起来并将其用于提供测试过程中所需的检查。

遗憾的是,知识并不稳定,它变化--常常很快。你对需求的理解可能会随着与客户的会谈而发生变化,政府改变规章制度,有些商业逻辑过时了,测试也许表明所选择的算法无法工作。所有这些不稳定都意味着我们要把很大一部分时间花在维护上,重新组织和表达我们系统中的知识。

大多数人都以为维护是在应用发布时开始的。维护就意味着修正bug和增强特性。我们认为这些人错了。程序员持续不断地维护。我们的理解逐日变化,当我们设计或编码时,出现了新的需求,环境或许变了,不管原因是什么,维护都不是时有时无的活动,而是整个开发过程中的例行事务。

当我们进行维护时,我们必须找到并改变事物的表示--那些嵌在应用知识中的知识胶囊。问题是,在我们开发的规范、过程和程序中很容易重复表述知识,而当我们这样做时,我们是在向维护的噩梦发出邀请--在应用发布之前就会开始的噩梦。

我们觉得,可靠地开发软件,并让我们的开发更易于理解和维护的唯一途径,是遵循我们称之为DRY的原则:
系统中的每一项知识都必须具有单一、无歧义、权威的表示。
我们称之为DRY--Don't repeat yourself!

与此不同的做法是在两个或者更多地方表达同一事物。如果你改变其中一处,你必须记得改变其他各处。这不是你能否记住的问题,而是你何时忘记的问题。

重复是怎样发生的

我们所见到的大多数重复都可归入下列范畴:
1、强加的重复(imposed duplication)。开发者觉得他们无可选择--环境似乎要求重复。
2、无意的重复(inadvertent duplication)。开发者没有意识到他们在重复信息。
3、无奈的重复(impatient duplication)。开发者偷懒,他们重复,因为那样似乎更容易。
4、开发者之间的重复(interdeveloper duplication)。同一团队(或不同团队)的几个人重复了同样的信息。


心得体会:
一般来说,我们的软件都是具有一定的生命周期的,那么维护、升级就是软件生命周期中非常重要一部分。重复的知识在系统中多个地方表示,会给维护工作带来极大的麻烦和风险。当然,造成重复的原因很多,诚如上面节选的段落所列出来的那些原因。但是,我们仍能够采取一些有效的措施来避免重复,譬如采用元数据记录一些配置信息,项目组定义一套良好的规范,增加开发者之间的交流,做好充分的文档记录等等。书中的一句话说得特别好,“这不是你能否记住的问题,而是你何时忘记的问题”。因为维护都是发生在不得不修改的时候,通常这些时候我们都会充满各种压力,那么如果恰巧你忘了更改多处重复知识中的一处,那么风险就产生了。有时候简短的测试并不能发现这些潜在的风险,那么这个风险就会流入客户手中。

总的来说,重复的知识会给维护带来很多危害,除非你的系统永远不需要维护,而通常这种情况是不会发生的。在开发过程中我们要尽力采取各种措施来避免重复。