方正的“工厂”

本文写于1999年。

方正最早的报纸排版软件NPM,作者只有两个人,主持开发的是方正研究院现任常务副院长肖建国。NPM在1988年一经推出即被全国半数以上的报纸采用,出尽风头,时至今日《北京日报》、《人民日报》的部分版面还在使用NPM排版。

1988年,能在DOS平台上写出“所见即所得”的图文混排系统,足以证明肖建国的编程水平是大师级的,而且,NPM为方正所创造的利润也不亚于后来出名的任何著名程序员的成名之作,但肖建国并没有出名,也没找哪家报纸谈过自己的程序人生,而是继续埋头苦干,于1993年主持开发完成了方正彩色出版系统,在方正黑白排版市场萎缩之际,为方正培养出新的利润增长点,使方正牢牢地占领了彩色报纸出版市场。

这次功成之后,肖建国仍然没有急着自己出名,因为尽管作为优秀程序员,肖建国的个人能力非常强,但他清醒地认识到:1991年6月12日·北京友谊宾馆·方正研究院前身北大计算机研究所全家福。一个长久发展的有规模的软件公司仅靠发挥一两个天才程序员的能动性,在未来的竞争中必将败落。

作坊为什么不行

1988年,写出令人自豪和骄傲的NPM,1993年,主持开发成功方正彩色出版系统,肖建国得出的结论不是自己“顶天立地”,方正离开自己不行,而是一两个人能够写出好的软件,但这个软件的规模不会很大,当软件规模足够大的时候,一两个人是绝对做不过来的。

背景

北京大学计算机科学技术研究所的前身是北京大学文字信息处理技术研究室,始建于1977年9月,1983年正式成立北京大学计算机科学技术研究所,现任所长是中国科学院院士、中国工程院院士、第三世界科学院院士、著名计算机专家王选教授,副所长是刘秋云教授。

1995年,与北大方正集团公司联合成立北大方正技术研究院,并由王选教授担任院长,刘秋云、肖建国、阳振坤教授和邹维副教授任副院长。方正技术研究院负责方正集团的技术发展研究和新产品的研制开发,同时承担着部分基础研究工作,为公司的长远发展积累技术资源和人才资源,成为方正集团的科研开发基地。

目前所(院)内建有博士、硕士研究生培养点和博士后流动工作站,以本所为依托建有文字信息处理技术国家重点实验室和电子出版新技术国家工程研究中心,下设报业管理、文字与图形处理、数字媒体、金融信息技术、指纹技术、照排技术等6个研究所,以及彩色系统、地理信息、办公自动化、出版社管理等多个研究室。全所(院)现有工作人员460余人,其中副高级职称以上人员25人,博士22人,硕士180余人。总建筑面积近10000平米,各种仪器设备900余台套。

据王选回忆,方正在1988年创业时候,推出的三大产品RIP、NPM和BD书版排版语言,每个产品代码约在10万到15万行,而现在上市的产品程序量则差不多都在50万到100万行,方正现在在外面卖的软件总程序量要超过300万行。

天才的程序员可以在程序的某些模块体现出自己高超的艺术性和精巧性,但如此大规模的程序全靠一两个人去体现自己的技巧是无论如何也行不通的,实际上也没有那么多技巧需要施展。程序就是程序,代码而已,有时候被比喻为艺术,但那只是比喻而已。无论多么精彩绝伦的算法,对于未来庞大的工程性的软件来说都只能处于锦上添花的地位,而不再会是主角。

为了说明30万行代码和300万行代码的不一样,肖建国打了一个盖大楼的比方:“从理论上讲,一个人也能盖起一座大楼,只要这个人每天起早贪黑地干,一年不行两年,两年不行三年,总有砌下最后一块砖的时候,可现实中的大楼没有这样盖的,因为每座大楼都有最后交工的期限,软件更是这样,规定时间内不能上市,用户就会选择竞争对手的产品。”

“师傅带徒弟”式的作坊作业,让方正研究院数字媒体研究所所长助理郭宗明更多忧虑的是公司风险难以控制。“作坊式作业将希望全寄托在一两个天才程序员身上,一两个天才程序员发挥得好,做得可能比想象得还要好,但万一做不出来怎么办?万一这个人跳槽了怎么办?”大公司要讲可操作性,什么时候把软件写出来了,什么时候上市,都要使用倒记时的方式。而“作坊式作业不可能做到有计划,按时推出产品,只能把‘宝’全压在天才程序员的个人身上,太不安全了。”尽管郭宗明被王选称为天才程序员,但他一点儿都不想把公司的命运寄托在像他这样的天才程序员身上。

方正研究院文字图形研究所副所长李征认为,不仅不应该把命运寄托在一两个名程序员身上,甚至压根儿都不应该鼓励“明星制”。“今天的程序已经谈不上明星了,软件不等于程序,不等于代码,软件是一种商品。它需要有包装、使用指南、安装程序、培训、用户支持、升级、售后服务等等配件,单纯的程序是不能赚钱的,只有成为商品的软件才能够赚钱。中国软件产业发展之初由于软件过度匮乏,没有任何包装的程序也能够卖钱,而且,还能卖个天价;但那个时代已经一去不复返了。现在再好的程序,如果没有包装,没有市场推广一定难以获得大规模的利润,因此现在已经进入了由名软件公司取代名程序员的时代。”作为方正核心产品文字排版软件所的副所长,李征不写程序,他将自己定位在软件开发管理者的角色上。

衡量一家软件公司是“作坊式”的作业方式,还是“工厂式”的作业模式,并非只看它的规模,并非这个公司程序员少,就说它是软件“作坊”,那个公司有几百名程序员,就说它是软件“工厂”。是“作坊”还是“工厂”不能以人数而论,方正研究院的演进过程很能说明这个问题。

