从打折基站到代码大牛:无线十年,我与编程的不解之缘

2024-07-07
来源:网络整理

不知道从什么时候起,当亲朋好友问我能不能买到打折的手机时,我总会脱口而出:“没有打折的手机,却有打折的基站,我们去了解一下吧?”说完觉得有些可笑,却又显得如此合乎逻辑。我想,在无线的十年里,写代码或许已经深深融入了我的生活,因为它不仅见证了我的青春,也见证了我那些不肯认输的时刻。

我打算把这条路走到底!

哪一个程序员一生中没有遇到过一些 Bug 呢?

我爱上编程纯属偶然。上大学的时候,我没钱,只有天赋。那时候,我还想着用手写情书的方式来追求女孩子。我写了一款 3D 迷宫游戏,把女孩的美照放在迷宫的关键路径上。这个小游戏帮助我哥打败了 99% 的直男,成功追到了学校的女神。我也成为了我们班男生眼中的“代码达人”。初尝成功的滋味,让我感觉到从事软件行业也不错。

2007年底,我成功应聘华为无线,接手了在上海成都研究所上线的首个产品UMTS。因为之前在游戏开发方面经验顺风顺水,我以为基站软件编码并不难。然而入职第二个月,我就被打脸了。当时还是瀑布式开发,严格按照事先规划好的需求、分析、设计、编码、测试的顺序进行,只要有一个环节不通,所有人都得停工。我负责系统广播消息的整改优化,轮到我协调的时候,DSP(基带子系统)收不到我发过来的系统消息,我不停地看代码,搞了两天两夜,一点头绪都没有。部门一百多人因为我而被堵了48小时。总监不停地在我座位后面绕圈,盯着我的屏幕,一脸焦急,深深地伤害了我。 我什么时候从别人眼中的大人物,变成了一个拖泥带水的人了?

48小时后,主任觉得不能再等了,就安排部门的技术高手帮我理清思路,重新读代码。最后,我找到了问题的根源。原来,从CPU向DSP发送消息时,需要提前20ms发送。我当时太自信了,不知道信令之间有严格的时序关系,发送和接收都有延迟。我自然而然地想到优化到实时发送会更省时间,效率更高,于是想也没想就改成了脑子里“更漂亮”的代码。但这个“更漂亮”居然变成了bug,阻碍了我们的联调。问题终于解决了,但那天晚上,我有生以来第一次失眠了。我甚至开始怀疑自己,是不是不适合从事通信行业?

第二天,我找到部长,把自己内心的煎熬和自信心的崩溃说了出来。没想到部长一脸理解的说:“作为程序员,我们每个人一生中都会遇到一些bug,这些都是我们自己亲手埋下的地雷,不管怎么样都要自己挖出来,下次你一定要自己挖出来。”我们相视一笑,顿时,我心里轻松了不少。

经过这次挫折,我对大型通信软件有了新的认识。年轻的时候有些自负,以为自己编码技术不错,但其实软件领域有太多未知数,山永远比山高,不懂的东西不能想当然,要向前辈请教。代码越“优美”越好,网络上运行的每一行代码都是一代又一代华为人不断改进的结果。从表面上看,这些代码离优美还很远,但在业务场景和功能完备性方面,通常都比较全面,出现问题的概率很低。

越是曲折,风景就越美丽。

没有无法解决的错误

只是我们还没有找到正确的方法

怀着对编码的敬畏之心,我在业务组工作了很久,在熟悉的业务领域,功能开发、小模块重构都能游刃有余,我主导的模块重构还获得了公司的E2E质量奖。但或许是因为太熟悉、太安逸了,我感觉自己的热情在一点一点消退。就在我以为自己会变得麻木,甚至有其他想法的时候,一个拓展视野的机会来到了我面前。正是这个机会,让我坚定了继续在软件世界遨游的信念。

当时按照公司要求,产品线需要启动 Hert 8.0 的性能调研,每年新增的 10 万+ 代码会成为产品性能的负担,所以每年的性能调研是项目的重中之重。但经过多年的平台切换和性能优化,我们能想到的、能用的招数都试过了,我们束手无策,如何让性能 KPI 持续上升?尤其是 4 个月内必须提升 XX%,我们能按时完成目标吗?

主任找到我,问我愿不愿意接受这个高难度的挑战,支持项目组完成性能优化,支持至少1500条链路每秒的建立,这是一个我以前没有涉及过的性能优化领域,我能做吗?

