程序員該如何轉型 5G 開發?
作者 | COCO
責編 | 胡雪蕊
出品 | CSDN (CSDNnews)
最近聽了幾位社招新進同事的述職,問了他們同樣一個問題:從原來的軟體開發崗位轉到現在的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後高級工程師,目前就職於廣州大型通信國企,白天辦公室打雜,晚上實驗室碼字。
【END】
熱 文推 薦
Python 爬取 B 站 5000 條視頻,揭秘為何千萬人為它流淚!
※"偽努力"正在毀掉80%的當代區塊鏈開發者
※研發管理軟體太雜亂?他花了 4 年打造一站式工具!| 人物誌
TAG:CSDN |