也谈中外程序员的差别

类别:软件工程 点击:0 评论:0 推荐:
        这个题目比较大,我不想作什么评论,只是说说自己工作中的一些经历,拿来与大家分享,希望对那些已经进入软件开发的或者正准备进入这一行业的有些启发。

        我在一家外企的软件中心工作,有四年的时间了,公司是通讯行业的欧洲公司,我们的工作主要是根据中国的客户需求,在公司的产品上作一些客户化的工作。人们都说外企比较人性化,特别是欧洲的公司,但在客户的需求压力和与国内本地厂商激烈竞争下,我们还是常常加班的,而且很多时候不能遵循公司的开发流程,如果按照流程来办,那么意味着项目交付期要延长,需要的人员也更多,编码时很多细节也就不太在意,只求能够比竞争对手早实现需求,早交付项目。这样的事情一直延续了三年之久,直到我参与到了一特殊的项目,这个项目从项目管理到实现的各个方面都给我很大感触,我在这里只说一些开发过程中很小,很细微的事情,但我认为这些和一个工程师的素质有很大关系。

        去年,客户提出了一个比较新的产品需求,要实现的话,在原有的产品上修改是不可能的,只能重新开发,按照常理,这样的任务是需要在公司的总部完成的,但需求是中国客户提出的,原文都用中文写成,所以在中国这里组成了一个中外混合的开发队伍,从公司总部的研发中心来了五个工程师,我们这里也有五个人参加。项目经理,技术专家都是外国人,这个专家年龄已经超过四十岁了,有两个女儿。另外三个是年轻人,都是正宗的计算机专业毕业,在公司最少的也工作了两年,我们这边是清一色年轻的工程师,工作年龄最长的五年,最少的只有不到一年的时间,三个计算机专业毕业,另外两个是自学转到程序开发上的。 项目在一开始我们就感受到的很大的不同,这些主要是项目管理上的事情,留待以后再讲。

        按照各个人的工作背景,我们划分了任务,核心模块和框架由这个专家来写,其余的去完成划分好的模块。代码定期的集成,然后提供给测试组去测试。我们都知道外国人做事情比较认真,而且专业素质非常高,虽然没有商量过,但我们都有一个共同的意识,好好干,不要让他们看贬了,所以在编程上非常注意自己的代码质量,而且反复推敲,优化。但在我们还是感受到了差距,尤其是在项目初期的几次集成中。因为大家都对客户的需求了解的清楚,也都掌握了实现这些需求的技术。在代码的功能实现上我们很少受到(Challenge)置疑,主要在很多的细节上,而且外国同事非常直接,我们虽然处得不错,但发现代码中有错误或者不好的地方,他们都会直接当面指出来,丝毫不留情面。这让我们开始很难接受,不免有些情绪,背地里常常咒骂这些鸡蛋里面挑骨头的老外,但情绪归情绪,平心而论,没有他们这么直接的意见,我们也不会在技术有一个较大的提升。

    那么都有那些细节的问题呢?我大致分成三类。
    1. 代码风格 我们虽然在编程时也遵循编码规范,但时间长了,往往在一些小的地方表现出各自的喜好来,而他们则在任何时候都表现出严格的遵守编码规范,比如,大括号的对齐,要求大括号要单独占一行,if,else语句必须用大括号括起来,即使只有一句表达式。而我们常常在if,else只有一句表达式的时候,不加大括号,而他们则不,每处都规规矩矩的加上。还有就是变量的命名,大家都知道程序的可读性非常重要,我们在命名函数和一些全局变量时非常注意,但在函数内部的局部编码命名时候比较随意,这是他们所不能接受的,比如看到我们代码中出现这样的语句就会非常气愤:int temp1,temp2;他们马上就说不明白temp1,temp2代表了什么,在读这个函数时容易混淆。要求即使局部变量的名称也要尽可能的代表它的意义。 关于可维护性,还有一个例子,大家都有这样的经验,有些部分的代码是要改上很多次的,不管代码的好坏,如果已经通过测试了,通常在改这部分代码的时候,大家不会直接删除掉,而是将这部分代码注释起来,这个大家都知道,但他们对注释起来的代码也有要求,就是需要加上注释说明为什么要注释掉。记得当时有个老外指着我的一行注释的代码问我为什么,其实很简单,我和他讲为什么,为什么,他却对我说,他需要的不是我讲的内容,而是要我把讲的内容加上去。
        2. 性能优化 我们做的是嵌入式系统的开发,运行速度是用户非常关注的一个因素,可以这么讲,比如我们的系统运行速度比竞争对手慢,不代表我们拿不到订单,但如果拿不到订单,很明显,运行速度慢是一个最好的理由。所以从一开始我们就非常关注性能的优化,比如设计最好的算法等等,但还有一些细节是我们开始时没有注意到的,最常见的例子,在很多判断条件下,我们通常的做法是按照设计时的Use Case来写,这样有的时候就出现这样的情况,最有可能发生的事情,也是最常见的判断条件,没有放在判断的起始位置,而是在中间,倒是没有出现在最后的情况。老外们则比较注意,他们把用户使用时最常出现的判断都写在了代码的开始,这样软件在使用上的整体性能就比较好。
 
        3. 代码稳定 这个我忘记有什么具体的例子了,只是记忆中他们对异常情况的处理有时近乎苛刻,按照我们那时的说法,什么变态的情况他们都想得出来,也都要在程序上做处理。

        工程师之间的差别,决定了他们开发出的产品的差别,通过这个项目,我明白为什么很多外国的产品要比中国的产品好,不光是软件,其他别的产品,飞机,汽车,或是一个吃饭的勺子,我们的产品和外国的差异往往也在这些细微的地方。 另外让我比较感慨的是,在国内,很多程序员不知道自己三十岁后干什么。而且最要命的,这不仅仅想法而已,而是现实的环境就是这样,三十还继续编程序被认为没有出息,非得升到去作一个什么经理才成,才能有所发展,自己的事业才能发展,自己的工资才能有个新的跃升,但好像国外并没有这种现象,上面提到项目里的专家已经四十多岁了,还在编程,大家对他都很佩服,有段时间近乎崇拜。他写的框架非常优雅,我们在这个框架基础上能非常容易的实现各个模块,代码写的干净漂亮,层次感很强,读起来感觉很舒服。他写的核心模块也很少出错。没有多年的功力是写不出那样的代码的。
 
        当然,我们中方的员工也有优点,我们都很勤奋,好学,而且聪明。老外们把生活看的很重,上班和生活分得很清楚,不愿意加班。而我们晚上常常加班到很晚,完成的模块比他们多很多,这是他们感到很惊讶的。同时在和他们的代码集成,评审过程中,学到了很多东西,编程水平提高的很快,在项目末期基本上就没有遇到什么challenge了。

本文地址:http://com.8s8s.com/it/it34319.htm