读《中国与印度软件工程师之比较》一文,感觉文中都是对中国程序员的侮蔑、诽谤和侮辱,有些话不说不快。(该文的URL: http://www.csdn.net/develop/article/25/25662.shtm)文中的红色字部分皆是出自该文。 我先哉这里申明:我这里不是要替程序员推卸责任,我是觉得这种不负责任的、错位的文章广为流传,非常不利于中国的软件业,所以觉得有必要进行驳斥。
的确,中国现在的软件工程水平不是很高。但是即使在美国,每年也有很多软件项目失败,难道中国就不允许失败了,难道印度就没有失败的项目么,更有甚者,为什么要把项目失败归结到程序员身上,平心而论,一个管理者对项目的影响比程序员大吧。
按照软件工程的说法,一个软件项目中人员的责任是严格区分的:项目经理、系统构架师、过程工程师、系统设计师、程序员、测试人员等等,可以参考RUP中的相关部分。而在中国的现状是,我们的程序员至少兼了系统设计师和程序员的职责,有的公司好些,没让再兼系统构架师,可能还有专门的测试人员,很多公司就是程序员兼测试人员兼系统设计师和系统构架师了,所以我们的程序员肩上承担了太多的责任。实际上作者在文中并没有体现出非常好的软件工程素质,而是笼统的分成了项目经理,除了项目经理的都是程序员,呵呵,有意思。
文中提到“印度人能够把软件整体把握得很好,能够完成软件,并得到相当好的设计文档。而中国人在那里琢磨数据结构、算法,界面人员就还没编码就想着是Outlook式的还是Visual Studio式的界面。”
首先,文中的这个“印度人”“中国人”含义模糊,印度人跟中国人一样的,也有项目经理、系统构架师、系统设计师等等区分,那究竟这里指的谁?姑且不管。实际上,对项目整体进行把握,并进行功能划分,这个应该是系统构架师的工作;然后由系统设计师各个部分进行系统设计;再后面由程序员做编码实现;最后测试,交付。。。。而在上面“中国人”的行为实际体现的是一种无计划无分工的行为,以至于无法保证项目的成功实施。我想问,这个究竟是谁的责任?难道是我们程序员责任?当然,作者是认为我们程序员劣根低下,要负责任。先让我们看看所谓的项目经理干什么的,他必须组织项目的计划、日程和资源,他必须能够执行项目决策,并最终为项目决策负责,这个是项目经理的组织和决策能力。上面体现的无计划和无分工的状况,正是项目经理缺乏组织和决策能力的表现,所以真正的责任承担者应该是项目经理。
“界面人员没编码前先想着是outlook式的还是Visual Studio式的界面”,这个有错吗?设计本来就在编码之前,难道要一边编码一边想是什么样式?这个好像不符合作者对软件工程前调的想法吧。
“就是不能保证能够把一个软件稳当、完整的开发出来。”这个是谁的错,是谁来保证项目的成功?当然是项目经理了。如果一个项目分成ABC三部分,做A的程序员只能保证A成功,BC的成功不是他的职责。
举个简单的例子:
“软件中枰桓隽斜恚美幢硎疚颐谴淼氖挛瘛8美啾碓谝滴穹泵Φ氖焙蚪涞煤艽蟆V泄司陀盟蛄幢恚ё拧妒萁峁埂肥樵谀抢镄戳幢淼睦唷S《热丝艘桓龃笫椋缓缶涂几伞N裁从《热瞬挥昧幢恚撬担?/SPAN>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的网站够戗,估计有部分可以,但是要求大部分高中生看懂,是不是苛刻了点。而且,“中国的气氛中,很牛的程序员都很难接受软件工程的”,求柏君反对软件工程?鲍月桥反对软件工程?,实际上作者这句话没有依据,体现根据他本人对程序员的一种歪曲法。据我感觉,中国大多数程序员都是呼唤软件工程的。 |