当前位置:首页 > 公众号精选 > 大鱼机器人
[导读] “大家好,我叫姜森磊,1995年出生,14岁开始编程,迄今十年整。” 2020年4月20日,我通过WeLink接入了EMT会议,在“20分钟”议题上分享自己的工作经历。我是入职华为才两年的95后,却也是拥有十年经验的老程序员 ,这一切都要从十年前我的中二时期说起……

来源 :华为人


从中二少年到5G元老

姜森磊

“大家好,我叫姜森磊,1995年出生,14岁开始编程,迄今十年整。

2020年4月20日,我通过WeLink接入了EMT会议,在“20分钟”议题上分享自己的工作经历。 我是入职华为才两年的95后,却也是拥有十年经验的老程序员 ,这一切都要从十年前我的中二时期说起……

1 中二少年的“编码童子功”

由于老爸酷爱游戏,早在90年代我们家就配备了电脑,01年左右家里就已经联网,电脑对我来说并不陌生。平时经常看老爸玩游戏,甚至偶尔还能跟他一起上场厮杀,唯一的遗憾是玩电脑的时间总是太少,家人顶多只让我做完作业后玩半小时、一小时。

在我上初二时,有一天我妈貌似不经意地跟我说,“附近中学开了计算机编程的兴趣班,我同事家的小孩去学了,你要不要也去试试?” 搞计算机=玩电脑,当然有兴趣了。 至于编程,那不就是黑客做的事情?我脑子里飞快闪动着《黑客帝国》电影的画面,超级高大上!当年才14岁的我,内心的中二之魂熊熊燃烧,仿佛已经看到自己学习编程后成为黑客的厉害模样,于是不假思索地就同意了这个提议,开始学习编程。

等我去了才发现,编程并没有我想象的那么花里胡哨,刚开始甚至很枯燥,老师一上来就介绍那些乱七八糟的语句,还全是英文,也听不懂……但我这个人好胜心比较强,计算机语句看不懂没关系,先按老师教的东西囫囵吞枣、死记硬背。就这样咬牙坚持了几个月,突然有一天觉得自己茅塞顿开了,原来用计算机的思维去考虑程序是这个样子的!从那以后,我就好像打通了任督二脉,反过头来看以前学的那些东西,也都融会贯通了起来,我终于体会到了编程的乐趣和成就感。

初中、高中,我一路在上海市和全国信息学奥赛中过关斩将,最后还凭借全国信息学奥赛一等奖保送到了同济大学 ,后来毕业后进华为也是因为自己的软件能力。这些年,编程带给我的不仅仅是摆了两柜子的荣誉证书、奖牌和奖杯,更重要的是从小学习编程让我打下了比较扎实的童子功,掌握了的算法就好像印在脑海里一样,虽然后来大学时期接触编程少一些,但是工作以后重新再捡起来也非常快。

2 萌新的成长之路

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元老”。

3 我的小目标:代码写到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岁,写出更多的好代码。

-END-

     
           

猜你喜欢

为什么8位数据范围是-128到127,而不是-127到128?
21岁到华为,一焊就是28年!
北大十年,博士毕业后,他去了华为。

 最 后
 

若觉得文章不错,转发分享,也是我们继续更新的动力。
5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等
在公众号内回复「更多资源」,即可免费获取,期待你的关注~
长按识别图中二维码关注

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

学好电子技术基础知识,如电路基础、模拟电路、数字电路和微机原理。这几门课程都是弱电类专业的必修课程,学会这些后能保证你看懂单片机电路、知道电路的设计思路和工作原理;

关键字: 单片机 编程 电路设计

单片机编程需要使用专门的软件工具,这些工具能够帮助程序员编写、调试和烧录程序到单片机中。以下是一些常用的单片机编程软件:

关键字: 单片机 编程 软件工具

Java语言和C语言是两种不同的编程语言,它们在语法、特性和应用领域上有许多差别。下面将详细介绍Java语言和C语言之间的差异以及它们各自的技术特点。

关键字: Java语言 C语言 编程

嵌入式系统是现代生活中无处不在的一部分。它们包括了我们的家电、汽车、智能手机、医疗设备等等。这些系统的工作必须高效、可靠,因为它们往往控制着生活中的关键方面。而C语言作为一种广泛用于嵌入式系统开发的编程语言,其质量和稳定...

关键字: 嵌入式系统 C语言 编程

在嵌入式系统开发领域中,C语言是使用最广泛的编程语言之一。它具有高效、灵活和可移植的特点,成为嵌入式系统设计师的首选语言。本文将介绍C语言编程的基本概念、特点以及在嵌入式系统开发中的应用。

关键字: 嵌入式系统 C语言 编程

在编程和计算中,运算符优先级是解释和计算表达式的一个关键因素。本文旨在阐述运算符优先级的概念、规则及其在表达式中的应用,以帮助读者更好地理解和运用运算符优先级。

关键字: 表达式 运算符 编程

泰克科技组合软件总经理Rick Khulman:“激发孩子们——尤其是女孩们对STEM的兴趣,对我本人乃至广大工程界都至关重要。”

关键字: 编程 机器人 示波器

PIC单片机采用精简指令集,例如对于PIC16F716单片机,只有35条单字节指令。要用这么少的指令实现复杂的控制或计算,显然要在程序设计上多做文章,以下就程序设计需要注意的问题谈一些看法。 美国微芯公司开发的CMOS工...

关键字: 单片机 控制 编程

PLC编程是一种数字运算操作的电子系统,专为在工业环境下应用而设计。它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字式、模拟式的输入和输出,控制各种类型的机械或...

关键字: plc 编程 plc编程

初学PLC梯形图编程,应要遵循一定的规则,并养成良好的习惯。下面以西门子PLC为例,简单介绍一下PLC梯形图编程时需要遵循的规则,希望对大家有所帮助。

关键字: 西门子 plc 编程
关闭
关闭