如何看待华为1100亿行规模的代码库?

华为1100亿行规模的代码库,从我10多年的从业经历来看,除了震惊之余,还有以下几个方面的解读。

1.华为做了很多事

网络设备的研发,基站、路由器、交换机等硬件设备,也需要驱动程序和操作系统也需要软件编程。手机业务这块,emui,鸿蒙操作系统、hms这些也需要编程。智能穿戴设备、内部信息化管理系统……等都需要编程。做的事情多,研发的产品多,做的系统多,代码量1100亿行也正常。

2.代码复用度高吗?

软件设计的重要作用就在于提高复用度,规划设计做的不好,出现大量的重复性代码也是导致代码库大的一个重要原因。由于没看华为代码库,所以,也不敢说华为的软件设计不好、代码复用度不高。

3.项目管理是否科学?

没有科学的项目管理规范,造成大量项目的版本备份,也是代码库庞大的一个重要原因。

4.架构设计是否合理?

选择合适的软件架构,是可以降低项目的代码开发量。相反,采用不合适的软件架构,也会增加开发工作量。例如:采用lombok包可以降低java实体bean的代码量。

5.编码规范是否严格执行?

项目如果没有开发规范,任由程序员自主发挥,这可能由于程序员本身的能力问题,造成代码量的增加。可能有些算法设计能力好的程序员10行代码完成的功能,有些程序员用了100行代码。

结论:华为1100亿的代码库,首先是震撼,其次就要去具体看了华为代码库的代码,才能知道有什么问题,否则就只能做一些假设性地猜测。




好吧,需要算算了。按美国平均水平,每个程序员每天10行代码,中国比较勤奋,就算30行吧!一人一年1万行吧。算下来大约是1100万人年。软件有生命期,好的情况下自己败坏周期在5-20年,质量一般的话,也就10年(如此大量代码,只能是行业平均水平)。也就是说,大约需要110万程序员。嗯,什么概念呢?大约至少得10个微软吧!

再说恐怖的,cmm3级(这不是平均水平,而是较高水平了),一千行大约3个问题出厂,1100亿大约是,3亿个bug(也就是3亿个问题)。解决这些问题足够让一个微软公司破产了。但华为活得好好的,其危机却与这个没关系。所以,可以明白的是目前华为的产品代码,绝对达不到这么大。如果此事真实,其中大多数代码应该被抛弃了,因为即便是cmm5也得有3千万bug,这不可能是真实的。

好了,如果代码库真的有这么多,到底是什么情况呢?估计多数是开源代码库的中依赖的部分复制和开发者保存的备份。这是防止断网影响项目进展的防范手段。所以别太嗨了。呵呵。

算完了,但果是不被质疑的。程序员的感受是,一天10行代码?搞笑呢?

那我先拿一个职业生涯中的例子看看个人生产情况:

我刚开始产品级编程是一个通信系统(与华为同行,可比较)。整个系统中开发2年,大约在1991-1993年。我负责系统中的一个核心模块编程项目。敲代码,我最快18小时,3000行汇编,这个小项目的全部代码,强实时,时钟级设计,无操作系统。但全过程过程实际算下来大约有将近6个月。包括原理设计,代码执行机制规划,算法设计,原理机验证测试,逻辑分析仪调试。那18个小时不过是敲代码,基本没有稍微深入一点的思考(主要思考内容:寄存器分配调配;内存效率;3级任务协调;周期计算;累加器溢出控制;可靠性监测周期等细节,以保持遵循详细设计定下的原则)。没有单元测试、没有功能测试、没有代码评审、没有团建和各种活动。(那台逻辑分析仪够我当时10年工资。)一天不到20行代码吧?

项目期间我为自己还开发了4000多行c语言的工具,有算法仿真工具的、有分解烧录文件的、有原型实验的。还有几百行快速编译的dos批处理文件。但这都与产品无关,算不上产品代码。当然还有过程中,放弃了20000行汇编(毕竟当时还是经验不足),主要是架构问题达不到要求,最终代码中没这个,也不能算。就呵呵了,难道连失败的东西都要算到工资奖金里吗?

项目结果:前两年和华为交流,他们说那套91年的代码实现的指标到现在也是先进的。那套代码到最后收到保险柜也没有再改过一行。这中间三年试运行,审查、鉴定、定型、销售,再没改过,所有性能、可靠性监测的保护机制从未启动过,最长运行时间是2万小时。

这是通信领域个人手工业作战的基本情况。

当这种工作被分解给多个人之后就是团队计算了。这是软件工业难点之一:工时估算。

