我和老婆聊天,说部门要我写个“大咖谈软件”的文章,老婆斜了我一眼

一天晚上,我和老婆聊天,说部门要我写一篇《大佬谈软件》的文章。老婆瞟了我一眼,淡淡的说道:“Linus 21 岁写了 Linux 内核的原型,创造了一个自由主义的开源世界;张小龙 28 岁写了 foxmail,卖了2000年1200万。大咖,认识你这么久了,还不知道你有什么突出的成绩?我为难燕子:“好吧,我重新整理一下语言,我要写一篇关于软件的文章……”

回顾过去的六个月,首席软件工程师和软件专家的上任,让我们这些写代码十多年的软件工程师兴奋不已。2006年加入公司,几乎参与了华为3G控制器产品的整个生命周期。我见证了华为3G从起步、崛起、提升、巅峰到衰落的波澜壮阔历程。我有幸在 35 岁时加入了 5G 发展部的大家庭。

十多年来一直在编码岗位,经历过普通开发者、TL、MDE、MDEL、SDM(云端团队)、Committer、软件专家等岗位。不过我很清楚,我不是大牛,从事编码这个“高危”职业十几年,没有“祭天”,靠的就是自己的修养。一个程序员——扎实的软件基础能力,如履薄冰的工作态度和对技术孜孜不倦的追求。

《祭天》的幽默描写

好的代码是什么样的

记得几年前部门第一次评选优秀代码,我就成为了“金代码奖”的获得者之一。是因为代码花哨吗?并不真地。我参与选型的代码遵循一个简单的原则:简洁、逻辑清晰、数据结构设计合理,功能职责列表单一一、。没有使用复杂的编码技能,也没有应用设计模式。就像公司最新的 C/C++ 语言编程规范一样,编写简洁的程序也是当务之急。代码简洁,逻辑清晰,易于阅读和维护。由于需求的变化,这段代码也进行了修改,但从未引入在线问题。

当然,简单并不意味着没有思考,相反,它要求我们在写代码之前做出决定,在行动之前三思而后行。有一次项目组安排我做性能优化。通过反复分析热点功能,反复测试对比不同流量模型下的性能差异,前后花了我三周的时间,才找到导致性能恶化的最关键因素。. 最后,我决定采取修改备份机制高质量程序设计指南:c /c语言,减少备份数据的优化措施。这些方案的代码改动很小很简单,但是实际优化效果很好,满足了未来几年业务发展的需要。

让我们看另一个例子。站点升级到新版本后,CPU负载增加。经过近两周的研究,我最终的定位是新版本在业务处理过程中增加了直接读取DB内核的操作。直接读取DB内核,代码处理简单,可以正常实现业务功能,但是性能很差。如果你在开发过程中能多想一步,采用缓存方案,性能会天壤之别高质量程序设计指南:c /c语言,也是更好的代码。

人们常说,唯一不变的就是变化,客户的需求总是在变化,我们的代码也在被动或主动地变化。设计出可扩展、自动适应客户需求变化的软件架构是软件工程师永恒的追求。这说起来容易,做起来难。我们需要不断积累业务知识,拓展知识,勤于思考,把握未来技术的演进趋势。我们不能从一开始就拥有一个包罗万象的架构来涵盖万花筒般的未来,即使我们可以,交付节奏也不一定允许它。满足当前和未来业务需求的设计可能是最合适的。

练习扎实的基本功

能够写出好代码,并且能够不断地写出好代码,需要我们对技术原理和业务逻辑有深刻的理解。前提是要有扎实的编程基础,也就是基本的软件能力,比如基本的数据结构和算法、编译原理等。

去年年底,我和系里的几位软件专家一起去外面参加了一个互联网架构会议。AI、区块链、物联网、云、中间件等与时尚、热点、风口相关的话题很多。但没想到最热门的话题是一些基础的软件设计、架构设计和演进。就像在武侠小说中一样,只要练好基本功和内功,任何细微的动作都能触手可及。

此外,一些编程习惯,如果你坚持下去,对于提高编程技能也是非常有用的。比如快捷键的使用、有效的代码注释、命名规则、代码风格等。每次写代码除了追求好的代码外,我总是在想软件优化,能不能少用内存,能不能有更好的性能。关注数据结构中的每一个字段,每一个小代码优化,都可能给我们带来意想不到的收获。比如在去年的性能优化中,我们只是将进程中的一个动态内存申请改成静态内存池,却意外实现了30 CAPS(每秒调用次数)的性能提升。

团队合影

一行代码引发的悲剧

有人问,我明白了,为什么还是不能写出好代码呢?

图片[1]-我和老婆聊天,说部门要我写个“大咖谈软件”的文章,老婆斜了我一眼-老王博客

很多开发者,由于个人习惯、期限、外部要求不高等种种原因,在编程的时候很随意,直接Copy-Paste。我认为程序员应该像追求生活质量一样,养成不安定的编程习惯和严谨的编程态度。

对于代码库,我一直战战兢兢,如履薄冰。在去图书馆之前,我会反复查看自己修改过的代码,查看修改后代码的上下文,对比修改前后的代码。将代码添加到库后,请检查几次代码,以确保它已按预期合并。我在公司这么多年,从来没有成倍增加、错过或错过任何一行代码。

