×

Loading...

Topic

  • 枫下拾英 / 心情随笔 / Forward: About Software Engineering (by anonymous)
    本文发表在 rolia.net 枫下论坛我在工作中,接触到印度软件公司开发出来的软件:整个体系架构非常清晰,按照我们的要求实现了全部功能,而且相当稳定。但是打开具体的代码一看,拖沓冗长,水平不咋样。我们自己的一些程序员就有怪话了,说他们水平真低。

    但是!印度人能够把软件整体把握得很好,能够完成软件,并得到相当好的设计文档。而中国人在那里琢磨数据结构、算法,界面人员就还没编码就想着是Outlook式的还是VisualStudio 式的界面。到最后就成为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。Justdoit!一句话,中国的软件开发水平低得很。赶不上印度人,印度的软件公司可以让高中生编代码,它的软件工程水平可想而知。当然,你如果是个很牛的程序员。估计够呛,因为中国的气氛中,很牛的程序员都很难接受软件工程的。

    你可以测试一下自己,看看自己适不适合现在学习软件工程:

    1、你是不是不能忍受一个编程序不如你的人做你的项目经理?

    2、你是不是觉得你的老板对客户吹牛皮、夸大自己而感到不舒服?

    3、你是不是一个拿到一个需求脑袋里第一念头就是如何实现的人?

    4、你是不是很崇拜Stallman,Linus,很讨厌Microsoft?5、你是不是曾经在深夜编码的时候,突然感觉到一种乏味,对Code的生涯感到一种无趣?

    以管窥豹──印度神话作者:"Kino"我们现在处于深深的自卑当中,感到中国的软件工程水平的低下已经是牵涉到民族劣根性的问题了。

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

    2 、他们许多公司的项目经理根本就不懂技术。中国的项目经理如果不能在技术上压服下属,那么下属将与他搞鬼,越是高手越喜欢搞鬼,根本不知道作软件的终极目的是从别人兜里掏钱,而在内部搞不团结。技术高手都会纠集一些对他技术上崇拜的菜鸟,与管理层作对。

    而印度的软件经理根本就不懂正在做的东西,许多甚至直接就是MBA ,或者是领域专家(工业设计、地理专家等),而不是编码的专家。但是却能够领导大群素质良好的程序员把工作做好,没有内部不团结的情况。许多印度的程序员加入一个公司很长时间,都不知道自己整天编的代码是干什么用的。给他们的任务可能就是一个函数的声明以及该函数要实现的功能。我们呢?

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

    4 、他们的开发计划能够做到小时级别。如果一个印度公司的项目经理没有上班,那么他的下属将可能不知道作什么。他们的计划一般都定到天,每个基层开发人员每天的工作量就是8小时。

    而我们能够给出月度计划的公司就很少,而给出的月度计划要么不可能实现,要么就可能被取消。开发人员被初略的给个任务,他在月初,可以慢慢琢磨是做成什么样子,然后上上网,聊聊天。到了月中和月末,就开始熬夜编码。看到每年,从各大高校不尽牛人滚滚来,我们是不得不要召人,同时又是不抱希望。我公司现在有意以后将核心软件开发外包给印度公司,中国人?做做界面吧,中国人做界面会极尽奇技淫巧,搞得花里胡哨的。

    BTW ,我公司非外企,大家不要误会我们有什么种族歧视。但是我们现在就是对自己歧视,自卑得很。中科院那么多研究院,连个能用的操作系统都搞不定。北大开发一些东西,比如什么青鸟CASE,就是给一帮人评职称的。杨芙清院士整天搞来搞去,搞出了什么东西?B大,T大的人最难管理,牛得看不见人。中国的程序员骂微软,追Linux 是全世界最狠的,可是我们除了汉化Linux,做了什么东西出来。CDE是瑞典人写的,Linus是芬兰的,GNome是墨西哥人写的。哎,我们曾经是多么的瞧不起印度人。更多精彩文章及讨论,请光临枫下论坛 rolia.net
    • forward: 不必太偏激 (by: lihei)
      本文发表在 rolia.net 枫下论坛其实只不过是看到了在软件工程和项目管理方面中国的落后而已。
      这也是中国市场经济时间太短的原因,很多人没有把从客户兜里掏钱
      放在首位的习惯和下意识。而管理水平也处于落后状态。

      要知道,印度的软件业起步较早,所以不能偏激的归为劣根性。
      随着国内计算机公司的不断竞争发展,终会不断提高的,因为认识到
      这个问题的人越来越多。

      中国之所以重视linux,并不是程序员追,而是政府害怕Windows有什么
      后门,为了国家安全,因为linux代码公开,所以重视linux。而很多
      人预测到这一点,于是去学linux。

      还有,对比较穷的中国计算机人,如果想办网站的话,用windowsNT那套
      要交很多钱,用linux,很多软件都是免费的。

      我觉得程序员对底层的爱好没有什么不对。至于管理和软件工程,那应该
      是管理人员的事情。

      不要着急,市场经济是最好的学校。一切向钱看,促使公司追求开发效率,
      才能使程序员养成用数组而不用链表的习惯。

      其实用链表不用数组,是因为程序员想在编程是体会乐趣。这是传统中国
      人的观念,希望把工作当成艺术来做,所以越搞越复杂。编程序就象在下棋,
      成了一种动脑的游戏。

      我以前看过一篇19世纪末的可笑文章,中国人写的,说机器如何如何不好。
      人手工制的东西每一件都是艺术,而机器每件都一样,另外,人成了机器的奴隶。
      说到这里,就想到卓别林的摩登时代,为了跟得上传送带,总做一个拧螺丝的动作
      最后手停不下来了,看到别人的扣子就拧。

      如果程序员真的能用数组就不用链表,那样编程工作就会更加枯燥无味。但社会
      化大生产要牺牲大量工人(程序员也是工人)的乐趣。

      中国人缺乏资本主义的洗练,包括思想的转变。这种现象存在于社会的每个角落。
      (比如说关于体育职业联赛,很多人认为联赛是为了国家队如何如何。其实这是
      多么“计划经济”!美国的NBA联赛是为了美国篮球在世界比赛上的冠军吗?

      联赛是一种服务产业,为满足人们的精神需要而提供的。真正的意义在于让成千
      上万人的精神生活有了一些着落,同时养活了一大批靠联赛活着的人,包括记者。
      对于服务产业比重很低的中国,这很重要。)

      拜金主义也许不好,但是必须经历这一过程。更多精彩文章及讨论,请光临枫下论坛 rolia.net
    • 个人看法
      印度的软件工程水平高出中国很多,这不是个人(或某些公司)原因造成的,个把牛人不能左右软件工程的发展水平,社会的激励体制和国家经济、文化发展程度才是决定因素。
    • Agree on the comments! To lead a project, project management/control will be more essential than coding/programming. Besides, business process is more important than application -- application is useful only based on process.
      Project is a team work, not a show of any hero.