華為專(zhuān)家自述:如何成為優(yōu)秀的工程師
無(wú)論是在T、W公司還是在華為,我有幸得以一直從事OS(操作系統)行業(yè),但坦率來(lái)講,這是一個(gè)擁有無(wú)窮樂(lè )趣但也充滿(mǎn)了艱辛的行業(yè),很多時(shí)候并不像外界所認為的那么光鮮。
很多人問(wèn)我對OS怎么看時(shí),我都會(huì )講這樣一句話(huà):操作系統可能是這個(gè)世界上最重要,但也是最沒(méi)用的東西。
最沒(méi)用是因為只有和芯片、業(yè)務(wù)等結合,操作系統才具有使用價(jià)值;最有用是因為操作系統是連接芯片、硬件和業(yè)務(wù)的橋梁,誰(shuí)掌握了操作系統誰(shuí)就擁有了主動(dòng)權。
我的職業(yè)生涯一直以來(lái)都無(wú)可救****地和操作系統綁定著(zhù),華為公司發(fā)起的openEuler社區,一個(gè)國內在操作系統領(lǐng)域真正意義上的開(kāi)放社區,看起來(lái)讓我的命運又起了新的變化。
縱然是命運的安排,也不妨礙從職業(yè)生涯中總結出一些感觸。作為一個(gè)工程師,我認為大體應該經(jīng)歷四個(gè)階段。
興趣是成功的基礎。
雖然我將自己的職業(yè)生涯歸結為冥冥中命運的安排,但實(shí)際上,如果對這個(gè)行業(yè)沒(méi)有興趣,相信我的人生軌跡已經(jīng)無(wú)數次從這個(gè)行業(yè)脫離開(kāi)去。
所以我始終認為,興趣是支撐我們職業(yè)道路走得遠的唯一。
和Linux、操作系統結緣還是20多年前,我上大學(xué)的時(shí)候。大三那年,一個(gè)同學(xué)從北京回學(xué)校,帶來(lái)了兩樣東西,一個(gè)是T公司的安裝光盤(pán),還有一本W(wǎng)公司嵌入式OS開(kāi)發(fā)手冊。
時(shí)隔這么多年,我都還能清晰記得光盤(pán)上紅白相間的閃電和開(kāi)發(fā)手冊幾乎全黑的封面。我當時(shí)拿著(zhù)這兩個(gè)“寶貝”,心想:如果有一天我能在這樣的公司上班,那該是怎樣的人生巔峰。
但是當時(shí)的我絕對不可能想到,若干年以后,我會(huì )是這兩個(gè)公司的研發(fā)負責人。
我在研究生、博士期間所學(xué)和OS一點(diǎn)關(guān)系都沒(méi)有,我的專(zhuān)業(yè)是分布式計算和大規模存儲。
當我的人生軌跡看起來(lái)一切安好地沿著(zhù)存儲一路狂奔的時(shí)候,畢業(yè)季到了,我卻面臨找不到工作的窘境。
彼時(shí)國內IT能力還處于隨便代理點(diǎn)西方的東西就能發(fā)財的階段,沒(méi)有什么公司去做深層次的研發(fā)。
所幸由于做存儲不得不修改Linux內核,加上平時(shí)也喜歡玩玩Linux,雖然我當時(shí)的水平放到現在簡(jiǎn)直是二把刀的檔次,但在那個(gè)能裝上Linux都是高手的時(shí)代,這點(diǎn)手藝讓我通過(guò)了T公司的面試,進(jìn)入了這個(gè)在大學(xué)期間我就心之向往的公司。
當時(shí)的工作狀態(tài)是什么都得做,而且所有的事情都要靠自己。
我很快認識到,和我上學(xué)時(shí)想象中的高大上完全不一樣,做Linux發(fā)行版實(shí)際上是一個(gè)很枯燥、乏味的工作。
沒(méi)有留著(zhù)大胡子的hacker(黑客),也沒(méi)有穿著(zhù)T恤寫(xiě)程序的開(kāi)源范兒,有的是無(wú)窮無(wú)盡的制作軟件包,修改有著(zhù)無(wú)數bug的安裝程序,不知什么時(shí)候來(lái)臨的程序崩潰、系統黑屏。
凌晨?jì)牲c(diǎn)被銷(xiāo)售的電話(huà)驚醒,回答技術(shù)問(wèn)題也是屢見(jiàn)不鮮,以至于我一直有寫(xiě)一篇論文的沖動(dòng),論文名字是:《論IT故障總在后半夜的社會(huì )學(xué)基礎和技術(shù)背景分析》。
隨著(zhù)市場(chǎng)和行業(yè)的變遷,在T公司工作了4年后我加入了W公司W(wǎng)RLinux產(chǎn)品線(xiàn),由于產(chǎn)品線(xiàn)剛成立,所以也經(jīng)歷了一段混亂時(shí)期,我們不得不和全球的同事們一起從產(chǎn)品設計、具體實(shí)現到流程管理等一點(diǎn)點(diǎn)地將產(chǎn)品線(xiàn)逐步推到正軌上。
公司工作多年后我發(fā)現,不論什么行業(yè)做到最后,枯燥乏味才是行業(yè)的本質(zhì)。
無(wú)論求學(xué)時(shí)的我對當時(shí)的T和W公司懷有多大的憧憬和期待,對OS技術(shù)具有多么高的敬意,但是在工作后沒(méi)多久,原始的興趣就消退了,隨之而來(lái)的是疲倦和乏味。
這其實(shí)很正常,任何興趣變成職業(yè)以后剩下的多半只有痛苦。
可能在這個(gè)時(shí)候,恰恰是興趣檢驗你是不是真的喜歡做這行,或者能做這行,甚至很大程度上,興趣也決定了你最終在這個(gè)行業(yè)能達到的高度。
我很難想象,一個(gè)對OS沒(méi)有興趣的人會(huì )下班以后在家打開(kāi)電腦,去嘗試學(xué)習一種新語(yǔ)言,去安裝一個(gè)新的OS玩玩,去了解一下內核的底層機制是怎么樣的,或者無(wú)聊到寫(xiě)一個(gè)小玩意保持一下手感。
我還是喜歡用Linus在CNCF2017大會(huì )上的一段話(huà)來(lái)佐證一下興趣的重要性。他說(shuō)他依然很討厭C++,對maintainer(維護者)依然懷有tough love(又愛(ài)又恨)
但當有人問(wèn)他如何做好一個(gè)軟件項目,如何能讓一個(gè)開(kāi)源軟件更成功的時(shí)候。
Linus說(shuō):“當你做軟件的時(shí)候,不要去考慮它是否能成功,你只需要考慮你自己是否喜歡做這個(gè)事情,然后去做就好了?!?/p>02 基于細節的技術(shù)基礎
誠然,光有興趣,沒(méi)有能力也是做不成什么事情的。如果對某一個(gè)領(lǐng)域要有深入的理解,一定要有扎實(shí)的基礎。
所謂扎實(shí)的基礎是,從這個(gè)行業(yè)的最底層一步步地爬上來(lái),做過(guò)這個(gè)行業(yè)的所有工序,對整個(gè)流程都有切身的經(jīng)驗,這樣才能擁有對所有技術(shù)細節的理解,而細節永遠是考驗一個(gè)人是否專(zhuān)業(yè)的標尺。
在這一點(diǎn)上,我要感謝曾經(jīng)的經(jīng)歷,我完整地經(jīng)歷了一個(gè)Linux的發(fā)行版本制作的全過(guò)程,做過(guò)所有的工序。
不管哪里出問(wèn)題,都需要去修理,這也幫助我對OS這樣一個(gè)龐大的系統具有了全面的理解。這些經(jīng)歷形成的條件反射到現在都還依然清晰。這是技術(shù)深度的基礎。
還有一個(gè)方面則是技術(shù)廣度的基礎,雖然我在學(xué)校期間的研究方向和OS沒(méi)有什么關(guān)系,但是分布式系統、存儲系統中的很多基本理論、設計方法依然為我后面的職業(yè)道路提供了很多的幫助。
而博士期間的思維訓練,對細節的重視對我也是影響深遠。甚至在某個(gè)時(shí)間點(diǎn),我突然意識到,無(wú)論是宏觀(guān)的數據中心,還是微觀(guān)的處理器設計,整個(gè)IT世界都是圍繞“一致性”這個(gè)基本準則在繞圈圈。
如果沒(méi)有相關(guān)細節的基礎知識打底,是完全不可能產(chǎn)生這些化學(xué)反應的。
同時(shí)長(cháng)期對細節的關(guān)注養成的職業(yè)習慣會(huì )很大程度上有助于技術(shù)判斷。
在OS領(lǐng)域,通常很少出現問(wèn)題,但是一旦出現問(wèn)題,都是大問(wèn)題。
舉一個(gè)我親身經(jīng)歷的例子,若干年前,一個(gè)客戶(hù)的USB系統出現了問(wèn)題,當時(shí)客戶(hù)和FAE(現場(chǎng)應用工程師)團隊已經(jīng)做了詳細的分析,判定問(wèn)題出現的版本區間是XX到XX之間,但是問(wèn)題必須在2天內閉環(huán),否則后果很?chē)乐亍?/p>
看起來(lái)似乎并不難,只要循著(zhù)二分查找法,很快就可以定位是什么補丁合入導致的問(wèn)題,但是我總覺(jué)得哪里不太對勁;
- 一個(gè)是這些合入的代碼雖然和USB有關(guān),但是補丁的內容和問(wèn)題并不完全匹配;
- 二是長(cháng)期在這個(gè)行業(yè),養成了多疑的習慣,雖然前面幾個(gè)團隊都拍著(zhù)胸脯保證,但我始終對問(wèn)題總出現在XX和XX之間的結論抱有懷疑。
最終,除了用二分法繼續查找原因外,我又找了一個(gè)工程師,把問(wèn)題梳理了一遍,同時(shí)和整個(gè)社區進(jìn)行了細細的比對,并沒(méi)有局限在某個(gè)版本區間。
幸運的是,最終工程師找到了一個(gè)不起眼的、和那個(gè)版本區間完全沒(méi)有關(guān)系的補丁解決了這個(gè)問(wèn)題,我的這種謹慎和小心也幫助公司保住了這個(gè)客戶(hù)。
無(wú)論多高職級的工程師,只有對細節的關(guān)注才能避免一些可能是“眼見(jiàn)為實(shí)”的偏差,而盡可能多的知識覆蓋,才能讓一個(gè)人有足夠的分析和判斷能力,對自己所從事的領(lǐng)域做到心中有數,同時(shí)才能產(chǎn)生不同知識之間的交聯(lián)反應。
03 深入客戶(hù)的行業(yè)理解在興趣和技術(shù)細節基礎之上,更重要的階段則是要對所在的行業(yè)有深刻的理解。
我從職業(yè)生涯的一開(kāi)始就有機會(huì )持續接觸市場(chǎng),多次參與商用操作系統配套多款芯片的全過(guò)程,不但技術(shù)分析、需求談判是全程參與,甚至最初的商務(wù)報價(jià)也是我拍腦袋給出來(lái)的。
雖然這似乎和純技術(shù)沒(méi)有直接的關(guān)聯(lián),但是一個(gè)工程師能具體看到所做的東西怎么轉化成為商品是一件意義非凡的事情。
穿上西裝,打上領(lǐng)帶去見(jiàn)客戶(hù)、投標競標并不是傳統意義上的技術(shù)范疇,但是我始終認為這種經(jīng)歷遠遠要比我的技術(shù)積累來(lái)得更為重要。
它培養了某種“直覺(jué)”,行業(yè)的“直覺(jué)”。
雖然我認為,對于很多事情,人的直覺(jué)是不靠譜的,但那是指對確定性事物而言。但是世界上大量的事物是不確定性的,對于不確定事物走向的判斷,除了“直覺(jué)”,別無(wú)他法。
參與到市場(chǎng)化、產(chǎn)品化的過(guò)程中,能夠極大地提升工程師對技術(shù)的進(jìn)一步認知。
以openEuler為例,我們在一開(kāi)始的設計過(guò)程中就始終強調一點(diǎn),一定要以生態(tài)伙伴的利益為最高的設計目標,要幫助合作伙伴更多的贏(yíng)利。如果只是單純從技術(shù)角度來(lái)看,這好像聽(tīng)起來(lái)怪怪的,我們花費了成本,卻不主動(dòng)獲得收益。
但是如果從更為廣泛的市場(chǎng)角度來(lái)看,其實(shí),操作系統本身是連接硬件和軟件的橋梁,連接暢通了,交流更順暢了,市場(chǎng)繁榮起來(lái)了,在這個(gè)市場(chǎng)里的玩家,不論是硬件,還是軟件,都會(huì )獲得可觀(guān)的收益。
因此就完全沒(méi)有必要去收一點(diǎn)點(diǎn)過(guò)橋費了!
只有在對行業(yè)有深刻的理解的基礎上,我們才能談到技術(shù)規劃,我們才能談到版本演進(jìn)路徑,我們才能談到生命周期,甚至才能談到社區治理、技術(shù)方向的投入等內容。
如果要做一個(gè)總結的話(huà),可以囊括成為一句話(huà):不光要懂技術(shù),更要懂行。
04 面向完整業(yè)務(wù)的創(chuàng )新我一直認為只有在懂行的基礎上才談得上創(chuàng )新,我理解的創(chuàng )新并不是一個(gè)技巧的改進(jìn),一段代碼靈光一閃的優(yōu)化,而應該是在對所在領(lǐng)域深刻理解的基礎上做出的一些或大或小的變革,或者是一個(gè)完整的產(chǎn)品,或者一個(gè)完整的系統,而且這些變革、產(chǎn)品、系統能在商業(yè)上帶來(lái)一些收益。這應該是一個(gè)工程師最高的境界了。
從創(chuàng )新的角度來(lái)說(shuō),個(gè)人之見(jiàn),一個(gè)頂級的工程師,并不是那個(gè)在發(fā)動(dòng)機的外殼畫(huà)上一道線(xiàn),然后說(shuō)這道線(xiàn)值1美元,但是知道在哪里畫(huà)值49999美元的天才,而是創(chuàng )造了發(fā)動(dòng)機的那個(gè)無(wú)名工程師。
在我看來(lái),那個(gè)天才只是修正了這個(gè)工程師的一個(gè)bug而已,只是一個(gè)“微創(chuàng )新”,而那個(gè)工程師才是使得這個(gè)故事有一個(gè)開(kāi)始的人。
傳統上,由企業(yè)主導的內部創(chuàng )新都會(huì )強調必須要和業(yè)務(wù)強結合,同時(shí)要求短期能夠有收益,因此,對于很多長(cháng)周期的、可能具有顛覆性效用的創(chuàng )新,企業(yè)內的研發(fā)環(huán)境可能并不那么友好。
幸運的是,華為已經(jīng)正式開(kāi)始實(shí)施鯤鵬產(chǎn)業(yè)戰略,操作系統成為了重要的一環(huán)。公司成立了openEuler開(kāi)源社區,按照行業(yè)的做法來(lái)做生態(tài),目標就是作為一個(gè)開(kāi)放、創(chuàng )新的開(kāi)源平臺,為第三方的操作系統提供穩固的底座和基礎。
一個(gè)全新的鯤鵬架構,一個(gè)全新的openEuler的開(kāi)放社區,我們可以將一些不成熟的,甚至是天馬行空的想法放到社區里孵化,讓寬容的開(kāi)源社區為這些項目提供一個(gè)良好的生長(cháng)空間。
希望openEuler社區能孕育出更多創(chuàng )造發(fā)動(dòng)機的工程師,而唯一的區別是,你絕不會(huì )再默默無(wú)聞。
05 結語(yǔ)公司近幾年發(fā)生了非常多的變化,對我來(lái)講,文化和思想上的變化是最重要的。
而可信、生態(tài)、clean code,這些雖然看起來(lái)有點(diǎn)形而上學(xué)的詞語(yǔ),現在也逐漸在公司的各個(gè)角落以不同的形式產(chǎn)生著(zhù)些許化學(xué)反應。
但我刻意沒(méi)有去聊一些代碼方面的經(jīng)歷和經(jīng)驗,我始終認為,代碼技巧雖然重要,但是大體只能支持一個(gè)工程師到第二個(gè)層次,也就是基礎層面。
就像從幼兒園、小學(xué)開(kāi)始我們就接受漢字練習,接受作文技巧方面的訓練,但是會(huì )漢字,有技巧并不能保證我們寫(xiě)出偉大的作品。
任何偉大的文學(xué)作品本質(zhì)還是對生活的深刻理解。
因此,在我看來(lái),除了一步步爬過(guò)這四個(gè)層次,似乎沒(méi)有別的辦法能夠讓我們一步登天,引領(lǐng)世界。所以,當我們各個(gè)部門(mén)和團隊進(jìn)行創(chuàng )新的時(shí)候,可能要先審視一下是否已經(jīng)經(jīng)過(guò)了這幾個(gè)階段,是否有足夠的人員已經(jīng)具有了這幾個(gè)層次的條件。
在這里對年輕的工程師們提出一些個(gè)人的建議吧,最近這兩年,產(chǎn)業(yè)環(huán)境發(fā)生了巨變,一方面指令集、芯片、體系架構、存儲器件等硬件領(lǐng)域經(jīng)歷著(zhù)巨大的變革;另一方面,5G、云計算、IoT、邊緣計算等新興領(lǐng)域蓬勃興起,這些都推動(dòng)操作系統領(lǐng)域發(fā)生深刻的變化,它不但是連接硬件和軟件之間的橋梁,更成為軟件生態(tài)的控盤(pán)手。
操作系統以及附著(zhù)之上的生態(tài)系統已經(jīng)成為各大公司的必爭之地,讓這個(gè)傳統領(lǐng)域以另外一種形式重新回到了舞臺中央。
我希望越來(lái)越多的年輕人能培養起對操作系統強烈的興趣,打好技術(shù)基礎,接觸市場(chǎng),逐步積累行業(yè)知識,發(fā)揮想象,也希望公司能多為工程師,特別是年輕工程師創(chuàng )造這樣的環(huán)境。
我相信只有越來(lái)越多的年輕工程師擁有這四個(gè)層面的能力,華為公司才能真正具有成為引領(lǐng)者的基礎。
原文:《華為文摘》第十五輯
作者:熊偉
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。
物聯(lián)網(wǎng)相關(guān)文章:物聯(lián)網(wǎng)是什么