最近听了几位社招新进同事的述职,问了他们同样一个问题:从原来的软件开发岗位转到现在的5G开发,你们觉得最大的难点在哪里?几位新同事纷纷表示:感觉自己要补课的内容实在是太多了,操作系统、网络协议,到处都是难点。
其实这几位同事的经历和遇到的问题都非常有代表性:由于做开发不懂业务,故大部分码农都是一颗颗螺丝钉,铆在自己的那一点点领域上使劲往下钻,而对整体架构几乎一无所知,导致自己的专业面非常窄,技术水平也比较浮于表面。
对这些已经拥有3-5年经验的程序员而言,转型到5G开发并没有想象中那么遥不可及,当然也并不轻松。
所幸他们已经入门了,因此,我们觉得普通码农转型5G开发是可行且有迹可循的。所以这次就来谈一谈5G开发所需的主要技能和推荐理由,此篇可以作为各位有志于转型5G开发的码农们参考,也欢迎各位大牛多多指正。
熟悉 Linux 操作系统
必须要熟悉Linux操作系统及具备Linux开发的经验,当然常用的调试手段也要熟练掌握。
5G 承载的业务种类繁多,业务特征各不相同,对网络要求不同。业务需求多样性给5G 网络规划和设计带来了新的挑战,包括网络功能、架构、资源、路由等多方面的定制化设计挑战。
因此,5G网络采用NFV/SDN、云原生技术实现网络虚拟化、云化部署,而NFV技术则是5G开发必选No.1。
NFV追本溯源:以往通信网络设备均采用专用设备,网元功能与硬件平台紧耦合,即不同厂家、不同类型网元采用不同的硬件。在通信网络3G、4G、5G新技术频繁变革下,由于网元与硬件平台紧耦合的关系,造成大量硬件资源浪费,也不利于新业务部快速署。
网络设备价格长期居高不下,电信运营商自然压力山大;同时供应商一家独大,运营商也不愿意受制于人;再加上各类专用设备不断增长的运维和管理成本,实现软硬件解耦的网络功能虚拟化(NFV)技术这位英雄来拯救通信行业了。
NFV技术的实现原理是通过使用x86等通用性硬件以及虚拟化技术,来承载各类功能的软件处理。而这些通用X86平台的操作系统当仁不让就是Linux系统了。
Linux的特点是什么?是多用户、多任务、支持多线程和多CPU的操作系统。既然5G开发的系统环境少不了Linux,下面就是学习重点了:比如什么是多态?线程和进程的区别?为什么要使用多线程?这都是linux基础知识、也是Linux内核开发必须掌握的要点。
举个例子,出现段错误,有哪几种调试手段?如何避免?凡是多往深处想一想,要知道程序设计做的不好真的会害人害己,光填坑就能累死一群码农。
另外不能不提的还有epoll,它是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
虽然select、poll,epoll本质上都是同步I/O,但epoll只要从用户态往内核态拷贝1次fd集合,在设备等待队列上也只挂1次current;而select和poll每次调用都要从用户态往内核态拷贝1次fd集合,在设备等待队列中挂1次current;所以epoll相比select和poll节省了大量系统开销。
还有,select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。
而epoll尽管也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是在设备就绪时调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。
虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就好,从而节省了大量的CPU时间,这就是回调机制带来的性能提升。
总之,作为开发人员,不仅要知其然还要知其所以然。
编程知识储备
具备扎实的计算机基础,较强的算法能力,熟练掌握C\C++等开发语言,熟悉敏捷开发流程。
计算机基础、算法能力,这些都是码农们的基本技能,《计算机原理》、《数据结构》等等都是大学理工科的经典课程,不记得了可以再回去翻一下,在此不做赘述。敏捷开发是当下比较流行的高效开发模式,以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发,这方面的文章也很多就不展开来讲了。我们特别针对编程语言来讲一讲,为什么5G开发要首选C语言而不是其他编程语言。
众所周知,ITU 为 5G 定义了 eMBB(增强移动宽带)、mMTC(海量大连接)、URLLC(低时延高可靠)三大应用场景。eMBB典型应用包括超高清视频、虚拟现实、增强现实等。
这类场景首先对带宽要求极高,关键的性能指标包括100Mbps 用户体验速率(热点场景可达1Gbps)、数十Gbps 峰值速率、每平方公里数十Tbps 的流量密度、每小时500km以上的移动性等,所以在5G开发当中对性能要求是放在第一位的。
然而,目前的硬件工艺及技术发展已经接近瓶颈,如何能够更高效的利用系统资源在5G开发当中显得尤为重要。
C语言是一门贴近硬件的系统级编程语言,C语言的指针可以直接操作内存,效率奇高,虽然出错率和漏洞也为人诟病,但瑕不掩瑜,这一点正好符合5G开发对性能和效率的极致追求。
在这里还是想强调一下了解底层原理对学习新技术的巨大作用。很多码农都觉得C语言实在难上手就放弃了,不想挑战难度、也不想付出时间与经精力去学习更多更底层的内容。
要知道几乎所有的操作系统内核都是用C语言写的,万变不离其宗,不懂底层汇编,根本无法准确了解内存和系统资源,这就像盖楼不了解地基情况一样。
拿破仑说过:“不想当元帅的士兵不是好士兵。”因此,对于各位有志于架构师的码农们,从现在就开始啃C语言吧。
熟悉移动通信协议
熟悉移动通信协议,具备LTE协议研发经验,熟悉信令流程、协议。
移动通信协议是个大家族,从何学起,往往没有头绪。尤其刚来的程序员们,很容易就被一堆协议搞得头大如斗。其实通信的基础在于网络,所以关于5G相关的协议开发如何上手,我们可以给出以下思路供大家参考:
第一步,先弄清楚网桥、VLAN的原理,自己可以做下实验,找几台PC配置一下,再不济用虚机跑一跑。了解单播、广播、组播的概念,想清楚什么情况下要配置网桥,划分VLAN。
第二步,了解二层、三层的概念和区别,有条件的可以从交换机配置入手,想更进一步的可以去配置下路由器。明白静态路由和动态路由的区别,几个概念重点了解:IGP、BGP、OSPF、IS-IS、MPLS等等。
第三步,这一步才是真正入门,要做5G开发,前两步理解的差不多了就可以去读一读3GPP的协议文档了。记得要读英文原版哈,至于英语的重要性后面也会展开讲一讲。
软技能
有较强的英文阅读理解能力,具备较强的抗压能力和良好的沟通技巧,优秀的团队合作精神以及较强的执行能力,善于学习和挖掘、使用新技术。
这一条也是老生常谈了。网上常常爆出英语无用论,而事实上,各类高新技术尤其是创新技术还是国外居多,原版的技术资料全是英文的,英文不好就只能用软件翻译或者等人喂食,而通常软件翻译的结果让人一言难尽,等人翻译估计黄花菜都凉了。
还有底层协议开发,也是必须遵从英文规范,不懂不会就要走很多弯路。再比如码农必备的Stack Overflow网站也是英文的,其技术答疑常常会有惊喜大礼包:不仅给出一个问题多种不同的解决方案,还包括对这些解决方案的比较,以及大牛们的思考过程,甚至还有不少强力工具的特别附赠。
建议各位就算没有遇到问题,也可以常常去浏览一下其中投票较多的问题,充实自己的知识体系。
总而言之,英文是一扇面向世界的窗户,有了它能够看得更远,自己不会或者懒的开窗,那就自己在小黑屋慢慢摸索吧。偷偷吐槽一句,码农的英语不好,连变量名都只能用汉语拼音定义哦。
至于抗压能力,码农们都是经过千锤百炼的了,做到前面几条,加上沟通技巧、团队合作以及较强的执行力,这就是今后成长转型的关键。至于是写一辈子代码还是转型管理抑或销售及其他,这就仁者见仁智者见智了。
最后附上一首自创的《江城子》,送给屏幕前还在加班的码农们,祝大家都能早日完美转型,成功升职加薪~
十年IT终日忙,不开源,难自强。千页文档,需求又无常。纵使交付运维忙,痘爆头,肤如糠。夜来加班忽感伤,格子间,冷暖尝。相对无言,惟代码万行。愿为自主研发闯,泡机房,又何妨。
作者简介:
COCO,80后高级工程师,目前就职于广州大型通信国企,白天办公室打杂,晚上实验室码字。