记者/闫辉
廖恒毅简历:
1989年 毕业于成都科技大学应用数学系。
1989年 任北京四通集团公司开发部经理,领导开发了一系列中文软件和数据库管理软件。
1993年 任北京新天地软件公司总经理,领导开发了曾获得过一系列国际国内大奖的著名软 件产品“中文之星”2.0版本,由此成为中国软件界的著名人物。
1996年 加入微软(中国)有限公司,担任技术协作部总经理一职。对推动全国的独立软件 开发商开发基于Windows和SQL Server平台的产品、推动中国Internet技术的发展做出了重要的贡献。
2000年 正式加盟佳软公司,任总工程师/副总经理,全面负责公司物流管理软件的策划和 设计,成为佳软在公司战略研究和技术开发方面的核心。
很多人以前没有听说过廖恒毅的名字,包括我。但当你了解了他的过去之后,你会很惊讶的发现,他也是中国程序员具有代表性的人物。虽然同样是以中文之星起家,他没有王志东在网络大潮中的呼风唤雨,而仍然在一个软件公司;同样是非凡的第一代程序员,他也没有像求伯君那样有时间去学开飞机,而仍然在构筑自己的程序代码。我们看到的是一个飘忽不定的技术狂人在书写自己的程序人生。
真正知道廖恒毅,是因为拼音加加输入法,我当时从网上下载安装使用之后,感觉就是这个软件如此体贴用户,很多功能是期盼已久的,就象是为自己量身定做的一样,因此立刻把电脑中其他输入法都删除了,后来又在网上花了30元注册了一份。拼音加加也是我唯一通过网络注册的软件。但后来,拼音加加的支持网站六合源不见了,并听说廖恒毅到了佳软,一个起步很早,但并不出名的软件公司。为什么他会这样选择,做这些年的开发有哪些体会,怀着许许多多的疑问,最终在佳软采访了担任CTO的廖恒毅。
《程序员》:微软是程序员梦寐以求希望加入的公司,而您在微软工作三年之后便离开的,您能谈谈当时为什么要离开微软吗?另外当大家都认为拼音加加是一个非常好的产品的时候,您又突然进入了企业管理软件领域,这其中又有什么原因呢?
廖恒毅:我觉得三年对于一个人来说就是一个标点,研究生也就读三年,在一个地方干上三年就把该学的学会了,接下来如何发挥创造力会变得更重要。我离开微软的时候应该是网络经济一步步热起来的时候,当时想法并不是特别明确。主要有几件事准备做一下:一个是拼音加加输入法,一个是网上证券系统,还有一个是基于企业的管理软件。拼音加加和五笔加加这种作品对于我来说,可能轻车熟路一些,因此能够很顺利地推出了相应的产品。网上证券系统这个产品当时也已经做出来了,而且不少人看了之后,也认为非常不错。但后来发生了一些事情,并由此改变了我对这些产品和市场的思路。
事情是这样的,在六合源公司成立之后,我们把拼音加加放在网上注册,30元一个,但注册情况很不理想。当时有个用户写了封邮件,其中说:“你这个产品很不错,但30元太贵了,贵得实在是不可接受,说实在的,为了支持你,如果你把注册费降低到1元的话,我立刻就注册,也不用你免费了!”当时我看到这封邮件,也没有回信,一口气开着车到了大山里,坐了好久。想想即使这个软件卖一百万份,这个企业也没有办法生存。所以自己便对通用的、面向个人的软件市场灰心了。再加上当时和佳软有一定的合作关系,在接触中发现,国内企业对软件的需求很大,但企业管理软件的整体开发水平很低,正因为看到了这些市场需求和机会,我开始倾向于了企业管理软件市场。
最终我把整个战线彻底转向了企业管理软件,一方面因为佳软融资成功,更重要的是当时我遇到了一帮能够优势互补并且志同道合的朋友。他们当中有管理人才,也有对市场精通的,而这些朋友的长项也正是我所欠缺和需要的,所以选择加盟了佳软公司。
《程序员》:我们看到佳软的产品是用VB开发的,而您现在使用的开发工具也是微软的C#,是不是表明您对微软仍然有一种情结呢?
廖恒毅:可以这么讲的。现在微软推出了.net和C#,我认为这些开发工具对程序员来说,简直就是梦想中的一种语言,以前是不敢奢望拥有的,但现在实实在在地放在你面前,所以我们公司产品的下一版本会完全改为C#开发。对于一个技术人员,很重要的一条便是要看跟随谁,跟随什么样的技术对自己的发展有利。IT市场变幻很快,就更要确定跟随谁,大家都知道微软做得好,为什么不跟随呢!有人说,我们就是要反对微软的霸权,反对微软的垄断。而我认为反对垄断和霸权那是搞政治的人做的事情,作为一个程序员,首先要注重的是自己的事业。人做事情要冷静地去判断,其中不要掺杂个人的情绪。就象炒股票一样,有价值就要买进,不管这支股票是不是你喜欢的。
《程序员》:国内做企业管理软件的公司非常多,从技术方面,您是如何提高佳软竞争力的呢?
廖恒毅:我个人并不是一个害怕竞争的人,越是有竞争的领域,我越愿意去拼一下。但反过来说,如果这个领域最终没有收益的话,那做也就没有什么意义了。因为收益一方面是对工作的回报,一方面也是对未来发展的要求,没有收益就没有向前发展的动力。说实在的,当年网络经济很火的时候,有太多的机会摆在我面前,但我一直没有动,为什么?因为我实在想不明白盈利点和发展模式等问题。所以无论其他人如何游说,我一直按兵不动。可以这样讲,一方面我可能错过了一些机会,但也可以说正因为如此,我没有在这个大潮中摔下来。
在企业管理软件领域,现在有一些比佳软大很多的企业,但我一直认为有很多超越他们的机会。关键在于如何深入的理解和抽象企业管理软件。企业是千差万别的,企业对软件的要求也是千变万化的,如何去适应各种不同的变化,这是首先需要解决的问题。
事实上,很多管理软件都是刚性的,什么是刚性呢?就是软件本身不能适应随着企业改变而改变。在企业发展或者模式改变之后,要求发生了改变,如何适应这些要求呢?于是很多公司的解决办法就是在原有的软件中又增加了更多刚性的适应需求的部件。实际上,这些公司的产品把很多可以抽象出来的模块固化到程序中去了。如果用户要提改变的要求,那没有办法,只能修改源程序。
而我的软件设计思想是:首先要抽取企业管理软件的共性,然后设计出一种模型,进而将这种模型由实施人员根据用户的需求去重构。也就是说,我是在设计平台,而最终用户见到的软件是有人通过我的平台再开发的软件。这些人更多的是要懂用户的业务需求,而并不需要知道程序的结构。利用这个平台,用户只需要很简单地修改外部的可修改项就能达到需要的效果。通过这个模型和平台,我们能够完全贴近和符合用户的要求,而不是强制的去适应用户的硬性需求。
当然为了搭建这样一个平台,在一开始付出的代价也是非常高的。我们第一个版本要实现的功能,如果换作其他公司写,可能五、六个月就完成了,而我们写了一年。但其他公司的产品出来之后,就已经固化成那个样子了,而我们的产品可以随时更改。我敢说,下一步版本出来时,我们的代码量可能只有别人的几分之一,这就是抽象的结果。
其实这种设计思想可以延伸到各类软件的开发,我认为:每做一个软件其实都在搭建同一类软件的平台系统,而基于这个平台,可以做出千变万化的最终产品。这样才能够提升自己的高度。
《程序员》:在很多场合,您特别推崇企业管理软件模块化的理论,而软件模块理论和面向对象的编程有很多相似的地方,是不是从面向对象的编程理论中得到了很多启发呢?
廖恒毅:在软件开发过程中,我认为软件工程其实就是软件模块和模块之间的编程,各个模块之间如何定义各种接口。实际上,每个模块内部又可以分为很多的小模块。我们要做的就是如何使定义更加合理,更加高效。从这个角度讲,无论多么大的公司,写出多么大的软件,其本质是一样的。当然如果你要做一个非常复杂的软件的时候,需要很大的魄力和综合的组织分析能力。
现在编程,其实一切都是对象,如果不用面向对象的编程方法,基本上写不出好程序来。一个程序员如果还站到讨论语言优劣的层次上,他本身就还没有理解面向对象的概念。其实面向对象是时时刻刻的思想体现,它本身根本同语言无关。如果领会了面向对象的方法,就是用汇编,用机器码也能编写,但如果不懂面向对象的方法,就是用Java,用C++写出来也不是真正面向对象的程序。
有一次我给齐鲁软件的高层技术人员讲基本的程序设计理念。讲完之后,有人问:"你讲的是数据库,但怎么和面向对象的概念这么相近呢?"我说,你提这个问题,说明你真的听懂了。其实我讲的正是面向对象的概念,但却是通过关系数据库的形式来表现的。当你彻底明白了面向对象的概念之后,其实可以把任何的东西都看做对象来处理。
《程序员》:在您的拼音加加产品中,有很多方面非常易用和适合用户的需求,而佳软的产品用户的反馈也很好。您认为,在设计软件的时候,如何更好的体现易用性和预防Bug呢?
廖恒毅:如何做得更易用,还没有一个通用的原则。但如果一个软件不易用的话,那就不要用了,因为软件本来就是为了提高效率的。做软件开发时,一定要使劲地想:如果自己是用户,如何才能用的舒服,并把它作为一个极端重要的事情去想,然后再去考虑内核的程序如何编写,只有这样才能做易用性的产品。举个例子,我买了一个很好用的便携式硬盘,但它的盖子和主体是分体的。我就可以说,这个东西不易用,因为对于一个便携式的产品,盖子是很容易丢失的。
我认为,编程的技术,实际上就是数据和界面分离的技术,因为所有的程序最终都要用数据来表达,而给用户使用的界面需求是千变万化的。所以最好的方法就是把数据和界面分离开来。数据是一套独立运行的体系,而界面只是基于数据的表现部分。而且也只有做到这样,才有可能考虑用户的易用性问题。
对于防止Bug,其实有一套完整的编程体系来保证代码稳定,佳软在这方面做了很多工作。包括把软件分模块也是一个防止Bug出现的非常有效的方法,因为这使得Bug没有传染性了,不会因为一个Bug的产生造成系统的瘫痪。同时在模块和模块之间应该有检测代码,一个模块接受输入数据的时候如果能够检测改输入的数据是否存在问题,一旦有问题,就立刻能够产生反馈并解决问题,这样就能够将Bug的产生降低到极低的水平,使系统稳定性高一个等级。
《程序员》:您在微软也做过开发,在国内也做开发,从感受上讲,您认为国外和国内的开发有些什么样的区别?
廖恒毅:我觉得很多感受是无法用语言来表达的,更多的是个人的感觉,进而慢慢地整理成思路。做市场的人总是要为自己要做的事情找一个说法,但对于做开发的人,更多时候强调的是一种领悟。
很多转变并不是表面的巨大改变,而是一种基本思维方式的改变,一种基于环境的着眼点的改变。在美国更多的是一种氛围,一种高层软件开发的氛围。比如大家都知道玩杂技,就要到吴桥去,聊足球,去广东梅县会很多知音。其实软件开发也是这样的,正是因为那里所有的人都在从一个很高的起点上做这些事情,探讨这些事情,并在探讨中产生了众多的想法和实施的机会,所以美国软件业才能不断快速发展。而我们国内基本环境是比较低的,偶尔有一两个有悟性的人存在,没有一种氛围,互相之间也很难激发出更好的编程开发套路和想法。
《程序员》:软件开发是发展和竞争最为激烈的领域,您认为如何使自己不断更新知识,跟踪软件潮流呢?怎样才能算是成功呢?
廖恒毅:我觉得是这样,人学任何东西,很多时候就是“感悟”,而不是死板学习。在工作的过程中,其实最关键的是考验你的思维能力,对事物的理解能力,对本质的领悟能力。有很多人问我:“你现在还在写代码吗?”说实在的,如果我不写,我根本不可能去提炼。只有在做的过程中,才可能去抽象,才能找到感觉。只有有了感觉,才能悟出更高的境界。所以我会永远保持自己去写代码的习惯。当然,同类的代码我只写一遍,可能写得很粗。但是我一定要写。
对于成功,可以分为三种:成功者,小成功者和大成功者。他们之间的差别在那里?我认为,当别人感觉你已经达到了一定发展阶段的时候,你仍然能够改变和突破自己,那有可能成为小的成功者。而要想成为大的成功者,就是要在已经小有成就,别人认为你已经成功时,仍能突破自己。作为一个普通的程序员,要想成功,就要不断地去改变自己的思维模式,不停的感悟。
《程序员》:拼音加加这么一个出色的产品,您就放弃了吗?
廖恒毅:事实上,当时做的时候,拼音加加就是做公司的副产品。我们做这个产品的时候,一般就是在闲谈中产生一些很好的想法,然后将之实施。但从我内心来讲,我对中文输入法还是有非常深厚的感情,到春节前后,拼音加加3.0版应该会推出。3.0版本会支持短句,但又不完全是整句输入,并且还会增加一些智能特性,比如提醒功能。现在也有一些合作伙伴希望去做一些市场,只是我一直没有答应。
采访后记
廖恒毅的桌子上没有笔记本电脑,但有两台屏幕很大的电脑,每一个电脑的屏幕上都是开发工具启动的界面,代码写了一半。“我不善于用文字来表达”这句话廖恒毅说了好几次,同时手不时触动键盘来去掉不断出现的屏幕保护程序。为了证明自己的观点,他还把屏幕扭过来,演示他刚写的基于C#的程序代码:用一个完全独立的文本文件控制程序的界面显示。
看到我们的《程序员》杂志,仔细地翻了一遍,忽然他的眼光停到了一句话上,那句话是“三十岁还能不能编程?”这时我听到他嘴中嘟囔了一句“切,这是谁说的啊。”
廖恒毅非常喜欢++,在他的内心,也一定把C#看做了四个+的结合。不断地突破自己,正是他能够一直超越常人设想,感悟更多的基石。而从中文之星到微软,从微软到六合源,从六合源又到佳软,可能也正是他成功理论的最好诠释吧。