现在行业里很多人都在谈论敏捷开发,这是一个热点,象Thoutwork这样的公司也正在企图把敏捷开发模式做为企业的核心竞争力之一,可见敏捷已经超越了传统的软件开发方法的范畴,变成了具有商业要义的业务模式。
什么叫敏捷,其实无论有多少定义,其核心就是一点:快速向客户交付软件产品,快速响应客户的需求变化。为了实现这几个快速,软件公司可以在风险可控的基础上,忽略很多传统开发的流程、规范方面的工作要求,因为这些要求在敏捷者(我们用这个词来称呼那些推崇敏捷开发的人士)看来,其实都是与最终交付的软件产品没有太大的关系,是属于不能直接产生交付收益的无效工作。
从软件业务的本质上来看,我是赞同这种思路的。就像中国武术,在很长时间里被人戏称为“舞术”,不管猴拳、猫拳,花架子一大堆,中看不中用,远不如韩国的跆拳道、日本的柔道那样一招致敌、简单实用,所以有了花拳绣腿的称谓。也正是因为这样,1970年代以后,那个拍功夫片的李小龙创建了截拳道,其实就是一种散打,目的很明确,几招之内,搞定对手。现在看到的李小龙的武打片中,几乎没用漂亮的拳脚,但是往往都是在几声怪叫之后,敌人便趴在地上了。其实做任何事情都一样,为了达到目标,一定有一个最近的路径,一定有一种最简单的方法。我想,敏捷开发的精髓恐怕也在于此。当我们抓住了要向客户交付产品--软件程序这样的本质需求后,就开始要思考那些最简洁的方式和那条最近的路线了。
这一段时间,看了基本关于敏捷的书籍,也在网上浏览了几篇敏捷的文章,访问了几个采用敏捷方法的公司网站,也得到了一些印象。顺便说一下,本人看书从来都是不求甚解的,所以每本书基本上得到的是一些模糊的印象,所以对于本人来讲,很难博闻强识、引经据典。我对于这些敏捷资料的基本印象是,多数人在讨论敏捷时,往往是都从程序开发的角度来完成敏捷,因此,这时的敏捷其实是基于XP的一种开发模式。不过,既然是XP,那么能够完成那个P的Programmer(程序员)就是一个关键因素了。
前几天,我在google上搜索thougtwork,结果发现,很多竟然是关于如何通过这家公司面试的纪录。说句题外话,中国的工程师其实也很可怜,这么多人在网上花费大量的时间交流的仅仅是获得一份工作的经验,把进洋人开的公司、给洋人打工看成是人生的一个里程碑式的成就。先贤说中国知识分子缺乏独立的人格,以前可能是指政治上的,是政治的小妾,而从今天看去,恐怕还要加上商业这一条了,对老板、对洋人的谄媚几乎也成了知识分子这个对象的基本属性之一。从这些面试纪录里可以看到,thoughtwork的面试过程很严格,给的待遇当然也不错,中国的工程师趋之若鹜,最后的录用比例好像是10:1。我感兴趣的则是thouhtwork面试的内容,从那些成功者的经验报告中透露的一些信息来看,多数应该是软件设计技能、程序开发技能方面的东西,说实话,那些考题如果让我去做,估计100%的要死菜菜。我的一个曾经部下参加过他们的面试,结果第一轮都淘汰了。
从我所了解的一些信息,我们有必要需要来讨论怎样进行敏捷。
做软件,本质上也是一种业务,因此,讨论软件的开发方法,最好把出发点放在业务模式来讨论。正象前面说的,敏捷发展到今天,其实也变成了一种业务模式。OK,我们这里就来讨论一下软件业务的问题。现在所有的软件公司几乎都面临一个问题,就是做软件不赚钱,软件的利润实在太薄。这里面的既有市场环境的问题,同时也有软件公司自己的问题。话说回来,中国有成千上万家软件公司,但是到底有几家真正懂得做软件业务的呢。这几年,关于软件业务模式的创意层出不穷,方法也多种多样。有人提倡大客户服务,这样模式下,市场的开拓成本不大,而且比较稳定,但是大客户的预算也经常波动,而且客户的主管胃口也越来越大,以前的许多假设实际上已经不成立。也有人提倡做人力外包,公司就是卖人头,好处是现金流压力小,业务稳定,但是在这种模式下,正是由于公司的收入清晰可见,老板们很少愿意把装在兜里的钱再掏出来做公司的能力建设,所以时间长了,软件公司的服务能力一定是向下衰减,直到有一天客户忍无可忍,另寻新欢。还有人希望从软件工具方面来解决问题,于是就有了各种各样的框架平台,据说这是一颗能够搞定软件业务的“银弹”,于是滋生了几家做平台的软件公司,不幸的是,平台也仅仅是工具,决定项目成败的关键因素肯定不是平台,这些做平台的公司最后免不了还是得去做项目。有了飞机大炮,也未必能够打得赢小米加步枪。
现在出来了敏捷开发,而且已经成为了一种业务模式,那么就敏捷业务模式来讲,我们要深入地进行一些讨论。既然是业务模式,那么与之相关的第一个问题就是,敏捷的支持体系是什么,怎样建立。说到底,这是一种业务。
我们来看thoughtwork,它是在XP的思想下来实施敏捷的,所以它需要找的人一定是一些相对比较高档的程序员,既可以写出高质量的代码,同时又能够快速理解客户的业务,并且可以随时因客户需求而变。
但是,如果我们回到现实中间,我们会发现这种模式至少在国内是极度危险的。
首先,国内的市场似乎没用这么大的利润空间给一家软件公司去养这么多的高档程序员,即使这些程序员能够快速交付他们所承诺的任务(不过就我个人来看,我对国内市场上的程序员的这方面的能力的认识还是有所保留的)。只有一种可能性,象thoughtwork这样的公司可以持续地、从海外接受利润较好的软件订单,这样才可能管得住这群高档程序员的吃喝拉撒。
其次,国内市场上实际是缺乏一个能够适应XP、同时又相对比较稳定的程序员群体。在这里,我们简单地给国内的程序员群体来做一个分类,大概有三种类型:
第一类就是那些优秀、勤奋同时又懂得把握机遇的群体,在几年艰苦的项目生活之后,多数都进入了各个软件公司的庙堂,成为了公司的中高级管理者,或者公司的基干技术人员,例如咨询师、架构师等等,他们在一定时间后,一般不再承担一线客户项目的开发任务。
第二类则是那些资质较弱,或者有一些惰性的程序员,在软件公司干了10年左右,不上不下,高不成、低不就。这群人多数是缺乏激情、缺乏创新的老程序员,靠跳槽加薪,靠在网上晒工资条宣泄自己的优越感。当然,这群人并非一无是处,凭良心讲,在开发经验上和程序质量上,他们的工作绩效还是要比刚刚入行的程序员强了许多,到底多吃了好几年的IT饭。但是不幸的是,他们的成本也是年轻程序员的若干倍,对于公司来讲,这群人的投入产出是不成比例的。在国内软件公司中,我个人感到,最没有价值的就是工作了7、8年,每月拿8000左右的高级程序员。这群人向上,既不能带队伍做管理,独立承担责任;又不能做系统分析设计,在项目组中仅仅是一个优秀的技工而已;向下,当承担一些具体工作时,往往又摆老资格,讲条件,纪律涣散,动辄在项目中就要跳槽,置团队整体利益于不顾,是实实在在的鸡肋。这群人,我们可以称之为打工油子。
第三类则是那些工作时间不长,涉世不深,还保留了一些朝气和单纯的年轻程序员群体,他们可能能力、经验不足,但是多数追求上进,至少还有些热情,当然成本也相对较低,这些可能是现在软件公司应该重视的资源。
做软件开发要培训团队,就我的认识来讲,培训那些初出校门的年轻人其实是建立基干团队的最佳途径。当初戚继光训练戚家军时,最反感的就是老兵油子,宁可从头招募农民、矿工等良家子弟,也不要那些颇有些实战经验的老兵。
一般而言,在中国,学而优则仕,同样也是技而优则仕,程序员的事业发展肯定不能是在程序员岗位上,发展几年,如果有一些业绩了,肯定会转行,或者做管理,或者做咨询,或者干脆去做销售,优秀人才的人生追求在客观上会不断地削弱优秀的资深程序员的群体。这是国民性造成的,也是行业待遇体制的原因。虽然很多欧美公司都在宣扬一种老程序员的文化,但是程序员毕竟不是科学家,科学家越老越值钱,而程序员则是和女人相似,越老越没有人要,老的科学家是国宝,老的女人这里就不说了,而老的程序员几乎与老的女人有的一拼。这就是中国的文化环境。少数几个欧美公司的这种倡议,最终只能让那些老程序员做冤大头。
所以,在国内,程序员团队的组建只能依托于年轻的群体,要能够形成年轻程序员源源不断的资源梯队。到了30岁左右,程序员就应该主动寻找发展的机遇,过了30岁还在项目组做程序员的人,就要考虑自己的职业生涯的风险了。一个人,在30岁或者35岁的时候,还在抱着简历求一份基层的职位,本身就是一件很悲哀的事情。至少我在筛选简历的时候,对30岁以上的程序员是有所保留的,尤其那些在简历中动辄要价的人,呵呵,他们可能没有想到,在我这里,超过一定薪酬的人是必须找猎头或者熟人推荐的,行业中几乎没有公司会在公共渠道获得的简历中寻找中高级的人员的。
鉴于此,回到我们要讨论的专题,我们要实现敏捷。按照道理来讲,敏捷最好的基础是程序员,而程序员资源应该是一些30岁左右的人群。但是在国内这个人群又恰恰是不怎么优秀或者是打工油子的那一群人。呜呼,在这样的基础上进行XP,实施敏捷,谬矣。所以,现在很多公司的敏捷模式实际上是要检讨的。
目前,我们能够利用的只能是一些没有太多经验,但是还有一些朝气的人,这是我们真正可以利用的资源,我们要在他们的基础上开始敏捷。OK,相信很多公司都在探索,我们也在探索。
既然如此,那就让优秀的人发挥作用吧。
每个软件项目,基本的规律是必须有一个象毛主席那样的指路人,这是先知,一眼可以看到20年后,把项目的需求、设计、架构、程序、团队、计划和后期的扩展,全部了然于胸,胸有成竹。如果这种前提存在,我相信,至少项目很少会走弯路了,而敏捷也不是梦了。另外,Thoughtwork的面试也不会那么辛苦了。
事实上,XP走的是群众路线,靠程序员的能力来应对客户的需求,调整软件产品的功能,交付合格的产品。但是,但是就像上面讲的,在国内的环境下,这种群众群体是不存在的。而另一种方式是先知路线,靠的是毛主席式的指路明灯,洞察一切,给整个团队做导师,引导大家在正确的时间,用正确的方法,做正确的事情。这种模式可以依托目前国内的群众环境来完成。只要路线对了头,路线一旦掌握群众,群众就可以创造历史了。
这种先知模式产生的敏捷开发方法,其根本是对方案咨询能力的考验。其实,在一个团体里,当优秀的程序员转变成为管理者或者中高端的技术领导者,一定会面临一个问题,就是他们的知识如何在更高的层次上进行放大,转换成为更大的商业价值。而敏捷模式提供了一根杠杆,让优秀程序员沉淀的知识,通过方案能力来撬动巨大的商业回报。
这是一种业务模式,群众可以在先知的指导下迅速接近软件的目标,交付符合客户需求的产品。一个软件公司必须有几个先知,否则几十个甚至数百人的团队,茫茫然地摸索,能够开发出高质量的产品,才是奇怪呢。
虽然书本上有很多软件方法,指导我们分析、设计、开发产品,但是这些方法在经验目前显得多么地苍白,现实实在是太复杂了。也许真的是一些有灵气、有天分的人,才能在比较短的时间里领悟这些方法,才能与现实世界融会贯通,才能开发出合乎客户需求的软件产品。