程序员必须走向专业化

时间:2022-01-01 18:15:19
上周六(2月23日),IEEE-CS力推的CSDP认证培训第三期班在中关村创新研修学院开班。这次的开班仪式很有特色,主办方特别举办了一个软件工程研讨会。我赶到会场的时候正赶上中软通用产品研发中心总经理陈尚义先生的演讲,主题是软件工程师的专业性问题。陈先生在美国硅谷工作多年,现在中软集团担任高层管理工作,又在CSDP培训中担任讲师,对中美软件产业都有切身体验,对这个问题理解很深。我一落座就被陈先生的话题吸引。在演讲中,陈先生提出自己的一个观察:硅谷软件工程师的平均效率(或说生产率)比北京的软件工程师高得多,其差距之大,可能达到10倍之多。

刚听到这一论断,我还是有些震惊的,因为以我从事媒体工作五年的所见所闻,中国软件工程师的“外部形象”还是不错的,很多老外都一再表示对中国工程师的天才和勤奋表示惊讶,即使我再三追问不足和建议,他们通常也就是从牙缝里挤出“经验不足”几个字。像陈先生这种直言不讳,我是第一次听到。不过转念一想,又有些怀疑,老外素以坦率著称,当真有这么大的差距,没有必要在我面前言不由衷。况且,硅谷的软件工程师中,华人亦不占少数,说中国人效率低?我有点不服。

接着往下听就明白了,陈先生指出,这种差距不是“中国人”与“美国人”的差距,而是“非专业”与“专业”的差距。无论在哪里,非专业软件工程师与专业软件工程师在效率上差距十倍甚至十几倍,这并不是什么夸大的数字。至于表现出来的北京与硅谷的差距,其原因在于中国的专业工程师数量太少,非专业工程师占主流。而硅谷地区南郭先生比较难以滥竽充数,专业程序员占主流,体现在平均生产率上,自然会有那么大的差别。陈先生并且指出,从某种角度看,中美之间软件工程师的薪酬差距之大,是两地平均生产率差距的体现,他说:“如果你是一名真正专业的软件工程师,你在哪里都应该能达到相似的收入水平,因为软件工业是真正全球化的产业。”

这是一个让我非常感兴趣的话题。我们都知道,在《没有银弹》中,软件工程的老前辈Fred *s提出的“唯一”能成数量级提升软件生产率的办法,就是雇用天才的程序员,所以“天才”与“普通”之间十倍甚至几十倍的效率差距,这是大家都知道的事情。但是按照一直以来的理解,天才程序员是那种脑瓜子特灵光,算法功底扎实,写程序又快又好的人精,是可望而不可求的,也没有什么有效的训练手段来成批量地产生。可是“专业软件工程师”就不一样了,这里所谓专业,是指具有规范化的价值观和知识体系,规范化的工作习惯和职业纪律,职业化的工作作风和流程,当然也具有相应的技能和经验。很显然,这样的人才,不但是每一个普通程序员都完全能够达到的,而且也是能够大规模系统化培养的。如果这种观点正确,中国的程序员们就不应该整天琢磨着要赶哪个新,逐什么潮,一会儿面向这个,一会又面向那个,左一个语言右一个框架地折腾着,而是应该踏踏实实在专业性上下功夫。

这让我想起了敏捷技术大师Kent Beck的一句名言:“我不是个优秀的程序员,我只是一个有着优秀习惯的普通程序员。”这里所谓的“优秀习惯”,应该就是“专业化”的一个重要体现。Kent Beck的这句话,实际上还暗示了传统观念中“优秀程序员”与现在所需的真正有价值的软件工程师之间的显著不同。也就是说,你不能因为程序写的好,就想当然地认为自己是合格的软件工程师,没有专业素养,你就不算是专业人。

之后的这几天里,我分别就这个问题与好几个人讨论过。他们中间有美国软件企业的技术负责人,有在国内奋斗多年的软件企业管理者,又在某些领域积累多年的专业人士,也有正在创业中激烈拼搏的程序员兼老板,有大公司的,有小公司的,有中国人,有美国人,有去过美国的中国人,也有来到中国的美国人。他们的意见,可以说是异口同声地同意陈尚义先生的观点,并且表达了对中国程序员职业性水平不足的不满。相比之下,我们中国人自己对这个问题的态度都比较激烈,倒是老外们反而比较客气,有一个人谨慎地说:“也许没有十倍那么大,但是肯定比五倍要多。”我苦笑道:“七八倍也受不了啊,长远来讲,中国人就必须一点不差才行。”

从这些讨论中,我得到的结论是,尽管他们也非常希望获得“天才程序员”,但是实质上是把对程序员专业化的要求放在天才前面的,也就是说,宁要专业的工程师,不要不专业的“牛人”,当然,专业化的大牛是最好不过了,但是现实地说,这种人确实很难遇到,既然如此,就要强调专业性在前。他们认为,专业性保证了一个程序员的技能和工作能够为组织带来效益,而他们只会为这种效益付酬,不会出于对“大牛”的敬仰之情而主动上缴贡银。而且,他们也相信,只要一个人专业化程度足够,技术和经验上的不足是容易在实践中弥补的。

由此看来,所谓“十倍差距说”,成立的可能性是很大的。而整个软件界对于程序员专业性的呼唤,也是实实在在的。这让我想起差不多两年前,我采访群硕软件创始人刘英武先生的时候,这位1960年代的普林斯顿计算机科学博士,前IBM的高级副总裁,SQL语言的创造者就曾经强有力地表达过类似的看法。他搬着指头对我说:“技术是最容易解决的问题。你说那个.NET,给你多长时间你能掌握?半年够不够?一年够不够?J2EE怎么样,一年可以吗?一年半?就算是最复杂的C++,三年下来,你还搞不定吗?可是建立一个世界一流的、商业上成功的软件团队需要多长时间?十五年,二十年!而且一点都不能松懈。我不明白,为什么有那么多人为自己的技术沾沾自喜?我在IBM的时候,手下全是来自美国一流名校的博士,但不管他们技术多好,如果不能遵守discipline,不能给组织带来效益,那就一点价值都没有!在中国,很有一些程序员,以为自己技术高,就应该拿高薪,就应该牛,就可以不要纪律。他们很少问自己,究竟给团队带来什么价值,究竟给企业带来什么价值,究竟给客户带来什么价值?在我看来,这就是不专业,不合格。我相信,这种情况迟早会过去的,对于软件工程师的评价,很快会回归价值。也只有到了那个时候,中国的软件才会有实实在在的快速发展。”

两年前我们觉得这段话“太刺激”,没有发表。现在看来,当年刘先生的观点已经成为共识。毫无疑问,这意味着中国程序员孤芳自赏的时代即将结束,我们应当开始高度重视组织的利益和价值,并且通过“专业化”修炼来实现从个体户到企业人的转变。