方正研究院的程序员每天都在增多,其直接目的并不是为了形成“软件工厂”,而是因为软件规模越来越大,功能越来越多,需要更多的程序员来写。很多程序员在一起工作不能自然而然地形成“工厂式“的作业模式,方正研究院几百名程序员聚集在一起,起初的情形用肖建国的话形容就是“由小作坊变成了大作坊,大作坊底下带了很多个小作坊 ”而已。

程序员多,产品是做大了,但由于程序员之间交流不够,技术思想、技术手段、实现方法互相配合得不好,致使写出的软件产生了许多许多的BUG。甲程序员的模块要和乙程序员的模块配合,因为没有规范和制度确保实现这种配合和沟通,结果造成:甲调用的时候仅凭假设想象乙是怎么做的,这种假想的结果是有时候做重复了,有时候做错了,最后,软件配合起来就不行。肖建国回想当年的情景颇有些感慨:“人员一多,就很难组织。1992、1993年,方正软件因此出现了大量的BUG,造成软件从1.0、1.11、1.12到1.03,版本满天飞,同样是1.1版,有今天的1.1版,有明天的1.1版,原因是软件错误太多,今天这个用户来抱怨,打个补丁改了,明天那个用户又提出了另外一个问题,再打一个补丁交给人家。程序员费了牛劲去改,软件版本满天飞,但错误还是一大堆。”所谓“软件工厂”即是一套克服这种协作混乱的管理方法。

王选眼中的好产品

能让王选看上眼的产品不多,即便是方正研究院的产品,王选认为好的也不多。要让王选说好,必须同时具备五个条件:

第一是要采用国际最先进的技术和设备开发的产品。“NPM推出以后之所以会风靡市场一个很重要的原因就是它在硬件上采用了当时刚刚面世的黑白高分辨率竖式大屏幕Viking,使中文报纸第一次在计算机上‘所见即所得’。”“1991年的8月30日,我在香港发现了一台高分辨率彩色照排机ECRM,价钱便宜,报社也能负担得起,赶紧把它引进到国内,1992年,用上这种照排机的方正彩色系统,给方正带来很大的利润,否则仅靠黑白,我们早就萎缩得一塌糊涂了。”

第二是要有自己的创新的产品。“方正RIP拥有9项专利,一项欧洲专利,8项中国专利。1989年,国外中文PS系统用激光打印机出300DPI低分辨率A4幅面样张,20分钟出一页,方正RIP一分钟出6页,而且精密照排与激光打印机输出合用一个RIP,取得了明显的压倒优势。”

第三是贴近用户的产品。“1988年的方正RIP在字型、倾斜、旋转、勾边、阴阳、半阴半阳上的变化,特别贴近当时用户希望版面漂亮、复杂的心理状态,从前的铅排从来也做不到这些变化。另外,NPM使用户能够看着屏幕直接修改报样,让报社感到耳目一新,为之一振。”

第四是要性能稳定的产品。“1987年的华光系统一开始不太稳定,后来北大开始生产照排系统,市场上有了竞争,潍坊和北大两个系统都稳定了。”

第五是在较短的时间里做出来的产品。“时间一拖长,市场就没有了。”

在王选眼里,方正1988年创业之初的三大产品RIP、NPM和书版都是符合上述五个条件的产品。

在方正研究院,符合这五个条件的产品,王选认为还有后来阳振坤主持开发的第六代RIP和第七代RIP以及开始由邹维负责,后来由郭宗明主持开发的点睛动画制作软件。但“方正也有不少产品不符合这五个条件,比如不贴近用户,推出以后改呀改呀改,拖晚了进度,失去了竞争力。有的产品缺乏‘一招鲜’,没有突出‘卖点’。”

在王选看来,1988年到1992年是方正的创业阶段,1993年方正集团成立,意味着方正创业完成,进入了新的阶段。“在创业阶段,方正人均利润极高,后来的人均利润一直没有超过创业阶段的人均利润和方正在一开始就有三个叫得响的产品有很大关系。”

协作难在何处

深知软件协作困难的肖建国认为,直到现在中国人还做不了像Windows95这样大型的软件。“给再多的钱也做不出来!软件组织机构越大越难管理,大到一定时候就无法控制了,就会出现管不了,失控的局面。”

为什么会有这么难?程序员多起来,自然就要有分工,有分工的时候,心态调整问题就会凸现出来:原先作坊式作业的时候,软件是一两个程序员写的,软件写完了,虽然在产权上这个软件或许不是自己的,但程序员心里会觉得这个软件就是自己的,对这个软件的感情就像对自己的儿子一样,关于这个软件一切成败荣辱都被看成是自己的,在这种心态下,程序员会不分白天黑夜地超常投入。而软件“工厂”模式的直接结果是一个软件由几十个、甚至上百个人写,软件写成以后究竟是谁的?有了荣誉是谁的?都不是太明确。同样,软件有点毛病也不专是哪个人的,而是大家的,既然是大家的事情,那就让大家来做,我为什么要多操那个心?但“大家”是一个概念,就像可以拿来一个苹果,不可以拿来一个“水果”一样,“大家”这个概念同样落不到实处,而对软件的责任心却必须落到实处。在这个问题上,肖建国承认“现在我们这里的人勤奋程度要比当初差一些 ”。

软件越做越大,越做越复杂是不可抗拒的世界潮流,一家软件公司要参与未来的竞争就必须有做大软件的能力,而做大软件就必需要有分工协作,决不能因为协作会降低个人的积极性,协作起来会遇到重重困难就否定协作,那样做等于因噎废食。因此,问题的关键是怎样在分工协作的模式下,最大限度地调动大家的积极性。