在产品市场问题解决后,开发成本估算就是软件开发难点。最现实的估算是,专家用背靠背评估最终实现代码行数。这些代码行数除以组织软件开发成熟度估算效率(也就是10行每人天的意义),再乘以开发团队的平均人天成本就可大致得到成本量级。所以,10行每人天的估算是开发团队组织效率的,不是程序员个人生产力。

另外:

1、代码库是一种软件工程中的保护机制,不反应软件生产的实际情况。

2、代码不是越多越好,任何以代码行数计算开发人员生产力的想法,都是很外行的。




这是真的吗?如此海量的代码库,应当是全球之最,可以申请吉尼斯世界纪录了。

1100亿行代码,是什么概念,我们做一些比较,就明白了。

上世纪九十年代,大家记忆很深的WPS1.0,求伯君先生个人开发的,源代码大致12万行。这只是华为代码库的百万分之一。


我们公司,是一个开发数控软件系统的公司,各种数控软件,含上、下位机,CAM系统,数据库管理、数控系统等等软件,源代码累计大致两千万行。大致是华为的5500分之一。


世界排名第一的软件巨头一一Microsoft公司,开发了史诗般的经典软件。

操作系统,从MS DOS,到视窗Windows 3.2,WIN95/98,WIN XP,WIN7,WIN10等等,其WIN7据说有5000万行源代码。还有MS的办公软件OFFICE。据说windows及office源代码大小最大为63.2GB。以平均20个字符为一行,大致有3G行代码,即大致30亿行代码。


再加上微软的开发工具VC++,VS等IDE以及相关的测试软件、工具包,我想微软的正规的发行版的源代码,不会超过100亿行。


回头再看看华为的产品。先看最大的操作系统鸿蒙,我们假定它是WIN7的10倍,即五千万的十倍,五亿行代码。华为之前的手机系统也用开源的安卓系统,其中的应用程序,每个版本一亿行代码。我想,荣耀、MATE、P系列累计源代码应不超道100亿行(把每个版本重复计算)。


其它的,如通讯、AI类、云端、笔记本等等,这些应用类,估计要超过100亿行很困难。所以,华为累计发行的产品的源代码,应不超过200亿行。

如果大家认为华为一定会是1100亿行,那么,我觉得,一定要申请吉尼斯世界纪录。因为这个体量,基本是微软的10倍还要多,而华为的利润排名与微软不相上下。

最后,很佩服华为的程序员们,你们辛苦了,为国争了光。




华为大多数的代码都是外包人员写的!外包写的!写的!

至于代码质量,只能说凑合吧!

在去年初,内部实行所有的研发人员必须写代码,标准是每人30行/天。


另外,至于1100亿行代码。其中有很多代码功能相似的模块,在华为内部,实行内部竞争,一个内部使用的工具,有可能有很多个部门在同时的进行研发,然后内部进行对比。选出更好的,所以在内部rtools上有很多工具,甚至有非常多的完整版工具都没人使用。


华为其实是一家非常有危机意识的公司,很多工具市面上虽然有,但是如果华为内部觉得这个工具不错的话,会自主进行研发,这个就是典型的危机意识。以便后期的工具不受制于人。所以很多第三方工具,要么使用开源的,要么直接购买,坚决不使用非常好用的工具,但是pdm上未收录的工具,如果你想要使用,那么先进行入库申请,由安全专家进行审核。


华为在安全这一块做的算是非常严格的了,相信做产品的都清楚黑鸭二进制扫描,安全整改等事务,有时候会花几个礼拜去专门做这个事情。


华为自己有1100亿代码库,至少危险来临的时候有所应对。

作为一个程序员,也应该有自己的代码库。




如果华为有1100亿行代码库,华为从成立到现在接近30年,平均每年40亿行代码。华为最初的程序员几十人到现在的7万人,取平均数3万人。40亿代码除以3万,人均每年要写13万行代码,一年按300工作日来算,每人每天要写400行代码,还要保证程序代码的调试,测试,模块组装,系统测试,改Bug。作为一个资深程序员,我认为除非是低水平重复劳动的复制粘贴代码,否则很难保障代码的质量,效率,稳定性和可扩展性。

程序设计,不是代码越多越好,真正动手敲代码之前,进行构架设计,分层和模块设计,接口设计,扩展性设计,稳定性设计,效率和容错性设计,这些才是程序员真正花时间精力的地方




只能说,华为的成功不是偶然的。华为的代码库远非是一般互联网公司可以比较的,因为华为的产品线非常的全,我不知道1100亿行这个统计如何来的,我怀疑还是有夸大的成分,但是本身华为的代码非常的海量,这是肯定的。