你可能认为我在做文章,但实际上,这是历史上的惨痛教训。在某国升级到新版本后,发现用户访问成功率变差,最终定位是误删了一行代码造成的。回想起来,开发人员自己不记得为什么要删除这行代码。还有一次,一行代码被误删,导致一个关键的KPI指标:软切换统计次数发生了变化。该部门将这两起事件总结为“一行代码引发的悲剧”,对产品品牌、客户印象和个人都造成了不好的影响。

后来大家都在想,我们有结对编程、代码检查、开发者自测等非常完整的开发流程,而MDE(模块设计者)检查是代码上传库前的“看门人”,为什么这么低级?错误?是因为流程没有正确执行,还是 MDE 疏忽,没有得到适当的控制?

在 IPD 2.0 变更中,公司借鉴开源组织的 Committer 运作,强化我们的 Committer 机制和文化。5G发展部还选派了一批Committer,我有幸成为其中的一员。刚开始履行 Committer 职责的时候,我有点迷茫:这不就是给 MDE 角色披上了新的外衣,通过 Committer 统计来呈现 MDE 原本“私下”做的事情吗?

但是,经过几个月的探索和实践,我逐渐明白,Committer机制应该是一种文化变革,引导大家提升自己的软件能力。Committer 有很多职责。作为代码提交前的最后一个检查点,这种做法在现阶段人员能力不足的情况下是有效的,但最终应该被削弱。参与预编码软件设计,持续做好架构关怀和技术债务清理工作,让大家有更大的机会写出更好的代码,我认为这就是Committer更大的价值所在。

随着个人和组织软件工程能力的提高,自动化测试保护网络和变更保护墙的建立,上述“单行代码引发的悲剧”可以避免。

“变墙”够靠谱吗?

对于大部分老员工,尤其是无线2G/3G/4G等部门的老员工来说,一提到变更控制,就会觉得自己是个大敌。版本升级后,绝对不允许KPI恶化。严重时可能面临版本回滚、客户投诉和上报事故。当KPI变好后,除了向客户说明外,还可能面临业务风险,客户会觉得自己以前吃过亏。现实世界对我们如此苛刻,谁让我们成为影响世界的通信软件工程师,他们深爱着责任心!

我们开发的版本通常涉及数十万次代码添加、修改或重构。为了不引入变更问题,除了好的设计、结对编码、代码检查和测试之外,我认为最重要的是一个完善的自动化防护网。在 3G,我带领两位同事将 IT 测试项目从几百个用例扩展到了数万个。全方位的场景覆盖、严格的小区有效性检查、完善的用例故障判断机制、无死角的资源泄漏检查,让变更错误无形中,为3G留下变更保护墙。

在开发过程中补充 IT 和 PC-ST 测试用例不是为了提高代码覆盖率,而是为了自动化保护。要实现自动保护,前提是每个用例都有完整的有效性检查,否则保护网络无用。几年前,我和同事开玩笑说:“我会特意改一行代码,看看你添加的用例是否可以检查。” 出乎我意料的是,他在交货紧张的情况下还是花了我半天的时间来完善用例的有效性检查,并让我故意改错代码进行测试。当然,最终的结果是他准备充分,我没能发现问题。多么自私的程序员啊!

对新兴技术保持好奇

说起程序员的追求,我也想起了2016年参与的一个产品云化项目,负责弹性伸缩功能的设计。在此之前,我一直在投资嵌入式软件开发。虽然这期间产品也换了几代硬件,但我经历过产品与平台解耦、标准之间解耦、软硬件解耦的过程。但是对于面向服务来说,对于微服务、云化等概念,我基本上是处于一知半解的状态。

我不知道该怎么办,但我只能“站在巨人的肩膀上,为我所用”。兄弟们的产品线不是已经做好了吗,那就请他们作为同行来协助吧;朋友和商家没有路标和规划,就自己有限的材料找地方学习吧;互联网的亚马逊云和阿里云没有吗?是不是很成熟的解决方案,然后下载他们的产品手册和用户指南……那段时间我感觉自己被迷住了,疯狂地学习分布式软件相关技术,疯狂地吸纳各方面的精力供我使用,最后给了一个让我自己和项目都满意的设计方案。

这也让我充分意识到我之前专注于产品、系统和子系统的不足。

作为程序员,除了提升自己的软件基础能力,还要时刻保持对新兴技术的好奇,孜孜不倦地追求,不断开拓视野。而这方面的能力和需求,在5G时代更是如此。

目前,华为5G面临的网络安全问题有很大的政治因素,但也从侧面反映出5G的战略意义。超高速、超大连接数、超高可靠性和低时延对我们在软件处理时延、可靠性、安全性和弹性方面的能力提出了更高的要求。同时,5G承载的垂直行业应用、开放接口、“白盒”硬件等趋势,必将对我们当前的知识和技术体系提出更大的挑战。

公司计划用五年时间全面提升软件工程能力,对我们来说是考验,也是机遇。统一的编程规范,干净的代码,干净优雅的架构,不同的人有不同的追求,我们需要有毅力和决心。五年或十年后,当我们回首往事时,我们会发现我们所做的一切都是值得的。正如清代著名学者王国维提出读书三境界中的第三境界:“我在人群中千寻她,回头一看,那个人在灯火阑珊处。 。”

也许我们大多数人这辈子都无法成为莱纳斯和张小龙这样的大神。但是,我们可以做一个有修养的程序员,参与到华为改变世界的5G产品的开发中,把我们自己的优秀代码留在人类通信史上,谢谢。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论