读《中国与印度软件工程师之比较》一文,感觉文中都是对中国程序员的侮蔑、诽谤和侮辱,有些话不说不快。(该文的URL: http://www.weste.net/html/200404/20040403QBI115250.html)文中的红色字部分皆是出自该文。
我先哉这里申明:我这里不是要替程序员推卸责任,我是觉得这种不负责任的、错位的文章广为流传,非常不利于中国的软件业,所以觉得有必要进行驳斥。
的确,中国现在的软件工程水平不是很高。但是即使在美国,每年也有很多软件项目失败,难道中国就不允许失败了,难道印度就没有失败的项目么,更有甚者,为什么要把项目失败归结到程序员身上,平心而论,一个管理者对项目的影响比程序员大吧。
按照软件工程的说法,一个软件项目中人员的责任是严格区分的:项目经理、系统构架师、过程工程师、系统设计师、程序员、测试人员等等,可以参考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根本就是不甚了解,存在处处错误的观念,学了几个名词就拿来大讲特讲,我想应该有很多人已经看出来了,就该作者而言,缺乏组织和协调能力。作者将项目失败的责任一股脑的都推到程序员身上,须知一个项目中,项目经理才是最大的责任承担者,一个项目的失败首先是计划、分工等不合理,至于最底层的程序员,对项目的影响是非常小的。