我的软件工程观(一) 序

类别:软件工程 点击:0 评论:0 推荐:

我曾经做过、耳闻目睹过不少开发项目,也接受过系统的项目管理培训,也曾天天与咨询师一起协商制定公司的各种制度、规范,还曾专门指导过CMM的项目实施。当我初期做项目时,由于感到管理的混乱与不合理而迫切渴望得到软件工程学的知识;而学习、应用了这些知识后,我却依然感觉到了混乱与不合理。可以这样说,以前是有些混乱,而现在是在井井有条的外衣下依旧是腐败的血肉。

 

传统软件工程的不足

传统软件工程学曾经像一个巨大的偶像。“今天你CMM了吗?”也曾作为IT人士的问候语。但许多人说,他已经走向黄昏。

诱惑

软件工程学由于借鉴了制造业等成熟的工程学方法,而忽略了人的重要性。本来嘛,软件工程学的最高目的就是达到软件的自动化生产,软件开发不依靠单独的个人,可以说,人只需要按一下电钮,或进行简单而枯燥的,并且是易于培训,低成本的,不易出错的重复劳动就可以完成。

这个观点非常具有诱惑力,特别是对于手中有权利和金钱,而希望最大程度获利的老板们或管理阶层的商务白领。试想一下,我们可以节约更多的人力,并且可以解聘以前需要高薪聘请,并且喜怒无常不易于管理的工程师们;我们可以更高效地生产出物美价廉的产品,提高公司的利润和竞争力;并且易于管理,我们可以随时知道项目(或产品)的开发进度,一切是透明的,可以看得见摸得着的;我们可以不用再听取那些自以为是,只知道技术的傻子们的辩解了(同时也不需要装作聚精会神的倾听状或思考状)。啊!一切是如此的完美!就像共产主义一样!而我们可以利用手中的金钱与权利投身到这场伟大的具有划时代意义的革命中去,打倒这万恶的旧社会,去创建一个新秩序!

要知道,诱惑到了有地位的人,比诱惑到了没地位的人,更能影响这个世界。

 

但问题是我们现在处于社会主义初级阶段,物质和精神上还未达到极大的满足。上个世纪有几个伟人曾经想多、快、好、省的建设;大踏步地迈向共产主义。美丽的前景鼓舞着他们,他们围湖造田,他们大炼钢铁,他们号召全体人们动员起来。事实却是我们现在还没有进入共产主义,环境被我们破坏了,我们需要几十年的时间去恢复环境资源,我们失去了最有可能发展的二十年。

理论是美好的,现实是残酷的。

软件行业的发展一直是与对人类周围事务理解的深入,从而总结出较切实可行的方法论结合起来的。如对语法的理解导致了编译器的发展,对数据利用的抽象导致了数据库的发展,对稀缺资源的和合理利用导致了操作系统的发展,对业务对象的理解导致了面向对象和用例技术的发展,对软件开发管理的深入导致了软件工程的发展。但当前人们对世界的理解还不完善,不全面,否则数学会精确地模拟一切。为烦杂、不合理的社会开发软件系统,不是可以通过闭环、完美的原则解决的。

矫枉过正

当我初期做项目的时候,充分感到了项目管理知识差所带来的苦恼,但我享受着与客户沟通,以及开发的乐趣;现在我却开始意识到项目管理过于泛滥也会带来苦恼,而我们却无法享受沟通和开发所带来的快乐。

人们往往矫枉过正。许多措施、文档从一穷二白,迅速发展到庞大、复杂的怪物,可以说是从一个极端走向另一个极端。而我们还是离这两端的中间点(“增一分则太肥,减一分则太瘦”的理想完美的制度、文档)同样遥远。过去最关注的“建造”,现在失了宠,而过去最被人忽视的制度和文档,现在又得了势。“生命在于‘折腾’”这句话实在是太形象了。

人们依旧互相指责。技术人员说管理人员是傻子,管理人员说技术人员是白痴。

宝刀屠龙

“武林至尊,宝刀屠龙,号令天下,莫敢不从!”

大家都想得到一把屠龙宝刀,但它过于沉重。没有足够的内力是无法将其运用自如的。而过于沉重的传统软件工程学是否就像这把宝刀呢?

