软件工程与项目管理

软件工程与项目管理是成熟的博大精深的学科。所谓新视野乃是指站在“企业-产品-人”这个系统的角度看待问题,旨在创导使“企业-产品-人”走向成功的“方法论和模式”

软件工程与项目管理是成熟的博大精深的学科。所谓新视野乃是指站在企业-产品-人这个系统的角度看待问题,旨在创导使企业-产品-人走向成功的方法论和模式

本章乃全书之综述,重点探讨企业的根本目标、产品开发之道、用人之道、如何成为优秀的软件人才这些论题,探索一般性的规律,并给出开创性的观点和论断。与传统的软件工程与项目管理书籍相比,本章不仅内容新颖,而且言词激进、极富个性色彩和扇动性。


本章大多数内容都是作者亲身验证过后总结出来的,将给多数读者带来有益的震撼。敬请读者首先敞开心扉阅读本章,然后进行大脑风暴,吸取精华、摒弃糟粕。


1.1 软件危机新理解

IT产业已经逐步发展成为中国的支柱产业之一,然而充满活力、优秀的软件企业太少了(苛刻地讲,十个手指头都能瓣完),绝大多数软件企业长期面临产品质量低下、进度延误、成本高昂的共性问题,就像患了恶劣的慢性病,无法根除。

太多原本雄心勃勃的软件企业并没有战死在沙场上,而是被恶病折磨得奄奄一息直至颓然去世。IT产业的利润和前景实在太诱人了,没有获得免疫力的新企业又如雨后春笋般地诞生,前仆后继,延续着相似的故事。

三十年多前(1969年),NATO会议把这种病被称为软件危机。三十多年过去了,这种病仍然存在,之所以不再危言耸听,是因为人们司空见惯、习以为常了。并且适应了极度浪费社会财富的快速诞生、快速死亡的企业生存方式。

为什么长期克服不了软件危机

难道是国内大学计算机教育太差劲了?不是!大学里的计算机课程面面俱到,经常考试,基础教育非常扎实。中国大部分学生有勤奋学习的优良传统,他们的计算机知识技能普通不差。

难道是书籍资料不够导致人们不懂软件开发、不懂管理吗?不是!书市上的软件工程、项目管理、编程技术等书籍泛滥成灾,Internet上有取之不尽的免费资料和代码。

难道是软件人才不够?不是!国内大学源源不断地输出计算机相关专业的毕业生,还有无数非计算机专业的人改行从事软件开发工作。我敢说,不论是人才还是人手,人是足够多了。象北京、上海等发达城市,软件人才明显供大于求,很多计算机专业本科生、硕士生、博士生找不到合适的工作。

难道是政府对IT产业扶持不够?不是!全国各地到处建设软件园区、高科技园区,地方政府的减税免税政策、奖励政策适时出台。对比一下国内农业和传统工业的处境,IT产业享受到政府的照顾已经好到天上了。

难道社会对IT产业投资不够?不是!我们刚刚经历了网络泡沫、电信泡沫,不是社会投资太少了,而是投资太多但是没有产生期望的效益才会产生泡沫。

尽管中国还不是发达国家,但平心而论,你会发现当今软件企业的生存环境真是太好了,实在找不出象样的借口来推卸失败的责任。内因决定外因,是大部分软件企业的内功太差,以至成为扶不起的阿斗。


软件工程和项目管理学科已经发展了数十年,技术细节问题早已研究甚多。所以工程专家们和管理专家们不要再沉迷于形而上学屠龙之技的研究,而是要换个视野看问题,摸索解决中国企业面临的软件危机难题。

中国教育界和工业界长期的失误在于:


大学教育以填鸭的方式给学生灌输技能,却忽视传授思想和方法;学生们埋头学习,不知学以致用,离开学校后对企业、产品、人生一片茫然;企业以混乱甚至错误的方式开发产品,重复着前人的失败而不是成功。这就是产生软件危机的真正根源。

1.2 企业-产品-人
在软件行业,企业-产品-人这三个主体构成了复杂的系统,一般性的知识框架如图1-1所示。如果人们不明其理而行事,必然会对系统造成伤害。

软件行业企业-产品-人走向成功的知识框架

我认为,教育界和工业界应当研究和推广让企业-产品-人走向成功的方法论和模式,这是解决软件危机最有效的办法。

何为方法论?

方法论是用于指导人们解决问题的系统性的思想方法,而不是一堆孤立的方法、技术的集合。方法论主要研究是什么为什么怎么办这类基本问题,当人们掌握方法论之后,在实践过程中,自己能产生解决特定问题的方法。

何为模式?

模式描述了在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样你就能一次又一次地复用该解决方案而不必从头开始研究。
在技术开发领域,人们总结了不少很有价值的模式,例如设计模式、编程规范、文档模板等等,被业界人士广泛采用,大大地提高了工作效率。人们期待更有价值的模式,那就是让企业-产品-人走向成功的模式。

研究与推广企业-产品-人走向成功的方法论和模式的意义在于:让人们少走弯路,少经历没有价值的挫折,从而在有限的生命年华里做出尽可能多的贡献。

三年前我写了一篇文章叫《大学十年》,这篇文章在Internet上广泛流传,激励了相当多的大学生。许多读者误以为我的大学十年辉煌之极,从而羡慕不已。其实每个人都有自己的美好的和不好的经历,我只是把个人经历作了文学处理、写得比较好而已。

在企业里工作三年后,我终于意识到大学十年里的最大失败:


完全靠自己摸索前进,走了太多弯路,有一半时间在错误的道路上艰苦奋斗,浪费了大量青春时光并且不知不觉地损害了健康。如果有很好的方法论指导和成功模式可循的话,以我当时的天赋、勤奋、毅力和创造力,连续奋斗十年,何止于今日空有满腹经纶,而对社会缺乏实质性贡献!
广大学生和企业员工没有机会学习走向成功的方法论和模式,只好凭着本能和运气去工作、去生活、去奋斗。这不是少数人的命运啊!而是几亿人那!

基于切肤之痛和多年的实践与思考,我提出了本文颇为激进的观点,期望同行的工程专家和管理专家研究与推广上述方法论和模式。也许这个课题太复杂了,太缥缈了,以致于国内找不到一本现成的教科书。


为便于阐述观点,我勾画了知识框架草图。毫无疑问,不论干哪一行,人们都应当掌握专业基础知识和技能,这是立足之本,所幸国内大学在这方面的教育相当不错。在软件企业工作的人们还要学习软件工程、项目管理、市场营销、财务管理、人力资源管理、国际化知识,懂得越多,成功的可能性就越高,然而这些领域是国内大学教育的薄弱环节。


目前教科书的最大不足是没有紧密围绕企业-产品-人这三个主体来阐述方法论和模式。研究人员必须先分析清楚企业-产品-人的宏观特征与规律,再进行系统分解,从而在各个相关学科创建方法论和模式。

在研究和推广上述方法论和模式的过程中,大学里的教授们和讲师们将受到强烈冲击,因为许多教授和讲师对企业和产品知之甚少,甚至自己的人生也相当落魄,拿什么传道、授业、解惑啊?何以为师?这种现状必须改革,如果教授和讲师不合格的话,只好下岗或者提前退休,否则误人之弟。


下文将探讨企业的根本目标、产品开发之道、用人之道这三个论题,尝试提出系统性的观点、论断,为研究软件工程和项目管理的方法论和模式打下基础。

1.3 企业的根本目标

1.3.1 观点和论断

学过法律的人都知道:宪法是国家的根本大法,是立国之本,任何普通法律法规都不得与宪法相抵触。
企业的根本目标是合法地赚取尽可能多的利润,使企业利益最大化。这个根本目标就如同企业的宪法,是企业生存和发展之本。

企业所有的特定目标和行动都是围绕上述根本目标开展的。任何背离根本目标的行动都将对企业造成伤害,应当杜绝。

如果企业主不明白这个道理,企业必定会很快倒闭。如果广大员工不明白这个道理,企业必将岌岌可危。

如果你想到企业工作(或者已经在企业工作),希望取得事业上的成功,你首先必须理解企业的根本目标。


上述文字简单朴实,没有任何玄妙之处,似乎任何人都看得懂。但是我敢断言,除了极少数天生的商人之外,绝大多数人在遭受第一次商业挫折之前不会深刻领悟企业的根本目标。

我们从小到大接受自闭的政治教育太久了,被灌输的幼稚口号太多了,以至于长大成人后仍然极度缺乏商业智慧。


天哪,赚钱这种事情连文盲都能做啊!怎么可以成为企业的根本目标呢!企业的根本目标难道不是为了振兴民族产业、为国家多做贡献吗?
不是,的确不是!

振兴民族产业、为国家多做贡献是全体国民的义务,不是企业的根本目标。只要企业有利润、能活下去,它就已经做出贡献了。因为国家的主要税收来自于企业,企业有利润后才能纳税,企业纳税后国家才有钱搞建设。只有企业活着,员工们才有工作、才有稳定的收入、才有能力养家糊口、才能维持社会繁荣稳定。只要企业合法地赚钱,它赚得越多,那么它对国家的贡献就越大。

政府对企业的唯一约束就是守法,甚至不要求守德。众所周知,烟草对人有百害而无一利。烟草公司赚钱越多,表明烟民受害越深。从道义上讲,拯救广大烟民的最有效办法就是让政府封杀所有的烟草公司。但是全世界的政府都不会出于道德而封杀烟草公司,因为烟草公司没有犯法,并且给政府交纳了巨额利税。


政府与企业之间存在互利的交易关系:政府应该为守法的企业提供服务(而不该骚扰企业),企业付给政府的服务费就是利税。

所以企业的本性就是惟利是图,而不是救国就民,无论大企业还是小商贩都一样。
在计划经济时代,无数国企曾经为国家做出了巨大的贡献。当计划经济转向为市场经济之后,曾经功德无量的国企逐步沦落为国家的包袱。人们给国企强加了太多的社会义务,国企不仅包揽了职员们的吃喝拉撒睡,甚至还要建子弟学校,治病救人,养老送终等等。社会义务榨干了企业的利润和精力,企业焉有不垮之理!


不论是姓资还是姓社,企业改革的主要目标就是让企业回到赚钱这个正道上来。违背企业本性的做法注定是要失败的。

我曾经给某大学软件学院的工程硕士们讲授《软件工程》课程,几乎每次讲课我都要强调企业的根本目标,大讲特讲钱的重要性。企业惟利是图的本性就像低俗赤裸的真理,玷污了纯真学生们的耳朵。学期结束之际,有个学生写了一篇很有代表性的心得体会:


本学期听了林锐老师的课程之后,我对软件工程,尤其是商业领域的软件工程应用有了全新的认识。
所谓全新的认识,我想主要是从经济利益的角度看待软件工程问题。在林老师讲课之前,外籍教授Prof. Luqi Prof. Berzins 给我们讲授了如何从工程角度出发来分析一个问题、分割一个问题、解决一个问题。但是后来林老师则从商业的角度系统地阐述了为什么要提倡软件工程。唯一的解释就是经济利益的驱动——钱!


在听林老师讲课的初期,我是有一定的反感的,真的无法立刻接受。或许是由于一个学生对社会的认识的不足,或许是由于受到古人的影响而对那些关心金钱的话题的鄙视。总之,在听课的过程中,我总是忽略了经济利益的作用,从未考虑过软件危机的真正成因。
在一次课程的中间休息阶段,我与同学们聊起了林老师的课程内容。我说他的课程太没劲了来来回回就是经济利益太俗了社会上正是这样吗?总之,我所反映的就是对他的课程内容的不信任。

这时有一位已经在公司里任CTO的同学这样对我说:林老师所讲的是正确的而且很有用的,我每周都要给我们公司的员工们上一次课,课程的内容很大程度上就是来自于林老师的讲义,而且事实上,社会上就是这么来做的。


从这次交流中我知道,他们公司和很多现在正面临着转型的公司一样,公司的领导们已经认识到了软件工程的重要性,一切工作都是围绕经济利益这个核心的。
那些有工作经验的同学们赞同林老师的观点,这次交流之后,我改变了自己以往的看法,逐渐接受林老师的课程内容。……


对于象我这样没有工作经验,缺乏社会阅历的学生而言,学习林老师的课程是非常有益的。
看了这位学生的心得体会,我不禁一声叹息。想当年在我读大学的时候,真是一心一意地想着振兴民族产业、为国争光,视金钱如粪土。想不到工作几年之后,开口闭口就谈钱,实在羞愧啊。