很多朋友提到华为的什么代码重复率高,是否合理这些逻辑,我觉得完全没有必要。在ICT行业这么多年,华为的代码不能说的业界顶尖或者领先水平,至少总体不差。而且华为每年都会有大量的时间投入做代码优化,我觉得这个是不需要质疑的。


至于华为产品架构是否合理,编程是否规范,各个公司有各个公司的要求,这个不好说,不过至少从华为产品的能力来看,至少华为代码的运行效率是很高的。

华为的代码库为何那么多?主要原因还是华为的产品线说。华为几乎是ICT全领域的玩家,所面临的竞争对手几乎是通信和消费者领域所有的竞争对手,所以华为的产品系列非常的复杂,产品一复杂代码自然很惊人。


例如智能手机和可穿戴设备华为的对手是苹果、小米等;通信产品华为的对手是NOKIA、爱立信、中兴等;芯片华为的对手是高通、博通等;服务器华为的对手是联想、HP等,公有云之中华为的对手是阿里云;摄像头华为的竞争对手是海康.....


总而言之华为的产品系列可以说是苹果+小米+联想+高通+博通+中兴+阿里云还有一些光伏、存储等产品,而且华为的产品代码不但包括软件的还包括硬件的、芯片的,因此华为的代码库的庞大当然是可想而知了。

华为这么多年,从数通设备做到手机终端,积累的代码是非常多的。但是1100亿行我还是持怀疑态度,很可能把一些产品老版本的无效代码也计算在内,毕竟有一些代码可以继承,有一些代码已经不用了。


所以,华为如果真有1100亿行代码,只能说华为的成功是一代代码农用代码累计起来的。




确实有这么多,内部可以搜一下能看到1千多亿行代码,但是并不是每一行都是写出来的,华为的产品部门很多,其中重叠的功能也很多,但是各自的都有独立的代码仓,很多代码都是相互移植使用的,所以这一千多亿代码存在大量重复代码,这是不好的,说明部门之前独立战斗,未来趋势应该是平台组件化,你这个产品需要什么功能直接组件插入,而不是把别的部门源码拿来修修改改,自己维护。




华为公司有如此大规模的代码库其实也不是一件很奇怪的事情,比较华为公司已经成立30多年了,无论是硬件还是软件层面都积累了大量的资料,单是代码层面就是一个天文数字的存在了,而且华为产品种类非常繁多,每种产品都会有相应的产品迭代能力,所以达到这种规模的代码行数其实也是可以理解的,而且很多功能模块是可以共用的,所以弄成一个大的代码库也方面代码之间进行共享,在代码共享这方面谷歌公司做的比较靠前,谷歌内部的代码在提交的时候都有严格的代码规范,所以只要拿到了权限就可以根据规则找到自己需要的代码块,非常的方便快捷。

关于谷歌这种模式华为公司也从深层次进行过研究,当初任正非老爷在在接受采访的时候讲到美国的几个科技巨头每家都有值得学习之处,特别是谷歌公司在安卓生态建设过程中所做的事情,更是简单直接高效虽然安卓的代码是开源的,但是全球没有几家企业能够跟的上谷歌的节奏,谷歌正是用这种模式在移动操作系统领域杀出了属于自己的一片天地,华为手机在海外销售还要受到谷歌GMS的制约。

按照华为公司目前公司的规模只是研发人员就达到将近十万的级别,单单是软件开发人员都有几万之众了,而且华为公司在内部管理方面有着高效的机制运转,之前同华为公司接触过,华为在使用安卓系统进行开发的功能的时候,底层代码经过了大量的修正而且修改的地方非常之众多,也就是讲华为公司在产品研发上的迭代的速度非常之快,而且已经快到了让人窒息的程度,几万人的规模加上企业已经成立了30多年的时间了代码行数达到1100亿行的规模也不是一件特别让人诧异的事情。

由于美国针对华为公司的实体清单事件,让华为公司在国内成为响当当的企业,其实从另外的层面讲美国给华为公司做了最大的免费广告,让之前一直处于低调状态的华为公司突然之间成为大家在街头讨论的重点,而且华为公司的手机产品在4月份占据全国的65%,这是一个非常恐怖的数字也难怪小米的高管喊出来这种比例的销售量对于市场竞争是极其不利的话语。

