软件工程中人的因素
软件工程是构建和维护软件的方法集合,不论何种方法,都不能脱离人这种因素。
自计算机出现以来,伴随着软件危机,软件工程中的理论也逐渐丰富,出现了各种各样的方法,这些方法多由外国学者提出,并风靡全球,相比西方国家的管理思想,国内软件业处于起步和追赶阶段,有很多国内软件团队在急切提高管理水平的意愿推动下,出现了死搬硬套,重形式轻实质内涵的现象,这就是没考虑人的因素,没有认识到人是所有创造和实现的根源,没有理论联系实际的结果。
在芯片制造业,国内曾经引进了成套的设备流水线、工艺、管理制度,但生产的芯片质量、成品率总是很低,和国外的生产线比,什么都一样,就是人不同;软件也一样,一个团队在创业之初,高效的完成了一个产品,并取得成功,当这个团队散了后,另一批人在使用更“规范的方法”、更多的资源、更卖命的做法下,产品迟迟不能推向市场,什么原因呢?举这两个例子,不是说成型的方法就不重要,而是说不论何种方法,都需要服务于创造软件的人,服务于形成高质量软件这个目标,而不是看起来在方法的约束下,做的很“像”。
实际的情况是,把人的积极性、创造性发掘出来,用传统的瀑布方法能成,用快速原型迭代的方法也能成,不论采用何种方法,你会发现实际使用的方法在原来的框架上,做了调整和优化,是谁在做这些调整和优化呢?还是人。那么怎么才能把人的积极性和创造性发挥出来呢?下面做些探讨,正所谓仁者见仁、智者见智,可以讨论。
1)团队中谁在承担“政委”的角色?在部队中,政委负责战斗动员,解决思想问题,培养正确世界观,在连队级,政委的职能由指导员承担,不但负责思想工作,也负责战斗技能培训工作,红军战斗力强,和政委机制有很大关系。那么对于软件团队,这些工作做了吗?又是谁在做这些工作?团队成员是否开心,有人关心吗?
2)谁在做关于进度、策略、目标的决策?决策的人懂吗?目标合理吗?资源恰当吗?“方法”这个工具合手吗?这些问题,就是指向拍脑袋,乱指挥的现象,被这个因素弄砸的项目估计也不少,很多“心不齐、气不顺”也是这个原因。
3)有总结吗?阶段性的,停下来,想一想,哪些可以做的更好?一段代码?一个架构?一个思路?一个经验?我们借鉴一下军事上的做法,四野在这方面做得很好,一个战役,甚至一个战斗,战士和班、排长就会进行总结,怎样打才能更好,战士们在战斗间隙学到很多,战斗素养提升很快。
4)是否为团队成员设计“装备”?为了特定任务的完成,是否配备合适的装备?需要夜视吗?是狙合适还是微冲?需要配迫击炮吗?现在的状况是团队成员自己去找装备,更不用说专门给团队设计合适装备了。
5)有战斗英雄吗?有嘉奖吗?样板在哪里?在软件开发团队工作过程中,善于发现“战斗英雄”,培养“战斗英雄”,除了收入,荣誉也是人的一大追求。
上面说的这么多,无非是说,在软件的构建和维护中,需要重视人的因素,离开了人,就像鱼离开水一样,项目成功渺茫;相反,重视实际状况,把人的积极性、创造性挖据出来,项目才具有了成功的基础,才能让软件工程所研究的各种方法,发挥出最大效益。