分享一個菊廠大神的故事:
不知道從什么時候起,親戚朋友問我能不能買到打折手機時,我總會脫口而出:打折手機沒有,打折基站,了解一下?說完自己都覺得有點無厘頭,但似乎又是那么順理成章。我想,無線的十年,寫代碼可能已經深深融入了我的生命,因為它不僅見證了我的青春年華,也見證了我不認慫的那些時刻。
這條路,我打算一頭走到黑了!
程序員這輩子誰沒遇到過幾個bug
愛上編碼,其實很偶然。在沒有錢只有才的大學歲月里,在當時追女生還停留在手寫情書的年代,我用OpenGL寫了一個3D的迷宮游戲,在迷宮的關鍵路徑上放上了女神的美照。一個小小的游戲,幫助我的兄弟打敗了99%的直男,成功追到了學校的女神,我也成了我們那屆男生眼中的“代碼大牛”。初嘗成功的滋味,讓我覺得干軟件這行,還行。
2007年底,我成功應聘到華為無線,在上海接首個落地成都研究所的產品UMTSAccessPoint,因為之前的游戲開發工作經歷是順風順水,讓我覺得基站軟件編碼沒什么難的,但是進公司的第二個月,臉就被打得啪啪響。當時還是瀑布式開發,嚴格遵循預先計劃的需求、分析、設計、編碼、測試順序進行,一個環節阻塞,所有人都得停下來。我負責的是系統廣播消息的整改優化,當聯調到我這時,DSP(基帶子系統)卻死活收不到我發的系統消息。我不停走讀代碼,卻連續兩天兩夜毫無頭緒,全部門100多號人因為我已經阻塞了48小時,部長不停在我座位后邊轉悠,盯著我屏幕那焦灼的眼神,都深深地刺痛著我,什么時候,我從別人眼中的大牛,變成了拖后腿的人了。
48小時后,部長覺得不能再這么枯等下去,安排了部門技術大牛來幫助我梳理思路,重新走讀代碼,終于找到了問題根因,原來在從CPU向DSP發送消息時,需要提前20ms發送,我當時過于自信,不知道信令之間有嚴格的時序關系,發送和接收是有延遲的,想當然認為優化成實時發送,不是更節約時間,更有效率么,于是不假思索地修改成了我心目中“更美”的代碼。但就是這個“更美”,實際變成了Bug,阻塞了我們的聯調。問題終于解決了,但就在那一晚,我人生中第一次失眠了,我甚至開始懷疑自己,是不是不適合干通信行業?
第二天,我找到部長,向他訴說我內心的煎熬和自信的崩塌,誰知道部長神情了然,說:“一個程序員,誰這輩子沒遇到過幾個Bug啊,都是自己親手埋的雷,那就死活都要親手把它挖出來。下一次,一定要由你自己來挖。”我倆相視一笑,突然間,我就釋懷了。
經過這次挫折,我對做大型通信軟件有了新的認識和了解。年輕的時候多少有些自負,自認為自己的代碼水平不錯,但實際上軟件領域有太多的未知,一山更比一山高,不太懂的地方,不能想當然,得多向前輩請教。代碼也不是越“美”就越好,在網運行的每一行代碼都是多代華為人不斷完善的結果,從表面上來看,這些代碼離美還有一段距離,但是從業務場景和功能完備性上講,它通常考慮比較周全,出問題的概率很低。
愈曲折,愈見大風景。
沒有解決不了的bug,只有沒找對方法的我們
帶著對編碼的敬畏,后來的我一直在業務組長期深耕。在自己熟悉的業務領域,無論特性開發,還是小的模塊重構,都能游刃有余,主導的模塊重構還獲得過公司E2E質量獎,但也許正因為太熟悉了,太游刃有余了,感覺激情正在一點點地褪去。就在我以為自己會麻木,甚至動了別的心思的時候,一個擴展眼界的機會,找上門來了。也正是這次機會,讓我堅定了繼續在軟件世界遨游的信念。
當時,根據公司要求產品線需要發起VxWorks切換Linux的hert8.0性能攻關,每一年增加的10萬+代碼,會成為產品性能的包袱,所以每一年的性能攻關,都是項目的重中之重,但是平臺切換和性能優化了多年,能想到的、該用的招式都用過了,大伙有些黔驢技窮了,怎么才能讓性能KPI繼續往上升呢?尤其是在4個月內要提升XX%,能按期達標嗎?
部長找到我,問我愿不愿意接受這個高難度的挑戰,支援項目組完成性能優化,支撐至少每秒1500次鏈路建立。這是我從未涉及的性能優化領域,我,行嗎?
老婆給我打氣,“這,不就是你正在尋找的,突破的機會嗎?拿出你當年運動員的精神來,堅持、突破!你要相信自己,你可是‘百米飛人’哦。”這里要說明一下,我從小學就參加校田徑隊,一直到高中,從一個只是愛運動的小破孩,硬是練到了國家二級運動員,練成了研究所的“百米飛人”。
有了老婆這個堅強的后盾,我欣然進入了攻關組,并利用所有的業余時間,從各種渠道、多個維度,補充相關知識的學習。同時,也向產品線架構部專家請教攻關方向,向底層平臺專家請教消息通信優化方向,向已經成功優化的部門請教Ans1編解碼優化方法等等,一切可以想到的,有一線希望的方式方法,我都主張嘗試一遍。從業務流程、業務算法、模塊部署、熱點代碼、編譯器選項等多個維度同時進攻,4個月后,我們如期順利攻下了這個山頭。
一時間,我百感交集,我認識到軟件的路更寬了,曾經的我單純認為軟件開發不就是壘代碼嗎?誰讓代碼更簡潔實用,誰就是大牛,其實不然,它更是合作,是探索,是智慧的碰撞。當我們費盡千辛萬苦,齊心協力沖破“暴風驟雨”時,我心中的迷茫如烏云散開,我感受到了沐浴陽光的爽快與自信。這讓我更加堅定了軟件開發的選擇,沒有解決不了的Bug,只有沒找對方法的我們。
主管被我大膽的想法嚇到了
5GTUE(測試終端)落地成都,部門要成立軟件架構優化組,鑒于我以往的表現,部門希望我擔任技術負責人,從一開始就解決未來可能出現的性能問題。我先后分析了號稱世界最快的“并發框架Disruptor”,公司外研所開發的JSF,以及面向異構系統的OpenCL等各類并發框架后發現,其實取各家所長,開發一套全新的并發調度框架,更加有好處,能讓TUE/CPE在生命周期內,都不用再考慮性能問題。這個架構可以結合TUE/CPE高負載,超低時延,多板多框共存,產品硬件單板每年更新,以及多產品OneTrack的業務特點,達成每秒百萬級任務處理的性能規格。
我把全新開發并發框架這個想法跟部門主管簡單說了下,主管嚇了一跳,“這個想法太大膽了。”原計劃只是優化小改,現在卻要完全重寫,我們的軟件實力是否足夠?風險到底在哪里?能不能按時交付版本?性能會不會變得更差?會不會影響公司5G整體發布節奏?一連串的問號,讓他的心里完全沒底。我卻堅信這個新框架如果做出來完全可以“碾壓”原有架構,而且新架構會讓整體更簡潔,就像那張著名的印度街道電線圖,只有重新鋪設,架構才不會腐化,更有利于后面的開發和維護。但主管仍然不同意,認為風險還是太大。
我想到架構大師TillAdam曾經說過,優秀的架構師必須首先是一個推銷員。于是我整理了新架構的各種優缺點分析,開始向主管、MDE游說,從進度分析、性能分析、架構預演、風險預判等維度,一一解決了他們的疑慮和擔心。經過2周十來次密集的技術PK,部門終于同意,兵分兩路,我一個人先開發架構原型,另一組人在原有架構上優化,誰先驗證成功,提升更大,就用誰的架構去適配修改產品代碼。
是時候用上以前積累的知識和技能了。我心中燃起一團火,只想著要拼盡所有將想法變成現實。3個月的時間,我心無旁騖全力以赴開發新架構,用老婆的話說,簡直到了“魔怔”的地步,吃飯在想,走路在想,睡覺也在想,幾乎沒有一刻停止過思考。還記得最后一天,當新架構原型基本完成,上板性能壓力測試遠遠超出預期,這樣的結果,讓我覺得,過去種種,值了。部門也終于信心十足,決定用我的新架構來啟動業務層的適配修改。
2017年5月,上海通信展,TUE被集成在了汽車上,觀眾通過5G網絡,在展廳遙控30公里外的汽車,實時控制。遠程駕駛可以成為未來租車和共享汽車行業服務這種自動駕駛的補充,例如用戶將車開到偏僻的場所,租車公司無需人力開回,只需利用遠程駕駛就可召回、調度車輛。我和項目組的兄弟們通過網絡直播,看到汽車被順利遙控的那一剎那,我突然發現,原來我們的通信軟件已經走在了世界科技的最前沿,我們正在構造未來智能化時代的通信基礎,這種無與倫比的成就感和自豪感,瞬間盈滿了內心。
十年時光傾吐芳華,崢嶸歲月如墨留香。這十年里,無論是為了一行代碼“死磕”,還是為了一個架構想破了頭,窮盡了方法“折騰”,又或是為了“推銷”自己的方案拼命爭取,我沒認過慫。所有的努力在看到自己編寫的代碼照進現實的那一刻,是作為程序員的我最大的驕傲。
《華為人》版權所有,請勿轉載