华为现在是国内最大的民营企业而且绝大部分的收入来源来自于海外,这是国内无数不多的赚取海外利润的企业,单从这点上讲华为公司的很多策略都是值得国内很多企业去学习,而且从成立到现在一直致力于通讯行业技术的研发,终于数十年磨一剑成就了如今的华为公司,中国也因为有华为这种优秀的企业而感到高兴,最重要的是华为公司在5G领域有着绝对意义上的领先优势,而且随着时间的推移这种优势还在不断的加深,而且华为公司每年提交大量的有效专利也保证了这家在国际市场生存稳定性越来越强,在历史从来没有一个国家针对一个企业下如此大的砝码,从这点上讲非常值得大家赞扬,能够拥有1100亿的代码数量更加能从侧面证明华为公司的强大之处,希望能帮到你。




作为一个曾经的华为外包,我想从这几个角度发表一下我自己的感想。

纯手敲个人观点,如有不对,还望海涵。

第一点:代码数量。

看到这个标题可能会让许多朋友为之一震。没错,1100亿是一个什么样的数字?2020年全国所有软件开发人员(从新手到大牛)估算数量为500万左右,那么照这个数字计算,国内每一个软件开发人员今年需要为此贡献两万多行代码。所以仅看这个数字我们会认为是一个非常夸张的数字。聊完了量级问题,那么质量又会怎么样呢?我们继续往下聊...

第二点:世界级企业——华为。

大家从今年的实事新闻中就会得知,美国疯狂制裁和打压华为。不单单是5G技术,华为在芯片,操作系统等各个领域都在蓬勃发展,力压群雄。所以今年年初的时候,网上会流传着一句戏谑之言:华为费尽心思搞芯片,阿里忙着西北种树,腾讯还在想着推出什么新的游戏祸害中国儿童...大家听听就好,请勿当真。所以华为的种种举动便会引起美国这种霸权主义国家的注意。大家有没有想过一个问题:为什么中国这么多家企业,唯独华为会受到美国的制裁?树大招风还是什么呢?可能每个人的想法都会不同。但是无论怎么样,华为拥有一个其他的小型公司都无法比拟的实力,这是我们都应该承认的,而且让我们为之骄傲的。代码库的代码数量,也仅仅是显现出华为这种世界级企业雄厚实力的冰山一角罢了。

第三点:技术创新。

可能业内的同行朋友们都知道一些如今比较热门的技术栈,比如:Dubbo,RocketMQ,Zookeeper,Netty等等。无论技术的建造者是阿里还是谷歌,这确实就是人家独特的一门技术优势。能够发明并且实现这些技术的开发人员们,肯定有着丰富的底层原理知识。为什么国内有着许多优秀的应用级项目和软件,而在底层技术,就类似于自创的操作系统这样的东西上就鲜为人知呢?说得简单点,就是没有什么利益可言。但是底层技术重要吗?重要。为什么?举个例子,以Java开发人员来说,如果拿掉平时开发常用的一些IDE,你能用记事本工具写出一个领先世界的软件出来吗?恐怕连一个图书管理系统都得折腾很久吧?这就是独特技术线的优势所在。所以技术创新,也是每个想要做大做强的企业绕不开的一个话题。而想要技术创新,就得依靠大量的代码测试和实现。这也是华为庞大代码库的一个体现。

第四点:需求。

软件开发行业的朋友们都听过一个词:需求。没有需求就没有开发可言。在小公司或是我们自己出去接私活,可能都会觉得狼多肉少,找一个利润丰厚,开发难度不高的需求是真的困难。但是类似于华为这种企业一般不会存在需求问题。为什么?我可以用自己现在的亲身经历告诉大家,在大厂待着,只有你写不完的代码和开发不完的功能,从没有过为找不到活儿干而发愁的时候。既然企业需求量大,那么就必须招聘更多行内人士甚至是刚入手的新人,外包人员等等来完成相应的开发任务。这样一来,鱼龙混杂,当然什么代码都会有。什么循环创建对象,取值判空后再赋予给原值等等这样的神仙操作秀的我一愣一愣的。这样一来,整体代码质量下降的同时,当然代码量也会随之增加。这也是一个不可避免的原因所在。

总结一下,华为确有实力,市场仍在拓展。不聊了,下个早班泡个吧去...




需要一个X项目对整个代码重新设计优化。就像重新写C库或OS。华为人才很厉害,但与国外顶尖人才比要弱的多,基础库,云基础软件,AI基础软件,os和实时os都没有自己的,编译器不知是否真的自己搞的。

展开阅读全文

页面更新:2024-05-19

标签:华为   代码   行规   微软   美国   源代码   程序员   操作系统   功能   工具   项目   系统   产品   科技   企业   软件   公司

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top