华为:两年前要炸掉研发金字塔,今天要投入20亿美元提升软件质量

本文主要是介绍华为:两年前要炸掉研发金字塔,今天要投入20亿美元提升软件质量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

华为:两年前要炸掉研发金字塔,今天要投入20亿美元提升软件质量

作者 | 小智

编辑 | InfoQ 编辑部

2016 年 8 月,一位华为内部署名“泥瓦客”的海归程序员,写下了一篇《华为到该炸掉研发金字塔的时候了》的文章,从组织、流程、环境、工具等四方面怒斥在华为做研发之不易。此文被转发到华为心声社区后引起激烈讨论,更惊动了任正非本人。两年后,任正非签发公开信表示:要投入 20 亿美元全面提升华为软件质量,打造可信的高质量产品。行动计划包括:要从最基础的编码质量做起,视高质量代码为尊严和个人声誉;要重构腐化的架构及不符合软件工程规范和质量要求的历史代码;要建立一支更高水平的 Committer 角色群体... 两年时间,华为改变了什么?

两年前的华为

2016 年 7 月,一位署名“泥瓦客”的华为海归程序员,写下了一篇痛陈华为研发弊病的长文,此篇文章不仅在华为心声社区引起激烈讨论,更是惊动了任正非本人。

任正非回应道:在技术工作上的客气是毒品,直面的批评、争论才是良药。

该作者曾在硅谷工作,接触过世界级的开发模式。在其进入华为几年间,和几个做企业业务的产品线有些合作,在此过程中感到华为公司在软件产业的差距还比较大;和中国领先的互联网产品相比,在易用性、贴近用户和产品快速迭代等方面也落后不少。在软件研发领域存在不少问题,这些问题导致华为的 IT 软件产品质量比较低下、开发效率低、产品交付周期漫长,很是让人痛心。具体而言,包括组织、流程、环境、工具四个方面。

此篇文章在华为心声社区引起的讨论也异常激烈,认同作者观点的人不在少数。感兴趣的同学可以戳此《华为到该炸掉研发金字塔的时候了》阅读。这也从侧面印证了,华为在飞速发展的时代,在硬件方面取得了骄人的成绩,却在软件开发方面落后于人。

华为:两年前要炸掉研发金字塔,今天要投入20亿美元提升软件质量


两年后的华为

两年多过去了,以虚心态度面对这逆耳忠言的任正非、华为高管们,又做出了怎样的改变?

1、研发投入全球前五

  • 2016 年,华为研发投入 764 亿元,占销售收入的 14.6%。
  • 2017 年,华为研发投入 897 亿元,中国第一,全球第六。
  • 2018 年,华为研发投入 113.34 亿欧元,中国第一,全球第五。

根据 2017 年的数据,华为研发人员约 8 万名,占公司总人数的 45%。近十年累计投入的研发费用超过人民币 3940 亿元,累计获得专利授权 74,307 件;其中,90% 以上专利为发明专利。

2、成立 Cloud BU,加码云计算

2017 年,华为云正式成为一级部门,仅次于运营商、企业业务、消费者三大 BG;截至 2017 年底,华为云上线 14 大类 99 个云服务,以及制造、医 疗、 电 商、 车 联 网、SAP、HPC、IoT 等 50 多个解决方案。

2017 年,华为云销售收入达到 5 亿美元,折合人民币:32 亿元左右。2018 年上半年华为云收入同比增长 700%。作为对比,主要竞争对手阿里云全年营收 11.12 亿美元,份额达 45.5%,腾讯云营收 2.51 亿美元,份额 10.3%。从体量上来看,华为云似乎只是国内云计算市场的搅局者,但从华为计划投入万名研发加码云计算的决心来看,华为云的野望似乎又远不止于此。

3、布局 5G,决战未来

在无线领域,华为发布了 5G 端到端解决方案,包括无线、传输、核心网、终端 (CPE) 在内的商用产品,与运营商及主流终端芯片厂商完成 IODT 测试,协助全球多个运营商在多个核心城市完成 5G 预商用部署。

虽然最近几周,中美贸易战背景下,华为在多个国家的 5G 市场遭到封禁,但华为仍旧赢得了 25 份 5G 商业合同,并已向不同国家发运 1 万多台 5G 基站。华为轮值 CEO 胡厚崑表示,在全球移动互联网进入 5G 时代之际,禁止华为进入其电信基础设施的国家将处于严重劣势。

任正非公开信透露了哪些信息?

今天,我们又处在一个新的起点,全面云化、智能化、软件定义一切等发展趋势,对 ICT 基础设施产品的可信提出了前所未有的要求。

不难看出,云计算、人工智能将是华为接下来的软件研发重点投入领域。而不管是云计算还是人工智能,对于底层软件基础设施的要求都非常之高。在过去飞速狂奔的业务发展面前,华为的软件研发水平没有配套跟上,势必将在未来掣肘高新业务的发展。因此,夯实软件基础设施的地基,将是未来华为研发的前提与重心。

可信将成为客户愿买、敢买和政府接受、信任华为的基本条件。 今天,我们要把可信作为第一优先级,放在功能、特性和进度之上。

