最近電子發燒友(以下稱'發燒友')采訪了韋東山老師,本文是采訪原稿,展示出來讓大家更深入了解韋老師的同時也進一步學習嵌入式Linux經驗。
機會總是留給有准備的人
發燒友:
為什么要學習掌握ARM裸機?ARM裸機與從事嵌入式工程師職業關聯度如何?
韋東山:
我們講解的ARM裸機,特殊之處在於:不使用IAR/KEIL/MDK等軟件,而是在純粹的linux環境下從0寫代碼。這些好用的開發工具屏蔽了太多的技術細節,比如:位置無關碼、重定位、中斷環境的保存與恢復、鏈接腳本。而這些細節,在后續的bootloader學習中是需要的。
除上述細節外,ARM裸機的學習目的在於:掌握如何編寫程序來控制硬件。后續的“Linux驅動=軟件框架+硬件操作”,我們先在單純的裸機學習中掌握硬件操作,在后面的學習中就可以把精力放在驅動軟件框架上。
我們學習ARM裸機的目的,是去學習后續的Linux課程,進階為Linux系統工程師。不是要讓你繼續從事單片機開發,成為單片機工程師。
在技術層面,Linux系統工程師回頭從事單片機開發,輕而易舉;但是現在不開始着手Linux的學習,后續轉型很麻煩。2004年我們使用51單片機從事車載電話開發,所做的軟件已經算是單片機層面頂尖水平了──我們可以在單片機上開發自己的操作系統。
但是,我們同事紛紛感覺到了危機,單片機能做的事情太單一了。當年流行wince,Linux剛起步,我們選擇學習Linux,現在wince已經沒人提及,而Linux仍如日中天。中興公司也是在2005年才全面從vxwork切換到Linux的,我有幸進入中興與他們一起研究Linux。
在收入方面,大家盡可以去51job等招聘網站搜“單片機”、“Linux”,后者一般是前者2倍以上。
在發展方面,有了Linux知識,幾乎通吃所有產品。我從事過網絡會議系統、監控攝像頭、樓宇對講系統、安防、廣告機方面的開發,我只是開發底層系統,不是開發APP,這些產品通通使用Linux。現在興起的機器人、人工智能,它們要落地的話,運行Linux系統的硬件是必選項。
就身邊事例而言,我是2008年離開中興,隨后幾年里有幾個同科室的同事也都離開了,他們都做Linux系統;現在都做得很不錯。有人在聯想做Android開發,有人在做POS機,有人自己創業,他們或是團隊領導,或是有股份。
發燒友:
根據您的經歷及見聞,現在ARM嵌入式工程師前途如何?含金量、薪資待遇呢?
韋東山:
理想很豐滿,現實很骨感。所有行業的從事者都是在一個金字塔里,工作好收入高離家近假期多的人,都只是少數。我只能說,平均而言,ARM嵌入式工程師待遇較好,發展前途不受限。
說好話之前,先說丑話。
ARM嵌入式工程師入門門檻高,職位需求相對APP來說是少的,很多職位需要你有經驗。
所以,有一部分同學最終只能轉行:轉而做單片機或APP開發。
但是,ARM嵌入式工程師所處位置非常好,向下跟硬件工程師打交道,向上跟APP工程師打交道,可以參與整個系統的開發,前途不受限。
我是個宅男,只能舉身邊的例子:我在中興時從事嵌入式系統的同事,發展都很不錯。
我的科長,擁有專業的Linux底層知識的同時,極具大局觀,他向上研究APP的相關知識、相關協議,上下兼通,是中興的產品經理、總工了。
同事A,早年從因POS機開發(用單片機),在中興里天天加班深研Linux技術,現在在創業公司里當技術頭頭,有股份。加班多,但是收入高。
同事B,在中興里是做APP開發,后跳槽到OPPO后,深研底層開發,早幾年單是年終將就是我的年薪,現在自己創業。
同事C,女,跑到IBM做服務器相關的工作去了,嵌入式Linux的知識絕對是幫上大忙了。
同事D,深研Linux系統知識,人稱大師,從不加班(羡慕死人了),有大BUG必定請他出馬、出差。
對於嵌入式工程師,把Linux知識吃透了,可以游走於幾乎所有行業,因為這些產品基本上都要用Linux。
想當領導的話,向上學習一下APP、業務知識,你就可以掌握整個產品的開發全流程了。
想創業的話,向下你知道需要什么樣的硬件,向上你知道需要請哪方面的APP工程師。
對於暫時找不到嵌入式LINUX職位的同學,不用擔心,你總會發現機會的。
做單片機產品的公司,產品升級的話必定要用Linux,到時你就是公司掌握先機的人;做APP的話,如果跟硬件相關,你的嵌入式LINUX知識會提供很多幫忙。
發燒友:
一個合格的嵌入式工程師,需要具備哪些性格和職業特征?一些理工科學生或剛畢業不久的工程師老說迷茫,產生迷茫的原因有哪些,為什么?怎么克服?
韋東山:
嵌入式工程師,必須具備的性格和職業特征:
究根究底:操作系統層面的問題,必須徹底弄清楚原因,徹底解決,否則隱患巨大。
絕對耐心:嵌入式工程師的代碼量很少,多數時間是在學習新知識、協助調試。我在中興工作時,曾經花了一個月來捕捉、解決一個BUG,最能只增加了一條指令。BUG隨機出現,我不斷地重啟系統、重啟軟件;根據新現象不斷地現學現用。
大局觀:你寫的每一個驅動,功能上要實現,性能上也要實現。需要結合產品的實際需要,根據APP的特點,調整你的程序。調試BUG時,從APP到驅動再到硬件,各種可能的問題都要考慮。
迷茫,唯一的原因就是對未來感到不確定。
我的專業是物理,在大一大二時深感迷茫,不知道畢業后能做什么,我選擇了學習第2學位:計算機。
我剛工作時用的是51單片機,對所用的落后技術也深感迷茫,我選擇辭職自學Linux。
我在中興工作時,加班多、工資少、房價高,仍然迷茫,選擇創業。
創業過程中,我錄制Linux視頻,期間iOS火曝、androidAPP火曝,很多人趁着風頭做ios、Android培訓,我也迷茫,最后選擇不跟風:現在這些培訓很快就冷卻了。
我也算工作15年的老工程師了,也接近40歲了,仍不時覺得迷茫。但是我深信兩句話:要收獲,必須先付出;吃得苦中苦,方為人上人。
對於迷茫的工程師,我建議:
根據自己的興趣,選擇不太偏門的方向,潛心學習;選定方向后,不跟風不追熱門。
發燒友:
您是否遇到過女嵌入式工程師?在嵌入式工程師職業上女性有什么優勢和劣勢?
韋東山:
我在中興時就帶過一個女同事,但是在這領域女性不多。
我認為嵌入式工程師特別適合女性,相對於APP開發,嵌入式工程師工作中的需求交化不大,代碼量也不大,不需要天天加班。
劣勢在於,嵌入式工程師入門門檻高,需要硬件知識、良好的英文閱讀能力、多層面的軟件知識(操作系統、驅動程序、APP開發),學習強度是挺大的。前期需要付出挺多。
名師引導更容易入門
發燒友:
很多新手學習ARM裸機都會很迷茫,請問在學習ARM裸機過程中容易遇到哪些坑?
韋東山:
很多小坑,如果自己去解決的話,估計要花上幾個小時,但是有經驗的人一眼就能看出來。
最奇葩:拿到開發板,把電源插到耳機孔去了。
大多數:粗心,很多人拼寫命令時寫錯了,結果忙上半天找原因。
儲備知識不足:開始學習時,我們只能照着文檔寫命令,這些命令的作用后面才會說明;如果當場就講這命令,課程就會又臭又長。
所以,我們都會建議:按着視頻學習,不懂的、沒講到的,先放着;后面學完你就全懂了。
發燒友:
成為一名具備一定開發能力的嵌入式Linux開發工程師需要具備哪些知識?
韋東山:
我先說合格的標准吧:能在一個新的板能上搭建出Linux系統,能寫出需要的驅動程序。
所以,需要以下知識:
硬件知識:能看懂電路圖,看懂芯片手冊,看懂硬件協議。
英文閱讀:上述資料基本是英文的。
C語言:嵌入式工程師常用語言就是C。
操作系統原理:有助於幫助我們理解Linux源碼。
常用驅動程序框架:精通幾個驅動程序后,領悟原理后,才有能力開發新的驅動程序
紙上得來終覺淺,你學完后,必須找一塊不同的開發板,在上面把所學過的程序自己寫出來,這樣才能真正掌握──這也是我對新同事的要求。
實際上,很多公司招聘時要求有工作經驗。對於嵌入式工程師,這個經驗非常容易得到:你換一個不同的板子練習就可以了。
發燒友:
在學習ARM裸機或ARM Linux過程中,得到資深名師或導師的指引有哪些好處?
韋東山:
學習過程中,很多因為粗心導致的問題層出不窮,自己去解決的話很花時間;
嵌入式學習過程中,需要的知識非常廣,自己臨時去學習的話,進度很慢;能否跳過,自己也不知道。這時候如果能有人指引,效率會很高。
我在2005年學習時,市面上基本沒有資料,我學非常痛苦,在論壇上瘋狂發貼,那些問題現在回頭看非常弱智,但是當時就把我卡住了:茶飯不思,時不時想砸電腦。
發燒友:
請問韋東山老師最終為何選擇嵌入式授課教育?
韋東山:
生活與興趣推着我走上這條路,沒什么情懷。
我2005年適職自學Linux時,過程痛苦,把自己的學習所得寫了一篇文章:S3C2410完全開發流程,發布在網上;然后就去中興上班了。
此文流傳甚廣,人民郵電的編輯聯系我,要我出書。
我答應下來,但是因為一邊上班一邊寫書進度緩慢,於是在2007年辭職專心寫書。
2008年書出版了,錢花光了,於是接受華清遠見的邀請,去做兼職講師。
講課過程中,我采用完全不同的風格:從0寫代碼,邊講邊寫,大受歡迎,效果超好;慢慢有了名氣后,游走於多家培訓機構,天天講課,天天現場寫代碼。
這樣天天做同一件事,天天寫同樣的代碼,實在是煩死人,決定自己錄視頻算了。
於是2011年底,發布第1套視頻,承蒙學生們、工程師們厚愛,他們幫我一起打擊盜版,口口傳播,於是也就一直堅持到現在。
我發現,我有講課的能力,可以把復雜的問題講得非常清楚,非常形象。
我希望,眾多像我當年初出校園的學生,他們有學習的渴望,我能幫他們一把。
所以,一直以來,我不吹牛,不強拉人學習,想適合學習的人不強求。
如果你要學習嵌入式系統,而我恰好經驗豐富,你願意的話我就教你。
悅已之作,方能悅人。這是我們公司的格言,如果做出來的產品你自己都不喜歡,別人怎么會喜歡呢。
在工作中,我就經常回頭去重看視頻(我也會忘記),從未感到臉紅,因為我都是用心錄制的。