顾名思义,软件开发最重要的过程在于建造,不在于庇护性措施,如管理工资和SQA活动等。所有的措施只应该紧紧围绕在以“建造”为核心的过程,而不应该喧宾夺主。但对软件工程方法论有着杰出贡献的学者们参与的项目,都是由财大气粗的客户(如军方)出钱,由技术天才云集的大公司(如IBM,波音公司等)接手;一方面客户非常成熟,军方有着大批的顶尖的技术专家,领一方面,大公司里也有着同样杰出的工程师(有许多应该称呼他们为科学家),对于“建造”这一主题实在无法再深入研究了,只能谈论一些庇护性活动。

而与此相对的是,大部分中小公司没有足够的势力去养活大量的顶尖人才,庇护性活动的重要性对他们而言,其重要性就远远低于“建造”这一主题。实际上,中小型公司更应该将注意力集中在人才上,而这一点,恰恰被多数软件工程学者们所忽视,甚至回避。

 

关于“屠龙”还有一个故事:一个人经过多年努力,学到了一套“屠龙之技”,但当他学成归乡的时候才发现――到那里找一只龙来让我杀呢?

许多中小公司迫切地希望咨询师们为他们提出一些实用的建议,而咨询师们的回答往往是:“我们只提供一个抽象的模型,需要你们理解透彻;而且最重要的是你们要结合你们自己的情况进行过程改进。”瞧,他们说的多好听,这句话完美无缺,但正如“放之四海皆准的真理往往没有实际的指导意义”一样,别指望他们能帮助你太多。还记得吗,ERP项目前期需要派出足够数量与足够才智的人员进驻企业,甚至长达多年,才能指导企业进行改组。

 

屠龙宝刀的作用在于杀戮、防身、炫耀;管理的作用则在于如何用最小的成本获取最大的受益。举个例子,A项目需要100万元的研发费用(技术人员),但若加上管理费用5万,则只需要85万元研发费用(技术人员),则实际上减少了10万元的成本;这项管理费用没有白花。但若再加上10万元的管理费用(管理费用达到了15万元),而研发费用结果依旧是80万元,则合计费用达到了95万,比上一次的90万元多了,则说明最后这10万元的管理费追加是无效的,它浪费了公司的钱财。

其实我在说谎

大家可能注意到,我一直都在指责传统软件工程学;但其实我只是将传统软件工程学的一些缺点和问题以一种激烈的方式叙述出来而已。我的主要观点是传统软件工程学的方法过于沉重,对此,我更倾向于敏捷方法。当然管理的重量还要取决于项目的具体情况。

“诱惑”一部分谈到的问题是客观存在的,但我的意思只是给人们泼点冷水,希望他们(她们)期望值不要过高。需要在这里指出的是,没有一个管理人员是傻子,他们(她们)非常聪明,否则就不会拿那么高的薪水,或创建某个公司了。许多公司实施CMM,ISO,技术人员说老板不懂管理,其实不然,他们(她们)非常现实。要知道,做事需要花钱的,而且是许多钱。有些企业是由于政府给逼的,大部分企业希望首先CMM或ISO能给公司带来无形资产,这样投标时至少没有劣势;外包是块肥肉,不达到标准就意味着拿不到入场券;当然,如果能在此基础上将管理水平提高一点则是更好。

关于“矫枉过正”问题,我也说了谎。我认为,矫枉过正是人之常情,是符合客观规律的,它比继续错误要好得多;而且没有人能够短期之内作到完美,毕竟完美是永远无法达到得,“天地本不全”嘛。

对于“宝刀屠龙”部分我举的管理费用的例子也有失偏颇。管理费用到底多少合适,是需要尝试的。我们不能因为害怕失败而放弃探索。而且许多咨询师是非常有经验的,与专业人员交谈会使你受益匪浅,我不是主张过于崇拜权威,但你总不能相信一个没有相关背景的人吧。

在我看来,软件工程学真的很有用,至少他可以让我们(技术人员)知道,还有这么一套理论和方法论。这样,我们在做事的时候就会考虑得更多,做得更好,少犯一些错误。以前我曾与同事们说过这样一句话:“一个人在原地跌倒两次,他(她)是个傻瓜;但若是一个人在原地反复跌倒,那么不用问,他(她)一定是一个程序员。

 

本文地址:http://com.8s8s.com/it/it36747.htm