软件以人为本2 - 为什么软件要以人为本?
软件以人为本,这是一个值得讨论的话题吗?
1. 回顾“软件工厂”
至今还记得在我国九十年代中期兴起,两千年左右火爆的 “软件工厂”运动。CMMI、TSP、PSP、RUP、UML还有MDD等等就是在那几年开始火爆的。招募一帮代码工人,给他们合适的工具,用最好的流程和方法学管理他们,他们就能生产出符合要求的软件产品。多么好的想法啊!公司老板和管理人员太喜欢了,于是很多公司轰轰烈烈加入了“软件工厂”运动中。如果加上MDD,在不远的未来代码都可以自动生成,代码工人可以取缔,于是真正的“软件工厂”就建成了。当时作为软件开发人员的我也有点小恐慌,做开发真的是青春饭啊,这才做开发几年,连写代码这个工种都要淘汰了。
软件工厂如此定义软件开发:
1. 软件是针对既定需求的产品。
2. 软件可由预定义的模块组装,也可由预定义的模型生成,也可由代码工人编写代码完成。其终极目标是根据预定义模型,基于预定义模块进行的组装。
3. 软件中最重要的是语言,方法,流程和工具。代码工人只是资源而已。
时至今日,软件工厂的概念已经随时间流逝而渐渐淡去。然而这种思想在现在依然很有市场,因为它的最大卖点在于可管理性和可预测性,很符合企业管理的特点。
案例1
项目经理:“这个业务要下周交付的话恐怕不成,资源已经全部被占用了。”
业务:“那从另外一个业务去调一个过来,时间应该赶得上吧!”
项目经理:“我试试!”
开发还是资源,很难谈得上成长。项目经理还在救火,业务还是一团忙乱。
案例2
项目经理:“这个业务延迟了5天,因为我们前端开发资源紧缺。”
业务:“那能不能让其他的开发人员做呢?”
项目经理:“前端组的有要求,不让自己做!”
公司大了,分工细了,协调难了。部门间目标不一致了,满足客户和遵守规则冲突了,流程越来越多越来越僵硬了,人的力量越来越难发挥了。
2. 软件以人为本
2.1 为什么软件要以人为本
如果让我重新来定义软件开发,我会如此定义:
1. 软件是为客户(人)创造更高价值的产物。客户(人)对更高价值的理解会随时间而变化,软件需应对这种变化。
2. 软件是客户与开发团队和开发团队内的人与人间合作的产物。个人的能力与团队的合作是软件能否成功开发的关键。
3. 语言、方法、流程和工具的主要作用是辅助个人和团队发挥更大的力量,从而能更高效地为客户创造更高的价值。
这就是为何软件要以人为本的原因。因为软件是由软件开发人员(人)开发来为客户(人)创造价值的产品,离开了人,软件不能开发出来,即使开发出来,它也什么都不是。
软件以人为本将包括对如下内容的独立思考:
1. 如何提升个人的开发能力和管理能力?如何提升与他人的沟通能力和自己的影响力?
2. 如何融入团队,进行团队合作?如何建立团队,促进团队合作?如何有效利用工具(语言、方法、流程和工具)辅助个人能力提升,帮助团队发挥力量?
3. 如何与客户更好合作以在更短的时间内为客户创造更大的价值?
2.2 敏捷十年
来自InfoQ《敏捷宣言十年后的思考2》。在敏捷走完十个年头的时候,敏捷大牛们纷纷发表意见,不少敏捷大牛认为敏捷在人方面并未取得期望中的成功。他们对敏捷社区提出了下述期望:
1. 渴求技术卓越
2. 促进个人转变和领导组织变革
3. 管理知识并推动教育
4. 力图在整个流程中最大化地创造价值
软件以人为本看来是一个长期的问题。