1.3.2 案例与评论

前辈们曾经留下无数哲言,我们通常挂在嘴上而不会放在心上,只有自己遭受失败并且反省之后,才会恍然大悟,才会刻骨铭心。

让单纯如学生的人们接受本章观点并不容易,比较好的办法是边讲故事边讲道理,然后让人们自己去体会。

20世纪90年代初期,中国有个辉煌而结果凄惨的明星科技企业——史玉柱创办的巨人公司。巨人公司的成败得失曾让无数人叹息而沉思,现在有很多书籍可以参考。
结合本章论题,我对巨人公司的看法是:巨人公司在辉煌之际虚荣心极度膨胀,重大决策背离企业根本目标,迟早都是要倒闭的。


1991年史玉柱在珠海创立了巨人公司,公司靠核心产品桌面排版印刷系统巨人汉卡发家致富,创出了年发展速度500%的奇迹,成为珠海高科技产业的样板企业。史玉柱一年成为百万富翁,两年成为千万富翁,三年成为亿万富翁。1993年巨人公司即成为位居四通之后的中国第二大民营高科技企业,史玉柱本人也于1994年当选中国十大改革风云人物。


导致巨人公司倒闭的导火线是建造巨人大厦。由于公司发展迅猛,短短两三年内员工激增到千余人。公司决定建造一栋18层的科技大楼(称为巨人大厦),供员工们办公用。这的确是企业的实际需求,以巨人公司当时的资金实力,建造这样的科技大楼并没有不妥之处。


由于巨人公司是当时国内最耀眼的明星科技企业,风光无限。各级政府领导时常光临巨人公司,少不了题词、表扬、勉励和指示。一些政府领导建议巨人公司为珠海建一座标志性大厦。结果每一批领导视察之后,巨人公司的虚荣心就膨胀一次,不断提高大楼的高度。为了给本市、本省乃至本国争光,充满浪漫主义色彩的巨人公司决定建造70来层的摩天大楼,资金预算也由最初的2亿元增至12亿元。


科技型企业的生存和发展靠的是不断地研发和销售产品,而建造摩天大楼则是政府和房地产商的事情。巨人公司建造摩天大楼的决策绝对背离科技型企业的根本目标。


单凭巨人公司的实力,实在难以承受这项浩大的工程。更令人瞠目结舌的是,巨人大厦从19942月动工到19967月,公司竟未向银行贷款一分钱,全凭自有资金和卖楼花的钱支撑。作为常识,房地产必须有金融资本作后盾,可是巨人公司竟然将银行搁置一边。


史玉柱曾设想了一个绝纱的财务运作机制:先用巨人大厦卖楼花的钱投入生物工程,再用生物工程产生的利润来支持巨人大厦。但是这个美好设想并未成为现实。不幸的事接连发生:大楼地基存在地质缺陷,需要重新加固,进度一误再误,资金预算不断上升,已买楼花的人要求退款并赔偿。公司非但不能去为生物工程注资,反而不断从生物工程中抽资去支撑巨人大厦。结果是巨人大厦没能撑起,反例赔进了生物工程。


在危难之际,媒体疯狂炒作,雪上加霜,致使巨人公司卖出去的脑黄金收不回钱。终于有一天,企业现金断流,银行不愿贷款,风华正茂的巨人公司一夜之间崩溃。
巨人公司倒闭之后,人们总结了许多经验教训。1997年,我去北京大学拜访一位经济学研究生,他说自己正在研究明星科技企业的死亡规律。他阐述了一番观点,其中最精辟的一句话让我现在都记得:如果一个明星企业经常受到政府各级领导的视察和表扬,那么企业就会干蠢事,它离死期就不远了。我当时真为北大才子的胆识和学识倾倒。


回到本文主题,我做个案例小结:

企业的根本目标决定了企业必须专心致志地赚钱,企业人士要理智地规避伪善的社会事务,防止企业被非目标事务拖累。

史玉柱的英雄豪杰之举是承担了巨人公司欠下的天文数字般的债务,而不是破产了事。他重新创业赚钱之后,拿自己的钱还清了这笔债务。我认为史玉柱为中国企业家树立了道德楷模,意义重大。我在读大学时期对史玉柱有偶像式的崇拜,现在我是当真的敬仰。

1997年至1998年,我自己在读博士期间也创办了公司,公司经营一年就倒闭了,我反省了好几年。2000年毕业之际,我把这段创业经历写进了短篇传记《大学十年》之中。为了给本篇文章找个合适的案例,我重新阅读了自己的那段学生创业经历。哈,结果一眼就看出了我的公司必然倒闭的根本原因。
1997年,我在学生时代的荣誉已经登峰造极(国内少有同龄学生可比了)。我受国家正规教育近二十年,真的是发自内心地渴望创办企业来振兴民族软件产业。那时,我的名片上印着以振兴民族软件产业为己任,曾在东软集团举办的民族软件产业青年论坛上慷慨陈辞。


当时我构思了一套三维图形系统,该系统下至开发工具、上至应用软件无所不包。操作系统启动之后,立即进入三维视窗,所有的软件都在三维视窗中运行。当全世界人民接受这套软件系统的时候,微软公司的视窗系统就被淘汰了,中国的软件产业就这样被我们振兴了。当学生有这样的抱负后,他怎么能不长期兴奋。


我创建公司后,成天忙于开发那个能够振兴民族产业的软件,结果不到一年就把公司的30万元资金用个精光,但是没有卖出一份软件,所以公司啥都没振就倒闭了。


我这个公司倒闭的原因比巨人公司的要荒唐,因为我当时压根就不知道企业的目标竟然就是赚钱!
把失败的原因简单地归咎于学生的幼稚是毫无意义的。由于我曾经是标标准准的好学生,我的失败反映出中国大学教育的盲区。我感叹自己在错误的道路上奋斗太久了,所以非常渴望有成功的方法论和模式可以学习。

让我们回顾电影《甲方乙方》里冯小刚的年终工作报告,作为企业根本目标的喜剧解释:
同志们,我们推出的美梦一日游深受广大群众的喜欢(墙上挂满了群众们送的旌旗)。大家工作都很勤奋,客户越来越多,但是我们挣的钱却越来越少了。(公司)再办下去就成了慈善机构,所以大家只好散伙。


1.3.3 推论
企业的根本目标决定了产品开发之道企业用人之道,此处的就是指方法论和模式。
产品开发之道有两个内涵:

1)开发正确的产品:即开发能为企业赚取利润的产品;
2)正确地开发产品:即努力使产品为企业赚取尽可能多的利润。
同理,企业用人之道也有两个内涵:
1)用正确的人:即利用能为企业赚取利润的人;
2)正确地用人:即努力使人为企业赚取尽可能多的利润。

开发正确的产品用正确的人属于企业的决策过程。正确地决策是企业各级领导的第一职责。

正确地开发产品正确地用人属于企业的执行过程。正确地执行是企业各个团队的第一职责。


正确地执行了错误的决策,结果是失败。
错误地执行了正确的决策,结果也是失败。
错误地执行了错误的决策,你别指望发生错错得对的结果。
只有正确地执行了正确的决策,才能得到满意的结果。
决策和执行之间的关系是战略与战术之间的关系,两者相辅相成,缺一不可。企业的成功是建立在正确的决策正确地执行基础之上的。任何错误的决策、错误地执行都可能导致产品失败,进而导致企业倒闭,所以却勿在企业里鼓吹失败是成功之母
特别要注意的是:在决策过程和执行过程中,人们总是会遇到各种各样的困难,任何优化和折衷的措施都是围绕企业利益最大化这个根本目标开展的。

1.4 产品开发之道

1.4.1 开发正确的产品

所谓开发正确的产品是指开发能够赚取利润的产品。对于企业而言,评判产品对错的标准就是能否赚钱


政府每年给大学科研机构投资很多钱,允许人们去研发不赚钱的东西,例如很多自然科学基金项目的考核目标是学术水平而不是经济效益。但是企业的职能和大学科研机构的完全不同。企业只能开发能够赚取利润的产品,赔钱的产品不能开发。

不少人有疑问:

有些国际著名的大企业拥有自己的研究机构,例如贝尔实验室、IBM研究院、微软研究院等等。这些机构的学术水平极高,企业花巨资让那些天才们研究一些看似不赚钱的东西,岂非违背企业的根本目标?
国际著名的大企业之所以活得那么风光,就是因为它们很少干蠢事,越活越好。这个问题要透过表象才
能看到本质:

科学技术是第一生产力,为了提高企业的科技竞争力,国际著名的大企业不得不花巨资从事超前的研究。那些超前的研究成果通常没有短期的经济效益,但是可能在不久的将来被大规模地应用,从而产生巨额利润。当然不少研究成果可能永远都不会产生经济效益,这就是科研投资的风险。世界范围内的科技竞争非常激烈,有些关键性的技术往往决定了企业的命运。万一竞争对手在科技上领先一步,马上就会占领市场的主要份额,自己就面临被淘汰的危险。例如当前几乎所有的大型电信企业都在研究3G(第三代移动通信),简直可以用豪赌来形容。所以为了让自己在未来能够活下去并且活得更好,大企业不得不花巨资从事超前的研究,这是战略投资,当然符合企业的根本目标。

有些大企业的产品发展战略非常有意思:

在市场上推出第一代产品的时候,企业内部已经掌握第二代产品的技术,并且开始在实验室里研究第三代技术。当第一代产品没有遇到竞争对手、或者市场没有疲软的时候,绝对不推出第二代产品(免得冲击第一代产品,降低利润)。一旦状况改变,马上推出第二代产品,让竞争对手措手不及,或者以自我淘汰的方式带动新一轮消费。这样周而复始,力图永远领先于竞争对手,永远占领市场最大份额。例如芯片业老大Intel就是这样做的。

对于普通的中小企业而言,它们只能干些力所能及的事情。如果采用成熟的技术就能够做出能赚钱的产品,那就没有必要自己研究新技术,尽可能地降低风险。

判断一个设想中的产品是否能给企业带来利润,这绝对不是一件轻松的事情,千万不能依赖于少数领导人拍脑袋的决策方式。


开发正确的产品这种决策过程叫立项管理。立项管理的主要目的是:
通过规范化的流程,判断并采纳符合企业根本目标的立项建议,提供合适的资金和资源,使立项建议成为正式的项目。

一般地,立项管理过程包含产品构思、立项调查、可行性分析、立项申请、立项评审、项目筹备等关键活动。本书第二章将论述立项管理。


1.4.2 正确地开发产品
所谓正确地开发产品是指:


1)项目团队在预定的时间和成本之内,开发完成合格的产品;
2)项目团队尽最大努力把产品做得好、做得快并且少花钱。

前者是基本要求,后者是努力方向。

质量、效率、成本通常是衡量产品开发过程优劣的三个关键指标。如果产品的质量比较差,必然挨用户骂,轻则被退货、重则倒品牌。如果工作效率(包括生产率和行政效率)比较低,等你慢腾腾开发完成产品并推向市场时,可能大部分市场已经被竞争对手捷足先登了。如果开发成本太高,要么用户买不起,要么利润率太低。

一般说来,质量、效率、成本之间存在对抗关系。俗话说一分钱一分货,人们买东西的时候大多认可质量越好价格就越高。再如俗话慢工出细活,言下之意是提高质量将使生产率降低。根据常识可知,要想同时提高产品质量、效率并且降低开发成本是非常不容易的。人们应当根据企业的实际状况,围绕企业利益最大化这个目标,分析质量、效率、成本的诸多构成要素,给出优化和折衷的措施。


一、关于软件质量
软件的质量属性很多,如正确性、精确性,健壮性、可靠性、容错性、性能、易用性、安全性、可扩展性、可复用性、兼容性、可移植性、可测试性、可维护性、灵活性等。对于一个特定的软件而言,我们首先要判断什么是它的质量要素,才能给出提高质量的具体措施,而不是一股脑地想把所有的质量属性都做好,否则不仅做不好,还可能得不偿失。简而言之,能成为卖点的质量属性才是质量要素,才值得开发人员关注。


特别要提醒读者注意的是:提高软件质量的最终目的为了获取尽可能多的利润,而不是出于对完美质量的追求;如果某些质量属性并不能产生显著的经济效益,我们可以忽略它们,把精力用在对经济效益贡献最大的质量要素上。


