“硬核”编码老中医
20多年前,我还是北方交大(现北京交大)通信专业的一名学生,那时的电脑还是VxWorks操作系统,互联网的应用也非常少,甚至如今看来的“老古董”——INTER 386、486 CPU的电脑也都是一个宿舍几个人凑钱才能买1台。做毕业设计时,因为选择的课题要用到VC编程,才开始正式自学C语言。从自学C语言到在软件开发的岗位上坚守十几年,我的码龄和年龄一同增长。有人说,编码就像运动员,吃的就是个青春饭;然而,我的过去、我的现在都让我坚信:编码就像老中医,点点滴滴的收获都将成为一生中宝贵的财富。如今,我已然和代码成了最好的老朋友。
硬“刚”是不够的,还得被多吓几次
2006年11月,我通过社招来到华为网络产品线(现在的传送与接入产品线),成为了一名软件开发人员,虽然那时已经立冬了,却丝毫挡不住一颗火热的、挽起袖子准备大干一场的年轻人的心。软件要新学,协议也是新的,硬件设备也得摸索清楚。那会儿,一起来的五、六个兄弟经常“钻”在一起——
“你说这协议咋就那么厚呢,‘发明’它不容易,搞懂它更难啊。”
“编码还是让人很有成就感的,看,环境上跑起来,感觉挺神的……”
虽然,坎坷的路确实不好走,但内心却憋着一口劲儿:想看到自己的代码为用户带来真正价值的一天。
我一直觉得,上手、多问、多做这种土办法最让人踏实,具体来说就是硬啃协议、硬调代码,虽然这些骨头着实难啃,但这些硬“刚”的过程会让自己的技能不断得到提升,而且只硬“刚”也还是不够的,你还得被多“吓几次”。
SIPP2信令软件X功能——那是我来到华为后交付的第一个特性,我还记得代码转测试那天心中难以言喻的喜悦。然而,当天下午……
测试给我师傅老万急电:“老万,快过来,刚发现的问题,死机了。”
“来了!小王、小李,一起跟我去看看。”
测试经理、项目经理、领域专家……似乎每个人都步履匆匆,一种莫名的紧张突然涌上自己的心头,“不会是我的代码问题吧……老天保佑,千万不要是我的代码。”
半个小时后,他们回来了,对我说:“小冯,设备死在你负责的模块上了。”果然应了那墨菲定律,怕啥啥来。
那天,内心真的有点受打击,我反反复复走读着自己的代码,最终发现是一个很简单的异常场景没有做保护处理,导致这个场景下程序异常,设备死机。我在测试环境上修改、验证,心里憋着一口气,一定要搞定才行。一直忙到晚上十一点,问题搞定的那一刻,终于长舒了一口气。这也是来到华为后第一次因为一个问题而心惊肉跳:这么一个低级的问题,竟然能引起这样的轩 然大 波 !
这不禁让我想起了老中医,理解需求后写下的每一行代码就像老中医诊完脉所下的方子,一笔错了都可能引发意想不到的后果。可信变革需要我们一次次地下方子,甚至也会遇到很多的“第一次”,一路上也会积累下许多的经验甚至教训。像对待生命一样秉承着对代码的敬畏,谨慎思考、大胆下笔,我们会收获得更多、成长得更快。多年过去了,如今我也成了别人口中的“代码高手”,但我想说的是:“再强的代码高手,再优秀的可信代码,也都是踩着一个个错误走过来的。”
不起眼的可怕“代码角落”
在我入职一年多的时候,2007年的一天,武汉一线来电话了:“‘家里’(一线对研发体系的称呼)得赶紧看看,有一部分用户已经打不了电话了!”
我就马上收拾东西,带着信令对接仪,中午一个人坐着飞机就赶往武汉。下了飞机,找到一线的同事就直奔客户机房。走进机房的那一刻,我的内心“哇”了一声。这个场面真和当时的实验室不一样啊,一排排、一列列、各种闪烁的指示灯、耳边嗡嗡的运转声……我们写的代码竟然会承载在这么多设备上(虽然我只是来到了万千机房中的一个),而每一个设备又将连接难以计数的用户。
一想到那么多人打不了电话,手心都有点冒汗,心脏也噗噗跳得厉害。折腾了很久,终于发现是一个时序配合错乱的问题。紧急修改验证,最终问题得以解决。
还有一次,四川也是很多用户投诉打不了电话,但问题出现的概率很低,无法确认问题根因。我只好“守株待兔”,一个人在机房里足足“蹲”了五、六天,就在所有人认为“这就是个极小概率的问题,再也不会出现”的时候,就在我中午刚吃上饭没几口的时候,问题突然又爆发了,投诉电话一刻都没有停过,用户的着急、催促、抱怨全都来了。
客户很着急,第一时间给我和接入网总部的主管打了电话,饭都没吃完我就赶紧赶过来。研发就我一个,所有人的目光、期望都集中在了自己的身上,那一刻的压力真的难以描述,脸烫到极点。
经过和总部的兄弟们一起讨论、定位,发现问题还是因为一个低级错误,而这一次并非场景考虑不够周全,而是更不能原谅的、如今可信最基础的编程规范所要求的“初始化”搞错了:根据编程规范要求,每一个变量都应该明确初始化值,然而在十多年前,大家都习以为常地认为不初始化也可以,用系统的默认值也没问题,谁也不会料到这样不起眼的“角落”会在现网的环境上运行异常、打不通电话。虽然问题解决了,但给我们的教训是惨痛的。
经验和习惯是非常宝贵的财富,但必要的时候也需要我们打破曾经的“习以为常”。正如同可信变革,有很多人会认为:我们的代码已经运行了那么多年,干嘛要优化?不出问题就行了;甚至也有人会想“有时间就搞一下,没有时间就不搞,先把产品开发出来再说”,这些观念其实都是对践行可信的一些误解。“有毛病”的代码就像身体里一点一点积累的毒素,日积月累,就会爆发出来。与其等到发病的一天痛苦不堪,不如从一开始就严格要求、极力做好,并在发现问题时果断“祛腐生新”。中医讲求气形神的统一,而可信也需要我们从导向、管理、能力、文化等多个方面去持续努力,它不是一件容易的事,但只要我们真正用心去做,慢慢地总会有所改变。
踮起脚尖够苹果
科技的进步是非常迅速的,就像20年前,谁都不会想到智能世界会如此迅速地到来。匍匐前进的路上,一开始谁都不会想到曾经屡遭冷眼的华为,如今却赢得了全球客户的信赖。编码,仿佛电影《攀登者》中那条通往珠穆朗玛山顶的路,只有我们仰望更高的目标,才能攻克曾经看起来根本不可能的山岭。
2013年,接入网Cable上网设备的绝对“赢家”还是C公司。那时,华为设备所使用的X公司的B芯片问题很多,而且X公司对华为的支撑十分有限,维护起来非常困难。这一年,新的用户需求已无法在B芯片上得到实现,接入网产品线决定开始自主研发,不再受制于人。这一次,我们将彻底使用新的方案,开始掌握芯片的核心技术。
这又是一次全新的挑战,我们需要充分掌握整个协议的调度,分析清楚每一个功能实现的细节,准确地说,这对参与本次项目的所有人都将提出非常高的要求。
立项之初,团队人很少,对团队的大多数人来说也都是第一次完全重新设计。那段日子,我们一直在关注业界关于语音、Cable的发展趋势以及标准组织的最新进展,参加运营商组织的相关会展、标准讨论,适配不同国家自己的定制规范,多次前往客户现场交流解决方案,进一步了解客户诉求,我们相信:只有开拓视野才能紧跟技术前沿,才能在第一阵营中脱颖而出。
而到了真正下手设计、开发的阶段,其实真的没有什么捷径,就是从能获取到的资料、代码里一行一行地“抠”,我们几个经常找个会议室,或者有时就直接是座位前、座位旁的白板前,画着、写着、说着,从最开始的系统可用、可靠、有韧性,到后来从安全、隐私等维度进一步优化,逐步迭代(现在想来,这些不就是如今可信所要求的吗)。那会儿,我带着团队,虽然心里时常打鼓,但问题来了、卡住了,还得是一副啥都不怕的样子,我最重要的工作之一就是处理疑难杂症,给大家吃定心丸。
还记得有一次,周边团队有一个难缠的关键死机问题搞了很久,后来连产品线都发出了悬赏,希望集结各地智慧共同解决。我一直喜欢这种有挑战的事情,通过同事了解了问题的背景,很快就联想到了几个可能的地方开始排查,走读代码、查以前的设计文档、加测试代码验证,好几个疑点都被一一排除。正在我纳闷儿怎么回事的时候,突然脑海中闪现出了一个代码段,经验和直觉告诉我,一定就是它。最后试了一次,问题确实在此。虽然刚开始,自己也是抱着试一试的心态,但没想到还真的搞定了。那一刻,编码人员的自豪感与成就感真的油然而生,内心有感而发:谁说编码就是个青春活儿?这不,以前攒下的经验后来不就用上了吗?
从刚开始的四、五个人既设计又开发,到后来的十来个人一起奋战,那段日子真的可以用“踮起脚尖够苹果”来形容:有目标、有决心、费劲儿。经过这个项目的历练,我明白了:无论是软件开发还是精进医术,我们总会遇到新的挑战区,就像从中医学徒到老大夫再到后来的华佗级人物,可信变革就像登上更高阶层的山岭,也会让人觉得前方迷雾重重,但只要我们勇敢地迈出一步,无惧风雨、放手一搏,虽然压力会来,但动力也会持续剧增,最终我们将看到不一样的风景、收获到更加香甜的果实。
编码:从热爱到“硬核”
2019年5月16日,这对每一个BCM团队来说都是刻骨铭心的一天。在此之后,我们在接入网语音设备上一直使用的一个A国芯片需要替换成X芯片,这一仗真的让我们体会到了什么叫做“与时间赛跑”。
我们要实现基于全新芯片的软件驱动,而这个项目最大的挑战就是业务芯片与测试芯片两块芯片需要并行开发、验证并解决性能问题;重构优化、新增代码后,不但要确保对新芯片的支持,还要保证对老功能的兼容;项目工作量巨大,而从6月提出需求到9月底TR4A,留给我们的时间仅有3个月……所有的一切,对编码人员都是一次考验。作为软件总工程师兼Cable领域一级Committer,需要在一系列优化提升的动作同时,基于可信,坚守架构、质量的绝对高要求、高标准并有效落地。
刚开始那会儿大家压力都非常大,产品线的主管、专家等等,我们经常一起讨论——
“这么多代码,可不是随随便便就改的啊!”
“需要考虑的确实很多,老冯,你心里有底不?”
心里有底不?那时心里真的不敢说有底还是没底,想的就是怎么理清思路。我们从业务交付、人员能力、可信氛围等多个维度讨论了很多次,让个人的能力联合在一起形成组织的能力、组织的氛围。那几个月,我们经常细细研究着业界对可信的定义、编码大牛对软件的实践经验;细细琢磨发现的每一个代码Bug或者优化点,即使它们微小得很难察觉。很多个晚上我都在想:“这么繁琐的几十行的代码,为什么不重构一下,封装提炼后的代码量将大幅下降,而且功能更加稳定。
那次,小王交付X特性,新增了一段代码,那天我们几个人在实验室里检视他的代码。刚打开代码没多久,就看到一行以“extern”关键字开头的代码……
我说:“小王,这个地方不用extern,直接调用就可以了。”
但小王非常确定地说:“为啥呢?这个文件引用了外部函数,要调用,就得加上才行。”
老李笑着说:“不用啊,小王,这块代码之前已经进行了架构重构,再也不需要extern了。”
小王仔细看了一下上下的代码,忽然恍然大悟,说:“还真是,之前一看要引用,就习惯性地加上了。重构后,确实清晰了许多,不再像以前那么乱,到处调用。”
就这样,我们在一次次的工作中对齐可信要求,让可信逐渐成为每个人特性 交付的重要关注点。回望过去的这些日子,我们从来没有立过什么高大上的里程碑,一门心思想得就是怎么让经手的代码更清晰规范、兼容性好、不出问题,后续我们要更加注重在产品配置管理、代码管理、文化提升等其他方面的建设。
后来,我们整理了可信指导书,从宏观的概念到落地的细节,“手把手”教大家如何优化、整改;将代码规则、规范落入要求和工具中,真正将问题防范在前端;让集体代码检视与个人代码检视成为一种习惯,形成牵引机制,鼓励每一个人参与其中。我深知:只有每个人知道了、理解了、做了,这才是真正有效改变的开始。
当和同事们一起奋战解决一个个问题,完成一项项挑战,最终看到项目在网上的优异表现。一切的努力过后,事实证明:我们在语音BCM新芯片技术验证项目最关键的时刻顶住了!
有人问我:“老冯,你写了二十多年的代码了,觉得枯燥不?”
我总是笑着一说:“自己写的代码,那么多人在用,能觉得没意思吗?”
在接入语音领域做了十多年,自己深深地感悟到:软件编程能力的提升来自于持续的积累和对业务的深入理解,敢于接受挑战,在实践中不断成长。十多年来,也许一直没变的就是这份对编码的热爱。正因为这份热爱,才让自己在后续的每一次关键时刻无惧无畏、勇敢前行;也正是因为有更多对编码一直热爱,并长期坚守在编码岗位上的软件人员,才得以让我们的产品竞争力成为并持续业界领先。
如今,可信作为客户愿买、敢买和政府接受并信任华为的基础条件,需要我们全体员工发挥主观能动性,构建自下向上的变革决心,从源头出发,搭建好的软件架构,追求代码极致、架构极简,构筑安全可信的产品体系,生产出满足攻防设计要求的、有竞争力的产品,达成过程可信、结果可信。
还记得我刚开始说的吗?——“编码就像老中医,点点滴滴的收获都将成为一生中宝贵的财富。”编码——从热爱,到“硬核”。可信之路,你我同行……
本文为《华为人》版权所有,未经允许不得转载。如需转载请联系编辑部hwrb@huawei.com
- 点赞
- 收藏
- 关注作者
评论(0)