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