大多数软件工程教科书和学术文章总是站在技术的角度论述软件质量,并且努力把技术推向极致。这些技术无疑是有价值的,但是我要指出这种教育方式可能会误导读者。开发人员学会了提高软件质量的技术,却常常在不该用的地方用了它。


例如,谈到软件的可扩展性,开发人员首先想到的是怎样提高可扩展性,于是努力去设计很好的体系结构来提高可扩展性,却不考虑该不该做这件事。从商业角度考虑,如果某个软件将不断地推出新版本,那么可扩展性很重要。但是如果软件永远都不会有下个版本(一次性买卖),那么根本无需提高可扩展性,何必自找苦吃呢!


再如,让两个同类的软件AB相互兼容可以使用户得益,为了提高软件之间的兼容性,开发人员通常会在数据格式方面下功夫。从商业角度考虑,如果AB存在竞争关系,那么弱者应当设法与强者兼容,否则无容身之地;强者应当避免被竞争对手兼容,否则强者的市场将被瓜分。如果开发人员出于好意而让强者与弱者兼容,此举无疑会损害企业的利益。


缺乏商业经验的开发人员往往因为单纯而傻得可爱,却因幼稚而傻得可笑。
作者在著作《高质量程序设计指南——C++/C语言》中,主要从技术角度对软件质量作了大篇幅的论述。本书将继续探讨软件质量这个话题,但是思路已经改良:(1)先从经济利益识别软件的质量要素,并给出合适的质量目标;(2)再用技术手段提高软件质量,实现质量目标。


二、关于效率
企业总是希望产品上市的时间越短越好,这样可以抢占市场。对于合同性的项目而言,开发方应当在合同指定的期限内交付软件,否则违约的话将损害双方的利益。所以对于企业而言,时间就是金钱。
在正常情况下,开发团队的工作效率是决定产品实际开发时间的主要因素。所以提高工作效率是企业获取更多利润的有效途径。在旧社会,资本家的工厂里都有监工,监工的职责就是让工人们不停地干活,在给定的时间内生产出更多的东西。


提高工作效率的前提条件是所有工作成果的质量必须合格。否则,工作效率越高,软件中的缺陷就越多,那么用于测试和维护的代价也越高,得不偿失。所以提高质量、提高效率都不是喊口号,要根据企业的目标和当前实力,量力而行。


在不对质量和成本产生负面影响的前提下提高工作效率,这才是真本事,常见措施有:
² 提高项目成员的工作技能。即使在组建项目团队时每个成员的技能都是合格的,每个人仍然需要不断学习,无论对于项目还是人生而言都是有益的。项目经理应当组织一些有针对性的培训,提高项目成员的工作技能,使他们在开发产品时不仅做得好而且做得快。

² 制定合适的软件过程。软件过程定义了做事的主要步骤,如果过程混乱,做事颠三倒四的话,势必伤害生产率。虽然人们都知道开发软件要经历需求分析、系统设计、编程、测试这些阶段,但是严格的线性顺序并不见得就是最优的,因为许多局部工作可以并行开展甚至提前开展。世界上并不存在放之四海皆准的、通用的软件过程标准,所以项目经理应当制定适合于本项目的软件过程,并随着项目的进展加以适当的优化。

² 提高复用程度。复用就是指利用现成的东西,软件中可以复用的对象有设计模式、代码库、文档模板等等。由经验可知,通常在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。一般地可以相信成熟的东西总是比较可靠的,而大量成熟的工作可以通过复用来快速实现(即具有高生产率)。软件人员应当懂得复用别人留下的成熟可靠的成果(可能要花钱去买也可能是免费的),并且还要给自己留下可以在将来复用的东西。复用不是人类懒惰的表现而是智慧的展现。

² 使用高效率的开发工具和管理工具。使用好的工具无疑有助于提高人们的工作效率。软件人员通常会采用业界推荐的开发工具,几乎每天都要使用,因为这是开发产品所必需的。然而管理工具就一言难尽了,因为功能先进但是价格昂贵的管理工具对于大部分项目而言并不见得是最合适的。例如目前比较流行的配置管理工具:SourceSafe的功能一般,价格较低,使用非常方便;CVS的功能比SourceSafe强一些,完全免费,用起来不如SourceSafe方便;而ClearCase则是功能极强,价格极高,必须经过数天培训后才能学会使用。所以无法说那个配置管理工具更好。项目经理应当根据项目的规模、经济实力等因素,选择合适的管理工具,并且要坚持使用才能提高团队的生产率。

三、关于成本
软件不同于常见的生活用品。开发软件主要用人们的脑子,不需要开工厂,无需原材料,也不需要放到百货商店的柜台上销售。一般地,开发成本和维护成本是软件的主要成本构成。
除了软硬件基础设施的成本外,人力资源成本占了开发成本的主要比例。人力资源成本等于雇员的工资乘以工作时间,所以企业招聘员工的理想状态是:以最低的工资招聘恰好满足工作需要的人。另外,设法提高工作效率以减少总的开发时间,从而降低人力资源成本。


人们常常关注开发成本而忽视了维护成本。对于一个有信誉的企业,如果卖出去的软件产品中有错误,那么就有义务修改错误。软件刚卖出去的时候,销售价格肯定比开发成本高,看起来是赚了钱。但是如果软件质量比较差的话,那么维护成本将是个无底洞,完全有可能把先期赚的钱给消耗光。所以人们不可为了压缩开发成本而放弃软件测试、技术评审等质量检查活动。前期偷懒将使后期遭殃。
在绝大多数情况下,设法降低成本将有益于企业获取更多的利润,但并不是绝对的。企业有短期目标和长期目标之分,为了使企业利益最大化,在某些时候企业会不惜成本地去抢占市场,以使未来获取更多的利润。产品的决策者一定要搞清楚质量、效率、成本之间的复杂关系,判断孰重孰轻,给出优化和折衷的措施。

四、关于软件过程改进
一般地,在软件开发过程中,工程类的过程域主要有:需求开发、系统设计、软件实现、软件测试、软件维护等等;管理类的过程域主要有:项目规划、项目监控、需求管理、质量管理、配置管理等等。上述过程域中的任何活动都会影响产品的质量、生产率和成本。


20世纪90年代之际,软件过程改进成为软件工程和项目管理交叉学科的主流研究方向。软件过程改进的目标就是提高产品质量、提高工作效率和降低开发成本。业界的实践证明,走规范化之路是成本最低、见效最快、能持续发展的软件过程改进方法。规范化之路就是本书致力探索的成功模式。
本书从第三章起直至最后一章,将深入阐述在每个过程域正确地做事的方法,总结出可以复用的模式。请读者参考作者的另一本著作《CMMI 3级软件过程改进方法与规范》。


1.5 用人之道
有句名言:人分四类——人物,人才,人手,人渣。
如果一个机构里上述四类人齐全了,那么最好是让人物当领导,人才干重要的活,人手干次要的活,人渣去骚扰竞争对手。


用人之道是极为复杂、极宽广的话题,为了避免迷失方向,本节把话题的范围限制在两个论点上:(1)如何组建软件开发团队;(2)如何管理软件开发团队。
本节所说的人是指在软件企业里工作的技术人员和管理人员,他们都是受过高等教育的守法律、讲道德的正常人,坏蛋和天才除外。


1.5.1 如何组建软件开发团队
一、组建团队的基本流程

组建团队的基本流程如图1-2所示,分四个步骤:首先要搞了解产品开发需求,从而确定团队的人员需求,然后物色符合需求的人才,最终建立团队。

组建团队的基本流程

团队的人员从哪里来?通常先在企业内部挑选,最大程度利用现有的人力资源。如果企业内部不能满足要求的话,再通过社会招聘获取人才。


团队的人员结构是金字塔形的,可以简单划分为三层:团队领导、核心成员和普通成员,如图1-3所示。比较合理的人员比例为:团队的领导不超过10%(当官的不能太多),核心成员占30%左右,普通成员占60%左右。


团队的人员结构

二、关于人才的几个观念
只有为企业创造的效益高于企业为其付出的成本的那些人,才是企业所需的人才。不能为企业创造效益的人才其实就是饭桶,不论其学历和职称有多高。


团队需要优秀的人才。软件开发是智力创作而非体力劳动,优秀人才的创造力比平庸之人要高得多,如果团队没有优秀的人才,几乎不可能开发出有竞争力的产品。优秀人才要价通常比较高,但是他物有所值。企业应该少招聘一些平庸之人,把省下来的钱投资到优秀人才身上才对。


但是团队中的优秀人才并不是越多越好,优秀人才太多反而有更大的弊端。一是人力成本太高,他们可能消耗掉产品创造的大部分效益,那么就不划算了。二是团队分裂的风险太高,因为团队的空间有限,无法同时满足很多优秀人才事业发展的欲望;当这个矛盾激化时,优秀人才的内讧将产生极大的破坏力。一山不容二虎就是这个道理。所以,团队中的优秀人才恰好够用就行。


一般地,让最优秀的人才当团队的领导,让次优秀的人才成为核心成员,让平庸之人成为普通成员。图1-3所示的团队结构比较稳定安全并且经济实惠

三、物色团队的领导
软件开发团队的领导应当具备四项素质,按级别从低到高排列:不错的技术才能(一段),较强的管理能力(二段),丰富的产品开发经验(三段),敏锐的商业头脑(四段),如图1-4所示。

团队领导应当具备的四项素质


据我了解,目前大多数IT企业在物色团队的领导时,主要考察候选人的管理能力和技术才能。
对于搞技术出身的人,如果他能当上小头目,一般地讲他的技术才能不会太差,否则他岂有出头之日。然而即使某个人的技术水平是团队里头最强的,如果他不具备带领团队所有成员正确干活的能力(即管理能力),那么他就不能当团队的领导。


业界普遍认同的是,合格的项目经理(或相似级别的经理)应当具备较强的管理能力和不错的技术才能。那么对于项目经理而言,究竟是技术才能重要还是管理能力重要呢?


业界不存在判断准则,人们也没有必要过多地争论,应当视项目的规模和复杂性而定。如果项目的技术难度很高,但是规模很小,只有几个人干活,那么领导者的技术才能比管理才能更加重要。反之,如果项目的技术难度不高,但是规模比较大,只要团队成员超过十人,那么领导者的管理才能比技术才能更加重要。


企业在物色重大的团队的领导时,不仅要考察候选人的技术才能和管理能力,尤其要关注商业头脑和产品开发经验。


商业头脑是团队领导最重要的素质。有商业头脑的领导能够带领团队朝着最赚钱的道路前进,即使遇到一些坎坷,也无碍于最终的成功。反之,缺乏商业头脑的领导通常不知道产品的卖点是什么,却一味在技术方面下功夫,经常让团队干些不赚钱的南辕北撤的事情。


如果团队的领导有丰富的产品开发经验,那么他就能复用以前的成功经验,能够规避失败的风险。当项目遭遇一些意外困难时,他自己不会手忙脚乱,能够从容地带领团队克服困难。就如战斗中,存活率比较高的通常是队伍中的老兵,因为他们有丰富的战斗经验,而不是枪法比新兵好。


几年前我已经意识到技术才能、管理能力、产品开发经验、商业头脑是团队领导者必须具备的素质,只是四项要素的重要性刚好和图1-4的颠倒。自从我对某公司多个重大研发项目的失败进行调查分析之后,我就把四项要素的重要性顺序纠正过来。


近几年,该公司对几个重大研发项目总共投资了近亿元。每个项目的研发人员达百余人,研发经费千万元以上,结果这些目都以惨败而告终。有几个项目做着做着就无声无息了,有几个项目好不容易推出了产品,结果因质量太差而被客户退回。一度时间公司内部怨愤极大。我曾私下里做了调查分析,失败的原因有许多,最重要的一个共性原因是:

公司领导用错了项目经理。这些项目经理都是博士,在技术方面算得上是专家,管理能力虽然没有技术才能那么强,但是也有中等水平。最糟糕的是他们都缺乏商业头脑,缺乏产品开发经验,竟然拿大学里搞科研的方式在企业里开发产品,焉有不败之理。这些人没有成功地运作过几十万元、上百万元的资金,猛地一下子拥有千万元的经费,稀里糊涂地浪费了许多钱。最不应该的是,这些项目给公司造成了重大损失,似乎没有一个责任人认真反省过,从来没有人写过一篇总结为什么失败的文章。重大失败就如轻飘飘的雪花那样融化了,连个故事都没有留下。


