郭宗明心目中的好程序员要具备五种精神:一是团结协作的精神;二是学习的精神。“程序员半年不学习就会落伍”;三是创新的精神;四是牺牲精神。“所有的程序员都愿意做新产品,但老产品已经卖了出去,就必须要有人为它做维护”;五是关键时刻要有几天不睡觉的“冲锋陷阵”精神。
大型软件要完全消灭BUG是不可能的,现在几乎所有软件公司发货的产品都带有BUG。因此,如何权衡按时推出产品和减少BUG之间的矛盾是问题焦点所在。软件公司有的时候明知道产品中还有BUG,但也不能花时间改了,因为再改,可能又会产生新的BUG,程序是相互联系的,动了手,脚可能会受到影响。更为重要的是时间不等人,竞争对手更不等人。
方正研究院处理这个问题的原则是:保证用户日常要用的功能不能带有BUG,保证不能有高级别的BUG,比如死机等用户绝对不能容忍的BUG。为了确保这两点,实在不行的时候,宁肯砍功能。
肖建国认为传统研究所不行是体制的问题。“研究所成果难以变成社会财富最主要的原因是国家压根儿就没有要求科学家或者科研单位把成果商品化,研究所也就没有兴趣将成果商品化。国家向研究所投钱要的就是研究成果,要的就是一个论文、一个原理型的样机、一个结论。既然国家科研拨款的时候,要的就是这个东西,知识分子也爱做这个东西,做出来表明我有学问,搞出了成果,提个教授,当个院士。这样一来谁还会有兴趣去搞成果的转化?”
王选认为,一个newidea不自己动手实现,别人不可能帮你实现。“科学家必须自己动手将成果实用化,这样才能体会到自己的算法到底行不行。计算机界三十多个获图灵奖的人都是自己动手的人。”
王选当年写程序的时候,还没有将符号形式的微代码自动编译成二进制微代码的工具,王选就自己手工做这些工作。“1988年到1992年,方正的系统一出来一下子垄断市场,就是因为我们这些创业的人拼命,如果不拼命,产品不能按时拿出来,晚一年就完全是另一回事了。”王选认为,一个设计方案靠别人实现要比自己亲自实现慢得多。
科技创新实用化之后,细致的商品化和商品的进一步升级,就需要一支队伍来做。因为技术的成分在一个成熟商品里面占的比例会很小,激光照排的技术就是王选的9项专利,但要将这些专利变成激光照排系统,变成商品,却要有许许多多的人不停地去做那些非创造性的工作、工程性的工作。
肖建国认为王选身上的可贵之处是他身先士卒地做成果转化商品的工作,而且,还能组织别人做商品化的工作,而很多科学家,不愿意做这些事情。“很多教授会认为,做商品干吗?为了赚钱,赚钱干吗?铜臭!我是教授,这个成果做完了,还要去忙下一个成果呢!我这一辈子要多出几个成果!”
治本的办法当然是尽量减少程序中的BUG,方正研究院的方法是抓住两头:一头是加强应用研究,留出时间深入用户充分了解用户的需求,而不是急着先把软件做出来。在这方面有过教训的肖建国深有感触地说:“不成熟的软件到了用户手中后,用户会提出一大堆问题,软件改了再改,不停地往上打补丁,补丁来补丁去,补丁多了,软件就面目皆非了,原来设计的结构就不适应了。另外,在用户的抱怨声中,现改软件势必很仓促,那个时候软件的质量是很难保证的,还谈什么消灭BUG。”
另一头是加强测试。软件人员一般都是比较自负的,总觉得自己写的软件没毛病,写完软件后自己测一下,没毛病,更会认定自己写的程序没有毛病,但问题往往会出在用户和程序员使用软件的方法、方式不一样上。飞腾是程序员做的,程序员就觉得飞腾应该这样用,但用户跟程序员想法会不一样,用户认为飞腾就应该那样用,因为没想到用户还会那样用软件,测试的时候没测,潜藏的问题就发现不了。
根据郭宗明的经验,软件测试很多时候要做极限测试才能发现技术上的隐含错误。比如,因为申请内存没有释放而造成BUG,由于现在计算机内存非常大,测一次根本发现不了问题,只有反复使用这个功能,无数次申请内存,机器才会出现内存不够,从而把问题暴露出来。