软件工程师个人工作总结(16)


列举一些学习的参考资料:《RUP软件工程过程》、《MSF微软解决方案》、《XP极限编程》、《CMM实践应用——Infosys公司的软件项目执行过程》、《人月神话》、《软件需求》、《软件工程Java语言实现》 。每本书,我都仔细研读了,颇有体会 。
我开始就想,印度软件工程绝对不会象那些采访人员所说的那么简单,所谓的高中生编程说 。所以,我必须实际看看印度的软件工程 。《CMM实践应用——Infosys公司的软件项目执行过程》,是印度最大的软件公司Infosys公司的分管质量的副总裁写的,介绍他们的CMM4的软件工程,果然不同凡响 。这是我了解印度软件工程的主要窗口 。
首先,同原来的想法不同的,也可能同大多数人(尤其是受那些软件采访人员影响很深的“专业”和非专业人士)想法不同的是,软件工程实际上不仅仅只是管理,而是一门涉及很广的交叉学科 。在软件工程中,大约一半的内容是专业性很强的,涉及到软件分析、设计甚至编码的技术 。所谓的结构化、面向对象,都在软件工程的范畴内,同样是软件开发和组织的重要内容,也是软件质量保证的重要内容 。至于软件开发的管理部分,只能算是软件工程中软件工程过程的部分,或者说项目管理部分 。脱离管理来开发软件是绝对不可行的,同样,抛弃技术基础,空谈管理出效益,便如无源之水、无本之木 。诚如《软件工程Java语言实现》中所说:“软件工程范围极为广泛 。软件工程的某些方面属于数学或计算机科学,其他方面可归入经济学、管理学或心理学中 。”在这里,我强调了软件工程中的技术部分,并非轻视管理,只想在软件工程的概念上做一些拨乱反正,也希望多一些人来关心软件的核心技术,而不要空喊口号和概念 。毕竟,中国的软件太缺乏核心技术了 。
其次,对管理要求的严格不说(这个谁都知道),实际上,不管是美国的软件工程,还是印度的软件工程,都是比较灵活的 。即便是印度这样的所谓“软件工厂”模式,对于软件工程过程管理极为严格,也有一个部分是专门讲述过程剪裁的 。整个软件工程过程是非常庞大和繁复的,然而,由于项目具体情况不同,如项目的规模,参与人员的数量、素质等的不同,对于软件过程的每个部分,不是都必须的,可以根据具体情况来进行剪裁 。这个部分对于我的启发是很大的 。以前做什么ISO9000等,开始做了一个以为很好的规范,但是,到具体项目,总是对不起来,到处有问题,现在想想,便是少了这个变通的部分 。不过,话说回来,这CMM也是老美想出来的,而不是印度 。
第三,对于开发人员的选用,我发现,美国人是非常注重选用优秀的开发人员的 。Martin Fowler曾经开玩笑的说,如果给他一批水平不高的开发项目,他会考虑全部解雇,重新招聘 。《人月神话》中也说,如果200人开发一个项目,其中25个人最能干,那么会考虑解雇其余的175个人,让项目经理来编程(当然,后面还有一些抉择分析,这里断章取义了) 。其结论的基础是基于以下研究结果:优秀的开发人员和差的开发人员,其效率之差可以达到数量级 。另外,从管理的角度来说,只有人多了,才会有管理问题,当团队规模控制在一定的范围内时,便不会有太大的管理问题 。