不少企业干过类似的蠢事,同行们要引以为戒,尤其要当心那些拥有高学历、占据重要职位的败家子。
简而言之,如果你想成为普通团队的合格领导者,你应当具备不错的技术才能和较强的管理能力。如果你的抱负更大,想成为将帅之才,那么你必须具备丰富的产品开发经验和敏锐的商业头脑。

四、物色团队的核心成员

领导者应当从团队里面挑选出一些核心成员,为自己分担压力。不仅分派重要的任务给他们,而且也要给他们更多的利益。为了避免影响团结,领导者不必把核心普通的标志贴在人的脑袋上,你自己心里有数就行了。


区别核心普通的要素是才能、责任心、忠诚度
让才能出色、责任心强的人成为核心成员这是顺理成章的,无需解释大家都明白。不少人对忠诚度有疑狐,觉得这是鼓吹拉帮结派、玩权术


大家不必忌讳忠诚度这个词,世上没有哪个领导不拉帮结派、玩权术的,否则他怎么能够巩固地位、向上发展呢。只要他拉对了人、玩对了权术,这就是他的领导水平。
英名的领导不仅让那些才能出色、责任心强的人成为核心成员,而且还有魅力使核心成员忠诚于他,从而使团队越来越强,大家的事业发展越来越好。
反之,平庸的领导常常重用亲近自己但是才能平庸、责任心不强的人,当他自己陷入困境的时候,团队就树倒猢狲散。

五、物色团队的普通成员

连普通成员都要物色吗?


是的,任何成员都会对项目产生影响,有正面的也可能有负面的,所以团队领导也要用心物色普通的成员。如果把核心成员比作医生,那么普通成员就相当于护士,好医生加上好护士才能把医务工作做好。
选择普通成员的主要指标是技能合格、安分守己、任劳任怨


技能合格是最低要求,因为招聘他来是干活的,而不是摆在那里看的。团队中技能不合格(没有用处)的人应当通通剔除,既便他是个老好人。如果项目要招聘程序员,而有一个落魄的博士前来应聘,他虽然写过许多文章却几乎不会编程,那么请他另谋高就而不要招来撑门面。


安分守己是指这个人比较老实,不搞破坏也没有非分之想。安分守己的成员让领导放心。安分守己向前一步就是任劳任怨,不仅让人放心而且让人感动。


任劳任怨是指领导让他干啥他就认真地干啥,即使很劳累、没有多少成就感,他也乐意。任劳任怨这种美德只有普通人员才可能具备,因为优秀的人才只会对自己追求的东西倾注热情,很少对上级指派的工作任劳任怨。


任劳任怨的普通成员虽然在事业方面成不了大器,但是很值得交朋友。朋友的远近是用情感而不是用功利来衡量的。无论你的领导才能多么出众,在你强盛时期,你要用心照顾那些任劳任怨的普通成员,让他成为你的朋友。而当你脆弱之际,他们会回馈给你友情,帮你走出心灵的困境。

小结:就如人们找对象一样,你极难找到心目中完美的人,你目前所拥有的其实就是最符合你的。在现实中,物色人才不要太挑剔,不要期望太高,甚至聚散离合都是正常现象,因为你不可能让所有理想中的好人全聚集在一个团队之中。重要的是利用现有的条件组建一支能战斗的团队,向目标前进并努力获取胜利。


1.5.2 如何管理软件开发团队
软件人员在读技术书籍的时候,可能学起来比较费脑筋,但学会后就很容易使用。而读管理书籍的时候基本上不会太费脑子,可惜看完了仍然不知道怎么用。书市上有许多项目管理和企业管理的书籍,常常让我们看得眼花缭乱、无所适从。久而久之,管理的学问被高深化了。
本节探讨管理软件团队这个话题,总结了一般性的规律,旨在创导一种简单而有效的管理方法,使普通软件人员都能容易地学会。

一、团队管理的目标与策略


团队管理的基本目标是:让所有成员有条不紊地开展工作,在预定的时间和成本之内,开发完成质量合格的产品,从而使企业和个人获得预定的利益。


团队管理的努力目标是:调动一切积极因素,努力提高产品质量、提高工作效率并且降低开发成本,使企业和个人获取比预定目标更多的利益。


团队管理的策略:大部分的管理工作是成熟的,有成功的模式可以套用,应当走规范化管理的路线;而另外小部分的管理工作可能是富有个性化的,并不适宜套用规范,那么应当采用超越规范化的管理方式。
规范化的正面意义是稳定有序,负面意义是僵化死板。超越规范化的正面意义高效灵活,负面意义是混乱无序


团队管理既需要大量的规范化管理方式,又需要小量的超越规范化的管理方式。通常前者约占80%,而后者约占20%(注意8020仅仅是参考数据)。


国内大部分软件企业的管理现状是:规范化管理太少了,非规范化的管理太多了,到处都是土匪游击队的运作方式。阻碍中国软件企业发展的瓶颈问题通常不是技术,而是杂乱无章的管理,这个共性问题值得业界人士高度关注。


二、规范化的管理

规范化管理有两层含义:首先制定工作规范,然后按照规范开展工作。
软件团队的主要工作包含了技术开发和管理,因此至少需要两类规范。一类是软件技术开发规范,它规定了如何开展需求分析、系统设计、编程、测试等工作;另一类是项目管理规范,它规定如何开展项目规划、项目监控、质量管理、配置管理等工作。上述通称为软件过程规范。


企业需要实用的、容易执行的,而非高深的、复杂的软件过程规范,制定这样的规范是一项颇具难度的工作。规范制定者首先要深入调查企业过程能力的现状,识别出薄弱环节,分清轻重缓急。再根据企业的实力(如资金和人力),确定过程改进的各个阶段目标,制定与目标相适应的规范。在参考业界推荐的过程标准或规范时,要舍弃那些听起来很先进但是对本企业无益处的东西,只选取对企业有实用价值的东西。

企业制定软件过程规范是为了帮助人们把工作做得更好,而不是存心与人们过不去。企业一方面要用行政命令和奖罚措施来强制实施软件过程规范,另一方面又要设法使员工们乐于执行规范从而避免流于形式。


作者已经创作了一套切合国情的通用的“CMMI 3级软件过程改进方法与规范,命名为精简并行过程Simplified Parallel Process, SPP)。SPP包含19个过程域、40余个规程、近60个文档模板。所有规程的目标角色与职责启动准则输入主要步骤输出完成准则度量均已定义。SPP模型如图1-5所示。读者根据自身情况(如企业发展战略、研发实力等)适当地裁剪SPP,可以在最短的时间内建立适合于本企业的软件过程规范,大大降低研制规范的代价和风险。

SPP模型
关于软件过程规范更多的论述,请参考作者的另一本著作《CMMI 3级软件过程改进方法与规范》。本书后面的章节将解析软件工程和项目管理规范中蕴涵的道理。

三、超越规范化的管理
在团队的日常工作中,总有一些事情无法套用规范,因为干活的是活生生的人而不是机器。无法套用规范的管理并不见得就会杂乱无章,情况好坏取决于领导者的管理才能。


本节之所以用超越规范化的管理这个名称而不是用非规范化管理,就是想突出超越两个字。规范的东西通常是平凡的,普通人都能学会用;而超越则是不平凡的,它需要智慧。超越规范化的管理的精髓就是知人善用

团队领导给成员们指派任务、制定进度计划是项目管理中的一项重要工作,属于项目规划过程域。一般地,规范化的做法是:


1)先分解产品的功能,给出WBSwork breakdown structure)图;
2)根据WBS图估算产品的规模(例如用代码行或者功能点来度量);
3)根据产品的规模和团队的平均生产率,进一步估算工作量(如用人月来度量);
4)根据工作量和团队的人力资源,确定人数和工作时间。
5)最后把符合角色要求的人安插到具体的岗位上(即分配任务),并给出期望的时间。


上述做法比起瞎指挥好得多了,但是该规范并没有告诉我们哪个人最合适干什么事情,所以依据规范制定出来的计划具有统计意义上的合理性,但并不是最优的。软件开发是智力创作而不是体力劳动,给软件人员分配任务不能象对待民工那样随意。领导者可以不必深入了解民工A和民工B的技能,反正两人干的活都差不多。然而对于软件人员CD,假设C很擅长于设计用户界面而编程水平比较低,D很擅长于编程而几乎不懂得界面设计,如果CD的工作错位的话,那么将对开发工作产生严重的负面影响。


知人善用显然是超越规范的。直观地理解,知人是指领导者应当非常了解他的团队成员,包括知识技能和性格爱好等等。善用是指让团队各成员扬长避短,使团队战斗力达到最强。


人到企业工作,既要为企业创造效益,又要获取个人的利益。一般地,规范化管理的目的是使企业和个人获得预定的利益(实现这个目标已经相当不错了)。然而人的潜力是巨大的,卓越的领导者能够充分调动团队成员的工作积极性,使企业和个人获取比预定目标更多的利益,这也是超越规范的管理。


具体做法可谓五花八门,例如:如果经费充足的话,有些领导经常性地带着团队吃喝玩乐,美其名曰Team Building;有些领导以身作则拼命干活,希望下属效仿他成为工作狂。有些领导经常性地做员工的思想工作,企图让人相信积极地工作是人生最大的快乐。这些激励办法能否起作用只有天知道。


真正有效的激励办法就是利益驱动。利益有许多种,如金钱、地位、荣誉、成就感等等,不同的人在不
同的时刻追求的利益是有很大差异的。所以英名的领导应该为下属设计能够让他心动的激励方案(而不是千篇一律的),这样才有可能真正地提高下属的工作积极性。
知人善用的深刻含义是:


不仅用最合适的人正确地做最擅长的事,而且还要激励他做得更好。知人是实现善用前提条件,如果领导不与下属沟通,没有真正关心下属,那么就不可能做到知人善用,实际上浪费了人力资源(团队最宝贵的资源)。

1.6 漫谈软件白领

1.6.1 软件白领的概念
靠体力劳动谋生的工薪阶层称为蓝领,靠脑力劳动谋生的工薪阶层称为白领。通常,在同一地区,白领的工作条件和生活条件都要比蓝领的好一些。


其实白领和蓝领都是打工仔,没有什么好羡慕的。但是由于中国的农民和城市蓝领实在太多了,估计占全国劳动力80%以上,于是白领就成了农民和蓝领羡慕的对象。


我有一对朋友,夫妇俩都是国内著名IT企业的软件工程师,先生还是位小领导。一日,俩人上街买衣服。先生性格粗犷,身材高大,穿一身运动服,天暖出汗,其言行举止恰似一副打工归来的模样。先生挑了衣服试穿,妻子东打量西打量,犹豫未定。


店主生怕丢了生意,于是奉承道:兄弟啊,这衣服太合你身了,形象特好,你瞧瞧,咱们穿起来多像个白领


妻子闻言甚为恼怒:胡说,什么象白领,早就是白领了,不买这衣服了


如果全国总共有360行的话,那么目前国内软件行业肯定是前5位的热门行业。除了大学计算机系使劲地扩大招生量外,2001年教育部在35所重点大学建了软件学院,专门培养面向企业的软件工程和管理人员。社会上改行搞软件的人更是不计其数。因此软件白领又成为其他白领羡慕的对象。


据大致估计,上海、北京等发达城市的软件白领平均年薪为10万元左右。如果进一步细分的话,年薪6万元左右的称为灰领,年薪15万元左右的称为银领,年薪20万元以上的称为金领。

1.6.2 软件白领的生活现状


改革开放20年之后,中国基本上解决了全民的温饱问题。现在国家提出了全民奔小康的奋斗目标。所谓小康是指全国人均年收入达到1000美元。你千万不要觉得全民奔小康这个目标很容易实现。要知道中国有13亿人口,大约有10亿人在拖小康的后腿啊。所以发达地区至少要有10倍于落后地区的经济能力,才能抵消落后地区的负担。


对于生活在上海、北京等发达城市的人民而言,如果他的年收入只有1000美元,那么他就是赤贫阶层了。面对高昂的房价和不低的物价,年薪10万元左右的人也许有胆量谈小康。所以大部分白领人士将和农民一样,不得不为小康而长期奋斗。


在软件企业里,男女职员比例相差悬殊,5:1算是正常现象。可以毫不夸张地说,男性对软件行业的直接贡献率达90%以上。尽管软件白领是令社会大众羡慕的阶层,但是男士们成家立业的艰辛程度丝毫不亚于农民和蓝领。这是因为他们所负的压力远远超过了经济收入。


