湘里妹子学术网

 找回密码
 注册
查看: 3440|回复: 0

"中国与印度软件工程师之比较"以及"一个程序员的声

[复制链接]
发表于 2004-9-2 08:30:27 | 显示全部楼层 |阅读模式
http://ir.hit.edu.cn/cgi-bin/new ... topic=16&show=0
-------------------------------------------------------------------------------
中国与印度软件工程师之比较

在工作中,接触到印度软件公司开发出来的软件: 整个体系架构非常清晰,按照我们的要求实现了全部功能,而且相当稳定。但是打开具体的代码一看,拖沓冗长,水平不咋样。我们自己的一些程序员就有怪话了,说他们水平真低。但是! 印度人能够把软件整体把握得很好,能够完成软件,并得到相当好的设计文档。而中国人在那里琢磨数据结构、算法,界面人员就还没编码就想着是Outlook式的还是Visual Studio式的界面。到最后就成为Code 高手,对某些特定的开发工具精通,但是就是不能保证能够把一个软件稳当、完整的开发出来。

举个简单的例子:

软件中需要一个列表,用来表示我们处理的事务。该类表在业务繁忙的时候将变得很大。中国人就用双向链表,抱着《数据结构》书在那里写链表的类。印度人开了一个大数组,然后就开始干。为什么印度人不用链表,他们说:1、你们给出的设备(小型机),最少具备512M内存,浪费一些没有什么。2、数组方式访问方便、效率高。 看出了一拿到东西就吭哧吭哧作Code,和好好进行软件分析的不同了吗?正好前几天我有几个同事从印度回来和我们交流,那家公司是CMM4级公司. 我感受的几点:

1. 流程重于项目
2. QC(就是QA)独立于研发部门,专门检查研发部门的开发流程是不是按照既定流程走.如果QC觉得流程不对,他会直接上报高层, 项目肯定就此停止.
3. 所谓的项目经理(PC)一般也是从编码人员升上来的,并不是所谓的不懂技术,一般都至少有四年以上的经验
4. PC主要就是制定开发计划,负责协调,填写各种表格.
5. 所有的东西(包括草稿)都有文档.
6. 详细文档要求达到只有这个文档就可以编码的程度,一般写文档时间占60%,编码时间极少
7. 有各种详细的review(同行评审),项目组内的,项目组之间的,客户的...
8. 计划很详细,的确能达到小时级,但是实际情况还是误差比较大,所以他们也有加班.

先学习UML和Rose以及RUP,不要总是要找着证据。在中国的软件开发水平下,很难给你一个好的例子,OK?中国人总是要看到一个东西有了试验田,而且稻子长得好,才换稻种。要知道在国外上述的软件开发模式的应用,大可以看看Rational网页上的story。Just do it! 一句话,中国的软件开发水平低得很。赶不上印度人,印度的软件公司可以让高中生编代码,它的软件工程水平可想而知。当然,你如果是个很牛的程序员。估计够呛,因为中国的气氛中,很牛的程序员都很难接受软件工程的。你可以测试一下自己, 看看自己适不适合现在学习软件工程:

1、你是不是不能忍受一个编程序不如你的人做你的项目经理?
2、你是不是觉得你的老板对客户吹牛皮、夸大自己而感到不舒服?
3、你是不是一个拿到一个需求脑袋里第一念头就是如何实现的人?
4、你是不是很崇拜Stallman,Linus,很讨厌Microsoft?
5、你是不是曾经在深夜编码的时候,突然感觉到一种乏味,对Code的生涯感到一种无趣?

     以管窥豹──印度神话  

我们现在处于深深的自卑当中,感到中国的软件工程水平的低下已经是牵涉到民族劣根性的问题了。

他们的软件教育水平: 我们招聘印度人,给应聘者出了一份与国内差不多的试卷,有基础概念和编程题目。 等到他们完成后,我们这些中国的自认高手惊呆了!他们的编程题目简直象是抄袭的?程序结构,注释,变量命名就不说了吧,全部都是极其类似!反观中国的牛人、高手,每个人有自己的一套。到了新的岗位,先把前任的程序贬损一通,然后自己再开发更多的问题的代码来代替。我的公司统计,一个软件中有4个以上 CSocket版本,每个人都觉得别人做得差,自己再搞一套。中国人,就是这个样子,还会辩解说“我们这样有创造性”。 其实软件发展,早就走过了求伯君那个编码英雄的年代,程序员已经是个坐办公室的蓝领了。你具备拧好一个螺丝钉的能力就可以了。Code是最低级的事情了。

