華為22年,49歲,他一直在編碼![]() “阮師傅,你準備啥時候退休啊?”這是很多同事見面常問我的一句話。也有不少人問我,為什么能在一個領域的研發堅持這么久?我每次都回答:“路由器我還沒干夠呢。” 可能有人會覺得這個回答很官方,但對我來說,是真心話。 在路由器領域,可能有很多人都認識我,因為我在這塊工作20多年了,而且一直在研發一線。與其說是適應或者習慣了華為的研發文化,倒不如說,這些年華為路由器業務從最初的一無所有到如今高速發展,我們經歷了一個又一個軟件技術的挑戰。這些挑戰,讓我可以發揮自己的特長和優勢,更引領我一路向前,不斷發現不足,縮小差距,我更期望有生之年能盡綿薄之力和公司同仁一起推動華為路由器軟件做到世界第一。 在研發的大熔爐中找到初心 1996年,在某國企學校當了兩年老師的我,正在苦惱學校所學的專業知識得不到發揮,一次周末和在華為北研所的同學聚會,同學說,華為的技術氛圍好,給的薪酬也不錯,可以考慮看看。當時華為還不是很有名氣,北研所也僅成立一年,只有二三十號人,IP(數據通信)業務剛起步,但路由器技術在業界相當于現在的AI,機會難得,讓一心想做技術的我心動了。面試過后北研領導問我能不能來上班,說轉正后月薪XXXX元,當時我的月工資不過幾百塊,中關村平均月工資也不過一千五。無論是技術前景還是薪酬對一個單身漢都充滿了吸引力,我果斷辭職加入,從此一頭扎根路由器領域。 當時北研所不到10%的人懂數據通信,我對網絡協議和網絡架構也是一知半解,只記得讀書時網絡課程講過網絡分7層,就在一張白紙中開始了數據通信設備的開發。導師給我拿來三本IP“紅寶書”和業界的一些代碼比如協議棧,一個月的時間,我70%的時間都在通讀代碼,如饑似渴地學習,其余時間就是和同事們切磋。那會兩人一張桌子,像高中時的課桌,遇到不懂的,抬頭就能相互交流。我發現周圍的同事也和我相似,年輕、有活力、開放、好學,每天除了看紅寶書,就是編碼,常常回去時已是半夜,兩個禮拜就能看完四五萬行代碼,總算是入門了。 在研發這個大熔爐中,當時的我們每個人都投入了百分百的熱情。在你追我趕的氛圍中,除了個人技術能力快速提升之外,年輕的我思想受華為文化熏陶也變得開闊和成熟。至今記得有一篇你是搬石頭還是蓋教堂的文章,講述人與人之間的區別,也許只是干活時內心是否有一個“教堂”。當我工作中遇到挫折時,我就經常問自己當初的目標是什么,為什么要做這項工作,不會因為暫時的挫折感到迷茫。 很多錯誤源于經驗不足 從1996年到2002年近7年間,我做過小路由器,做過VRP協議平臺,下一代IP預研等,如果說預研是讓我眼界更開闊,小路由器還只是“小打小鬧”的話,從2003年開始參與高端路由器平臺開發,就是扛著槍打大仗了。 路由器軟件開發分為兩部分,一部分是通用的VRP協議平臺,一部分是要落地到產品中,通過轉發平臺實現通用軟件和具體的硬件產品適配。2003年,8090路由器第一個版本開始開發,這是公司第一個10G平臺。從3月開始,四五十人集中在深圳封閉研發,我和北研團隊六七人負責其中的“轉發”業務。當時“轉發”業務是用微碼做的,由于對微碼開發方式的不熟悉,加上通用平臺和微碼也沒有對接過,新的業務場景、新的開發模式,不同于以往的編程語言,經驗的不足,讓我在進度上嚴重拖延了第一個版本的過點時間。測試每天發現各種各樣的問題,比如端口反壓被阻塞了,轉發線程死鎖了,轉發性能不達標等等。我只好不停回溯方案,重新討論設計落地新的方案,部分模塊重寫代碼,花兩三周才徹底解決。從3月到9月,幾乎每天泡在實驗室到凌晨,總算和大隊伍合力做出了第一個版本。 我自認為,雖然版本做出來了,但過程十分煎熬,這是我在華為經歷的第一次比較大的挫折。當我對大型路由器軟件熟悉之后,回看犯的錯,都是很低級的錯誤,經驗不足所致。也是走過彎路才更讓人自省,代碼可以重寫,但方案如果錯了,影響的將是版本的方向。若不能及時修正,只會花費更多的時間和精力在錯誤的路上越走越遠。 創新機會無處不在關鍵是你愿不愿意看到 一直以來,我都知道自己是一個情商和智商都非常普通的人,放在人群中平平無奇,對于技術,也沒什么訣竅,就是“勤能補拙,熟能生巧”,不斷地學習,不斷地積累,不斷地在挫折中總結分析,重新找到正確的方向,并沿著這一方向前進。 從2003到2013的十年間,我經歷過落地十幾個關鍵新特性、幫助CPU性能優化從以往的100%降至5%的成功實踐,也品嘗過架構設計沒有被選用的沮喪,還曾遠離過開發去做技術規劃,從系統、協議、產品轉發到預研,除了硬件外,基本涉獵了路由器的所有模塊。這期間也有機會成為管理者,但我認為只要能為公司做貢獻,管理和技術都一樣,相反我更喜歡技術想法能實現,開發落地到產品中的那份踏實感。 可能也是因為這份“傻氣”,2013年,V8平臺準備落地路由器的BRAS產品,主管對我說,路由器還有技術要開發,問我愿不愿意從預研回開發。路由器軟件平臺凝聚了我司IP領域頂級專家們的經驗和智慧,是路由器產品核心競爭力的關鍵武器,經過多年的耕耘,業務已經非常成熟,但由于其規模大和復雜度高,在產品的應用中,也面臨著開發效率和開發成本的挑戰。這感覺就像是“大象在跳舞”,我自認為可發揮空間并不大,但心中對開發的執念還是占了上風,于是我選擇了回來。 后來的事情也證明,我當初的想法是錯的。只要你愿意,在成熟領域依然能發現很多創新機會點。 做優化改進的藍軍 2015年9月,產品線DU組建了系統支撐組,我作為3名研發場景師之一,專門負責效率提升和架構優化工作。 我們發現,FES(轉發適配)模塊成為版本商用的一個高風險點。由于海量的數據洪流沖擊,一旦鏈路出現中斷,網絡拓撲發生變化,FES模塊沒有辦法做到快速切換轉發路徑,導致網絡業務和協議中斷。這個問題不解決,產品將無法商用。但FES是一個公共模塊,有七八年歷史了,隨著業務的不斷增加,該模塊功能越來越復雜,任何一個小改動都要小心翼翼,稍有不慎就有可能引起已有的業務不可用。因此,當我們提出架構整改動議之初,就因為風險巨大被否了。部門還有一個思路,保留現有的功能不變,重新開發一個類似的模塊形成旁路。這樣的“另辟蹊徑”,意味著以后要維護兩套方案,維護成本和難度都成倍增加。 基于開發成本和效率考慮,我建議在原有架構基礎上進行優化和改進。很多人認為風險太高,但我認為只有痛下決心優化,才能“一勞永逸”最高效地解決這個問題。討論來來回回,誰也說服不了誰。后來,DU領導拍板,成立紅藍軍設計小組,并行開展兩種方案的設計,最后PK。 作為藍軍,我們提出了部分重構的方案,既不是推倒重來,也不是一個個小點改進。在相同的時間內,我們團隊將原來5萬行的代碼重構了一萬行,新增一萬行代碼,在性能、易用性、可服務性和可擴展性方面更勝一籌,最終方案被采納。版本上網后,也經受住了現網的考驗,沒有出現嚴重問題。 做能診會治的首席程序員 有人曾問我成為專家有什么經驗,我說,“關注產品全局,敢于擔當”。除了現網痛點,作為一名研發老兵,我常常關注軟件工程技術和產品工程管理,站在開發角度,對軟件架構和軟件工程效率進行診斷和改進,主動伸出手去,提前識別問題,幫助大家提升研發效率。 我們的版本是C語言,內存訪問異常和內存泄漏問題讓人非常頭疼。內存問題在測試階段很難被發現,而一旦漏到現網,就會導致嚴重的后果。為了解決這個問題,我們引入并適配了ASAN工具,將這個工具集成到持續構建工程,通過部門的網絡質量監控系統“鷹眼”實現自動告警,讓內存問題在開發階段、測試階段無處遁形,解決了上百個內存問題,形成了堅固的內存問題防護網,使得路由器開發效率得到很大提升。 路由器軟件平臺架構是封閉的,我提出,“能分能合”的系統才是一個好系統,打破路由器軟件單一的完整大包開發調測方法,開發了增量構建和增量替換等特性,這樣避免每次調試都需要構建和加載整個大包(這個過程非常耗時),為開發人員調試時節省了大量的等待時間,提升了調試效率。我們設計和開發了“轉發適配”獨立仿真平臺,使得轉發適配子系統代碼能夠獨立仿真和調試;規劃了路由器V8平臺的服務演進架構,將V8系統拆分成若干個大的服務,使得各個服務能夠實現“架構獨立”:獨立開發,獨立部署和運行,獨立驗證…… 改進無止境。坦白講,我們在路由器軟件技術領域,離世界第一還有不小的技術差距,業務也相對保守和慢一些,我們還有很大的成長空間。現在的我,每天想的就是怎么去發現機會點,讓V8的架構改進一點點,再改進一點點,有更多更快的技術創新冒出來。 一個人的力量也許有限,路由器領域的機會點也可能相對少一些,但我始終認為,不管做什么,不管在哪個領域,都會有技術挑戰和創新機會,只要你愿意,只要堅持鉆研,就能發現新的機會,也許就能創造新的未來。 在常言道,不忘初心,方得始終。但初心雖易,始終難守。華為22年,我今年已經49歲了。有人曾說,編碼是吃青春飯的,但我從不這么認為。從最初抱著一心想做技術的想法一路走到今天,曾有過無數疲憊的時刻,也曾感到迷茫惶恐,但知天命的年紀,我更清楚自己所長所需,能有幸經歷路由器技術最好的時代和最艱難的歲月,能在自己擅長和喜愛的領域長期發揮光和熱,還能有機會繼續在這一領域探索、鉆研,能為家人提供一份尚可的穩定生活,我要感謝公司提供了一流的研發平臺讓我不斷提升技術能力,感謝很多領導和同事對我的寬容,幫助我成長,還要感謝家人對我的支持和理解。 人生就是不斷學習的過程,技術路上,編碼這件小事,我仍在努力。 |