软件是工程,不是理论问题,所以,能够也必需通过仲裁的方式解决分歧,而不是通过进一步的研究分出到底谁对谁错,软件工程花不起研究的时间。 对此,肖建国把话说得明白无误:“软件不是算1+1,1+1你要说等于3,我非和你争不可,工程问题讨论起来,可能会讨论明白谁更高明,但很多时候是这样也行,那样也行,并没本质的差别,这个时候再固执地争论下去就没意思了。”
沟通困难也有程序员性格和习惯方面的原因,做技术的程序员很容易把自己已经做成的事情看得很简单,觉得没什么好讲,“很显然的事,你怎么就不明白呢?这还用解释吗?”是程序员面对请教最常态的反应,对这样的程序员,肖建国认为要教育他们愿意把自己的想法主动告诉别人,愿意去倾听别人是怎么想的。对于因为保守,不愿意将关键算法和技术告诉别人,关键时候要挟公司长工资的程序员,肖建国会将他开除。
为了从体制上保持充分的沟通,方正研究院将一个组的人数控制在10个人左右,以控制交流的难度,避免花在交流上的时间太多。
在肖建国看来,合理的协作方式应该是先做和别人的接口部分,后做一个人关在屋里也能做好的部分,原因是“自己的事可以通过自己的努力,通过自己加班赶进度,总之是自己的时间好控制,而控制别人总不方便。更为重要的是,自己关在屋里先做,做完以后,发现和别人配合不起来,不仅要返工,还会因为到底是谁的问题和自己的协作者发生分歧和矛盾。”
几乎所有的管理都先从摸得着、看得见的地方入手,方正研究院对软件开发的管理也不例外,他们首先抓的是文档。
在李征眼里,如果不写文档,就不是一个好程序员,所以,不管这个程序员多么天才,如果不写文档,我都不要。李征要求“飞腾3.1”的需求分析,就要有三个重要的文档:
第一份是用Excel做的一张大表,表上规定了:飞腾3.1要做多少个功能;每个功能的来源(是报社的需求,还是出版社的需求,或者是上一个版本遗留的问题);对每个需求的描述和优先级别,以及这些功能计划由哪些人来负责。
第二份文档被称为功能式样书。它负责一一对应地对上面那张大表上的每一个功能做进一步的说明,详细阐明功能设计方法和实现方法。如果飞腾3.1有1000个功能,就会有1000份这样的式样书,式样书很详细,有的会长达几十页。
第三份文档是用Project写的进度表,规定飞腾3.1什么时候做设计,什么时候写代码,什么时候提交单元测试。软件飞腾了!开发中每个里程碑都在这里做了规定。
为什么要写这么详尽的文档?肖建国的经验是“写软件不能仅凭嘴说,说完了容易忘,而且,讲话有二义性,软件不能有二义性,所以,该写的东西都要明确写下来。”肖建国另外一个经验是:“想清楚、说清楚和写清楚三者之间有很大的差异性,能写清楚才算把事情彻底搞透了,很多时候是以为自己想清楚了,其实并没有想清楚,所以,需要通过写出来检验一下。”
写这么多文档会不会耽误了写代码的时间?郭宗明认为写文档的时间必须舍得花。“从国外软件开发的经验看,做文档,写注释的时间,就是要比真正编码的时间长。”
郭宗明感觉广东话唱歌很好听,但他建议大家说普通话,因为方言没办法交流。“软件是大众化的产品,许多快捷键都是公认的,开发约定大家也应该共同遵守,界面是什么风格,变量怎样命名,浮点数怎样命名都要按既定的规范,程序员不能自己另起一套,自己另创一套可能对自己来说很好用,但别人就没有办法理解,没办法交流。”
为统一规范,方正研究院颁发了一套代码编写规范,而真正严格执行的都是那些饱经教训的程序员,因为只有他们才清楚为什么按规范写程序日后才不会出麻烦,不规范的程序员被李征称为“杀手”。“他们知道规范,也觉得规范很有道理,但真正写程序的时候,就会忘记,因为他们没吃够苦头。这个时候只能通过不断地检查他们的程序,强制他们执行规范。”郭宗明发现不写注释或者不按规范写注释的程序员,会坚决要求他补上,因为郭宗明很担心:“一旦这个程序员改做别的项目或者跳槽了,留下一堆天书一样的源程序,谁也看不懂,谁也无法接手,整个项目都会受到影响。”