最近一段时间,以美国为首的西方国家密集出现对于华为的排挤、打压现象,具体表现为美国全面禁售华为手机、多个西方国家 5G 招标禁止华为参与、基础通信设施移除华为设备等。

在这个时间节点上,任正非对于可信的最高要求,可以看做是释放一个稳定军心的信号:对内部而言,是提振士气;对外部而言,是给合作伙伴一颗定心丸。

公司已经明确,把网络安全和隐私保护作为公司的最高纲领。关键内容包括:安全性(Security)、韧性(Resilience)、隐私性(Privacy)、可靠性和可用性(Reliability& Availability)。

这里进一步阐述了“可信”的衡量维度,这要求公司集体转变观念,追求打造可信的高质量产品,不仅仅是功能、特性的高质量,也包括产品开发到交付过程的高质量。

我们要从最基础的编码质量做起,视高质量代码为尊严和个人声誉。


我们要深刻理解架构的核心要素,基于可信导向来进行架构与设计。


我们要重构腐化的架构及不符合软件工程规范和质量要求的历史代码。


我们要深入钻研软件技术,尤其是安全技术。


我们要遵守过程的一致性。


我们将通过变革形成一套适应上述变化的流程、组织与考核机制。

这一系列的“我们要”,其实就是华为接下来研发改革的行动指南,也即上文如何做到“可信”的全面解答。在过去的印象里,华为集团不是一个以工程师文化闻名的公司,但在任正非的公开信里,我们可以看到了华为构建工程师文化的意愿:

我们将全面强化以 Committer 角色为核心的代码审核和提交机制,代码经过更加严格和系统的审核才能合入版本。为此我们将建立一支更高水平的 Committer 角色群体,负责软件架构的看护、代码的审核和提交,整体保障合入代码的高质量。我们要变革考核机制,要让架构设计好、代码写得好的人脱颖而出,对编程能力不满足要求的人给予帮助和培训。但任何人如果编写的代码长时间不能合入版本,将会被团队抛弃。

变革会给华为带来什么?

历史代码的重构从来不是一件容易的事情,这会涉及到相当多的部门和业务,而且重构相当于给正在行驶中的汽车换轮子,一定会发生很多问题。接下来的几年,华为软件 可能会经历问题频发的阵痛期。

以 Committer 为核心建立流程,这其实就是工程师文化的开端。一方面,这将有利于工程师地位的提升,另一方面,也可以改变外行领导内行的弊病。最重要的是,一个有良好工程师文化的大公司,必将吸纳更多技术人才的加入,也会得到更加良好的软件开发口碑。可以预见的是,2019 年,华为将举办更多开发者相关活动,未来将会见到更多前缀名“华为”的开发者大赛、Hackathon 等线上、线下活动,加强开发者品牌的经营与完善。

此外大胆猜测,华为是否会建立一个和阿里巴巴一样的技术中台?中台战略最早是由阿里巴巴提出,“中台”是强调资源整合、能力沉淀的平台体系,为直接与用户打交道的“前台”的业务开展提供底层的技术、数据等资源和能力的支持,中台将集合整个集团的运营数据能力、产品技术能力,对各前台业务形成强力支撑。2018 年,腾讯组织架构调整,也设立了中台部门。如果华为要加大软件基础设施的建设,那么成立一个类似“共享事业部”的部门似乎是顺理成章的。

华为:两年前要炸掉研发金字塔,今天要投入20亿美元提升软件质量


附任正非公开信全文

致全体员工的一封信:

我今天写信,是要和大家沟通公司如何全面提升软件工程能力和实践。

二十年前的 IPD 变革,重构了我们的研发模式,实现了从依赖个人、偶然性推出成功产品,到制度化、持续地推出高质量产品的转变。至今为止,我们的产品和解决方案已经在 170 多个国家安全稳定运行,并因此积累和赢得了全球数万客户的信任。

今天,我们又处在一个新的起点,全面云化、智能化、软件定义一切等发展趋势,对 ICT 基础设施产品的可信提出了前所未有的要求。可信将成为客户愿买、敢买和政府接受、信任华为的基本条件。可信不仅仅是产品外在表现的高质量结果,更是产品内在实现的高质量过程,是结果和过程的双重可验证的高质量。而只有全面提升软件工程能力和实践,才有可能打造出可信的高质量产品。

公司已经明确,把网络安全和隐私保护作为公司的最高纲领。我们要在每一个 ICT 基础设施产品和解决方案中,都融入信任、构建高质量,关键内容包括:

安全性(Security)。产品有良好的抗攻击能力,保护业务和数据的机密性、完整性和可用性。

韧性(Resilience)。系统受攻击时保持有定义的运行状态,包括降级,以及遭遇攻击时快速恢复的能力。

隐私性(Privacy)。遵从隐私保护既是法律法规的要求,也是价值观的体现。用户应该能够适当地控制他们的数据的使用方式。信息的使用政策应该是对用户透明的。用户应该根据自己的需要来控制何时接收以及是否接收信息。用户的隐私数据要有完善的保护能力和机制。