在肖建国看来,要调动程序员的积极性,首先要在分工上做适当的考虑。“不能咱俩合作,所有的设计我都做完了,叫你去编码,那样你可能会觉得很枯燥,会感到没有发挥你的创造能力。”在方正研究院提倡软件设计部分大家都参与,都有表达创造力的机会。

事物是历史的,方正的软件也不例外,有些软件最初就是一两个人写的,这一两个人会觉得这个软件是他的,会有很多感情,而后来加入开发的程序员则会面临心态融合的问题,后加入的程序员会觉得“我写这个模块,是分配给我的任务,不用想别的,那就做吧。”碰到这个问题,李征的方法是给后来的人创造机会,尽量将年轻人推到项目经理、测试经理和支持经理岗位上,让他们感觉到是他们在控制着软件的发展,感觉到是他们自己在做主。

沟通的时候,则鼓励大家把想法都说出来。尽管李征不鼓励名程序员,但他从来不把程序员看成只是完成代码的机器,而是千方百计试图将新加入的程序员变成集体的一分子,让他们感觉到共同完成的软件之中有着自己的一份功劳。

为了培养程序员对软件的感情,李征让程序员开展示会的时候去钉展台,当程序员看到自己写的软件有人买,听到用户在议论自己写的程序的时候,会自然而然地和产品发生关系。

无论在哪里钱都是非常重要的,但是做软件仅仅有钱是远远不够的,还需要培养程序员对企业、对产品的感情,这一点李征深有感触:“后进来的人是在为已有的软件加功能,是在维护软件,他并没有权改造软件,只有权改BUG,这样的工作很繁复,没有什么新意,具有牺牲的意义。”为此,李征坚持给这些程序员高待遇,评项目奖的时候,不分资历想办法多给他们一些荣誉。

机制上,郭宗明认为要保证软件做好了大家全有份,而不光是“头儿”的事。“我们的项目奖不会是平均的,但每个人都有份,同样,软件做不好,大家都‘砸’。”

分工协作遇到的另外一个大难题是沟通问题,解决这个问题最直接的方法是开会。方正研究院的会议现在越来越多,几个会议室总是塞得满满的。组内的人要经常交流,组和组之间、课题和课题之间、研究所和研究所之间要考虑接口问题、配合问题。开会是容易的,通过会议解决问题却是困难的。讨论交流难免会有争论,这个时候一定要有人站出来仲裁,否则,讨论下去永远不会有结论。

软件是工程,不是理论问题,所以,能够也必需通过仲裁的方式解决分歧,而不是通过进一步的研究分出到底谁对谁错,软件工程花不起研究的时间。 对此,肖建国把话说得明白无误:“软件不是算1+1,1+1你要说等于3,我非和你争不可,工程问题讨论起来,可能会讨论明白谁更高明,但很多时候是这样也行,那样也行,并没本质的差别,这个时候再固执地争论下去就没意思了。”

沟通困难也有程序员性格和习惯方面的原因,做技术的程序员很容易把自己已经做成的事情看得很简单,觉得没什么好讲,“很显然的事,你怎么就不明白呢?这还用解释吗?”是程序员面对请教最常态的反应,对这样的程序员,肖建国认为要教育他们愿意把自己的想法主动告诉别人,愿意去倾听别人是怎么想的。对于因为保守,不愿意将关键算法和技术告诉别人,关键时候要挟公司长工资的程序员,肖建国会将他开除。

为了从体制上保持充分的沟通,方正研究院将一个组的人数控制在10个人左右,以控制交流的难度,避免花在交流上的时间太多。

在肖建国看来,合理的协作方式应该是先做和别人的接口部分,后做一个人关在屋里也能做好的部分,原因是“自己的事可以通过自己的努力,通过自己加班赶进度,总之是自己的时间好控制,而控制别人总不方便。更为重要的是,自己关在屋里先做,做完以后,发现和别人配合不起来,不仅要返工,还会因为到底是谁的问题和自己的协作者发生分歧和矛盾。”

软件开发管理管什么

几乎所有的管理都先从摸得着、看得见的地方入手,方正研究院对软件开发的管理也不例外,他们首先抓的是文档。

在李征眼里,如果不写文档,就不是一个好程序员,所以,不管这个程序员多么天才,如果不写文档,我都不要。李征要求“飞腾3.1”的需求分析,就要有三个重要的文档:

第一份是用Excel做的一张大表,表上规定了:飞腾3.1要做多少个功能;每个功能的来源(是报社的需求,还是出版社的需求,或者是上一个版本遗留的问题);对每个需求的描述和优先级别,以及这些功能计划由哪些人来负责。

第二份文档被称为功能式样书。它负责一一对应地对上面那张大表上的每一个功能做进一步的说明,详细阐明功能设计方法和实现方法。如果飞腾3.1有1000个功能,就会有1000份这样的式样书,式样书很详细,有的会长达几十页。

第三份文档是用Project写的进度表,规定飞腾3.1什么时候做设计,什么时候写代码,什么时候提交单元测试。软件飞腾了!开发中每个里程碑都在这里做了规定。

为什么要写这么详尽的文档?肖建国的经验是“写软件不能仅凭嘴说,说完了容易忘,而且,讲话有二义性,软件不能有二义性,所以,该写的东西都要明确写下来。”肖建国另外一个经验是:“想清楚、说清楚和写清楚三者之间有很大的差异性,能写清楚才算把事情彻底搞透了,很多时候是以为自己想清楚了,其实并没有想清楚,所以,需要通过写出来检验一下。”

写这么多文档会不会耽误了写代码的时间?郭宗明认为写文档的时间必须舍得花。“从国外软件开发的经验看,做文档,写注释的时间,就是要比真正编码的时间长。”