一个计算机专业的男生在学校里无忧无虑,可以憧憬美好的未来。当他大学毕业到企业工作之后,头两年对生活质量要求不高,住在集体宿舍或者合伙租差一点的房子,每月的几千元工资不算多也不算少,如果一个人吃光用光的话,日子的确比较潇洒。但是快乐单身汉的日子很快就过去了,正常人都是要成家的。


家的三大构成要素是男主人、女主人、房子。一般说来,只要不是长得太丑,凭着软件白领的招牌,找女朋友并不是难事。但是让一个工作才两三年的小伙子全靠自己的积蓄买房子,那是天大的难事。所幸大约还有50%的女士秉承了传统美德,愿意在小伙子没有房子的时候嫁给他。


尽管全国都崇尚男女平等,但是根据中国的传统习俗,买房子这个重任主要由男士来挑,女士的主要本事将用在有房子之后治理这个家。在上海、北京等地,买一个与白领身份相匹配的普通房子,至少要花费50万元。薪资越高的人,买的房子越贵。即使只要首付20%的房款,曾经是个快乐的单身汉也难以一下子拿出这笔钱。在亲人和朋友们的帮助下,好不容易买了房子,接下去每月都要还银行贷款。当他的工资扣除税收、缴掉各种保险金、还银行贷款之后,顿时所剩无几。这时如果再让他肩负家庭的生活费用,他就不再是白领了。我已经多次听到一些小伙子们恨恨地说:自从买了房子后,我就活得像个民工,开始为家庭的温饱而奋斗。


这就是目前普通软件白领的生活写照,如果他不能在事业上有大的跃进,生活的压力将逐渐磨灭他的斗志,后半生就平淡如水。


大多数人并不甘心平庸,所以他不停地奋斗,不停地承受更多的压力,这种死循环程序在读大学的时候就已经编写好了。


《读者》曾经刊登了一篇文章叫中国的男人为什么不浪漫?,估计是悠闲女人写的。其实不必写那么长的文章,一句话就可以解答:因为他太累了。

1.6.3 软件白领的前途


大多数软件白领都是程序员出身,他们经常在谈论这个话题:编程这活究竟该干多久?我们是否要一辈子编程?


我认为,这不是愿意不愿意一辈子编程的问题,而是能不能的问题!
编程这活儿可以算是青春饭,合适的年龄是2030岁之间,比女孩子的青春还要短。20来岁在大学里学编程,虽然刚开始时水平比较臭,但是学习劲头很足,进步比较快;到25岁左右时编程技能、编程效率达到高峰;之后,编程水平基本停滞不前,但是编程效率逐渐下降,到30岁左右已经不是编程主力军了。
程序员不能老是捧着旧饭碗,年龄大到不再适合于编程时,并不是说这个人就无用了,而是应当去做更加有价值的事情。


中国有句励志古训叫三十而立,其含义是男人到30岁时应当:(1)建立安全的家庭,也就是让老婆孩子过上小康的日子;(2)在事业上有所建树,不再是无名小卒。
由于古时候中国男人的平均寿命不到50岁,而且都是男人当家,所以如果男人活到30岁还不能立起来,基本上就没有指望了。但是现代中国男人基本上能够活到70岁,读书时间花得很长,因此四十而立是比较符合现代国情的。


不幸的是,女士们不仅广泛接受了三十而立这个观念,而且还把它升华为考核男人成败的标准。因此,男生一离开学校就要为三十而立奋斗,时间紧迫,压力太大。
如果快30岁了,他还天天编程,估计他很难完成三十而立这项艰巨任务。因为目前中国程序员的经济收入以及在企业中的地位都不高,属于企业的中等偏下阶层。更糟糕的是,30岁的程序员比起25岁左右的新生代程序员,毫无竞争优势可言。


一般地,只要脑子不笨,程序员用一种语言编程2年左右,他在这个领域的编程技能和经验就达到高峰了,以后就不会有显著的提升。由于软件技术更新极快,编程语言和编程工具都会革新换代,新生代程序员在掌握新技术方面具有先天优势。30岁的程序员面临的家庭事务比较多,压力大,上班时常感困乏,工作老是分心,编程效率自然落后于更年轻的小伙子们。所以对于程序员这个职业而言,绝对无法倚老卖老。

如果年长的程序员不能在软件工程和项目管理方面发挥优势,那么他的前途可能比较黯淡了。


我在十年的大学生涯里,花了八年时间编程和搞科研。我到企业工作时已经满27岁了,我的第一个职位是研发类的项目经理。尽管自己的主要职责不是编程,但是我对编程还深有感情,乐意给公司各个部门的程序员讲解编程规范。很快我就发现那些计算机系毕业的小伙子们比我更加适合于编程,而客观上讲,如果我继续编程的话就等于浪费公司的人力资源。大约工作1年左右,我写了《高质量程序设计指南——C++/C语言》这本著作,之后就再也没有编写过C++程序。


最近我组织开发了两个企业信息管理系统,用的都是JavaWeb技术。而我以前只熟悉C++,这回我发现自己不会编写JSPServletJavaBean这些程序了。由于我的项目成员都是出色的程序员,根本无需我参与编程,甚至连详细设计都不必过问。除了项目管理外,我只要集中精力做3件事情:(1)定义软件需求;(2)用HTML制作用户界面原型;(3)制定软件开发过程规范。剩下的开发工作全部交给其他项目成员去做,我定期检查工作成果就行了。


程序员出身的人往往对编程情有独钟,很难接受软件人员不再编程的观念。由于我已经不编程了,令一些读者很失望。有一位读者写了如下email给我:


微软的副总裁里克雷斯特博士仅在2000年就写了5万行代码,1998图林奖的获得者吉姆格雷博士现在仍在写代码。我觉得真正的软件开发已经到了哲学甚至是宗教的意味境界,中国的软件行业有种学而优则仕的思想,我不敢苟同。推动整个世界软件行业的人是那种几十年如一日奋斗在程序设计的领域里的人,像Tompson, Ritchie, knuth等人,他们才是我心中最伟大的软件英雄。中国的软件行业的发展必须靠这种人。因为我觉得您的选择(放弃编程)可能会影响我以后的道路,所以将我的想法说了出来,希望不会耽误您宝贵的时间。


几年前我也是成千上万个狂热程序员中的一员,信奉编程至上。我到企业工作几年后,逐渐改变了编程至上的观念。英名的领导会根据团队利益最大化这个目标开展工作,而不能把编程当作团队工作的核心。我放弃编程并不是因为自己老得编不动了,或者偷懒,而是因为我继续编程的话将使自己没有精力去做更加重要的事情,机会成本实在太高。软件需求和用户界面是商业化软件产品的成败要素,所以我集中精力去做这事情。

在外界看来,做个程序员是蛮光彩的。但是我们自己切勿轻易满足,软件行业还有许多比编程更有价值的工作。


有个朝鲜官员第一次到中国参观学习,感叹万分:没出国之前我一直以为朝鲜是世界第一,到了中国之后才知道中国是世界第一,朝鲜是世界第二啊。

软件白领的职业生涯大致可分三个阶段:


1)第一阶段,做个职业程序员,主要工作是编程、测试和维护,领导让他干啥就干啥。
2)第二阶段,成为项目经理或同等级别的技术负责人,从事项目管理、需求分析、系统设计之类的工作,带领一批程序员干活。
3)第三阶段,成为机构(企业或者事业部)的领导,成天琢磨怎样让机构赚更多的钱,决定产品的发展战略,然后让别人去开发产品。
软件白领处于第一阶段为合格,处于第二阶段为良好,处于第三阶段为优秀。比较合适的年龄分别为25岁左右、30岁左右、35岁左右。第一阶段比较容易实现,第二阶段需要一定程度的努力,第三阶段则靠奋斗了。


1.7 如何成为优秀的软件人才

中国大概只有几所大学才有那样的气魄:我们培养的是国家栋梁之才,而且的确做到了!
反之,国内绝大多数理工科大学的教育目标是:让学生们成为出色的工程师,毕业后找份好工作。说得难听一些,就是培养出色的打工仔。这种教育方针导致无数有天赋并且勤奋的青年学生逐渐演化成为只懂技术、没有思想、缺乏抱负的平庸之辈。


学校正规教育的大部分内容是对人生有益的,但是也夹杂了不少愚昧的教导。遮蔽人生精彩的通常不是困难和挫折,恰恰就是愚昧观念。书呆子呆就呆在全盘接受了好的和愚昧的教育,结果让自己成为有知识的无知者。


我分析自己以及许多同行人士的成败得失,经多年思考之后,总结了让普通人成为优秀软件人才的简要模式。除了自己身体力行外,我还言传身教于所认识的软件人员。本节内容虽非真理,但比起学校里面冗长乏味、空话连篇的政治、成才教育等课程更具实用价值。


1.7.1 学习强势知识

一、什么是强势知识

在解释什么是强势知识之前,我们先举例说明它的反义词——垃圾知识。
《读者》有一篇文章说,国内有个杜甫研究专家在国际上拥有一项独一无二的研究成果,他用了19年时间研究证明杜甫是吃牛肉死的,因此成为权威。


我原先以为研究杜甫是为了让人们更好地欣赏高雅的诗词,没想到有人执著到用19年时间研究杜甫是吃什么死的。这个研究成果不是学问,它对人类社会毫无价值,称之为垃圾知识最恰当不过了。
世界上的知识无穷无尽,没有人能够学得完。然而人的寿命却是有限的,对于世上的绝大多数人而言,学习知识的目的是为了使自己、家庭、乃至社会变得更加美好。我们听惯了知识就是力量,知识就是金钱的格言,殊不知劣质的知识就是垃圾。万一我们化了大半辈子时间学习或制造垃圾知识,那人生岂不可悲!


知识的价值可以用创造出来的社会财富(包括物质财富和精神财富)来衡量。所谓强势知识就是能够最快地为社会创造最多财富的知识。我们应当在短暂的、富有生命活力的时间里学习和应用强势知识,而不是垃圾知识。

二、把事业建筑在强势知识之上


诚然,世界上的强势知识是无穷尽的,人人都有自由学习的权利。但并不是每一种强势知识都适合于每一个人。比如,让出色的艺术家和软件专家互换角色钻研对方的学问,两者可能都将一事无成。
由于人的精力和特长都有局限,所以人们常说有所为而有所不为。同理,我们应当有所学而有所不学


一般地,人们应当根据自己的兴趣、毅力、悟性(天赋),发掘适合自己的强势知识,并把事业建筑在强势知识之上。


勿容置疑,兴趣是学习的原动力。当人们还年少无知的时候,如果完全凭兴趣自由学习的话,有可能造成严重的偏科。所以教育部门会实行强制的基础教育,可谓用心良苦。例如尽管大约有50%的人不喜欢学习数学,但是从小学读到高中毕业,不管你感不感兴趣,年年都要学数学,使你一生受益。


当人开始读大学了,这个时候再也不能被动地接受知识,要好好分析自己究竟对什么感兴趣。当然,你感兴趣的东西未必都能学得好,更未必成为你的事业。在读书的时候换专业,工作的时候改行都是很正常的事情,年轻人切勿过多地受正统教育观念的束缚。我并不推崇干一行爱一行,因为爱和不爱都是发自内心的,无需听从口号。我更不赞同在事业上择一而终,因为这可能使生命失去色彩。人是易变的,只要朝着更加适合你的方向改变,就叫与时俱进


我读高中的时候最喜欢学物理,成绩一直很好,我的理想是成为一名物理学家。高考填志愿的时候,由于农村的孩子视野太有限,我不知道大学里有五花八门的专业,所以志愿表里通通填写了物理系。1990年我到西安电子科技大学技术物理系读大学,刚好碰上海湾战争,全校人都在大谈打仗。在那种气氛激励下,我给家里写了一封信:我立志成为一名核物理学家,为国防做贡献,毕业后就隐姓埋名到戈壁滩搞核武器,请家里做好思想准备。这个理想不到半年就被我自己废除了,因为军训生活非常艰苦乏味,令我对戈壁滩不再有一丝兴趣,想不到幼稚的理想竟然如此脆弱。


大学三年级分专业,我选了半导体物理与微电子专业,当时我对芯片设计有一种神秘的向往。不到半年,有两件事令我对这个专业心灰意冷:

1)我看不懂相对论和量子力学,我知道自己永远都不可能成为物理学家,至多成为物理教师;
2)我虽然能够用心算解答比较复杂的模拟电路,却竟然对简单的数字电路束手无策,我一直都搞不懂二进制、八进制、十六进制,一个对数字电路毫无知觉的人绝对不可能成为芯片设计专家的。在大学三年级的时候,尽管我是全系的尖子生,却下定决心放弃这个专业。尽管我的本科和硕士专业都是半导体物理与微电子,但只是挂名的专业,我连三极管的工作原理都搞不清楚,自己的兴趣全部转向了软件开发。所以从大学三年级起直到硕士毕业,我活脱脱是个程序员,并且靠软件获了许多科技奖励。由于我没有学过计算机专业基础课程,其实内功很差,但是当时谁也觉察不到,我也误以为自己是软件天才呢。


为了使自己成为名正言顺的计算机专业人士,我就到浙江大学计算机系读博士学位。当时对计算机图形学特别感兴趣,于是给自己设立了奋斗目标:35岁之前成为国内一流的图形学专家,成为CAD&CG国家重点实验室的主任。我在浙江大学读博士的3年多时间里,获得了很多令人炫目的荣誉,但只有我自己明白这3年求学是我迄今为止最大的败笔。我发自内心地喜欢图形学,非常认真地学习理论知识,非常执著地开发图形学软件。但是直到博士毕业之际,我才发现自己在图形学方面没有天赋(数学和技术两方面都没有天赋),不适合干这一行,不得不放弃。这是个非常可悲的结果。


我到企业工作后,再也没有接触过图形学,也没有再编程,虽然可惜,但是并不心疼。我的兴趣转向了软件工程和项目管理,这一次,兴趣、毅力和悟性用对了地方,我化了3年的时间用于研究和实践,终于拥有了真才实学,不断地产出有价值的成果,令自己欣慰。


回顾十多年的读书和工作生涯,我不断地改变兴趣,常常在付出努力之后再放弃,得失参半。我并不后悔,因为这是一个积极的探索过程,没有放弃就不能轻装前进。尽管目前自己干得不错,几年之后我仍然会放弃,继续探索新的兴趣,掌握更多的强势知识。

三、真才实学优于学历

在十几年前学术还比较纯洁的年代,学历代表着学问,高学历者受人敬仰。我在读中小学的时候,对学士、硕士、博士无比地向往。然而世风日下,如今市场上到处可见假冒伪劣产品,与此呼应,中国大学也大量生产假冒伪劣的人才,令人愤慨,令人伤心。
记得十年前,我在校园里偶尔碰到教授和博士,总是激动万分,总是激励自己向这些有学问的人学习。十年一晃而过,现在我常常碰到教授和博士,总是首先怀疑对方是不是水货,总是告戒自己不要沦落水货。


教授和博士的贬值意味着学术走向衰败,教授和博士沦落为水货意味着学术已经溃烂。有识之士们正在呼吁拯救学术,但是不痛不痒的谴责已经不起作用,我认为矫枉必须过正恶病要用猛药治。大量青年学生们不了解大学里的阴暗面,容易误入歧途。我们有义务把神圣殿堂里的丑恶东西抖出一些,给人们当头棒喝,让学生们擦亮眼睛再读书。


我首先谈谈IT企业在招聘学士、硕士、博士的态度,让那些还没有毕业的学生们心理有个数。
学生毕业之际,谁都想找一份好的工作。对于IT相关专业而言,90%以上的学生要到企业工作,因为只有企业才能接纳千军万马。大量的硕士生和博士生学了一身的屠龙之技,精通了纸上谈兵,可是企业不欣赏屠龙之技,更加讨厌纸上谈兵。尽管我在大学里一直都是牛气烘烘的,但是在毕业之际也不得不到处投寄求职信,眼巴巴地等人要我。曾经有一段时间杳无音讯,让我心里发慌。


终于有一天上海贝尔的一位人事经理约我面谈,我拿出厚厚的一叠奖状以及软件成果展示给他看。人事经理对我讲,你的简历不错,成果很多,但是我们不感兴趣,因为你的专业是图形学,我们是电信企业,专业不对口。我当时吓出汗来。


人事经理接着说,本来我们不会招聘你的,碰巧有人发来《大学十年》这篇文章给我,我看后马上打电话约你,免得你被其它企业招走。我们总是努力招聘有真才实学的人,你写的《大学十年》说明了一切。几乎同时,华为上研所的人事经理约我面谈,其观点几乎与上海贝尔的一模一样。


说来好笑,我的一堆引以为豪的奖状根本没人理睬,却因《大学十年》这篇文章一路开绿灯。不仅没有人面试我任何技术问题,还让我自由选择工作,给我的职位和薪水比所有同期的博士生们都高出一级。有了这样的体会后,我知道了该怎样指导别人写命中率很高的求职信。


我工作后经常帮人力资源部招聘员工,我看过的简历有几百份,亲自面试过近百人。而且自己给很多员工培训过,所以对IT行业的学士、硕士、博士的现状相当了解。几个同行聊起这个话题,大家很有同感。


我们发现名牌大学计算机相关专业的本科毕业生普遍来说相当不错,干活很好。相比之下,差的学校的本科毕业生差距比较大。据我观察,有23年工作经验的名牌大学本科生是干活的主力军,他们正当青春、干劲十足、不摆架子、不耻下问、要求不高、奉献甚多。可见国内名牌大学的本科教育相当好,令人放心。


然而名牌大学的硕士生却是鱼龙混杂,好的很好,差的极差。究其原因是,有半数以上的硕士是改行过来的,专业基础很差,所以这类硕士生不如本科生好用。我们识别硕士生是鱼还是龙的简单有效的办法是:首先查本科出身情况,即检查本科的专业是什么、在哪个学校读书,本科出身不好的先搁置一边;如果本科和硕士阶段都在名牌大学读书,而且两个阶段的专业都与公司业务对口,那么这些硕士生是抢手货,因为他们相当于有2年工作经验的员工。国内大学的硕士教育的质量明显不及本科教育,把招生名额降低50%也许会有所改善。


按照目前国内大学教育的水准,根本没有能力培养如此至多的博士生。毫不客气地说,最近几年生产出来的博士生,极少数是精英人物,小部分是合格人才,绝大多数是庸才和水货。劣质博士毕业生实在太多,以至于成为贬义词,人们常常窃笑又招了一个傻博。大部分博士找不到合适的工作,因为竞争优势远不及学士和硕士。由于企业招聘博士的代价非常高,大企业只会招少数精英人物和合格人才,中小企业根本不会理睬博士。


国内大部分博士真的是很可怜。从硕士读到博士出头,这六七年时间,尽干些自欺欺人的学问,真本事没学多少,倒学会眼高手低甚至弄虚作假;毕业时学问既不深也不博,被企业拒之门外后,蓦然回首,发觉青春已被虚度,心灵已呈老态,唯有长叹短嘘,强把自负作自信。


有位网名叫阿溃的二年级博士生给我发求助信,请求指定迷津。他的导师招了近40个博士生,没有
足够的课题让学生们攻读,让他们自生自灭。阿溃看到师兄师姐们悲惨的下场后,内心已经崩溃了,所以取名为阿溃。我说你为什么不悬崖勒马赶紧退学呢?他说他也想退学,却找不到工作不敢退。我看了他的简历后直叹气,读书那么多年只参与几个小MIS项目的开发,软件开发水平尚不及我招聘来的那些精英本科生,谁愿意要这样的博士生啊?我看只有把简历中读研究生的经历全部删除掉,投到中小企业也许才有工作机会。


阿溃的遭遇不是少数现象,而是多数现象。我丝毫没有贬低他们的意思,只是感到痛心,他们被一群无德无能的导师给坑害了。唉,也许把国内的博士生和博导裁员80%,才有恢复信誉的可能。
我想对狂热考研、考博的学生们一个忠告:


对于工程学科而言,硕士和博士的课程普遍不及本科课程那样博大精深,混个文凭很容易。读硕士或者读博士的真正目的应该是提高真才实学,而不是混个文凭。企业的领导都是精明的商人,不是笨蛋,不会被空有文凭而没有真才实学的人蒙骗的。如果你真的很想读硕士或者博士,那么你一定要设法投奔口碑比较好的导师,小心落入缺德的导师手中被当作民工来使唤。总之,你要明白读书的目的,并且学会保护自己。

四、为事业而学习

谁都希望自己活得好一些,这个愿望只能靠自己努力而实现。如果你生活在竞争激烈的社会里,特别是在IT行业,事业将毫无疑问成为男人的重心。尽管事业成功并不见得就使你幸福,但是事业却是幸福的基础。如果男人在事业上无所建树,那么他十有八九活得很失败。这是社会现状,无需理论证明。我见过很多上海的新好男人,一肩扛事业,另一肩扛家庭,成天忙碌,人人习以为常了。
一般地讲,除了运气之外,你所掌握的强势知识决定了事业状况。人们有时候仅仅为了兴趣而学习,有时候仅仅为了考试而学习。当你长大后,不论是在学校里还是在企业里,都要懂得为了事业而学习。人追逐功利是自然的本性,如果没有理智把关的话,有可能导致急功近利鼠目寸光误入歧途等等。所以我们在为事业而学习的时候,一定要把功利理智结合起来,我简单总结了如下学习经验:

根据事业的目标,确定对应的强势知识结构,有目的有步骤地学习这些强势知识。并且要随着事业的变化,不断地修正知识结构。你要明白自己在大学里所学的仅仅是专业基础知识而已,只够让你成为工匠挣口饭吃,不要以为自己是个本科生、硕士生或者博士生就翘尾巴。大多数理工科学生很少接触经济学和管理学,严重缺乏更高层次的强势知识,成天只知道搞技术,你要熬到哪一天才能当上一个小领导啊。就软件行业而言,一个大学生学了四年的计算机专业基础知识后,毕业到企业工作时相当于一个士兵;他在实践之中潜心学习软件工程和项目管理知识,如果悟性高的话,两三年左右即可精通,这时他已经懂得带领团队开发出合格的产品,成为战斗在第一线的军官;如果他再掌握市场营销、财务管理等知识,不仅使产品开发得好而且还卖得好,并且能让赚来的钱不断地生出更多的钱,那么他就成为将才了。学校只能把你培养成合格的士兵,如果你想成为军官和将领,那么自己就要不断地学习更高层次的强势知识。

学好基础知识。把事业比喻为高层建筑,那么基础知识就相当于地基。我认为本科的基础知识实在太重要了,可以用博大精深来形容。俗话说,根深才能叶茂,如果你的本科基础知识学得很好,那么你就非常容易学习上层的东西,并且后劲实足。如果在学习基础知识的时候急功近利,必定会留下后患。现在很多计算机系二三年级的学生在学校外面打工,发现建设网站、开发管理信息软件很容易赚钱,就把非常重要的专业练习如设计操作系统、编译器、数据库系统等等扔到一边。如果计算机系的学生长期这样干的话,他就算不上科班出身。我曾经为电信软件开发部门面试过数十名C++程序员,应试者的简历看起来都不错,可是大多数人不能写出正确的内存管理程序,令我十分失望和不解。有一位中科大计算机系毕业的小伙子令我刮目相看,不论我出什么C++试题,他都能脱口解答,而且还指出我的标准答案中的荒谬之处。我问他为什么学得那么好,他说自己做作业的时候开发过操作系统和编译器,相比之下,我的C++试题简直是小菜一碟。这就是基础扎实的好处。我面试软件开发人员时,最关注的就是本科的内功如何,基本上不在乎花拳绣腿的技术。虽然我们强调基础知识的重要性,但是也不能过度地推崇,基础应该与事业目标匹配起来,要考虑机会成本。如果你只想盖个小平房,那么就没有必要打下几十米深的地基,否则成本太高。很多人在十几年的读书生涯里做了太多的作业和试题,这是盲目读书,真的浪费了不少青春。

读书时扬长补短,工作时扬长避短。读书的目的是获取知识,扬长是指在你喜欢的、比较擅长的领域多花些时间学习,努力使自己在这个领域脱颖而出。补短是指补习你不擅长的知识,因为这些知识对你的事业也非常重要,并不能因为你不擅长就可以甩掉它,如果不补短的话,短处将常常拖你的后腿。例如中国的大学有文科理科之分,那些喜欢数理化的高中学生将报考理工科大学,而喜欢文史地的高中学生将报考文科大学。由于中国的高中和大学教育偏科非常严重,结果导致理科学生不懂文科,而文科学生不懂理科,这样的人才在知识结构方面存在严重缺陷。一个可悲的结果是,许多软件高手连技术文档都不会写。无论你是在学校里还是在家里读书,一定要懂得扬长补短。然而人们工作的目的是为了创造效益,要给企业和自己多多赚钱,而不是单纯为了提高自己的知识水平。所以在工作的时候一定要扬长避短

