这个95后是5G元老
从中二少年到5G元老
姜森磊
“大家好,我叫姜森磊,1995年出生,14岁开始编程,迄今十年整。”
2020年4月20日,我通过WeLink接入了EMT会议,在“20分钟”议题上分享自己的工作经历。我是入职华为才两年的95后,却也是拥有十年经验的老程序员,这一切都要从十年前我的中二时期说起……
中二少年的“编码童子功”
由于老爸酷爱游戏,早在90年代我们家就配备了电脑,01年左右家里就已经联网,电脑对我来说并不陌生。平时经常看老爸玩游戏,甚至偶尔还能跟他一起上场厮杀,唯一的遗憾是玩电脑的时间总是太少,家人顶多只让我做完作业后玩半小时、一小时。
在我上初二时,有一天我妈貌似不经意地跟我说,“附近中学开了计算机编程的兴趣班,我同事家的小孩去学了,你要不要也去试试?”搞计算机=玩电脑,当然有兴趣了。至于编程,那不就是黑客做的事情?我脑子里飞快闪动着《黑客帝国》电影的画面,超级高大上!当年才14岁的我,内心的中二之魂熊熊燃烧,仿佛已经看到自己学习编程后成为黑客的厉害模样,于是不假思索地就同意了这个提议,开始学习编程。
等我去了才发现,编程并没有我想象的那么花里胡哨,刚开始甚至很枯燥,老师一上来就介绍那些乱七八糟的语句,还全是英文,也听不懂……但我这个人好胜心比较强,计算机语句看不懂没关系,先按老师教的东西囫囵吞枣、死记硬背。就这样咬牙坚持了几个月,突然有一天觉得自己茅塞顿开了,原来用计算机的思维去考虑程序是这个样子的!从那以后,我就好像打通了任督二脉,反过头来看以前学的那些东西,也都融会贯通了起来,我终于体会到了编程的乐趣和成就感。
初中、高中,我一路在上海市和全国信息学奥赛中过关斩将,最后还凭借全国信息学奥赛一等奖保送到了同济大学,后来毕业后进华为也是因为自己的软件能力。这些年,编程带给我的不仅仅是摆了两柜子的荣誉证书、奖牌和奖杯,更重要的是从小学习编程让我打下了比较扎实的童子功,掌握了的算法就好像印在脑海里一样,虽然后来大学时期接触编程少一些,但是工作以后重新再捡起来也非常快。
萌新的成长之路
2017年大学毕业后,我入职了华为上海研究所。刚进部门时,我是做LTE的,两个月后赶上5G发展,大规模要人,PL问我要不要跟他一起去5G团队。沟通时,他说5G大家都是从头开始,对新员工来说有更大的发挥空间。我那时刚过来,新员工培训才结束没多久,完全是懵懂的,但我想着反正新员工到哪里都是学,于是就跟着PL一起到了5G团队。
刚开始压力还蛮大的,因为我之前不是写C++的,一开始语言上不是很熟悉,要学习;而且业务上也有一定的入门门槛的,刚开始有时候别人说的我都不能理解是什么,还得下来再去查。为了尽快跟上业务节奏,我曾在无数个夜晚,抱着全英文的3GPP协议埋头钻研,这让我感觉好像又回到了刚学习编程的时候,看不懂的就先记下来,白天再厚着脸皮去问周围的同事。好在我们团队互相学习交流的氛围特别浓郁,大家不论级别高低、是否忙碌,都愿意抽出时间共同探讨。我也继承了这样的团队传统,现在如果有新员工来找我讨论问题,我也一定会抽空跟他们聊。
就这样,我在5G团队收获了宝贵的和新产品共同成长的机会。入职没多久,我就参与了5G的首版本商用交付韩国的项目,先从本模块业务开始学习,之后还和几个新员工一起参与了底层框架的整改替换,这样以点带面,对整个用户系统都有了比较全面的了解。
5G打通first call的那个晚上,虽然我们不在现场,而是在后方研发支撑,但心情同样很激动。我还记得联调成功后,前方同事在群里发消息,说打通了first call,还发了切蛋糕庆祝的照片。群里一下就沸腾了,各种庆祝的表情包和文字不停往外冒,根本来不及看具体内容。我自己当时又兴奋又恍惚,有种梦想突然实现的不真实感——我参与的代码能够直接打通电话了!见证一个产品从0到1,和它从1到2甚至1到100,那种心情绝对是不可比拟的。我很庆幸自己作为入职没多久的新人就见证了5G首次商用上线这个难忘的历史时刻。
经历了这次练兵,我对自己的能力更有信心,部门也逐渐将更多的重担交给我。我有机会主导了几个性能和内存的优化。之后我还参与了5G首个可信版本,交付HCSEC……两年的时间,我伴随着部门一起成长,逐渐从“萌新”成长为独当一面的“5G元老”。
我的小目标:代码写到80岁
刚转正不久,我接到一个比较有挑战性的任务,从零搭建一个新模块。
这个模块是用来做自组织网络的,能够帮助客户自动添加邻区,不用手动配置。这个任务要求我既要尽快交付新模块,又要吸取老模块的教训,改善之前遇到的问题。
我总结了老模块的历史遗留问题,比如简单而重复的数据注册功能,居然用了6000行左右的代码,我利用C++的模板大幅优化重复代码,在新模块中仅用2000行左右的代码就移植了原有的功能。
再比如,基于整个模块的功能,我发现反写数据库应该是一个常态的功能,以后会有大量的功能往里面塞,也会产生大量的重复劳作和重复代码,很容易出问题。我利用优先队列设计了反写数据库框架,便于后续扩展。
我在两周内交付了8000多行的代码,测试部署一次性通过,模块也稳定运行。我因此在2018年第一次获得“5GPDU十大软件高手”。
2019年,在外部与内部的压力之下,我也收到了很大的挑战,在同等硬件资源下,能不能用更牛的软件技术,实现产品性能和规格达到更高水平?总结老代码后,我找出了一些优化点,比如数据查询框架比较繁琐,只支持单点查找。重新设计数据结构和查询方法,采用AVL树优化,效果显著,将内存优化了2/3,查找性能提升50多倍;我发现第一版代码用了非常多的锁来解决多线程问题,让性能大打折扣。
为了追求更佳效果,我拉通了几个模块,从架构角度出发重新设计业务交互并用无锁队列等优化性能,交互性能提升80%,更便于之后的扩展。因此,我也在2019年第二次获得“5GPDU十大软件高手”。
2019年对我来说,还有个关键词——“可信”。这一年,是公司的可信变革之年,而我有幸从一开始就深入参与其中。
5G产品作为可信的先锋队,经常会有内外部的领导、专家来看我们的运作情况。为了将我们所做的展示给业界看,2019年9月我们搭建了可信过程演示,向大家展示在可信变革的前后,我们的开发作业流、设计作业流、测试作业流都发生了什么变化。
我们通常从一个真实的业务小例子入手,来展示我们在这个场景下是怎么干的——在开发时,我们怎么保证代码的可信?我们的上库机制、静态检查机制,如何保证可信?我们在出包时,是怎么保证它的二进制比对的?Committer机制,端到端可追溯是如何保护我们的代码的?通过整个流程直白地展示一行代码的前世今生。
目前,UML的创始人 Ivar Jacobson教授、CSEC的Brian教授等人,都看过我们的可信演示,也跟我们交流了从设计到编码到版本集成出包等方面他们的看法和建议。此类的交流,让我们受益不少。特别是Jacobson教授,80岁还这么有激情和学习的动力,我希望自己也能像他一样保持旺盛的求知欲和热情,不断学习,编码到80岁,写出更多的好代码。