从剖析华为看如何做软件企业的研发

从剖析华为看如何做软件企业的研发

ID:39583913

大小:52.00 KB

页数:9页

时间:2019-07-06

从剖析华为看如何做软件企业的研发_第1页
从剖析华为看如何做软件企业的研发_第2页
从剖析华为看如何做软件企业的研发_第3页
从剖析华为看如何做软件企业的研发_第4页
从剖析华为看如何做软件企业的研发_第5页
资源描述:

《从剖析华为看如何做软件企业的研发》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、你所不知道的华为2008-01-0315:56:19 来源:天涯论坛 进入华为贴吧共100条  黑马推荐·  华为的狼性文化人所共知,但华为内部员工在论坛上激昂陈词,抨击华为制度的种种弊端,你又所知多少?一起来讨论一下中国最顶级最让人尊敬的企业背后,不为人知的细节吧。一、名存实亡的“民主生活会”略二、所谓的弹性工作制略三、华为的企业文化·略四、低效的开发模式这一章我将讨论华为的软件开发模式和国内软件业的一些状况,揭示华为的研发人员不得不加班加点的一个重要原因。本章很多方面涉及到软件技术,如果不是业内人士可以略过其中某些内容。如果只是把华为的技术管理水平和国内大部分的软件公司相比

2、,可以略过整章内容。任总裁不是经常华为的人均效率低吗?我就给你分析一下华为的人均效率为什么低!1、典型状况华为的软件开发特点就是,在开发初期,为了赶时间加班加点地赶出一个没有经过充分设计、架构糟糕的、编码糟糕的软件系统,快速交付给客户。软件(尤其是应用软件)不是普通的制造行业产品,在交付(产出)之后还要不断地改动、维护和升级,而且后期维护升级的成本几乎占整个生命周期全部成本的80%。如果前期设计开发的不好,后期维护升级起来非常地困难。当华为的研发人员为了赶时间交付出一个设计不充分的系统之后,后期维护升级就变的很费力困难,在以后的升级维护过程中又不得不加班加点。在升级维护的时候仍

3、然是重时间而轻质量,走向恶性循环,直到整个系统变成越来越难以维护,成为一个不能自拔的焦油坑。为此有很多的员工除了在公司里加班之外,还不得不长期出差到局点现场。这种低效率的最高记录就是曾经最多有160人同时在移动的某个局点维护升级一个系统!这是就是华为的开发特点,一种典型的低效率的开发模式。曾经参与维护升级过的几个应用系统,共同的特点是设计地很糟糕。比如,JSP页面中充斥着大量大量的业务层甚至是数据层的Java代码,毫无MVC的概念。整个系统业务层数据层不分,或者根本就没有业务层和数据层的概念。后台有些JAVA类甚至大到五千行以上,有些方法的参数个数超过10个!程序依赖了太多的存

4、储过程,大量的业务逻辑放到存储过程中。整个系统几乎看不到面向接口编程的影子,该用设计模式的地方看不到一个设计模式。几乎是到处可以见到copy的重复代码(重复代码是软件万恶之源,MartinFowler语)。维护升级这样的系统是极为费力的,布鲁克斯将这样的软件形容为让史前动物不能自拔的焦油坑。记得有个外包的兄弟对此戏言:华为为什么搞那么严格的信息安全?就是害怕写的这么糟糕的架构和代码流出到外面被人看到了笑话,砸了华为的招牌,原来华为的软件也是写地如此糟糕。Java是一种非常优雅的面向对象语言。这些应用系统用Java来开发仅仅是因为它是最流行的Web应用系统的开发语言,而不是因为它

5、最有用的特性:面向对象。Java能够如此流行正是因为其完美的面向对象特点。对接口的完美支持使Java在制定好接口规范后,获得众多厂商的支持。只要是你依赖于接口规范开发出应用系统,可以很容易地替换不同的实现,提高生产率。所以Java的JDBC、Servlet、JDNI、JMS等规范成为应用系统的优秀的开发工具。在我参与过的那些系统中,当一个Java类被写成超过五千行,当JSP代码中存在着本该在业务层或数据层的代码时,Java已经完全失去了其面向对象功能。把面向对象语言当成面向过程的语言来使用,是华为很多软件的开发现状也中国几乎所有的软件公司开发现状。2、再谈面向对象首先,面向对象

6、不是银弹,不能给你带来数量级的效率提高,但是和面向过程相比,面向对象提供很多方法让你更容易地改善软件的质量,能给你的生产率带来几倍的提高。软件产品(尤其是应用软件)区别于普通工业产品的最重特点是,它在生命周期之内需要面对不断的变化。如果有一种技术能够充分地拥抱变化,就可以极大的提高软件的生产效率。软件要做到能够拥抱变化,就必须做到高内聚、低耦合,能够分开软件可变的和不变的部分。后期的维护和升级大部分修改是其可变部分,分开可变和不变部分之后便可以容易的改动,从而有效地提高以后的扩展和维护效率,带来生产率的提高。面向对象技术是让你可以拥抱变化的技术,它的重要目的就是分开软件的可变和

7、不变部分。它的典型特点是抽象、封装、继承、多态。抽象可以让你提取出共性(不变的部分)到父类(或接口),变的部分在不同的继承中实现。而多态就是让不变的部分(接口或者抽象)和变的部分(多个不同的实现)顺利连接起来工作。封装可以让你封装变化,将变化约束在一个尽量小的范围之内,实现很好的内聚和降低不同模块(类)之间的耦合,减少对其他模块的影响。如果你能够充分的遵守面向对象的核心原则:面向接口(抽象)编程,就能充分地分开软件的可变和不变部分。面向对象设计和编程,前期必须投入足够的时间去设计,划分出类和

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。