写下这个标题,说实在我心里有些沉重,在当今这个团队精神一次一次地被提到重中之重的时代,我却感觉高度依赖脑力活动的软件开发工作其实几乎不可能真正的有团队合作。这是我从事了五年多一线开发(快六年了)之后的高度总结,也是要从事所谓“管理”工作最需要关注的一句话,请忘记“合作”!
为什么?俗话讲,一山不容二虎,如果这是一份高度依赖脑力运动(我用运动,不用劳动)的工作,这两个聪明人你说谁会听谁的呢?他们能否强强联合,1+1=2那样创造出更好的东西?110%,1+1不会等于2,120%,1+2不会大于2,那就只有小于2啰?一点没错!而我的经验告诉我,90%的情况,1+1<1。如果你有幸作为握大权的管理者,请把这两个聪明人分开,让他们干不同的事情,根据他们的兴趣,爱好,去干不同的事情,如果实在找不到不同的事情,就让他们干一样的事情,但不是合作,而是各自单干,然后从他们各自生成的最终软件产品中,择优录取,这也总比让他们合作好。
在热力学中,有个概念叫“熵”,它是个能量概念,但却不表示“能”,而表示“不能”,假想一个孤立系统有两个物体,一个物体的温度很高,一个很低,它们的总的热量是100,然后你把这两个物体合在一起,高温物体的温度降低了,而低温物体的温度升高了,它们的总体热量是多少?孤立系统,注意,没有任何对外热传递,所以热量还是100,但由于这么一合,无论是高温物体,还是低温物体都没了温差,没了温差就不能利用这个热量做功,而做功能力的损失,就是熵。也许你感觉这段文字比较晦涩,没关系,通俗说,两个聪明人的聪明才智由于“合作”,都用于内耗上了,完了之后两个人一样是聪明人,但没有“工作”的能力了,或效率低下。
这种事情了屡见不鲜了,例子我想我无须多举,大家身边比比皆是,只要你是做软件开发的。也许你要问了,没有合作,如何开发大型软件?好问题,我也从事过大型软件的开发,但我现在回头看看,那根本不是什么合作,而我当时也不是一个真正意义上的“开发者”,我仅仅是个编码者和单元测试者,我有设计这个软件吗?我有在软件中体现出我的思想了吗?甚至,问得残酷点,我有知道我在实现什么业务逻辑吗?——答案全是No,这就是软件外包的典范,别人把软件设计好,详细到伪码级别了,我只是来做最低级的实现而已。也或许,这是一种“合作”的途径,铁打的营盘流水的兵,那些在底下干活的人永远不要问“为什么”,机械式的工作,流水线式的工作,这还需要有个前提,他们不能有太多的想法,比如我,实在是想法太多,那种地方自然就不欢迎我了,不久后卷铺盖走人。
我以前有个朋友无意中说了句话,他说:“公司本来就不需要那么多聪明人。”这话还真的如此,一带多的“合作”模式是有的,就是一个牛人,带着几个小弟,完成某个项目,但我想真正的开发者,是那个牛人,几个小弟可以做做外围,周边,比如机械式的测试,对,测试是保证软件质量的重要手段,需要大量,反复。如果不幸的是这几个小弟也是很聪明的人,那就比较难办些,这个牛人就得很牛,以绝对的技术和人格魅力优势“压倒”这几个小弟,“折服”他们,这就是德能兼备,试问这种牛人多么?再说了,真有这种牛人的话,让他独自完成一个大的项目,我想更为可靠,而不是外加几个捣蛋的聪明人。
熵,产生于艰难的内部交流,产生于公司庞大而迟缓的官僚系统,产生于自我独大的个人思想,与其打破这些障碍,不如设法让这些“合作”尽量减少?
当我们还没有适应Visual Studio 2005的时候,Visual Studio 2008就出来了,版本众多,让我们有点无所适从,Visual Studio 2008还没装好的时候,Visual Studio 2010蓄势待发,一个比一个强,利用个Wizard,圈圈点点几下,一个外观花哨的应用程序就生成了,而且还貌似Outlook,抑或IE,随便你,你一行代码不用写,这叫“先进工具”,但提高了生产力了吗?我想没有,你能圈圈点点几下生成的花哨程序,别人也行,程序虽然花哨,但换种角度说,其实你什么都没干,软件的灵魂在于设计者的思想,理解这个得费点心思,或者这样说吧,利用现在的技术,你也可以轻松拥有一幅达芬奇的《蒙娜丽莎》的油画,但这仅仅是个复制品,你能这样,别人也行,你拥有的这幅画没有什么价值,而达芬奇的《蒙娜丽莎》的价值在于这位大师在这幅画中融入的他的思想以及他的劳动,这是任何技术,或“先进工具”都无法替代的,永远无法替代。这段算是我讲的一点题外话,和《人月神话》中“没有银弹”的观点接近。
软件开发是一项高度依赖脑力的劳动,开发者的思想融汇其中,是真正类似艺术创作的工作。考虑“合作”,不是不可以,但无非是这两种情况:一是我技压群雄,以德服人,号令群英;二是把前一句的“我”换成别人,让我心服口服当他小兵。