2、他们许多公司的项目经理根本就不懂技术。 中国的项目经理如果不能在技术上压服下属,那么下属将与他搞鬼,越是高手越喜欢搞鬼,根本不知道作软件的终极目的是从别人兜里掏钱,而在内部搞不团结。技术高手都会纠集一些对他技术上崇拜的菜鸟,与管理层作对。而印度的软件经理根本就不懂正在做的东西,许多甚至直接就是MBA,或者是领域专家 (工业设计、地理专家等),而不是编码的专家。但是却能够领导大群素质良好的程序员把工作做好,没有内部不团结的情况。许多印度的程序员加入一个公司很长时间,都不知道自己整天编的代码是干什么用的。给他们的任务可能就是一个函数的声明以及该函数要实现的功能。我们呢?

3、他们的编程人员的流动率达到30%! 他们的编程人员流动率(包括内部项目之间的流动)高达30%,可以想见他们的文档水平如何。他们的产品不依赖任何一个人,谁都可以立即辞职,产品的开发还是会正常进行。 而中国,是老板怕总工。技术骨干拥兵自重,抗拒管理。任何制定好的计划,都有可能被技术人员推翻或者跟你消极怠工。

4、他们的开发计划能够做到小时级别。 如果一个印度公司的项目经理没有上班,那么他的下属将可能不知道作什么。他们的计划一般都定到天,每个基层开发人员每天的工作量就是8小时。而我们能够给出月度计划的公司就很少,而给出的月度计划要么不可能实现,要么就可 能被取消。开发人员被初略的给个任务,他在月初,可以慢慢琢磨是做成什么样子,然 后上上网,聊聊天。到了月中和月末,就开始熬夜编码。
--------------------------------------------------------------------------------

一个程序员的声辩----读"中国与印度软件工程师之比较"有感    FireAngel(原作)