郭宗明感觉广东话唱歌很好听,但他建议大家说普通话,因为方言没办法交流。“软件是大众化的产品,许多快捷键都是公认的,开发约定大家也应该共同遵守,界面是什么风格,变量怎样命名,浮点数怎样命名都要按既定的规范,程序员不能自己另起一套,自己另创一套可能对自己来说很好用,但别人就没有办法理解,没办法交流。”

为统一规范,方正研究院颁发了一套代码编写规范,而真正严格执行的都是那些饱经教训的程序员,因为只有他们才清楚为什么按规范写程序日后才不会出麻烦,不规范的程序员被李征称为“杀手”。“他们知道规范,也觉得规范很有道理,但真正写程序的时候,就会忘记,因为他们没吃够苦头。这个时候只能通过不断地检查他们的程序,强制他们执行规范。”郭宗明发现不写注释或者不按规范写注释的程序员,会坚决要求他补上,因为郭宗明很担心:“一旦这个程序员改做别的项目或者跳槽了,留下一堆天书一样的源程序,谁也看不懂,谁也无法接手,整个项目都会受到影响。”

软件编译应当说是相对容易的环节,但就是这个环节上,李征所在的文字研究所出现过好几次错误。最后,李征下决心制定了一个非常详细的编译规范,规定每一次编译都要按照这个规范执行。

这之后,李征觉得软件公司所做的每一件具体的事情都应该有规范,比方,刻光盘这样的小事,李征也专门找人写了一个规范流程。李征认为,事事有规范不仅可以避免错误发生,实际上还可以节约东撞一下西撞一下所浪费的时间。

规范是协同工作的基础,真正实现协同工作还需要制度来保证。方正研究院规定项目组的成员一个月必须坐在一起互相汇报一次。

相互汇报有三个显而易见的好处:一,可以增进了解,有效避免调用错误;二,关键性算法说出来,大家可以提一些建议,可能会使算法更加优化;三,可以增进协作的气氛。郭宗明觉得,很多人愿意留在方正不是为了方正的钱,而是为了方正的气氛。“保持心情舒畅很重要,大家彼此处得很好,发现问题会彼此提醒,一个人如果态度很差,大家就会尽可能地躲着他,能绕就绕过去,心里想的是,反正不是我的问题,跟我无关,能不说就不说了。”

要想沟通协作得好,肖建国认为要从最“根上”考虑,“理想的状态是,我们三个人一个课题组,进来第四个人的时候,我们三个都要参与面试,谁看不上眼,他都不能进来。”

方正研究院不会将一个模块交给一个程序员,三个月以后再去检查,而是在每一个关键点上检查他的工作,不停地对他的工作做需求评审、设计评审、代码检查、单元测试等等检查工作。

需求评审,发现问题,纠正了,后面就不会错下去,而等到三个月以后,程序员交上来一个乱七八糟的文档,一个不能用的程序,那时候再后悔就来不及了。

有非常自觉、非常优秀的程序员,但不能因此就相信所有的程序员都是自觉和优秀的,人总是有惰性的,尽管每个礼拜都要检查评审程序员的工作,好像对程序员不信任似的,肖建国还是坚持在每个关键点上检查工作,“否则,BUG就没有办法控制,时间进度也没办法控制。”

冲突会发生在哪些环节

用制度和条文将变化较小的事情规定下来是组织管理的基础,根据条件的变化,随时随地解决冲突则是管理的艺术。 管理得好与不好,全在处理各种各样矛盾冲突时所把握的火候。在方正研究院第一个需要解决的冲突是——选谁做项目经理。

做技术的人很难打心底服气谁,为了让大家都服气,方正研究院过去提拔干部的标准是让技术最强的人做项目经理,这种做法大家比较容易心平气和,但这样做的通病是技术最强的人往往没有管理和项目调控的能力,而软件大规模工程化研发最需要的恰恰不是一个技术骨干自己能多做多少,而是通过有效的管理,调动大家的积极性,把团队的力量发挥出来。

选管理型人才做项目经理,如何平衡技术骨干和做管理的项目经理之间的关系?方正研究院找到的办法是让技术骨干在待遇上得到平衡,让技术骨干和做管理的项目经理拿一样多工资,甚至更多,而且,在技术问题上充分尊重技术骨干的意见,负责项目管理的项目经理更多是管理软件开发进度和软件质量。在算法上,作为管理者的项目经理肯定不如很多年轻人脑子灵,开发人员想的是新技术,项目经理安身立命的依据则是丰富的开发经验,对软件的总体把握以及对于规范的清楚掌握,两者并不矛盾。

为什么大家都要攻击方正不符合标准

或许是因为国产软件在同国外软件较量中屡遭失败的缘故,舆论开始对中国人做软件、中国公司做软件的能力产生了彻底的怀疑,以至于面对像方正这样挑战国外软件所取得的最辉煌胜利也不敢轻易欢呼叫好了,相反,对于“方正是在靠不符合标准的产品垄断市场”的言论似乎更容易接受了。

实际情况是,早在Adobe推出PS语言之前,方正已经做了五代RIP,方正的前五代RIP当然没法符合标准,因为那个时候还没有标准。1993年,从第六代RIP开始,方正就接受PS语言,从此走向了开放标准。

肖建国说,因为方正在出版领域处于相对垄断的地位,所以,所有想进入这个领域的竞争对手都要先踢方正一脚,大家异口同声地指责方正不标准,再加上方正1993年之前的产品,的确不支持PS,这些老的产品有的用户还在用,没有升级,这样两件事凑在一起容易使局外人信以为真。

信以为真除了肖建国解释的这两个原因,还有一个有些人打心底就认为,国产的软件不可能和国外软件竞争的心理基础,所以,方正的成功就只能在能力之外找原因了。