不仅要学习新知识,还要向错误和失败学习,形成学习的良性循环。我们从小学读到大学毕业,一直都在学习新知识,一直信奉好好学习,天天向上。然而我们不能把眼光仅仅盯在新知识上,不管是生活还是工作,人们都应该向错误和失败学习,目的是让我们在短暂的健康年华中少犯错误、少失败,多做几件正确的、对社会有贡献的事情。一般地,学习新知识比较容易,因为你自己感兴趣、有动力。但是很多人不敢面对自己的错误和失败,因为害怕,因为要面子,这是天生的心理障碍。如果你不敢正视自身的不足与缺点,不能诚心诚意地向错误和失败学习,那么失败不会是成功之母,失败仍然是失败之母5年前我第一次创业失败,导致公司亏损了30万元。我很心痛,反省了几年,为了总结经验教训,我读了很多书、写了很多文章,现在觉得自己收获非常大。


1.7.2 提高表达能力


一、树立正确的观念

表达能力主要是指的能力。是人们向外界表达自己才华的重要途径。
表达能力低下是中国软件开发人员的通病,值得业界高度重视。
很多软件开发人员怕写文档和报告,讲述问题和想法时语无伦次。由于表达能力差,他就无法胜任需求开发、系统设计、管理等高层次的工作。即使他的技术水平很高,但发挥不出来有什么用?只好长期干编程、测试的活儿。


在允许自由竞争的环境中,如果有人埋怨其才能被埋没了,通常是他自己的错。如果真有本事,你就应该自己冒出来,怎么会被埋没呢?难道非要等着别人来照顾你不成?
我认为导致表达能力低下的主要原因是软件开发人员的脑子里有迂腐可笑的观念:他认为表达能力是可有可无的,而技术才能才是惟一重要的。


我认识的大部分默默无闻的开发人员都有这种幼稚的想法。我一向喜欢头脑灵活、手脚勤快的年轻软件人才,常常不厌其烦地规劝他们锻炼表达能力。如果他仍然执迷不悟,我就毫不客气地刺激他:
请你看看四周,你会发现当领导的通常都是能说会写之人,而不是技术最好的人。如果你不擅长写和说,你永远都不能当领导!永远没出息!


有些人把表达能力差归结为读小学、中学时文科学得太差,现在补习已经来不及了。这是绝对是谬论,我就是极好的反例。


我读小学、中学时文科学得极差,高考语文成绩才54分(总分120分)。我写作文的最高目标就是不跑题,考试前我总是反复祈祷:我没干过坏事,保佑我作文不跑题吧!上大学的第一天我竟然无法用普通话说出去洗澡怎么走,只好晃动澡票与辅导员打哑语。


可我现在呢?我确信在IT这个行业,自己的笔功算得上一流。我的口才比笔功稍逊一些,但也不错,技术报告连讲两天都没问题。

为什么进步那么大?有什么技巧吗?

引用卖油翁的话:无它,惟手熟尔。

我从读大学至今,十几年来一直都是带头干活。不管是长篇大论还是写标语作宣传,都是自己干的(谁能替你做呢?)。所以写多了,说多了,连笨蛋也会成为行家。
我是一个智力平平,出身贫穷的普通人。既然象我这种语文功底极差的人都能把表达能力练得那么好,相信绝大部分人也能办得到。

所以不要找借口了,为了自己的前途,请赶紧锻炼表达能力。

二、怎样提高写作能力

科技文章显然不同于文学,软件人员不能照搬照抄文学专业的写作方法,因为承受不起。我没有受过专业的写作训练,虽然自己的文才主要是靠练出来的,但并不完全是无师之通。很幸运,我有一位同行挚友从小就对书画等中国传统文化有浓厚的兴趣,不知不觉沉淀了文才底蕴。三四年来,我写的许多文章、著作都是请他审阅的,那些初稿的大部分缺陷都被他圈点出来。我在修改稿件以及和他切磋的过程中逐渐领悟了写作的方法。进步是很明显的,我最近一年写的文章,他很少找出了毛病来。我现在常常给别人审阅文章,真是感到满目疮痍。

我阅读过数百本计算机相关书籍,从来没有发现教人写作的文章,我就斗胆说教了。我们认为好文章有四大构成要素:内容、逻辑、实证、措词。


内容是文章的灵魂。如果你没有内容可写,那么无论你的文笔多么美妙,你都不可能写出好文章来。巧妇难为无米之炊就是这个道理。


从前有个书生,大考来临前练习写文章,成天愁眉苦脸。夫人看了甚为不解,问:相公啊,你写文章难道比我生小孩还要难吗?


书生长叹一声:娘子啊,你哪里知道我的苦处,你生小孩肚里有货,我写文章肚里没货啊!
这个故事告诉我们,要想写文章,必须先有可写的东西。否则即使挖空心思拼凑出来,也没有人欣赏这种空洞的文章。所以不要企图在内容上投机取巧。


内容从哪里来?内容不是流水帐,它来之于你对工作和生活的思考。当你思考明白是什么为什么怎么办等基本问题时,你就有了可写的内容。

表述内容要符合逻辑。当你有了可写的内容后,就要努力用文字清楚地表达出来,设法让别人容易理解。如果你写的文章颠三倒四,让别人看得很累,即使文章的内容不错,也不会受人欢迎。理工科毕业的人都有很强的逻辑思维能力,这是我们比较擅长的。写文章时,我们即使达不到字斟句酌,也要使段落和语句符合逻辑。一篇条理清晰的文章,你只要浏览段落标题,就能明白个大概。


如果你自己都觉得文章不通顺,那么不要在文字上改来改去,免得白费力气,因为真正的原因是你没有把问题想透彻,所以条理不清。

内容要有真凭实据(即实证)。文学类的文章可以虚构情节,可以夸张,但是科技文章不允许这样做。科技文章中可能存在错误的观点和结论,这是在所难免的,但是绝不允许在科技文章中造假。
在写科技文章时,凡是引用外界的关键数据、结论等等,都要注明出处。尽管这样做比较麻烦,但是带来的好处是:不仅文章的可信度提高了,你自己做学问的态度也越来越严谨了。


我写的科技文章通常比较风趣,这是有写作风险的,因为趣味性很可能会降低严谨性。我常常告诫自己,我是科技人员而不是小说家,切勿把科技文章写成小说。所以,尽管我的文章中有不少滑稽可笑的故事和语句,但我绝对不敢对关键论据开玩笑,否则失信于读者,无疑自掘坟墓。

措词追求正确、准确、优美。措词正确是指没有错字、错词,并且语法正确。由于现在写文章都用字处理软件,除了误输入之外,人们一般不会把字和词写错。但是语法毛病却随处可见,尤其是长句子。科技人员写作的语法毛病通常有规律性,所以如果有高人指出你文章中的语法毛病时,你要善于总结,举一反三消除类似的语法毛病。


措词准确优美的境界比正确高得多。汉语的词汇、妙语特别丰富,你只有在平时多读书、多多铭记好词好句,才有可能写出准确优美的句子。这是日积月累的过程,无法速成。
中国移动通信曾经在《环球时报》上刊登了这样的广告:


神州行给全球通发了一条短消息,说我神州行自5.17起也有了短消息。全球通也给神州行发了一条短消息,说我全球通知道你神州行自5.17起有了短消息,以后不但神州行和全球通都可以发短消息,而且神州行还可以给全球通发短消息,全球通也可以给神州行发短消息,也就是说神州行自5.17起有了短消息,神州行和全球通可以互发短消息。……


这个广告的罗嗦程度简直可以与电影《大话西游》中的唐僧语录相媲美!可笑的是创作者还以为写得好把它刊登出来。罗里罗嗦准确优美的天敌,我们首先应当消除罗里罗嗦这个普遍存在的大毛病。

小结:我们不仅要勤于练笔,而且要在实践之中领悟写作的方法和技巧。不论是写技术文档还是写论文,我们都要重视内容、逻辑、实证、措词。这是提高写作能力的有效途径。

三、怎样提高的能力


我们在日常生活和工作中说话自如,一点问题都没有,可是很多人在正式场合演讲(做报告)的时候却常常语无伦次、局促不安,尤其是有高层领导在场时。


我们首先要克服怯场的心理障碍。大多数人不是天才的演说家,所以在前几次做报告时表现不佳是正常的现象,不必太在乎。我们要有勇气走上讲台,面对许多人演讲,哪怕当时心里发抖,越早迈出第一步对你的事业越有益处。


我是在读硕士一年级的时候举办了自己的第一次学术报告会。尽管我当时毫无演讲经验,心里也害怕出洋相,但是我早就意识到表达能力对事业的重要性,于是鼓励并且强迫自己把这第一次学术报告做好。我请人在学校张贴广告、安排会场,并请了很多同学和老师来捧场,我对着200多名听众整整讲了一个半小时。且不论这次报告的学术价值如何,对我而言这是一次非常有意义的演讲锻炼,使我不再怯场,的确对我将来的事业产生了正面影响。


我到企业工作后,经常参加研讨会,也经常给员工们做培训。我对自己的要求是讲出水平,让听众听得更有滋味。我不仅从专业讲师那里学习讲课技巧,而且自己也用心总结讲课方法。不知不觉,自己就成为比较老练的讲师了。现在我已经能够使软件工程课堂充满欢笑,达到收放自如的程度。


和写作一样,我也没有受过专业的演讲训练。既然我现在很能,可见别人也能做得到。根据我自己的领悟,我总结了简单有效的的方法和经验,适用于演讲、做报告、培训等,供同行们参考。


充分准备。演讲的目的是阐述自己的见解,而不是耍嘴皮子。演讲的内容是第一重要的,至少要对得起听众们付出的成本(例如时间成本)。所以我们在演讲之前要好好准备内容,最好把内容制作成电子讲义(例如PowerPoint文件),不仅在现场可以播放,还可以让听众带回去阅读。如果你是新手,那么你最好先练习几遍,熟记内容并且控制时间,避免在现场手忙脚乱。


仪表整洁,精神抖擞。很多搞技术出身的IT行业人士对自己的仪表比较随意,常常不修边幅。在干技术活的时候是允许的,但是在正式场合演讲的时候可不能这样,否则会损害自己和公司的形象。如果演讲者邋里邋遢,精神委靡,他还没有开口就被听众瞧扁了。所以我们要先在家里修理自己,尽管大多数人并不英俊潇洒,但是仪表整洁,精神抖擞还是做得到的,关键是自己要有这样的意识。


声音响亮。不论有没有扬声器,你在演讲的时候声音要响亮。这不是听得到听不到的问题,而是底气足不足的问题。如果你声音响亮,自己就越说越带劲,听众会被你的热情感染。反之,如果你的声音很小,自己就越说越没劲,听众就会窃窃私语或者干脆打瞌睡。


戒掉烦人的口头词。很多人不知道从哪里传染了烦人的口头词,一开口就讲就是说等于说说句良心话说句心里话说句老实话等等。这些口头词对你表达见解毫无用处,反而扰乱视听,令人厌烦。平时讲话有这个毛病的人,在演讲时候也会这样,好好的内容也被讲得支支吾吾。我以前也有若干口头词,我是靠打自己嘴巴戒掉的,因为不戒不行啊!


说普通话,并控制语速。在演讲的时候要说普通话而不能用方言(外语除外),这是对听众的尊重。有一次我参加质量管理研讨会,与会者大多是上海人。有个ISO9000的评估师做报告,一会儿说普通话一会儿说上海话,而且还讲一些只有上海本地人才听得懂的故事,我忍无可忍后愤然离席。很多南方人普通话说得不标准,偏偏说话又很快,这在日常生活中没有问题,但是会严重影响演讲的效果。


现场交互,调动听众的积极性。对于时间比较长(半天以上)的报告会和培训课,讲师不要只顾自己讲,要设法与听众现场交互从而调动听众的积极性。交互的方式有多种,例如让听众提问题,让听众作为某些案例中的角色现场练习。有一次我参加项目管理培训,讲师让大家分组进行立项评审练习,每组都构思一个产品方案并让组长上台演讲,其他组的人员对该产品方案进行立项评审,大家都是现学现用,获益菲浅。我学了这个技巧,后来在培训课中使用,效果真的很好,现场气氛热烈,很少有人打瞌睡。


