在我看来,中国整体软件工程能力这十年的发展比较缓慢。虽然中国软件企业的CMM或CMMI的评估成绩单越来越好看。

大家很明白,在相同的外部环境下,工程能力决定着软件企业的竞争力。因为,工程能力是软件企业的生产率的直接驱动力,是团队战斗力的综合表现。特别是在以外包服务为业务导向的软件服务企业。可是,由于在国内,企业外部环境的复杂性,导致工程能力变成软件企业竞争力的非决定性力量,退化成位居销售能力、签单能力、管理能力等之后的弱相关性力量。这样的状况,在行业中已经持续了很久了。在我咨询和培训过的许多软件企业中,以下现象比比皆是:

(1)项目组疲于从一个项目转战到另一个项目,无心无力自发地总结过去项目、发现重用、提取最佳开发实践、改进工程过程。------你总结过自己的项目吗?你为公司的过程改进提过建议吗?

(2)项目管理层只重视交付,不重视工程过程价值和工程能力提高。-------你敢于冒项目延期甚至失败的风险在项目组提倡新的工程工具的使用和新的开发方法吗?

(3)公司管理层只重视利润和签单,不重视组织工程能力资产的购买和积累。-------你曾今把利润的几个点用在购买正版工程软件了?你评估过公司的工程能力资产库的价值吗?

(4)行业环境比较恶劣,“赶紧”的项目上线期,“长尾巴”需求,不讲道理的“上帝”。------你在与客户的博弈中胜利过几次?

这些现象组成了我国软件行业独特的生态圈。-----一个永远都比别人忙的IT工程师,一个重复昨天的软件公司,一个缺乏高端自主知识产权的行业。(这里不包括象华为、百度等优秀企业,但这些优秀技术企业的数量之少使得他们不能成为典型软件企业的代表。-----你总不能说,李彦宏就是普普通通的中国软件公司总经理的代表吧?他是“带领”不是“代表”。)

我们似乎走得太快,以致我们的灵魂跟不上我们的步伐!

我在8年前的2002年开始接触UML和RUP和Rational 系列工程工具,那时,UML已经6岁了,但是被孕育了已经5年了,现在已经14岁了。从学习的角度看,掌握和应用这些知识和工具不是一个困难的事情。可是,8年后的今天,在许多自称是CMML3级、4级公司中,这些东西是“听起来老土、用起来新鲜”,或者说“会用,用不好”。------这绝对不是因为我们有更好的工具和方法!马克思说,生产工具代表生产力。看看四周,我们的生产工具都是谁制造的?是“北京人”的后代吗?是“蓝天人”的后代吗?都不是!

软件工程中的生产工具基本上是泊来品。

10年前,早醒的一批软件工程师在网络上掀起了“软件作坊”的自我批判。所谓“作坊”,其中之一意就是生产工具落后、生产线落后。真实的写照就是:10几个人+10几台电脑组成一个项目组。那现在呢?好像多了几台服务器而已。

另外一个现象就是“过程的迷茫”。

我相信,没有一模一样的软件,但我不相信:不一样的软件就要不一样的开发过程。瀑布模型、螺旋模型、迭代模型、RUP,以及敏捷过程等等,不断的被软件公司和软件项目经理们兴奋地讨论着。我们总能找到我们不用这些过程模型的理由-------“瀑布模型太简单”,“RUP模型太复杂”等等;但我们总是找不到所谓适合自己和自己项目的过程。为什么?因为我们希望有一个“绝好的”过程推动我们的工作,使得我们不用思考、不用调整,让过程告诉我们每一步怎么走。我们不会让过程灵活起来。另外一个原因就是,没有用得好的工程工具来支撑开发过程。

第三个问题就是工程能力文化比较缺失。

我这里并不批判我们对开发平台和开发语言的无与伦比的学习速度和与时俱进。是不是我们大多数人得到新的开发工具的成本太低了,使得我们永远追求最好的工具。可是“最好的工具”并没有帮助我们建立良好的工程能力。我们的短板不在开发工具的使用上,而在需求工程和系统设计上,在那些看不见的地方和看不见的能力上。大多数企业缺乏软件开发上游工作的把握能力。经验不能被传播,没有传播的途径和文化氛围,不能变成公司级工程能力资产。好的工程方法不能被正式地引入,没有引入的投资,即使引入,没有足够的时间让你去消化和吸收。

第四个问题就是环境问题。

简单的讲,这是个无赖的问题。到底软件公司的“上帝”,还是软件公司自己最先制造了“污染的源头”,还是中国飞奔的GDP速度是幕后的推手,不得而知。总之来讲,一切都要快,没有时间留下来给过程,最好马上看到结果。

下面谈谈我的一句话解决思路。

让软件企业的竞争再激烈一些,让粗放的竞争模式死的更快一些。让那些“关系生产力论(社会关系就是生产力)”的应用者清醒的更早一些。还有一点,让工具软件的开发商更多一些。

以上个人观点,针对大多数应用开发的软件企业。欢迎拍砖!