可靠性和可用性(Reliability& Availability)。产品能在生命周期内长期保障业务无故障运行,具备快速恢复和自我管理的能力,提供可预期的、一致的服务。

全面提升软件工程能力和实践,关乎公司未来的生存和发展,与我们每一个人都息息相关。在此,我希望全体员工、特别是软件工程师们主动参与进来,从自己做起,踏踏实实,共同打造可信的高质量产品。

我们要转变观念,追求打造可信的高质量产品,不仅仅是功能、特性的高质量,也包括产品开发到交付过程的高质量。我们知道,功能、特性对产品至关重要,我们更知道,进度对满足客户需求也至关重要。今天,我们要把可信作为第一优先级,放在功能、特性和进度之上。除非客户信任我们的产品,否则这些优秀的特性都没有机会发挥价值。我们各级管理者和全体员工都不得以进度、功能、特性等为理由来降低可信的要求,确保可信的要求在执行过程中不变形。

我们要从最基础的编码质量做起,视高质量代码为尊严和个人声誉。代码就像是高楼大厦的一砖一瓦,没有高质量的代码,可信的产品就是空中楼阁。我们要优化并遵循公司各种编程规范,遵从架构与设计原则,熟练使用各种编程库和 API,编写出简洁、规范、可读性强、健壮安全的代码。

我们要深刻理解架构的核心要素,基于可信导向来进行架构与设计。在确保可信的前提下,要在性能、功能、扩展性等方面做好权衡;慎重地定义我们的模块与接口,真正做到高内聚与低耦合;我们要遵循权限和攻击面最小化等安全设计原则,科学设计模块之间的隔离与接口,提升安全性;低阶架构与设计要遵循高阶的架构与设计原则,在充分理解原有架构与设计的情况下,持续优化;我们要熟悉各种设计模式,重用公共成熟组件和服务,避免重复劳动。

我们要重构腐化的架构及不符合软件工程规范和质量要求的历史代码。我们知道,再好的架构,其生命力也是有限的。随着时间的推移、环境的变化以及新技术、新功能特性的引入,架构也会腐化。面对腐化了的架构,要毫不犹豫地去重构它。同时主动以可信设计原则为导向,去重构不符合软件工程规范和质量要求的历史代码,提升软件架构的生命力。

我们要深入钻研软件技术,尤其是安全技术。软件技术是我们打造产品的基本工具,技术是否先进,技术选择是否合理,将决定我们软件的高度;我们要深入学习架构与设计、编码、测试、安全、可用性、性能、维护性、体验等技术,并科学运用这些技术。

我们要遵守过程的一致性。遵守适用的法律法规、遵循业界共识的标准、规范,确保规范到实现的一致性、代码到二进制的一致性。架构要符合架构原则,设计要遵循设计模式,代码要符合编程规范,最终做到需求与实现一致,达成各项对客户的承诺。我们只有脚踏实地做好每一步,才能真正打造出可信的高质量产品。

为此,我们要改变行为习惯,追求精品。我们要开放透明、积极和勇于揭示问题并主动推动改进。软件开发是一种创造性和艺术性的工作,需要充分发挥我们的聪明才智和潜力。我们要改变只重视功能结果、不重视代码质量的行为习惯,要严格遵守软件工程规范;改变被动的修修补补;改变碎片化知识获取,主动去学习提升并贡献经验、代码,形成共享知识库。我们需要改变的行为和习惯还有很多,对绝大多数人来讲都将是一个痛苦的转变过程,会脱一层皮,但我相信大家能够迎接这种挑战。

更为重要的是,我们将通过变革形成一套适应上述变化的流程、组织与考核机制。我们要完善并增强透明、可回溯和可审计的全流程管理机制,以可信的视角,从初始设计、完整构建到产品生命周期管理,全面提升软件工程能力和实践。我们将全面强化以 Committer 角色为核心的代码审核和提交机制,代码经过更加严格和系统的审核才能合入版本。为此我们将建立一支更高水平的 Committer 角色群体,负责软件架构的看护、代码的审核和提交,整体保障合入代码的高质量。我们要变革考核机制,要让架构设计好、代码写得好的人脱颖而出,对编程能力不满足要求的人给予帮助和培训。但任何人如果编写的代码长时间不能合入版本,将会被团队抛弃。

过去一百年来,世界上许多成功的公司都因不能适应变化而倒下。要适应外部变化,唯有自我进化,我们必须保持开放和持续变革。董事会已决定,全面提升软件工程能力与实践将以变革的方式来开展,由轮值董事长徐直军总负责,公司初始投入 20 亿美元,计划用 5 年时间,在 ICT 基础设施领域实现为客户打造可信的高质量产品的目标。希望您支持并积极投入到这一伟大的变革。唯有如此,我们才能实现未来的愿景和使命:把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。

任正非

2018 年 12 月 27 日

原文链接:

http://xinsheng.huawei.com/cn/index.php?app=forum&mod=Detail&act=index&id=4134815

这篇关于华为:两年前要炸掉研发金字塔,今天要投入20亿美元提升软件质量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220502

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank 正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param