1.7.3 提高管理能力

宽泛地讲,管理能力是指带领团队完成任务的能力。管理的领域很广,例如项目管理、营销管理、财务管理、人力资源管理、企业管理等等。一般地,一个人的管理能力决定了他能够当多大的官儿。


IT行业的技术性很强,纯粹学管理出身的人由于不懂技术而难以立足领导职位,这就给搞技术出身的人才留下了发展机会。搞技术主要用脑,搞管理主要用心。技术才能取决于智商(IQ),而管理才能取决于情商(EQ)。如果你的IQEQ都比较高,那么你就是当领导的料。如果某人的IQ很高但是EQ却很低,那么就请他走技术专家的路线,切勿走错道。

搞技术出身的软件人员并不见得一辈子都要搞技术,他将来有可能成为中高层的经理,也有可能成为优秀的企业家(Bill Gates就是好榜样)。


保守一点讲,先搞技术,拥有一技之长后再逐步转向管理,这是一种稳扎稳打的职业发展模式。我甚至认为这种发展模式特别适合于中国的IT人士,我自己就是走这样的道路。
怎样才能提高管理能力呢?我总结了如下经验:


要有当领导的愿望。我受大学教育的时间很长,因此长期以来都有技术至上的观念,之从我融入社会后,就不再满足于当一名技术专家。我相信能够读完本书的读者肯定拥有不错的技术功底,否则你看不懂本书;我还推测大部分读者对管理很感兴趣,否则你没有耐心看完这一章。如果你对本书的观点产生了强烈的共鸣,那么你已经有了不甘心做一名技术员的意识,何不大胆明白地对自己讲我想成为杰出人才,所以我要一边搞技术,一边提升管理能力,在不久的将来成为领导者


要有自学成才的信心。管理能力主要是靠自己练出来的,别指望他人手把手地教你怎么管理。有人说:上级领导不提拔我当一个经理,我哪有机会锻炼管理能力啊!这话就像在没有学会游泳之前我绝不游泳那样矛盾。如果你不具备管理能力,上级领导怎么敢提拔你当经理。如果你被任命为经理,难道就自动具备管理能力么?一般地,搞技术出身的人,他的智商是足够学习管理了,因为没有哪本管理学书籍比高等数学还难。学习管理并不需要专门去读MBA这类学位,有不少大企业家没有读过大学,照样可以指挥千军万马。我也遇到过一些迂腐透顶的管理学博士,其管理水平连普通员工都不如,完全白读书了。如果你有比较高的悟性和EQ,完全可以自学成才成为管理专家。


正确地学习基础管理知识。每个行业都有它自己的基础管理知识,显然不能把管理饭店的方法套用到IT企业中。如果你想成为软件团队的领导,我强烈建议你学习两门管理学问:一是国际项目管理协会(PMI)研制的项目管理知识体系PMB),二是美国卡内基梅隆大学软件工程研究所(CMU/SEI)研制的软件能力成熟度模型CMM/CMMI)。前者把项目管理知识划分为九大领域,适用于所有行业的项目管理;后者则把软件过程成熟度划分为5个等级,并定义了对应的过程域和关键实践。如果你精通PMBCMM/CMMI,你的知识足以管理大型的软件项目。随着你的职位的升迁,你要不断地补充管理知识(如市场营销、财务管理等)。


从项目经理做起。如果你想在将来成为企业的领导,你最好从项目经理做起。道理如同在当将军之前,应该先当好班长那样。项目经理虽然是小小的官儿,但是麻雀虽小五脏俱全。如果你连项目经理都当不好,却想一步登天当更大的官或者自己创业当老板,除非你是天才否则必败无疑(我自己失败了,我也看到很多高才生失败了)。即使你雄心勃勃,你也要先积累支撑你雄心的资本,你要明白不扫一屋,何以扫天下这个道理。项目经理这个职位对于大部分软件人员来说是触手可及的,而不是可望不可及的,所以不要轻视项目经理这个职位,这是你锻炼管理能力的绝佳机会。

1.7.4 提升人格魅力

出色的技术才能和管理才能可以让人获得很高的职位,但是如果缺乏人格魅力,即使他成为领导也成不了领袖。领导是一种行政职位,可以被任命也可以被撤职。而领袖则是活在人们的内心里,他让人们发自内心地尊敬和服从。

企业没有领袖就等于没有灵魂,广大员工和领导者没有精神上的联系,仅仅存在雇佣关系,所以不会发生同甘共苦这种美好的故事。很遗憾,我所在的公司没有领袖但是有许多大大小小的领导,大部分企业都是如此。


领袖人物必定具备卓越才能和超凡的人格魅力。领袖人物最理想的生命轨迹是:当他充满智慧的时候成为人们的领袖,为大众带来巨大财富;当他即将昏庸无道或者成为独裁者的时候,突然神秘消失,避免给大众带来灾难。


中国历史上涌现了许多领袖人物,但是那些领袖们通常在生命弥留之际制造了大灾难,毁灭了他先前创造的所有财富,他被后人赞美的同时被人唾骂。如果中国历史上出现几位象美国开国元勋乔治华盛顿那样的领袖,那么中国现在肯定发达无比。


领袖这个话题离我们太远了,这里就谈谈怎样让普通人提升人格魅力。

人的体格和容貌是非常重要的魅力因素,称之为身体魅力。谁都渴望自己长得又高又帅,但身体魅力是天生的,上天会让大多数人失望。我小时候也和大多数缺乏身体魅力的人一样长期自卑,当然现在也仍然自卑,只是不经常牵挂而已。为了减少弱势,我不得不发奋学习不断提高知识才能,并且要经常作思考状以提升人格魅力,估计要一辈子累下去了,因为没有别的窍门。

下面将探讨男人的主要人格魅力因素:胸怀宽广、意志坚强、知人善用、社会责任心。

胸怀宽广是男人的重要美德。即使人的长相和才能都很普通,如果他的胸怀很宽广,他仍然会让很多人欣赏和接近。反之,才华出众但是心胸狭窄的人,通常是孤家寡人。


我觉得自己在西北读大学(西电)比较幸运,最大的收益是让自己的性格变得更像男人。我生长在浙江的乡村,当地人大多比较精明,尽管天生地灵人杰,但也天生心胸狭窄。我读大学时,同学大多是豪爽、憨厚的西北汉子,他们从来也没有因身材高大而欺负我,我也不好意思因脑子聪明而欺负他们。天长日久,我没有让西北同学变得更精明,自己反而被同化了。所以当我硕士毕业离开西电的时候,自己长的是南方人的身材和脑袋,但是性格却是北方化了。


北方人豪爽、憨厚的性格是习俗形成的,隐含了不少缺陷,如果不经后天有意识地雕凿,就不会产出很高的附加值。由于我善于反省,悟出了宰相肚里好撑船这个道理,于是有意识地升华自己的性格。撑大自己胸怀的过程其实很难过,因为你要敞开心胸接纳许多你原本不喜欢的人和事物,要强作笑脸虚心接受批评、知错就该,甚至在遭受伤害后只好自己悄然抚平伤痛。所以胸怀宽广这种美德是后天苦心修练出来的。

胸怀宽广相媲美的另一种美德是意志坚强。人们通常在顺境之中意气风发,而在逆境中萎靡不振。很多有才华而意志薄弱的人在遇到巨大挫折或失败的时候,就一直倒下去了,其实他败给了自己。人生常有不测风云,人的意志是对抗不测风云最有效的武器。


作为领导者的男人一定要有坚强的意识,这样他能给人们强烈的安全感。每当遇到大风浪的时候,人们会自觉地凝聚在领导者的周围,共同克服困难。否则一有风吹草动就人心惶惶,大难临头各自逃。
坚强的意识也不是天生的,是在经常与困难搏斗的过程中积累的。其中的诀窍是,每次的困难不能超出你能够承受的极限,否则你会被完全击垮,意志再坚强也回天无力。所以男人应该有胆魄闯荡江湖,坦然地迎接成败得失,但是绝对不可以胆大妄为,做出自己无法承受的事情。


我在读书的时候第一次创业失败亏损了30万元,对于学生而言那是一笔巨大的债务,幸好算不上是灭顶之灾,所以我挺过来了,在这里谈笑风生。倘若我第一次创业失败就负上300万元的债务,我肯定四处逃难,怎么顾得上磨炼意志、修练内功呢,哪有东山再起的机会?

本章1.5.2节已经讨论过知人善用这个话题,并指出知人善用超越规范化管理的精髓。你不能等到自己真正成为某个团队的领导的时候,才考虑知人善用。你要在成长的过程中有意识地培养知人善用的人格魅力,同时不断积累知人善用的方法技巧,才可能使自己在将来成为卓越的领导者。以下是几个必要条件:


要与各色各样的人打交道,拓展你的交际圈(当然,不能烂交朋友)。宏伟的事业是领导者带领广大群众创造出来的。世上的大多数人并不和你志同道合,你不能仅仅和你喜欢的那类人打交道,将其他人拒之门外,否则你的圈子实在太小,根本没有人可用,谈何善用。有学问的人常常会走向自命清高,自命清高者一般成不了好领导,我们要引以为戒。


要有真正与他人分享利益的气量。大部分人干事业都是利益驱动的,这是正常的心态。领导者要努力给每个人恰如其分的利益(金钱、地位、荣誉等),而不只是光光利用他人,这样才能树立信誉,长期把人才凝聚一起。

所以胸怀宽广知人善用的人格基础。

一个成功的人必定从社会中获取了许多有价值的东西,所以他也应该更多地回馈于社会。国外有一种不成文的习俗,许多人功成名就之后总是积极地从事慈善事业,尽管某些人在赚取财富的时候令人讨厌,但是他通过慈善活动把财富很合理地归还给社会,产出了很高的社会价值。
社会责任心不是以金钱来衡量的,而是以道德来衡量的。才华出众的大部分都是社会中的强者,他们比普通人更明白怎样使社会变得更加美好。不论是从事慈善活动、希望工程还是义务教育等等,我们随时随地都有能力去做使社会更加美好的事,而不必等到我们功成名就之后。
具有社会责任心会让人们变得高尚,这是金钱买不来的。


1.8 小结


本章是全书的综述,给出了提纲挈领性的观点和论断,本书后面的十章将细致地论述软件工程和项目管理的方法和模式。

作者之所以大篇幅地论述企业的根本目标、产品开发之道、用人之道、如何成为优秀的软件人才这些话题,是因为它们对于在企业工作的软件人员而言太重要了,偏偏又被传统的软件工程和项目管理书籍给忽略了。

由于常拿自己做样板来说教,所以文章的个性色彩比较浓厚。这种写法的好处是,读者可以观摩到作者真实的成败得失,吸取精华、摒弃糟粕;主要缺点是,如果读者的经历与作者的差异太大,即使你觉得文章有理也难以套用。


如何成为优秀的软件人才这是许多青年人感兴趣的话题,本章具有相当好的参考价值。此处做个引申:


1)成为优秀的人才并不意味着会发财,正当发财主要靠的是商业头脑。尽管我也渴望拥有巨大的财富,但是我缺乏敏锐的商业头脑,目前只能算是个高级白领、活得不错而已。等我将来发财了,再给本章补充发财之道


2)成为优秀的人才并不意味着幸福,幸福的人也不一定要求优秀。对幸福影响最大的通常是人的缺点而不是优点。一张白纸上的一个污点远比脏纸上的许多污点醒目得多,如果你拥有99%的优点,那么你的1%缺点将发挥99倍的效果,足以击毁优秀带来的好处。在社会这部冗长的连续剧里,优秀的人忙碌地演戏,不优秀的人看戏,这叫生存而不是生活。当你强壮到既不必演戏也不必看戏的时候,真正的生活开始了。我强烈反对年轻人流传平平淡淡才是真这样的颓废语录,因为他们在还不知道什么是

人生真谛的时候,就把青春平淡地消耗了。你只有先努力成为优秀的人才,才有实力享受平淡是真的生活。

您可能有感兴趣的文章
TDengine 荣获 CSDN IT 技术影响力之星 “年度开源项目” 、 “年度IT领军人物”奖项

“IT诗人”代腾飞:做自己的偶像(中华儿女杂志新闻稿)

“IT诗人”代腾飞:让诗歌的感性照进IT界(软件工程师杂志新闻报道)

谁是中国IT版林书豪?

成为一名受人欢迎的IT人员