Adobe推出PS语言对方正来说当然不是一件好事,有了PS,竞争对手就很容易在某个点上突破方正在中文出版领域的垄断防线。在这种情况下,方正凭借着原来的市场优势,搞封闭系统也是一条路子,这条路在一开始可能会走得很舒坦,方正产品不支持PS,可能逼着一些用户要用就全用方正的产品,但这条路会使方正的圈子越做越小。因为排版领域的所有软件,方正不可能全都做,比如方正根本没有什么产品能和CorelDraw这样的绘图软件竞争。既然方正的能力是有限的,方正总有力所不及的地方,那么,如果方正永远不接受PS,因为CorelDraw是基于PS的,CorelDraw的功能也就永远进入不了方正的系统,方正的出版物也就永远做不出CorelDraw所能够达到的效果。

封闭妨碍进步,结果是慢慢地萎缩,日本写研排版就是一个典型的例子。写研是封闭系统,曾经占了60%到70%的市场,《人民日报》海外版曾经用的就是写研系统,《星岛日报》全部是写研的系统,而后来在海外市场上,基于PS标准的方正系统取代了很多写研的系统。北大方正于1990年开始运筹支持PS语言的RIP研制,1991年初,决定直接瞄准Adobe刚刚公布的PS2标准,不再跟老的PS1。1993年10月上市的方正第六代RIP支持PS2,而当时国外一些照排大公司还没有来得及完成从PS1到PS2的转换,国内一些照排企业由于没有及时跟上PS潮流市场逐步萎缩,这就是方正在那个转折关头的历史。

既然大家都是基于PS语言的产品,已经刺刀见血真刀真枪地干了好几年,残酷可想而知,肖建国形容这种竞争的残酷时说:“假如我们的飞腾不是比国外同类产品好,我们就得死,假如我们的RIP不是比别人的RIP有优势的话,我们也得死。”在RIP上,国外产品没有任何的汉字门坎。方正要凭实力和他们拼,为了争取更加广阔的市场,方正把RIP技术和激光打印机融为了一体。中文排版和语言文化规范有一定的关系。现在凡是需要参加评比的书都必须要拿方正排,因为用国外软件排出的结果有许多不符合语言文字规范的地方。肖建国认为,方正系统之所以能在有了标准以后还能在市场上站住脚是因为“在标准出现之前,已经有了一些功底,掌握了一些该掌握的技术,保证了在新标准下做出的东西,仍然是地道的、有生命力的。”

面对未来的竞争,王选说,只要找到好的将才,中国软件完全可以和国外软件一争高低。关于资金和人才的关系,王选认为,只要有了好的人才,资金容易找到。

作坊时代已成为领导的技术骨干,肖建国会给他配一个负责管理的搭档。“技术骨干待遇提上来后,他会觉得当不当领导也没关系。‘我技术上很强,比管我的领导拿的还多。’这样心态就好了,说话也就心平气和了。”但肖建国同时希望技术骨干记住,“技术骨干所具有的本事是技术上的,行为上还要受管理者的约束。”

真正天才的程序员真要给他官做,他或许还要担心管理会耽误了他钻研技术的时间,所以,在保证待遇的前提下,天才程序员更需要的是给他一个难题来做,让他跨越那个难题。最优秀的人有一种征服的愿望,这个时候项目经理要信任他,不要去干涉他,放手让他去做,只要和他讲:“这个事情非常重要,我们希望你来解决,而且,我们信任你有这个能力”就行了。

技术和管理并不总是矛盾的,在方正研究院就存在着既是编程天才,又是优秀管理者的人,王选说肖建国、郭宗明都是这样的人,这样的人被王选称为最难得的将才。

无庸讳言,管理和技术更多地还是体现在冲突的一面,有的程序员钻研某一项技术会钻得很深,如果这项技术在整个软件里面用的并不是太多,这个时候的钻研就有可能影响整个项目的进度,这个时候项目经理就有责任把程序员从牛角尖里拽出来。另外,技术人员更注重细节,从用户方面考虑的要少,怎么让没用过“维思”系统,没有见过NPM的程序员较多地考虑飞腾向下兼容的问题,对李征来说是一个不小的挑战。

作为软件开发管理者的李征认为,软件公司最忌讳的是,一会儿让这个程序员做这个项目,一会儿让他做那个项目,而应当让他在一个方向上长期发展。“如果一个程序员在图像方面已经有了一些基础,今后凡是图像方面的工作都应该交给他做,目的是培养他在图像方面的兴趣,他做多了,经验自然就多了,反映出来就是能力的提升,成为这方面的专家,别人遇到这方面的问题都来请教他,他就得到了一种荣誉感和满足感。在文字研究所我们还培养了PS专家、BIG5专家,这样他们就会觉得自己有责任,有义务要把所擅长的领域做好。”

不但开发人员应该保持一个明确的定位,在李征看来,一个部门也应该有自己明确的定位。“文字所曾经做过一个MIS系统,事后我想过,从我们这个部门的定位来讲,文字所不该做这个项目,那是个大型数据库项目,数据库项目并非文字所的专长,为了这个项目,我们生生培养出了一批数据库的人才,做MIS系统的人才。这个项目是日本的项目,做得非常成功,但为此把我们最优秀的人都派进去了,如果把这些人都用到飞腾上,成效未必要比做这个系统赚得少,而且,这个项目如果让别的部门做可能做得更好,文字所的主要任务是做飞腾。”

部门经理和项目经理的冲突,从部门经理方面来讲,表现为部门经理把持不住自己,总禁不住越级去管理本应该由项目经理负责的项目,直接对程序员指手划脚,吩咐他们做这做那,这种工作的模式容易产生一系列的问题,项目经理会因此产生“那么,还要项目经理干吗?”的强烈抵触情绪。

