background image

程序员的七宗

"罪"

  虽然软件工程的思想已被绝大部分程序员所接受,但要将这种思想转化为软件开发过程中的种种自觉行为却
不是一件很容易的事。究其原因,有很多因素,如很多程序员缺乏专业化的训练,重技巧,轻规范,包括一些计
算机专业科班出身的程序员也存在这种问题;再如很多公司只注重软件产品的开发结果,不注重开发过程,客观
上也影响了程序员的目标取向。如此种种,使很多中国的软件公司难以迈上一个新的台阶,发展壮大也就无从谈
起。程序员们作为软件产品的创造者,当然也难辞其咎。

  下面所列不过是产品开发过程中诸多问题中的其中几个,也许你不会犯这样的错,我还是引用一句老话: 有

”  

则改之,无则加勉 。

 

一宗罪:以偏概全

  大家都知道,在对一种产品决定立项开发前,都需要进行产品开发的可行性进行分析,而其中的市场分析至
关重要,其实市场分析无外乎三点,一是要开发的产品是有市场需求的,二是公司有能力获取这份市场,三是公
司能从产品中获益

(不一定是指赚钱,如公司战略利益等)。看似简单的几点,想要完全弄清楚决非易事,所以很

多产品的市场分析容易 以偏概全 ,如通过个别用户的特定要求或报刊杂志的片面报道将产品市场无限扩大

(分析

人员自己想象的

),技术驱动而忽略用户需求和成本(如铱星计划)等,至使产品开发完后没有预期的市场效果。想

 

要全面而准确地的进行产品的市场分析确实是很不容易,需要平时的积累和理性的分析思考,不能靠撞大运。

 

二宗罪:画猫成虎

  大家也许有这样的经历,产品开发完毕交付用户使用后,用户总是不满意,如不符合他们的使用习惯,功能
设置不合理等。所以产品的需求分析是如此重要,没有正确的需求,软件开发得再好,技术再先进,也不过是当

摆设的花瓶。程序员们,尤其是系统分析员容易犯的第二宗罪就是 画猫成虎 ,曲解了用户的要求。一份好的需
求分析不是简单地将用户的每个具体的需求点记录下来,而是要洞察用户每个具体要求背后的动机,将分散的需

求点串成一个有机的整体,基于需求并 超越需求 。一个好的系统分析员不仅是一位软件专家,还要是一个出色

 

的领域知识专家和沟通者。

 

三宗罪:好大喜功

  项目延期好象是软件开发一个必经的步骤。项目经理在制定开发计划时,往往过于乐观,每个开发阶段都按
最乐观的估计来计算开发时间,而没有充分考虑到软件开发的特殊性和不可预见性,程序员可能都有这样的经历,
一个非常小的

BUG

可能要耽误很长的时间,使开发进行不下去。所以项目经理切忌 好大喜功 ,因为项目的不断

延期会打击项目成员的信心和士气,久而久之,会使大家产生一种惯性:项目延期是正常的。当然,这也不能完
全怪罪项目经理们,因为在国内,很多项目计划都是采用倒排序的方法,即先确定产品交付的时间表,再依次倒
推测试、实现、设计和分析所需的时间,而整个开发的时间往往是那些从没实际开发过产品的领导来拍脑袋决定

 

的。

 

四宗罪:只顾眼前

  即便是最优秀的系统分析员也不能保证所提供的软件系统需求不会变化,所以软件设计人员要充分考虑这一
点,不能仅仅

"只顾眼前"的需求,还要有一定的前瞻性,满足可预见的未来需求,软件系统的可扩展性和可维护

性对于一个大型、复杂、长生命周期的软件系统来说至关重要。打个比方理解一下软件的可扩展性,给一个

10 岁

的孩子做一条裤子

(需求),你不能将裤子的长度裁减得刚刚与孩子的身高合适(设计/实现),因为孩子长身体很

快,到他

11 岁时裤子已经短了(需求变化),有两种方法解决,一是将短了的裤子丢弃,重做一条(重新开发系

),但成本很高;二是将在裤腿上接上一段接着穿,但不美观且不宜操作(维护成本高)。而最恰当的做法是将裤

子裁减得稍长过现在的要求,将长的部分反缝在裤腿里,等孩子长高后,拆线将原来长的部分放下一点就可以了
(扩展方便)

 

,既方便又不失美观。可见,可扩展性并非软件系统专利,裁缝们早已理解了这一点并付与实践。

 

五宗罪:得过且过

  软件设计需要通过软件实现成为最终的产品,优秀的设计需要靠一行一行的代码体现,而有些程序员对软件

实现的态度是,最小满足原则, 得过且过 ,对于系统的容错性,安全性,效率考虑甚少,满足基本功能即可,

 

没有持续改进的态度和精神。

 

六宗罪:自我安慰