用友的程序员文化
——《程序员》对邵凯专访
邵凯,股份公司董事、高级副总裁、NC事业部总经理。获哈尔滨工业大学计算机理学硕士学位,1991年加入用友,曾任公司副总裁、产品研发中心总经理、质量总监、信息总监。邵凯先生担任的社会职务有北京软件行业协会常务理事,国家标准化委员会TC151技术委员会委员。
用友软件做为首家国内主板上市的软件公司,为中国软件产业的发展注入了新的活力。这让我们不能不将关注的目光投向这个在中国算的上“巨无霸”的软件公司,当然我们探求的不是其资本运营方面的内幕,而是用友公司内的程序员文化。本期我们就将带着您走进位于北京上地信息产业基地的用友大厦,直面用友的高级副总裁邵凯先生,看看他眼中的用友软件的程序员文化和他对程序员发展的看法。
用友的成功体现在程序员身上,有三个方面:专注财务和管理软件领域、用户需求第一、强调程序可靠性。
《程序员》:用友软件现在是国内数一数二的软件公司,也成为国内软件也的一面旗帜,您是如何看待用友的成功和程序员的关系的呢?
邵凯:用友这些年的发展还是比较成功的。做为用友公司的高层管理人员,我认为,首先,用友很专注。最初几年我们只专注在财务软件领域。从1988年开始开发财务软件到现在已经有十几年的时间。很多核心程序员写了财务软件的很多版本,程序代码也非常稳定。用友的产品我从1991年开始接触,后来经历了众多的版本,到现在负责的NC,我感觉每一个版本里面都集成了以前版本的核心和思想,每升级一个大的版本,软件都有一个大的提高,公司也就发展到一个新的阶段。
第二就是将用户视为上帝。很多其它公司程序员并不把这个问题当做一回事。但用友可以把一个财务软件写了十几年,写什么呢?实际上,就是倾听用户的各种需求。我们认为用户的需求都是合理的,用友的程序员不会直接指责用户的要求不合理,而是在尊重用户意见的同时,分析用户需要,提炼和抽象,把软件做得更好。
第三就是程序的可靠性。我听到过有程序员瞧不起用友的产品,认为用友软件的技术落后。但应用软件的技术先进性是什么,很多人讲不清楚。其实无论是用VB还是C++、JAVA开发,产品的稳定性都是最重要的,用友在这方面一直做不懈的努力。我们的程序员都很清楚,用友有成千上万的用户(目前已经达30万用户),如果我们产品在遗留一个必然错误的情况下发版了,就有可能造成几万个用户出现错误,用户的损失将不可估量,几万个错误就可能有几万个电话打到公司总部,整个用友的维护网络就会瘫痪。因此,我们每写一行程序,都可能要测试很多遍。用友开发人员中有1/3的专职测试人员,还有很多兼职测试人员,我们称之为“BATTLE TEST”-千锤百炼。
在用友软件公司,程序员并没有那种众星捧月的优越感觉,他们被很多的规范所限制,但这些限制保证其软件职业生涯稳步发展。用友的软件文化不是唯程序文化。
《程序员》:在用友软件公司,程序员是处于一个什么样的位置呢?他们的发展空间在哪里?您认为用友的程序员文化核心是什么?
邵凯:相对来说,用友公司是一个已经发展很长时间的软件公司,所以形成了自己的一些程序员文化。在用友,程序员会遇到很多自己不太愿意接受的东西,比如很多的文档,严格的测试。尤其是对于新手,他们开始可能会不太适应这里的环境。
举个例子,用友开发部门有一项非常重要而且经常开展的工作,就是软件各个阶段和环节都有的评审,在程序设计阶段,这个评审叫代码讲评。用投影仪把程序员写的代码显示在大屏幕上,召集很多相关的程序员,大家一起来对这段代码进行评审。
面对一个设计要求,代码如何写,这并不难,评审的过程和气氛也非常平和(PEER REVIEW),在大庭广众下被他人对自己的代码品头论足,作者的感觉还是不一样。写程序和做题不同,做题一般只有一个正确答案,只要最后的结果是对的,大家就不会说什么了。但写程序涉及的问题更多,大家会看是否符合标准和函数的规范。比如一个算法、一个函数所用的代码行数不能太长(一般不得超过50行)。而且还会检查这个算法是否和设计要求相吻合,实现的方法如何,算法的正确性,有时程序的作者会比较难受。尤其是很多程序员都有很强的自信心。 但更多的人认为这是一种激励、挑战和证明。不管怎样,程序代码是需要经过集思广益、反复斟酌、精益求精,而不是闭门造车的写。
在用友,我们称应用专家、系统分析师、架构设计师、程序员、测试人员都是技术人员。在这个群体中,程序员不是塔尖的一族,也没有在小软件公司那样的优越感。在用友的程序员中,有一个非常重要的群体,就是软件架构设计人员,有人称之为ARCHITECT。他们是从程序员中成长出来的,他们精通程序设计,较大规模软件开发首先由他们进行结构设计,再由程序员设计其中的组件,这些人在国外的收入也是很高的。另外很重要的一群体是应用专家,因为用友是做管理软件的,让只懂软件技术的程序员设计一个ERP应用算法是不可想象的,必须首先由懂得应用领域业务的专家提出最优化的应用模型。
用友是个私营企业,软件只有销售出去,而且只有长期占领市场,才能算是成功。因此售前咨询顾问、实施专家、销售等人员的作用非常重要。一次成功的售前支持和商务谈判就可以给用户带来极具价值的解决方案,同时给用友带来丰厚的收入。所以在用友,高级销售人员、高级咨询顾问都得到较好的认可,尽管一般程序员在这方面很难相比,但在一个产品业务线上,各种角色配合密切。
在用友,多数程序员要想取得更好的业绩,一般应该向主程序员、架构设计师或者是项目负责人、开发经理、产品经理方面发展。用友提供了一个非常好的可供长期职业生涯发展的环境。
用友是一个在国内较早进行软件开发规范管理的公司,我们目前正在大力推行CMM、PSP,大团队协作、同级评审等方法,同时营造非常OPEN的开发文化。所有工作是面向文档,而不是面向人;多数工作都是靠协作,而不是只靠个人。我们在开发NC的过程中,在只有5个月的程序阶段,200人同时写一个软件产品的程序,这在中国可能是很少见的。
因此说,用友的软件文化不是唯程序文化,而是侧重开发管理、项目管理、软件工程,更重视过程改进,开发的组织工作都有相当专业的人在做。这种文化和程序员本身既有冲突,又相融合。它给程序员提供了一种非常现实,但又非常锻炼人、非常有发展潜力工作模式。从软件企业长期运营来看,这是正确的发展路线。只有在这种模式下,程序员才能真正的把软件的价值体现在用户应用现场,用户才可能再把价值回报给程序员。
用友软件的技术发展过程就是中国软件企业不断完善的过程。它不是简单的追求技术,从早期的财务软件到现在的NC,软件越来越复杂,采用的新技术越来越多,但这不是为了复杂而复杂,体现的只有一句话,技术以应用为本。
《程序员》:请您谈谈您对用友软件技术发展过程的一些体会和看法?
邵凯:我是从第二代用友的软件产品开始参与用友开发工作的,现在是NC的产品经理,经过了十几年的发展,用友从单一的财务软件发展到现在面向多个行业、多个应用领域和层次,较完善的系列管理软件产品和应用解决方案,同时还提供应用咨询和项目实施的服务,发展过程经历了很多的变迁。
88年到92年,最初用友在分析部分具体用户的财务要求需求之后,经过抽象和提炼,设计出通用的财务软件,推出了早期批量销售的产品,这是一次非常有价值的突破,即软件的通用化和商品化。通用化和商品化是软件产品公司必须建立的技术能力。
92年到95年,发展到基于DOS的财务软件5.0版本的时候,销售规模迅速扩大,软件应用范围也从财务应用扩大到进销存应用,在继承通用性和商品化的同时,软件重用的技术开始采用,对于重复使用的程序代码,如菜单、数据维护、输入输出数据表、打印、帮助等,我们将这些程序进行通用性抽象,形成了基于DOS的用友应用软件开发平台,大大提高了开发效率和软件稳定性。用友基于DOS平台的最后软件版本6.0版系列软件成为划时代的财务软件产品。目前仍然有用户在使用。
94年到97年,由于软硬件技术的飞速发展,用友软件开始转向支持WINDOWS,最初的用友产品是基于WINDOWS3.1开发的,由于WINDOWS3.1是16位地址的操作系统,即要支持图形界面、多任务操作,由要支持复杂的数据库操作,因此基于WINDOWS3.1开发一定规模的应用软件难度很大。WINDOWS95这一32位地址的操作系统发布后,用友立即推出了支持该操作系统软件产品。
98年后,用友产品发展到8.0版本,在取得应用上重大突破的同时,我们的程序员开始重点考虑软件层次结构设计和子系统集中控制管理。逐步全面采用大型关系据库进行软件的优化设计,逐步增加的WEB应用功能使该产品支持INTERNET应用。
8.0产品现在整合了先进的MRP系统,发展到U8ERP 8.21版本,适合中小型企业应用。是用友软件家族的主力,拥有用户最多的用友软件产品。U8 ERP的后续发展将基于微软的.NET 技术,追求优化高效软件设计和易用性,全面面向中小企业应用。
97底年开始开发,2001年全面面市的NC管理软件,是用友近15年软件发展的最高点,这是200名JAVA程序员智慧的结晶。它的应用包括管理会计、核算会计、人力资源、生产制造、供应链、客户关系、数据仓库、商业智能和客户化实施。目标用户是大中型企业和行政事业单位,作用是帮助用户单位实现基于网络运营的集中管理和协同商务,NC同时提供多种行业的应用解决方案。
在整个开发过程中,为解决各种应用问题和改善使用效果,NC的程序员开发并采用了大量的软件新技术。J2EE技术为设计基于INTERNET的大型企业应用软件提供了手段。JAVA技术使所开发的软件能够支持众多平行和后续的先进技术手段。
用友NC在J2EE基础上设计了具有自主版权的中间件和丰富的公共技术组件。软件体系中采用数据交换技术构成系统信息交换平台。所有的信息在传递时,不是直接联结相应的组件,而是将信息放到信息交换平台里,由系统自动寻找相应的应用组件进行处理。比如,当有要货申请的时候,把请求发布到这个信息交换平台,系统就会分析判断从哪里进货最合适,并把相应的信息返回给系统使用者。监控管理也得到很好的设计,比如库存报警,当一批货出库之后如果库存量底于报警线,一个报警状态就被放在这个信息交换平台中,相应的采购申请将产生,同时停止响应任何正常的出货要求。
在开发方法上,回忆用友的技术开发过程,我们曾经推行过结构化程序开发,但因为无法打通应用和技术的通道,一直难以建立规范且完善的,适合应用软件的开发技术规范。现在全部采用了面向对象的技术。基本打通了从需求分析到程序设计的全过程。伴随的还有工具的进步。从简单的编程软件到借助一些开发工具来做,比如采用了面向对象的分析设计工具、关系数据库设计工具等,还有先进的测试工具以及版本管理工具。在语言上,从最早的类DBASE命令语言到现在的JAVA和C#。
用友公司在确定技术应用的时候,不会简单的追求某一个流行的热门技术,而是要考虑采用这样的技术能够给用户带来的价值和对软件开发过程带来的影响。从早期的财务软件到现在的NC,软件越来越复杂,采用的新技术越来越多,但这不是为了复杂而复杂,体现的只有一句话,技术以应用为本。
个人对程序员发展的看法:程序员的追求不是钱和“大拿”的问题,而是如何放大自己CODING价值。我想对程序员说的是,要尽快选定一条适合自己发展的路子,如果不尽快选定,几年之后,就会发现自己很茫然,而且失落。选定了,坚持做下去,一定会越来越光明。
《程序员》:您个人发展的经验来看,对程序员发展有哪些看法?
邵凯:我个人来看,还是专注。专注是成功的根本,做事业专注才可以成功。专注不是说只编程序才算是专注,而是包括专注到某一个领域中去。无论是企业管理软件、工具软件还是其他类型的软件,都可以。同时在这个专注追求过程中,要经的起诱惑,耐的住寂寞。只有这样,几年之后,你会发现自己的成功,发现自己的程序员生涯不是昙花一现。
程序员要想有成功的发展,专注在某个领域,做有价值的程序,这是非常重要的。我不反对一个程序员做软件技术的全才,但不要去猎奇。好像别人讲什么东西,你都懂。实际上什么都懂不是最重要的,作出更好的结果最为重要。我认为有些方面可以是爱好,不一定做为事业去做。
我曾经这样思考过:如何把自己的价值放大?自己写程序,一天写一千行已经非常了不起了,很辛苦了。但如果是带一个十人团队做,每个人每天只写二百行,就是二千行了。这个产品可能不是你一个人做的,但大家的价值都集中在里面,会产生更大的价值。当然也不一定都要做项目经理,做产品架构设计师同样可以将自己的想法贯注到其中,引导程序的方向。这就是放大了自己的程序价值。
想到用友在全国有上千个程序员在写程序,做为用友公司软件开发管理人员和技术负责人,我为用友的程序中有我的有效代码,有我的价值在其中而感到一种欣慰。
我觉得程序员发展有三个方向:系统分析、架构设计和开发管理。可以沿着产品开发经理、部门经理,到研发部门的总经理;也可以做小组的主设计人员、专职设计人员,到公司的总架构设计师;或者做系统分析、应用分析。我想对程序员说的是,你要尽快选定一条适合自己发展的路子。如果不选定的话,那就会非常茫然,过几年之后,就会发现自己很失落,不知道去做什么。有了一个目标,不要经常改变,一直坚持下去(能否坚持十年),肯定是可以成功的。