合理的做法是部门经理发现问题先和项目经理讲,让项目经理去解决,如果认为项目经理解决不了或者不合格的话,应该把他换掉,而不是越俎代庖地越级替他做管理。

从项目经理方面讲,表现在资源和人力调配上。一个部门的人员、设备和资源都是有限的,而项目经理对好设备、好人员的要求却永远没完,满足不了要求的项目经理自然就会抱怨部门经理。

对于一家软件公司来说,最多的冲突发生在开发人员和市场人员之间。市场人员身处第一线,受用户抱怨最多,市场人员把问题反馈回来,最希望的是问题能及时得到解决。市场人员通常不太懂技术,所以,他们经常提一些不是那么合适的问题,这样的问题在开发人员看来是如此的愚蠢,开发人员心里经常很不耐烦地愤愤然然:“这种问题也来问我?”一来二去,开发部门和销售部门就产生了隔阂,销售部门不了解开发部门为什么这么迟钝,开发人员觉得市场人员不学无术。

开发人员容易是完美主义者,他们最关心技术,追求使用新技术,市场人员每天都要和用户打交道,最担心的是软件在运行中死机,稳定易用是市场人员最关心的两点。尽管市场人员不关心技术人员到底使用了什么新技术,但他总是希望软件的功能越强大越好,越早推出越好,而技术部门则会担心,功能多了可能要增加风险,强行加班加点可能会出现问题。

郭宗明承认,有时候软件升级和软件中所加入的新功能纯粹是为了市场竞争的需要,“竞争对手产品中有的功能,我们没有,用户就会问为什么没有?尽管用户实际上用不着那个功能。但用户会把这个问题当作一个谈价格的筹码向销售人员提出,这样市场人员就会逼着开发人员开发这些功能。”

程序员需要教育

提及软件“工厂”,提及规范管理,很容易让人将规范与天才对立起来,从而产生规范会不会扼杀了天才,会不会遏制创造的担心?

回答这个问题,先要弄清楚规范是什么?对于软件工程来说,规范是用来保证大规模多人协作开发的一些基本的前提,目的不是为了束缚程序员的天才,它的内容也没有伤害到最体现程序天才创造的算法上,在规范面前,程序员丧失的只是一些随意性。

有程序员觉得规范是一种约束,那是因为大家以前在没有任何规范的环境下随意惯了,突然来了一个规范一时难以适应而已。其实随意和天才,和创造完全是两码事。

如何克服随意性,将软件协作所必需的规范变成程序员的习惯,教育是必由之路。教育对程序员来说一开始可能是痛苦的,但是当程序员慢慢将规范变成习惯以后,也就不会觉得规范是一种约束了。

李征认为,要让程序员从心底接受规范,首先要对程序员灌输产品意识,要让每一个程序员都认识到:现在的产品靠个人的能力根本不能够完成,而是要靠管理、团结和正确的方法才能完成。“只有当每个程序员都从心底认为个人英雄的时代已经成为过去,靠一两个天才打天下的时代已经一去不复返了,他们才会自觉自愿地进行合作,而合作的前提就是必须要有规范,这样原来在程序员心中是条条框框的东西就转变为他自觉自愿的行为。”

实际管理中,郭宗明发现,程序员并非一味地排斥规范和管理,他们不接受的是不规范的管理,不接受的是由于很多漏洞造成很多摩擦的管理。

方正产品过去的毛病是不贴近用户,对于用户提出的改进意见,开发人员麻木不仁地回答是“设计就是这样的,没法改。”程序员之所以会这样说,是因为他们不理解自己一个小小的改进就能够给用户带来极大的方便,极大地提高效率。不理解如果不改,用户用得不高兴,慢慢就会对方正的软件失去信心。

为了让开发人员学会尊重用户的要求,尊重测试的意见,方正研究院安排程序员到用户那里去,而且是经常去,和排版员在一起待着,让程序员亲眼去看排版员是怎样用飞腾,了解排版员用了哪些操作,操作顺序是怎么样的。让程序员知道,用户那样用飞腾,有哪些不方便的地方,需要做哪些改进。假如,飞腾有1000个功能,程序员观察用户实际使用情况,发现用户只用到了200个功能,程序员就可以在这200个功能上精益求精。程序员如果这样写软件,用户必然会越用越满意,越用越高兴。

怎样才算一个好程序员

王选是科学家,但是当王选做完科研以后,他还亲手写了大量的微程序,方正第一代到第四代RIP里面90%的微程序都是王选写的,从这个意义上说,王选也是一名程序员。

写程序,王选坚信,测试只能证明错误的存在,不能证明错误的不存在,所以,“避免错误的最好的方式,就是从一开始就避免错误的引入。程序已经引进了大量错误,靠修改是改不出好程序的。”王选的这个认识源于1960年他在电子部738厂协作的时候,看到美国产的一台小型机全部逻辑设计只有一页纸,一页纸看懂了,这台机器就全部了解了。“从此,我养成了遇到任何事情,都先把它的逻辑关系先列出来,反复思考,而不急着动手去做的习惯。”

王选这种想清楚以后再动手的习惯和他当时设计的算法要以芯片的形式实现有很大关系,现在一个软件出现BUG,可以打个补丁修正,而王选那时候任何一个小的错误都会导致整个专用芯片报废,因此,王选每设计一个芯片,手稿都很厚。

王选说,他当时最累的是一方面要在第一线上拼命,“为一个程序调不出来,为一个隐蔽故障不能发现,要死要活。”另一方面又要做大量的组织管理的工作,“那种劳累是难以形容的,比我现在到外头做做报告,人大开会要累得多”。在王选眼里,好的程序员要拼命才行。

肖建国给好程序员定了四个标准:

一,要有必要的基础知识。“这里所说的必要的基础知识与开发数据库软件所需要的知识和开发字处理软件所需要的知识并不相同。”