读《中国与印度软件工程师之比较》一文,感觉文中都是对中国程序员的侮蔑、诽谤和侮辱,有些话不说不快。(该文的URL: http://www.csdn.net/develop/article/25/25662.shtm)文中的红色字部分皆是出自该文。

我先哉这里申明:我这里不是要替程序员推卸责任,我是觉得这种不负责任的、错位的文章广为流传,非常不利于中国的软件业,所以觉得有必要进行驳斥。

的确,中国现在的软件工程水平不是很高。但是即使在美国,每年也有很多软件项目失败,难道中国就不允许失败了,难道印度就没有失败的项目么,更有甚者,为什么要把项目失败归结到程序员身上,平心而论,一个管理者对项目的影响比程序员大吧。

按照软件工程的说法,一个软件项目中人员的责任是严格区分的:项目经理、系统构架师、过程工程师、系统设计师、程序员、测试人员等等,可以参考RUP中的相关部分。而在中国的现状是,我们的程序员至少兼了系统设计师和程序员的职责,有的公司好些,没让再兼系统构架师,可能还有专门的测试人员,很多公司就是程序员兼测试人员兼系统设计师和系统构架师了,所以我们的程序员肩上承担了太多的责任。实际上作者在文中并没有体现出非常好的软件工程素质,而是笼统的分成了项目经理,除了项目经理的都是程序员,呵呵,有意思。

文中提到“印度人能够把软件整体把握得很好,能够完成软件,并得到相当好的设计文档。而中国人在那里琢磨数据结构、算法,界面人员就还没编码就想着是Outlook式的还是Visual Studio式的界面。”

首先,文中的这个“印度人”“中国人”含义模糊,印度人跟中国人一样的,也有项目经理、系统构架师、系统设计师等等区分,那究竟这里指的谁?姑且不管。实际上,对项目整体进行把握,并进行功能划分,这个应该是系统构架师的工作;然后由系统设计师各个部分进行系统设计;再后面由程序员做编码实现;最后测试,交付。。。。而在上面“中国人”的行为实际体现的是一种无计划无分工的行为,以至于无法保证项目的成功实施。我想问,这个究竟是谁的责任?难道是我们程序员责任?当然,作者是认为我们程序员劣根低下,要负责任。先让我们看看所谓的项目经理干什么的,他必须组织项目的计划、日程和资源,他必须能够执行项目决策,并最终为项目决策负责,这个是项目经理的组织和决策能力。上面体现的无计划和无分工的状况,正是项目经理缺乏组织和决策能力的表现,所以真正的责任承担者应该是项目经理。

“界面人员没编码前先想着是outlook式的还是Visual Studio式的界面”,这个有错吗?设计本来就在编码之前,难道要一边编码一边想是什么样式?这个好像不符合作者对软件工程前调的想法吧。

“就是不能保证能够把一个软件稳当、完整的开发出来。”这个是谁的错,是谁来保证项目的成功?当然是项目经理了。如果一个项目分成ABC三部分,做A的程序员只能保证A成功,BC的成功不是他的职责。

举个简单的例子:

“软件中需要一个列表,用来表示我们处理的事务。该类表在业务繁忙的时候将变得很大。中国人就用双向链表,抱着《数据结构》书在那里写链表的类。印度人开了一个大数组,然后就开始干。为什么印度人不用链表,他们说:1、你们给出的设备(小型机),最少具备512M内存,浪费一些没有什么。2、数组方式访问方便、效率高。 看出了一拿到东西就吭哧吭哧作Code,和好好进行软件分析的不同了吗?”

我想问的是,作为项目经理,你在这里有没有把规范的需求文档提交给程序员?你有没有明确的告诉过“该类表在业务繁忙的时候将变得很大”“给出的设备(小型机),最少具备512M内存”?另外,你有没有告诉过程序员,因为有512M而可以不需要考虑内存浪费的问题(因为数组是静态分配,可能会浪费内存一些,但是应为直接访问,所以速度快些、方便些),即使是512M并不是就等于可以随便浪费内存,从操作系统的角度来说,内存永远是不够的。需要知道,需求分析不是程序员的责任,从软件工程的角度来说,那是上一个流程应该输出的产品。不明确需求就该是着手实现,这是过程控制上的问题,而过程控制上的问题恰恰是项目经理的责任。

“所谓的项目经理(PC)一般也是从编码人员升上来的,并不是所谓的不懂技术,一般都至少有四年以上的经验”,印度也要求项目经理懂技术的撒。

“PC主要就是制定开发计划,负责协调,填写各种表格.”呵呵,这个PC对自己的职能还是了解的嘛,不光是填写各种表格哦,需要制定开发计划,负责协调

“所有的东西(包括草稿)都有文档”不是每家中国的软件企业都没有文档,不是每家印度软度公司都由好文档,况且文档也有质量的区别。(象中兴、华为等通信设备制造商其实更象软件企业,他们的员工大部分是做软件的。)

“详细文档要求达到只有这个文档就可以编码的程度,一般写文档时间占60%,编码时间极少”,看作者的意思是熟悉软件工程了,张口RUP,闭口UML,可是这个PC缺乏一些基本的软件工程常识,不管是那种过程,瀑布式也好,螺旋式也好,还是RUP也好,XP也好,软件过程都不是划分“文档编写”和“编码阶段”的,文档只是各个软件过程中的副产品,各个阶段时间怎么分配的,可以参考教材。作者的意思,文档编写就代表了立项、需求分析、系统设计,但是,真如这样吗?仅仅一个文档编写就能代表需求所有这些步骤的含义?就这么简单?

“计划很详细,的确能达到小时级,但是实际情况还是误差比较大,所以他们也有加班” 。计划是不是越细越好,达到小时级有意义吗?那是不是算到秒级更好?结果到后面还是“实际情况还是误差比较大,所以他们也有加班”,那这样的计划有何意义?

“先学习UML和Rose以及RUP,不要总是要找着证据。在中国的软件开发水平下,很难给你一个好的例子,OK?中国人总是要看到一个东西有了试验田,而且稻子长得好,才换稻种。要知道在国外上述的软件开发模式的应用,大可以看看Rational网页上的story。Just do it! 一句话,中国的软件开发水平低得很。赶不上印度人,印度的软件公司可以让高中生编代码,它的软件工程水平可想而知。当然,你如果是个很牛的程序员。估计够呛,因为中国的气氛中,很牛的程序员都很难接受软件工程的”。实际上这段话不知道作者想说什么,不过我想说得是,中国的高中生去看Rational的网站够戗,估计有部分可以,但是要求大部分高中生看懂,是不是苛刻了点。而且,“中国的气氛中,很牛的程序员都很难接受软件工程的”,求柏君反对软件工程?鲍月桥反对软件工程?,实际上作者这句话没有依据,体现根据他本人对程序员的一种歪曲法。据我感觉,中国大多数程序员都是呼唤软件工程的。

“你是不是不能忍受一个编程序不如你的人做你的项目经理? ”,项目经理是否编程序比我好我不在意,但是我在意项目经理居然不懂软件工程,我在意项目经理认为分析设计就是简单的谢谢文档,我在意项目经理居然对问题域一点都不了解,我在意项目经理只会在吃饭的时候调戏酒店服务员(即使服务员已经表现出非常的委屈何难堪)。

“你是不是觉得你的老板对客户吹牛皮、夸大自己而感到不舒服?”一般情况下,项目经理何老板是两个人。

“你是不是一个拿到一个需求脑袋里第一念头就是如何实现的人?” 在中国,只有少部分程序员可能这样,而且他们也在不断进步中。实际上,我觉得原文作者本人作为一个项目经理的想法倒有点意思:软件项目=“写文档”+“写代码”

“你是不是很崇拜Stallman,Linus,很讨厌Microsoft? ”那纯粹是个人问题,和作者讲的软件工程何干?我想作者的意思无非是说这是一种不成熟的表现罢了,借此,作者进一步认为我们程序员都很肤浅。

“我们现在处于深深的自卑当中,感到中国的软件工程水平的低下已经是牵涉到民族劣根性的问题了。” 这只能说明作者那种对程序员的仇视和诽谤的心理,估计也是他本人能力不够以至于项目失败,而把员应归结到程序员身上。

“他们的编程题目简直象是抄袭的?程序结构,注释,变量命名就不说了吧,全部都是极其类似!反观中国的牛人、高手,每个人有自己的一套。”这能说明什么问题,难道编得和人家一样就效率高了,就体现出软将工程素质高了?我想作者走到极端了,盲目最求创造性固然不好,但是有自己的一套也成错事了?怪哉!!!!

“到了新的岗位,先把前任的程序贬损一通,然后自己再开发更多的问题的代码来代替。”,实际上,作者这句话不负责任,这种情况存在,但不是仅仅只发生在程序员身上,而中国的程序员都是学校出来的,相对心地单纯,我估计更多的情况是发生在他们项目经理身上,比如硬把项目失败的经理推卸到程序员身上。“我的公司统计,一个软件中有4个以上 CSocket版本”这个是版本控制做得不好,与程序员何干?

“他们许多公司的项目经理根本就不懂技术。”要么作者自相矛盾,要么就是这个项目经理也太那个了,前面还说 “所谓的项目经理(PC)一般也是从编码人员升上来的,并不是所谓的不懂技术,一般都至少有四年以上的经验”,这里又说“许多公司的项目经理根本就不懂技术”,呵呵,不知道他们这4-5年怎么混的,难道真应了那据话,“不懂的人就去当项目经理”?。另外,技术并不只是编码,分析设计、项目管理也是一种技术。就作者的认识,说句大不敬的话,他真的肤浅得很。

“是老板怕总工。技术骨干拥兵自重,抗拒管理。”我想,这个问题离作者讨论的软件工程的问题太远了,实际上,这个是个社会问题,而联想柳总和倪总的故事好像不是这样的,而方正张总和王选院士的故事也不是这样的。“任何制定好的计划,都有可能被技术人员推翻或者跟你消极怠工。”,实际上,制定好的计划被技术人员推翻也没什么奇怪的,制定计划本生也是个过程,不是说一个人关了门套个文档模板写了个计划书就可以了。而至于“跟你消极怠工”,这是对中国大部分程序员的诽谤,我想中国大部分程序员都不会做这个事情,另外事情本生也体现了项目经理的管理能力问题。

文中多处体现的是对程序员的轻视、侮蔑、诽谤和人身攻击:比如“牛人、高手”一看就是反语;“开发人员被初略的给个任务,他在月初,可以慢慢琢磨是做成什么样子,然 后上上网,聊聊天。到了月中和月末,就开始熬夜编码。” “跟你消极怠工”,这是没有根据的侮蔑,。程序员也是人,基本的受尊重的权利是宪法赋予的,作为项我的目经理你可以命令我、批评我,但你不能侮辱我。

实际上,该文中体现了作者对软件工程、RUP、CMM根本就是不甚了解,存在处处错误的观念,学了几个名词就拿来大讲特讲,我想应该有很多人已经看出来了,就该作者而言,缺乏组织和协调能力。作者将项目失败的责任一股脑的都推到程序员身上,须知一个项目中,项目经理才是最大的责任承担者,一个项目的失败首先是计划、分工等不合理,至于最底层的程序员,对项目的影响是非常小的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|湘里妹子学术网 ( 粤ICP备2022147245号 )

GMT++8, 2024-5-4 18:28 , Processed in 0.066301 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表