他剛進(jìn)公司被問(wèn)最多的是:20萬(wàn)行代碼,搞得定不?
20萬(wàn)行代碼,搞得定不?
“你肩上扛了20萬(wàn)行代碼,搞得定不?”這是我剛進(jìn)華為時(shí)聽(tīng)到最多的一句話。
2008年9月新員工培訓(xùn)完,我沒(méi)有回西安,而是直接飛到上海承接產(chǎn)品。剛進(jìn)上海項(xiàng)目組,就受到了熱情的接待。
“這次西安來(lái)了多少人承接我們模塊?”上海X模塊的PL問(wèn)我。
我愣愣地指了指自己:“就我一個(gè)”。
“什么,就你一個(gè)?我們組有20萬(wàn)行代碼,趕緊反饋再加人。?”
其實(shí),剛出校園的我對(duì)20萬(wàn)行代碼并沒(méi)有太多概念,但是看到他的反應(yīng),頓感不妙。我趕緊找到在其他項(xiàng)目組承接產(chǎn)品的西安PL,卻得到了安慰,“沒(méi)有想象的那么嚴(yán)重,你那塊業(yè)務(wù)我也知道一些,我給你分析看。X模塊代碼邏輯比較簡(jiǎn)單,Y模塊基本不出問(wèn)題可以暫時(shí)不學(xué),這樣……這樣……你只要集中把這幾個(gè)模塊搞定就行了。?”
加人是不可能的,于是我的培養(yǎng)計(jì)劃也相應(yīng)有了變化。入職前兩個(gè)月,我每天的任務(wù)就是讀代碼,下班前半小時(shí)給全組講解。而同期其他新員工在入職一個(gè)月時(shí)已經(jīng)開(kāi)始處理問(wèn)題單和開(kāi)發(fā)需求了。第三個(gè)月中期答辯時(shí),其他人的膠片上呈現(xiàn)的都是“處理了XX個(gè)問(wèn)題單,開(kāi)發(fā)了XK代碼的需求”,而我的膠片都是模塊的代碼功能介紹。
學(xué)習(xí)期結(jié)束后,20萬(wàn)行代碼的威力很快得以體現(xiàn)。為了讓我快速熟悉業(yè)務(wù),項(xiàng)目組把活最雜的接口人工作安排給了我,負(fù)責(zé)所有的網(wǎng)上問(wèn)題、實(shí)驗(yàn)室問(wèn)題定位以及幾個(gè)高風(fēng)險(xiǎn)模塊的問(wèn)題單修改。很快,我就淹沒(méi)在電話和郵件的海洋里,焦頭爛額。
“問(wèn)題定位沒(méi)?郵件都發(fā)好幾個(gè)小時(shí)了,環(huán)境不保留了。”
“這個(gè)問(wèn)題我分析應(yīng)該是你們模塊的問(wèn)題,快看下,下班前沒(méi)結(jié)論我就轉(zhuǎn)單了。”
“怎么回事,你名下問(wèn)題單怎么不見(jiàn)少,版本都快過(guò)不了點(diǎn)了。”
……
是的,我成了各個(gè)組的“焦點(diǎn)”,同時(shí)也開(kāi)始變得焦慮,雖然每天凌晨才回公寓,依然無(wú)法阻止上竄的DI值(問(wèn)題密度),這下該如何是好?
很快,導(dǎo)師和PL注意到了我的窘境,伸出了援助之手。看現(xiàn)象,找原因,和我一起分析現(xiàn)狀,一件一件分析手頭的事務(wù),傳授四象限工作心得,把眼前的事務(wù)按照四象限法則排好優(yōu)先級(jí),再一一擊破,慢慢堅(jiān)持一段時(shí)間后,我終于開(kāi)始變得從容起來(lái)。
就是為了晚上能睡安穩(wěn)覺(jué)
轉(zhuǎn)正之后,我很快就遇到了第一個(gè)網(wǎng)上問(wèn)題,并且經(jīng)歷了一次深刻bug修復(fù)過(guò)程。依稀記得那是周日,凌晨?jī)牲c(diǎn),電話響起時(shí)我感覺(jué)像是剛躺下就被叫醒。
“我是在一線支撐的測(cè)試經(jīng)理,新版本升級(jí)報(bào)錯(cuò)了,需要馬上解決!”
“好的,什么情況?先嘗試做下這幾步恢復(fù)操作,再收集下日志,我馬上去公司。”一聽(tīng)是現(xiàn)網(wǎng)的問(wèn)題,本來(lái)一臉迷糊的我瞬間清醒,這可容不得半點(diǎn)馬虎。快速穿好衣服,打車直奔公司。
還好,問(wèn)題很快定位,之前現(xiàn)網(wǎng)的服務(wù)器出現(xiàn)過(guò)網(wǎng)卡故障,客戶把服務(wù)器拆封,兩塊網(wǎng)卡拔出來(lái)擦拭金手指,插進(jìn)去的時(shí)候交換了插槽位置,導(dǎo)致網(wǎng)卡的PCI總線編號(hào)發(fā)生變化。為了防止客戶私裝其他網(wǎng)卡,引起兼容性問(wèn)題,新版本代碼做了強(qiáng)制校驗(yàn),但對(duì)于這種更換網(wǎng)卡位置的場(chǎng)景,卻沒(méi)有考慮到。
“這誰(shuí)設(shè)計(jì)的功能,畫蛇添足!老版本都沒(méi)問(wèn)題,這是致命bug,我要求必須回溯!”雖然功能不是我開(kāi)發(fā)的,但聽(tīng)到電話另一端的措辭嚴(yán)厲,也感覺(jué)像犯了大錯(cuò),不敢吱聲。這次的經(jīng)歷,讓我再后續(xù)很長(zhǎng)一段時(shí)間,一接到網(wǎng)上問(wèn)題電話就非常緊張。
網(wǎng)上問(wèn)題引起的風(fēng)波還沒(méi)過(guò)去,修改這個(gè)網(wǎng)上問(wèn)題的任務(wù)就落到我頭上,沒(méi)有想到的是這次修改也不順利。代碼很快就修改完了,但是驗(yàn)證時(shí)遇到一個(gè)問(wèn)題。由于老型號(hào)服務(wù)器存量并不多并且前幾年已停止發(fā)貨,三種老型號(hào)服務(wù)器,實(shí)驗(yàn)室只有一臺(tái)了,其他兩種類型的服務(wù)器沒(méi)有辦法驗(yàn)證,怎么辦?
“代碼判斷的就是這幾個(gè)信息,你可以通過(guò)模擬打樁,之前我都是這么測(cè)的”,在老員工的指導(dǎo)下,我很快完成了打樁測(cè)試,但心里總有點(diǎn)不踏實(shí)。
結(jié)果在版本內(nèi)部轉(zhuǎn)測(cè)試前的預(yù)驗(yàn)證環(huán)節(jié),兄弟項(xiàng)目組的同事找到了我,他們的一臺(tái)服務(wù)器裝上新版本后運(yùn)行不起來(lái)。我心里“咯噔”一下,不會(huì)是那兩種沒(méi)有驗(yàn)證的服務(wù)器吧?果然,經(jīng)過(guò)實(shí)機(jī)分析,發(fā)現(xiàn)我用的打樁模擬方法和真實(shí)的硬件還是有差異。
對(duì)于這次的修改引入,PL特地過(guò)來(lái)輔導(dǎo):“這次主要是你經(jīng)驗(yàn)不足,不要太放在心上。不過(guò)我們也要好好想想,遇到困難,是不是盡全力了。”再次修改時(shí),還是有一種類型的服務(wù)器沒(méi)找到,感覺(jué)真的沒(méi)辦法了。
一大早我只好再求助導(dǎo)師和PL,幾小時(shí)后,PL過(guò)來(lái)對(duì)我說(shuō):“我已經(jīng)給周邊幾個(gè)部門打過(guò)電話了,有幾臺(tái)服務(wù)器可能是我們要找的,我?guī)闳ゴ_認(rèn)下。
又經(jīng)過(guò)幾個(gè)小時(shí),我們終于在一個(gè)實(shí)驗(yàn)室的角落找到了一臺(tái)落滿灰塵的服務(wù)器。拍拍灰塵,一看,好家伙,這不正是我們要找的么!找電源,接線,上電,安裝版本……看到版本軟件順利啟動(dòng),心里懸了很久的大石頭總算落地了。
“好,我們?cè)侔呀粨Q網(wǎng)卡順序的場(chǎng)景覆蓋下。”然而折騰了半天,網(wǎng)卡還是沒(méi)拔下來(lái)。原來(lái)這個(gè)型號(hào)的服務(wù)器硬件設(shè)計(jì)上也做了防呆,卸網(wǎng)卡需要專用的小工具。
半個(gè)小時(shí)后,網(wǎng)卡終于拔了下來(lái),PL手上不小心被劃了口子,鮮血直流,他卻蠻不在意:“為了晚上能睡個(gè)安穩(wěn)覺(jué),這點(diǎn)小傷,值了!”
后來(lái)每當(dāng)看到“打造質(zhì)量口碑,構(gòu)筑質(zhì)量文化的教堂”時(shí),我想說(shuō)我們的質(zhì)量追求真的很簡(jiǎn)單,就是為了晚上能睡安穩(wěn)覺(jué)。
沒(méi)有定位不了的問(wèn)題
“Hello,sir……”下班剛出公司,我就接到了一個(gè)老外的電話。豎起耳朵再加上熟練的“sorry”“pardon”,才終于搞清楚了,原來(lái)是之前在espace上交流過(guò)的印度一線小伙,馬上要去客戶機(jī)房操作了,還有兩個(gè)操作步驟不太清楚。
從來(lái)沒(méi)跟老外通過(guò)電話的我,一時(shí)語(yǔ)塞,面紅耳赤,嘴巴幾次想張但就是張不開(kāi),到嘴邊的單詞,就是說(shuō)不出來(lái)。
對(duì)方還在時(shí)不時(shí)的“hello? hello?”以為我不在線。哎,平時(shí)都是由GTAC的兄弟幫忙溝通,這下沒(méi)人幫忙了,這可如何是好……不管了,管他語(yǔ)法怎樣,突然,一句“yes”蹦出了口,慢慢地,一個(gè)單詞、一個(gè)單詞地蹦出,雖然磕磕巴巴,但總算可以用英語(yǔ)交流了。
我在電話了說(shuō)了一通,反復(fù)確認(rèn)對(duì)方了解了我的意思后,才放下電話。一看手心緊張得都是汗。好在總算交流完了,頓感身心舒暢了許多。
就這樣,入職兩三年后,一切逐漸步入正軌,不管是遇到什么難題,我似乎都可以從容應(yīng)對(duì)了。
不過(guò),現(xiàn)網(wǎng)出現(xiàn)的兩三起未定位的Linux系統(tǒng)掛死問(wèn)題,一直是大伙兒籠罩在頭頂?shù)臑踉啤?/span>由于使用的Linux是幾年前外購(gòu)的版本,一直未升級(jí),維測(cè)功能比較弱。而我們作為業(yè)務(wù)軟件團(tuán)隊(duì),也不具備定位這種疑難問(wèn)題的經(jīng)驗(yàn),求助公司的Linux團(tuán)隊(duì)后,仍無(wú)法定位,只能以老舊Linux系統(tǒng)問(wèn)題進(jìn)行了答復(fù)。
沒(méi)想到,不久,在一個(gè)大T局點(diǎn)又出現(xiàn)了這個(gè)問(wèn)題。沒(méi)辦法,我們只能再次求助OS、硬件相關(guān)人員,快速組建了攻關(guān)團(tuán)隊(duì)。由于缺少日志,大家從軟件硬件各種角度進(jìn)行大膽猜測(cè),然后在實(shí)驗(yàn)室進(jìn)行故障注入測(cè)試,持續(xù)了一個(gè)月后,實(shí)驗(yàn)室連問(wèn)題都沒(méi)有復(fù)現(xiàn),更談不上定位,所有人都很沮喪。好在新版本軟件已經(jīng)合入了掛死時(shí)自動(dòng)復(fù)位的自愈功能,問(wèn)題影響可以將到最低。一線也接受了自愈方案。第一次的集中攻關(guān)就這樣心有不甘地以失敗告終。
出來(lái)混,遲早要還的。問(wèn)題攻關(guān)永遠(yuǎn)不會(huì)缺席,只是來(lái)得晚而已。大半年后,中國(guó)區(qū)的一起Linux掛死問(wèn)題拉開(kāi)第二次攻關(guān)序幕。由于是晚上出的問(wèn)題,一線還沒(méi)來(lái)得及處理,我們請(qǐng)求一線保留環(huán)境,立刻協(xié)調(diào)了公司Linux和硬件的專家馬上出差到現(xiàn)場(chǎng)定位。
“這次抓到第一現(xiàn)場(chǎng),總算能定位了。”我心里想。可惜從一線并沒(méi)有傳回好消息,只是進(jìn)一步確認(rèn),確實(shí)是Linux系統(tǒng)掛死了,原因還是不知道。一時(shí),又陷入僵局。
但是攻關(guān)不能因此停滯。我們?cè)俅戊o下心來(lái),繼續(xù)分析日志,看代碼,分析這幾個(gè)問(wèn)題找共同點(diǎn),很快發(fā)現(xiàn)這幾個(gè)問(wèn)題涉及的設(shè)備都是在運(yùn)行了快一年左右時(shí)出現(xiàn)了問(wèn)題。莫非與單板的運(yùn)行時(shí)長(zhǎng)有關(guān)系?累積效應(yīng)的故障模式?大家很快調(diào)整了攻關(guān)方向。不久,就找到一篇關(guān)于Linux內(nèi)核內(nèi)存泄露的案例,經(jīng)過(guò)計(jì)算,在我們的單板上正好在一年左右Linux系統(tǒng)一些關(guān)鍵內(nèi)存就會(huì)耗盡,出現(xiàn)系統(tǒng)掛死。真是踏破鐵鞋無(wú)覓處,得來(lái)全不費(fèi)工夫。
后續(xù)我參與甚至主導(dǎo)過(guò)多起耗時(shí)長(zhǎng)久、艱苦卓絕的疑難問(wèn)題攻關(guān),Linux系統(tǒng)掛死攻關(guān)在這些問(wèn)題中不是影響最大和最緊急,但卻讓我受益最多。經(jīng)歷過(guò)這次攻關(guān)后,面對(duì)任何疑難問(wèn)題,我心中都有一個(gè)信念:在我司,從來(lái)沒(méi)有搞不定的事,也從來(lái)沒(méi)有定位不了的問(wèn)題!
2014年到2017年,由于工作調(diào)整,我轉(zhuǎn)戰(zhàn)產(chǎn)品開(kāi)發(fā),暫時(shí)離開(kāi)了網(wǎng)上問(wèn)題處理。2018年我又重新回歸。
又是一次半夜緊急電話,我急匆匆趕到GTAC的攻關(guān)室處理緊急問(wèn)題,一進(jìn)門,又見(jiàn)到以前的幾位老伙計(jì):“看見(jiàn)你來(lái)我就放心了”。這句話一時(shí)間又讓我渾身充滿了力量!