二,要有一定的设计能力。“只告之要做什么,不用告之怎么做,就能做出来”的人被肖建国称为有设计能力的人,“怎么做,都要讲得清清楚楚,才能做出来”的人被肖建国看作是没有设计能力的人,肖建国反对只会写代码不会做设计的程序员。“日本少有漂亮的软件,是因为他们剥夺了程序员的创造能力,他们做软件的方式是设计完了,就要完全按照设计编码,日本甚至找一些高中生训练半年,就让他们做程序员,这样的程序员只会完全按照设计编码,不会做任何设计,这种程序员所做的工作其实就是把非常详尽的用自然语言写的设计文档翻译成计算机能够识别的语言而已。”在方正研究院,设计不是神圣不可侵犯的,编码的程序员不但在软件设计的时候,有权提自己的设计思想,在具体编写的时候,也可以提出自己的修改意见。

三,编码习惯要比较好。肖建国和王选一样,主张程序要想清楚以后再动手写。“这种写程序的方法可以把程序一把做成了,很多程序员写程序是想个大概就开始做,觉得车到山前必有路,做一部分,做不下去了,停下来想一想,这样想想做做,做到一大半后,往往会突然醒悟过来,呀!如果开始就那样做就更好了,但这个时候已经做了80%,再从头做,时间上不允许了,再说也不愿意费那个工夫,最后只能凑合凑合吧,这个时候程序已经写坏了。一般来说,当程序写完的时候,程序员会把所有的问题都想明白了,要不然他写不完,但到最后的时候再想明白,也没什么用了。”

四,要勤奋。“每天工作八小时的程序员不是一个好的程序员。写程序要有入迷的劲头,关键时候要废寝忘食。

郭宗明心目中的好程序员要具备五种精神:一是团结协作的精神;二是学习的精神。“程序员半年不学习就会落伍”;三是创新的精神;四是牺牲精神。“所有的程序员都愿意做新产品,但老产品已经卖了出去,就必须要有人为它做维护”;五是关键时刻要有几天不睡觉的“冲锋陷阵”精神。

抓“虫子”

大型软件要完全消灭BUG是不可能的,现在几乎所有软件公司发货的产品都带有BUG。因此,如何权衡按时推出产品和减少BUG之间的矛盾是问题焦点所在。软件公司有的时候明知道产品中还有BUG,但也不能花时间改了,因为再改,可能又会产生新的BUG,程序是相互联系的,动了手,脚可能会受到影响。更为重要的是时间不等人,竞争对手更不等人。

方正研究院处理这个问题的原则是:保证用户日常要用的功能不能带有BUG,保证不能有高级别的BUG,比如死机等用户绝对不能容忍的BUG。为了确保这两点,实在不行的时候,宁肯砍功能。

传统研究所为什么不行

肖建国认为传统研究所不行是体制的问题。“研究所成果难以变成社会财富最主要的原因是国家压根儿就没有要求科学家或者科研单位把成果商品化,研究所也就没有兴趣将成果商品化。国家向研究所投钱要的就是研究成果,要的就是一个论文、一个原理型的样机、一个结论。既然国家科研拨款的时候,要的就是这个东西,知识分子也爱做这个东西,做出来表明我有学问,搞出了成果,提个教授,当个院士。这样一来谁还会有兴趣去搞成果的转化?”

王选认为,一个newidea不自己动手实现,别人不可能帮你实现。“科学家必须自己动手将成果实用化,这样才能体会到自己的算法到底行不行。计算机界三十多个获图灵奖的人都是自己动手的人。”

王选当年写程序的时候,还没有将符号形式的微代码自动编译成二进制微代码的工具,王选就自己手工做这些工作。“1988年到1992年,方正的系统一出来一下子垄断市场,就是因为我们这些创业的人拼命,如果不拼命,产品不能按时拿出来,晚一年就完全是另一回事了。”王选认为,一个设计方案靠别人实现要比自己亲自实现慢得多。

科技创新实用化之后,细致的商品化和商品的进一步升级,就需要一支队伍来做。因为技术的成分在一个成熟商品里面占的比例会很小,激光照排的技术就是王选的9项专利,但要将这些专利变成激光照排系统,变成商品,却要有许许多多的人不停地去做那些非创造性的工作、工程性的工作。

肖建国认为王选身上的可贵之处是他身先士卒地做成果转化商品的工作,而且,还能组织别人做商品化的工作,而很多科学家,不愿意做这些事情。“很多教授会认为,做商品干吗?为了赚钱,赚钱干吗?铜臭!我是教授,这个成果做完了,还要去忙下一个成果呢!我这一辈子要多出几个成果!”

治本的办法当然是尽量减少程序中的BUG,方正研究院的方法是抓住两头:一头是加强应用研究,留出时间深入用户充分了解用户的需求,而不是急着先把软件做出来。在这方面有过教训的肖建国深有感触地说:“不成熟的软件到了用户手中后,用户会提出一大堆问题,软件改了再改,不停地往上打补丁,补丁来补丁去,补丁多了,软件就面目皆非了,原来设计的结构就不适应了。另外,在用户的抱怨声中,现改软件势必很仓促,那个时候软件的质量是很难保证的,还谈什么消灭BUG。”

另一头是加强测试。软件人员一般都是比较自负的,总觉得自己写的软件没毛病,写完软件后自己测一下,没毛病,更会认定自己写的程序没有毛病,但问题往往会出在用户和程序员使用软件的方法、方式不一样上。飞腾是程序员做的,程序员就觉得飞腾应该这样用,但用户跟程序员想法会不一样,用户认为飞腾就应该那样用,因为没想到用户还会那样用软件,测试的时候没测,潜藏的问题就发现不了。

