【華為人】——做橫掃問題的“掃地僧”

      網友投稿 712 2025-04-01

      讀博的時候,我和華為曾經有過一段親密接觸。當時實驗室和華為有一個關于無線網絡環境下視頻QoE度量的合作項目。我作為項目負責人,從視頻編碼、信道建模、傳輸協議等各個環節進行建模、算法、仿真、數據分析,得到了一個非常復雜的模型,自我感覺非常完善,卻被華為研發人員無情地指出模型“太理想化”。在隨后數次的交流中,華為提出了很多實際工程化中應用的約束和要求,都是我完全沒想到的。


      這次技術合作影響了我此后的博士學習生涯。我開始把大部分精力都花在算法在實際工程應用中如何解決問題上。算下來,至少寫了超過15萬行的代碼。我越來越覺得,解決工程問題并不是只靠幾個公式、模型和算法能完成的,從技術到實際解決工程問題的“最后一公里”更為關鍵,需要大量的工程經驗積累。

      從不繞過稀奇古怪的難題

      2010年,我加入了華為,從事無線基站的軟件平臺的工程開發。這個平臺支撐了全球超過500萬基站的發貨,支持十幾種不同的CPU、上百種單板硬件、多版本編譯器、多樣的操作系統,龐大的代碼量和復雜的業務邏輯,是復雜工程環境下的大規模應用項目,也是積累經驗的絕佳機會。

      我躊躇滿志地準備大干一場,卻沒料到,遇上的全是稀奇古怪的難題。

      2013年,為了讓代碼更具有靈活性和擴展性,我用了“反應式框架”重構了代碼,也用了一些C++編程中的小技巧。這種技術方案我很早在學校就用過,而且也是很多開源軟件中的常用做法。

      我信心滿滿,認為代碼實現得很漂亮,自然不會有什么問題。剛開始驗證也很順利,但是測試人員在一款比較老的芯片上進行驗證時,卻發生了嚴重的錯誤——程序崩潰了。我一下懵了,把重構的那部分代碼看了又看,也對比一些開源代碼中類似的寫法,甚至還把C++標準文檔的對應部分翻閱了一下,仍然非常確信這是正確的寫法,實在百思不得其解。交付時間很緊迫,我只能用另外的實現方法繞過了這個問題,完成了交付。但這個詭異的問題卻始終縈繞在我的腦海中:如果找不到根因,以后還會遇到。

      【華為人】——做橫掃問題的“掃地僧”

      我下決心把 “蟲”捉到。我利用中午休息的時間,一點點去啃優化后的匯編代碼,但有幾行始終看不明白。請教了在這方面很有經驗的老同事,也沒有看到什么問題。連續兩個中午,我翻來覆去看了好幾遍還是沒有進展,連吃飯都沒胃口了。晚上回到家,我又仔細翻閱C++標準,一行行讀下來,發現備注中有些線索指向C++ ABI規范。總算有點眉目了,第二天我找出相關規范,對照生成的匯編代碼仔細對比,確實發現了配套編譯器在此處的Bug,并通過咨詢CPU提供商的工程師,證實了這個問題。

      “蟲”終于捉到了!我覺得入口的盒飯都異常美味。此后,我們也把這種寫法加入到我們開發的靜態代碼檢查工具中,用于提前發現問題。

      在之后的幾年開發過程中,我遇到了十多次和OS、運行時庫、鏈接器、編譯器相關的問題。我從來沒有繞過這些問題,而是堅持把問題代碼的根本原因找到,這讓我積累了多樣化的經驗、更透徹的掌握計算機底層基礎知識,同時讓我對編碼可靠性、移植性有了更深入的思考。程序員就是在不停解決問題的過程中成長,再通過沉淀和思考,成為技術專家。

      欠下的“債”都要還回去

      寫代碼是不是就是if-else的業務邏輯代碼堆砌?我不這么認為。寫出高效率、可擴展性強、高質量、簡潔的代碼不是一件容易的事。首先,作為程序員要有追求,不能僅僅以實現基本可用的功能為目標,“能打補丁用就行”等只顧眼前的做法會帶來越來越重的技術“債務”,以致整個業務領域在面向未來的時候寸步難行。其次,要多學習和借鑒優秀的代碼架構,從技術上提高自己,并把優秀的思想用在平時的開發中。

      最難忘的一次“還債”經歷是關于軟件平臺中的CPRI共享(CPRI-Sharing)特性的,這是基站軟件平臺支撐無線SingleRAN多制式資源共享的重要特性,復雜的算法支撐多達幾百種場景組合。

      當時代碼已經復雜到一個函數3000多行,總共2萬多行核心代碼,每增加場景都可能導致以前的功能受損,幾乎沒人敢改,也不愿意從根本上解決這些“債務”。

      剛開始我對代碼細節不太了解,也是一樣提心吊膽地往里面塞代碼。每加一部分代碼,就要把業務邏輯反反復復推演一遍,看看對于老的功能、其他的場景是否有影響。都說代碼是開發人員的臉面,我想我的代碼夾在這樣的“爛代碼”中,以后拿出去也不好意思見人啊!我決定把當前混亂的實現作一個高層次的抽象,重構這部分代碼,實現“算法和場景隔離”。

      經過一個版本的痛苦開發后,我對細節已經比較了解了,腦海里也有了完整的功能地圖。在這個基礎上,我想到曾經讀過的一個跨平臺多媒體播放器VLC(VideoLAN Client)的源代碼。它完全基于插件化的思想,用一個精巧的插件管理和插件的“能力評分”機制,把視頻、音頻編解碼器等作為插件靈活拼裝。這就有點像搭樂高,可以根據使用需求進行組合,也可以隨時刪減模塊,具備高度的靈活性。

      我借鑒了這個思路重構了代碼。每個算法對象都可以作為獨立的插件,在運行時根據硬件能力和組網場景進行選擇。重構后的代碼非常容易理解,也具備很強的擴展性,最重要的是擴展新功能支持新場景時,對老功能幾乎沒有影響。之后的幾年里,這個框架支撐了幾次大的新需求,很少出問題。我想這應該算是好的代碼實現帶來的收益吧!

      其實,開發人員在經過幾年的編碼后,常常會陷入到一定的瓶頸。這個時候需要打開邊界,多看一些優秀的開源代碼,尤其要精讀一份高質量代碼,用心體會其中的架構設計思想,這會幫助我們提升編碼能力,形成自己的思想。

      當“扁鵲二哥”需要勇氣

      2011~2012年,無線大規模切換到Linux操作系統,以前的代碼編寫錯誤導致的多線程死鎖、數據競爭的問題在實驗室測試時頻繁出現。一旦上網出現問題,對基站業務來說都是致命的。

      當時,無線不斷強調員工要成為“扁鵲二哥”,提前發現問題隱患。既然問題都已經有苗頭了,當然不能坐視不管了。我所在的軟件設計團隊決定通過對代碼的靜態分析來檢測這類問題。

      經過一段時間調研,我們找到一些簡單的方案,但檢查的準確度很低,能用的場景的非常有限。我直觀地覺得,要能夠解決大部分場景的檢查,必須要基于C/C++的編譯器的深層次信息。

      我拿出讀博期間的方式,查閱IEEE/ACM論文、看Clang的社區論壇等所有可能獲得信息的地方。再加上團隊的共同努力,這些問題逐步獲得了解決。最終,開發完成的工具(“Soter”)在軟件平臺累積發現超過50多處多線程死鎖、數據競爭的問題。

      隨后,我們繼續增強該工具從TOP低級編碼、安全編碼、編程規范等多方面功能,在部門的編碼質量看護上發揮重要的作用。在內源平臺上開源后,也被很多部門和其他產品線部門應用。

      回想整個過程,為了從根本上提升軟件工程能力,徹底解決問題,我們才選擇了一條艱難的道路。但這也讓我們認識到,投資基礎工程能力建設對整個開發團隊的重要性。

      理解技術的本質,才能跨界創新

      在軟件云化的趨勢下,我們看到了云化軟件在資源共享、彈性伸縮方面的優勢,但在傳統的基站硬件上,這些軟件技術、框架都沒法直接應用。只有理解這些技術的本質,使用“云化軟件的思維”重構部分架構和實現才有可能。

      去年,我和清華大學的老師一起開展合作項目,用的是老師提出的ASPCA算法進行日志降維分析。這個算法在常用的標準數據集上測試效果非常好,但是真正用到當前軟件的日志上,效果卻不好。一方面是我們的日志內容不規范,另外這個算法真正發揮作用需要大量數據前處理。直到我們通過日志模板提取、日志分區、分模塊、按時間軸緯度分析等數據處理方法后,算法才真正發揮作用。

      我最大的體會是,想到這些Idea也許沒那么困難,甚至做出技術原型的復雜度也沒那么大,但是真正能用在一個商用化的、大規模的系統中,困難程度遠超想象。這個時候,我們會發現,這些技術和方法,離真正能解決工程實際問題這“最后一公里”還有很大距離,而這正是我們需要著力的方向。

      我想我會繼續堅持對軟件的熱愛,打開邊界、腳踏實地,在看似枯燥的工程開發中不斷解決問題,發掘技術的金礦。

      【問答時間】

      問:你成長為“軟件王”,有啥秘籍?

      答:阿里巴巴在的技術合作人“多隆”,是加入公司16年來一直在編碼的“掃地僧”。他曾經說過,技術成長的秘訣就在不停地解決各種工程問題,從業務代碼看到框架代碼、庫、libc代碼、操作系統內和代碼等。我非常認同,程序員就是在不停解決問題的過程中成長。

      問:開發工作真的有技術含量嗎?

      答:如果不打開邊界,不去了解業界發展,只局限在當前的工作領域涉及的技術,就會覺得工作沒有技術含量。如果只是從外界了解一些技術概念、想法,而不真正理解技術本質,并解決技術落地的“最后一公里”問題,那也不可能真正提升能力。

      問:你通過什么方式解壓?

      答:循環聽一首非常振奮人心的音樂,或者去看電影來解壓。最喜歡的一首歌:It’s My Life,最喜歡的電影:《星際穿越》。

      問:你的愛好是什么?

      答:我喜歡玩一些卡牌類的游戲。大學的時候,整整一年時間,整個寢室同學把所有的錢都拿來到國外買“萬智牌”,沒錢就吃泡面和餅干,哈哈。

      本文為《華為人》版權所有,未經允許不得轉載。如需轉載請聯系編輯部hwrb@huawei.com

      華為人期刊

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:最好用在線文檔(最好用的在線文檔
      下一篇:ppt無法播放gif圖(ppt能顯示gif嗎)
      相關文章
      国产精品亚洲综合一区| 亚洲精品无码久久久久sm| 亚洲第一精品福利| 国产亚洲欧洲精品| 好看的电影网站亚洲一区| 亚洲人成网77777亚洲色| 国产成人亚洲精品狼色在线| 久久久久亚洲AV成人网人人软件| 亚洲女人被黑人巨大进入| 亚洲精品第一国产综合精品99| 亚洲高清视频一视频二视频三| 亚洲国产精品成人久久蜜臀| 国产亚洲福利一区二区免费看| 国产亚洲午夜精品| 亚洲七七久久精品中文国产| 国产黄色一级毛片亚洲黄片大全| 激情综合色五月丁香六月亚洲| 亚洲精品美女久久久久99| 亚洲av日韩av不卡在线观看| 久久精品国产亚洲av影院| 99久久亚洲综合精品成人网| 亚洲高清无在码在线电影不卡| 亚洲毛片基地日韩毛片基地| 亚洲一区二区三区不卡在线播放| 亚洲私人无码综合久久网| 亚洲AV日韩AV一区二区三曲| 亚洲AⅤ优女AV综合久久久| 亚洲色偷偷狠狠综合网| 亚洲精品国产成人片| 亚洲视频在线观看免费| 亚洲欧洲高清有无| 精品国产日韩久久亚洲| 国产偷国产偷亚洲高清人| 久久久久亚洲精品中文字幕| 亚洲av日韩av天堂影片精品| 亚洲黄色免费观看| 在线观看亚洲AV日韩AV| mm1313亚洲精品国产| 亚洲精品中文字幕无码蜜桃| 亚洲综合无码一区二区| 国产亚洲精品成人AA片|