妻子鼓励我说:“这不就是你要找的突破机会吗?拿出当年运动员的精神,坚持下去,突破自我!你要相信自己,你就是‘百米选手’。”这里要说明一下,我从小学到高中都是学校田径队队员,从一个热爱运动的小孩,练就了国家二级运动员的水平,成为研究所的“百米选手”。

在妻子的大力支持下,我高高兴兴地加入到研究团队,利用业余时间多渠道、多维度补充知识。同时,研究方向也请教了产品线架构部专家,消息通信优化方向请教了底层平台专家,Ans1编解码优化方法请教了已经成功优化的部门等等。我主张把能想到的途径和方法都试一遍,抱着一线希望。我们从业务流程、业务算法、模块部署、热点代码、编译选项等多个维度发起进攻。同时,4个月后,我们如期成功攻克了这座山头。

一瞬间,我感慨万千,我意识到软件开发的路变得更宽广了。以前我以为软件开发就是代码的搭建,谁把代码写得更简洁实用,谁就是伟人。其实,更多的是合作、探索,智慧的碰撞。当我们历经千辛万苦,齐心协力,突破“风暴”的时候,心里的迷茫就像乌云散去,感受到了沐浴在阳光下的清爽和自信。这让我更加坚定了选择软件开发的决心。没有解决不了的bug,只有没有找到正确方法的bug。

我的主管对我的大胆想法感到震惊。

5G TUE(试验终端)落地成都,部门想成立软件架构优化小组。鉴于我过往的表现,部门希望我担任技术负责人,从一开始就解决未来可能出现的性能问题。我分析了公司外研院开发的号称全球最快的“并发框架”JSF,以及各种异构系统的并发框架,发现取各家所长,开发一套新的并发调度框架更为有益,可以让TUE/CPE在生命周期内不再需要考虑性能问题。这种架构可以结合TUE/CPE的高负载、超低时延、多板多框共存、产品硬件板卡每年更新、多种产品的业务特点,达到每秒处理百万任务的性能规格。

我简单跟部门经理讲了一下开发新并发框架的想法,经理一脸震惊,“这个想法太大胆了”。原本的计划只是做些小幅优化,现在却要全部重写。我们的软件实力够用吗?风险在哪里?版本能按时交付吗?性能会不会变差?会不会影响公司整体5G发布节奏?一连串的问号让他感到完全没有把握。但我坚信,如果开发了这个新框架,完全可以“碾压”原来的架构,新的架构会让整体更加简洁,就像著名的印度街道电线图一样。只有重新铺设,架构才不会腐化,更利于后续的开发和维护。但经理还是不同意,认为风险还是太大了。

想起架构大师Till Adam曾经说过,优秀的架构师首先要是个推销员。于是,我整理了新架构的种种优缺点,开始游说主管和MDE,从进度分析、性能分析、架构预览、风险预判等维度,一一解答他们的疑虑和顾虑。经过两周、十场密集的技术较量,部门最终同意分成两组,我先开发架构原型,另一组对原有架构进行优化,谁先验证、改进幅度大,就用他的架构去适配、修改产品代码。

是时候把我积累的知识和技能用到实践上了。我心里燃起了一团火,只想尽全力把想法变成现实。整整3个月,我把所有的精力都投入到了新架构的开发中。用我老婆的话说,我简直是“痴迷”了。吃饭、走路、睡觉的时候都在想这件事,几乎没有停止过思考。还记得最后一天,新架构的原型基本完成后,单板的性能压力测试远超预期。这个结果让我觉得过去所有的努力都是值得的。部门终于有了足够的信心,决定用我的新架构开始业务层的适配修改。

2017年5月,上海通信展上,TUE被集成到汽车上,参观者可以通过5G网络实时远程操控展厅30公里外的汽车。远程驾驶可以作为未来汽车租赁、共享汽车行业自动驾驶服务的补充,比如用户把车开到很远的地方,租车公司不用人工开回来,而是可以通过远程驾驶来召回、调度车辆。我和兄弟们通过网络直播,顺畅地看着汽车被远程操控,我突然意识到,我们的通讯软件已经走在了世界科技的最前沿,我们正在构建未来智能时代的通讯基础,这种无与伦比的成就感和自豪感瞬间充斥着我的内心。

十年过去了,光辉岁月留下了余香。在这十年里,无论是为一行代码而奋斗,还是为一个架构而绞尽脑汁,想尽一切办法,还是为“推销”自己的方案而拼命奋斗,我从​​未放弃。我所做的一切努力都体现在了我所写代码的现实中,这是我作为程序员最大的骄傲。

分享