根据郭宗明的经验,软件测试很多时候要做极限测试才能发现技术上的隐含错误。比如,因为申请内存没有释放而造成BUG,由于现在计算机内存非常大,测一次根本发现不了问题,只有反复使用这个功能,无数次申请内存,机器才会出现内存不够,从而把问题暴露出来。

开发和测试是一对矛盾,开发想的是消灭BUG,没有BUG是开发者的光荣;测试想的是发现BUG,发现软件中的BUG是测试人员的骄傲。所以,方正研究院的测试部门和开发部门是相互独立的两个部门,如果开发部门和测试部门是同一个领导,这个领导就很难协调这两个针锋相对的矛盾。李征称,1998年研究院最为成功之处,就是将原来只有十几个人的测试队伍发展成了70个人的测试中心,培养了一批对产品十分熟悉的测试专家。另外,在方正研究院测试不仅是测试部门的事,开发人员自己也要做单元测试,郭宗明说:“自己写的程序自己最清楚。”为了加强开发人员的责任心,测试部门的测试不仅要说明错误在哪里,还要说明错误是哪个程序员引起的,而这些BUG最终要和开发人员的工资、荣誉挂钩。

最近方正研究院的墙上贴满了年底之前通过ISO9000的标语,方正会在软件工程化管理的路上坚决地走下去,他们已经得到了两年来艰苦管理磨合的回报——1997年夏天推出的NTRIP和1998年推出的飞腾,一出门就站得住脚,软件质量明显上升,1998年新推出的“点睛”系统在中央电视台全面取代了国外最著名公司出品的同档次的动画软件,为方正研究院进军数字媒体市场吹响了号角。

采访手记

王选接受《企业方法》的采访,纯粹因为研究院年轻人的缘故,他觉得方正研究院现在的管理是年轻人在负责,他自己不仅在六年之前退下了技术的第一线,两年之前也退出了实际管理工作,所以,现在让他谈软件工程,谈软件开发管理实在勉为其难。

王选讲:“谁都知道,技术开发一定是小年青最行,但管理也要相当的年轻化,并不是每个人都明白。像我这两年社会活动相当多,占了一半以上的时间,既然我已经不在第一线上了,我就不决策,了解得少了以后,就会乱出主意,过去我决策大都正确,是因为我对自己所要做的事情非常熟悉,现在仅靠看一些文献,我能有什么发言权?”

因此,外面开会要王选谈发展的前景,王选一般都拒绝。“没有实践的经验,没有实践的体会,我不愿意凭空去吹,逼得太紧,我也就是一般地应付应付。”《企业方法》逼得也很紧,真正逼到管理的细节,王选就避而不答,最后,王选只说了一句,“这些事情让肖建国他们和你谈,他们比我更清楚。”

作为领导人,能够像王选这样知道自己在什么时候发挥什么样的作用,不知道算不算做企业的重要方法。让贤是企业吐故纳新的重要环节。

王选心里很清楚,现在社会给予他很高的荣誉是因为“人家信任我的过去”,“我过去确实也做出了一些成绩。”王选最为明智的一点是他将自己能“让年轻人取代自己”也看成自己的成绩,这是老一辈创业者将年轻人推到前台重要的心态调整方法。

回首从前,王选觉得自己更多的是一名技术专家,不是一位管理的专家。“我个人更类似英特尔第一任创业者诺亦斯,我希望肖建国能成为方正研究院的格鲁夫,成为管理型的领导者。”

关于方正研究院的过去,王选想写一篇文章,题目是《创业难,守业也难》。“创业的时候,需要有非常突出的创新。1988年,方正书版主要竞争对手的技术人员看完我们刚刚问世的产品,感觉需要花两年时间才能赶上方正,考虑到两年之后,方正在技术上又会迈上新台阶,竞争对手就放弃了和方正在专业出版领域的竞争。创业的确需要像这样别人一时难以企及的创新,但创业只要抓住一点,取得创新的突破就能成事,而守业则必须把握住不间断的转折关头,1992年彩色系统的转折;1993年PS的转折都让我们捏了一把汗,现在我们的彩编系统有140家用户,占了95%的市场,但竞争对手突然在Notes平台上追了上来,方正又面临着在Notes平台上和竞争对手展开残酷的竞争。”

王选希望方正研究院能够在以肖建国为代表的年轻一代领导下守住业并取得更大的发展。方正研究院要守住自己的业,今后主要恐怕要靠管理,而不再是爆发性的创新,这是小公司和大公司,创业和守业的根本区别。

管理并不神秘,它具体到工作的每一个细节。比如,肖建国想通过一次会议达成一项共识,开会之前肖建国就会考虑好,自己的这个提议,哪些人可能会提出哪些反对的理由,这个反对理由提出以后,自己该如何应对。有时候肖建国会设计好提议提出的方式,让反对的意见根本张不开嘴。另外,在开会之前,肖建国还会仔细考察这个提议要通过必须过哪些人的关,为此,他会先开一些小会,和关键人物事先沟通。

当这一切没策划好的时候,肖建国不轻易开会,因为肖建国知道,那样做的结果要么是强行通过,留下后遗症;要么是自己的提议让大家给否了,下次想再开会通过这个提议就更难了。会这样开会的肖建国,想来不会让王选失望。

1998年初夏,记者采访浪潮国强软件公司总裁王虎的时候,正值浪潮进行软件业务重组,要将原来分布在集团各部门的软件业务和人才集中起来划归国强管理,目的当然是摆脱过去单兵作战的作业方式,在开发上形成合力。王虎当时说,他最缺的不是资金,不是人才,而是一套管理规模软件公司的方法和经验。就那一刻,我产生了采访方正研究院的念头,当时的这个念头后来衍生出了整个《企业方法》专栏的构想。

来源:《企业方法》

作者:刘韧