第二章  优秀程序的要素

 

----同第一章类似,这一章仍然没有涉及到心理学的内容。主要介绍了优秀程序的几个要素,按温伯格认为的重要次序如下:是否符合技术规范、是否按日程计划完成、适应性以及效率。重要的观点是,世界上并不存在一个绝对的评判程序的标准,但可以从上述几个方面来对程序进行一定程度的好坏评定。

 

如果准备把程序开发作为一项以人为主体的行为来研究,我们首先就需要确定一些标准,用来衡量程序的性能。尽管我们对这些问题多少有些概念,但是我们将发现,答案并不象想象的那么简单。道理很简单:程序开发不仅是一项人的行为,而且是一项人的复杂行为。

 

----温伯格首先认为并不存在一种绝对的标准来评判一个程序的好坏,比如称某个程序的优秀程度为80%,这是不存在的。这恐怕是因为程序有其特定的开发环境、开发人员以及不同的使用环境。然而不幸的是,实际上我们也很难找到一对足够相近的程序,从各个层面来对比他们,因而相对标准也并不实用。从几个要素来评判程序的好坏倒还比较可信,毕竟优秀程序必须是正确的,然后才考虑是否按日程完成、适应性以及效率的问题。

 

优秀程序的要素之一:技术规范

如果程序根本无法正常运转,对其效率、适应性以及生产成本的评估就毫无意义。无论如何,我们需要务实一些,需要承认:也许根本没有哪个完美的程序曾经被写出来过。每一个真正大型和重要的程序“都必然包含很多个纰漏”。所以,程序符合其事先制订的技术规范(可行性)的程度不尽相同,在对程序进行评估时,必须考虑到其不完美的一面。

 

优秀程序要素之二:日程计划

即使不考虑符合技术规范的问题,效率的问题仍然不是最重要的。有时候程序推迟发布会带来重大损失。一旦开发计划没有按时完成,总会有一大堆令人烦恼的后果。实际上,一般的开发主管宁可先做12个月的计划,然后在12个月内完成,也不愿计划为6个月,但却花费9个月。

 

----书中提到,这一点在心理学方面大有研究的余地。目前的有关研究只考虑时间的平均值,温伯格提到应该衡量开发时间的方差。期待在后面的章节看到此讨论。

 

优秀程序要素之三:适应性

温伯格认为,程序的适应性比效率重要,因此先讨论适应性。多数程序在其生命期内都会被修改,但实际上,很少有哪位原作者会考虑到可能的后续修改。文档会在一定程度上使程序易于修改,因而文档的质量也应该在很大程度上决定到对程序的评分。

适应性不是没有代价的。Fisher基本定理告诉我们:一个系统对某一特定环境的适应性越强,他适应新环境的能力也就越弱。为了强调程序的效率,我们往往追求“紧密式”的代码,而如果未来要对这些代码进行修改,那将会非常棘手。

 

----效率和适应性犹如鱼和熊掌不可兼得。因而往往只能取其一,至少这比哪个都没有强。

 

优秀程序要素之四:效率

终于讲到效率了,不过衡量程序的真正效率,并不像乍看起来那么简单。

如果我们首要关心的是程序运行的效率,那么第一步工作就应该是检查一下,看看哪些方面的规范改变以后,可以提高计算机的效率此时,我们并不顾及用户使用是否方便。诚然我们可以把一些交叉结算的工作交给人来汇总,但是通过这种方式来节省计算机运行时间,却可能使人工花费更多的时间。

在多机、多道程序的环境中测量效率的困难比单机、单任务的环境要困难得多。用户所希望的并非程序的平均执行时间最小化,而是其标准偏差的最小化,即程序的运行稳定性最佳。

 

----最近在看Jeffrey Richer的一本<Applied Microsoft .NET framework>,感觉他对效率非常重视。几乎每讲一个内容,都会提到如何提高效率。比如,值类型的装箱拆箱,他带领我们深入学习其中的原理,查看IL代码来分析程序中装箱拆箱的次数,然后改进程序将他们降至最低以使程序达到效率的最优。而温伯格将程序的效率排在优秀程序要素的第四位,他们俩的观点使我们能够对效率保持一个比较客观的认识,不要走向任何一个极端。

posted on 2004-09-13 20:21  banian  阅读(1234)  评论(7编辑  收藏  举报