【導讀】還在大學的你,不知道未來何去何從?都說迷茫是大事做不了,小事不想做。還在做程序袁的你,是不是也想創(chuàng)業(yè)?程序袁好創(chuàng)業(yè)嗎?Linux好學嗎? 學會了這個能找到咋樣的工作?下面就跟著小編的采訪揭開上述迷霧吧!
1、大家都比較想了解您個人學習的歷程與感想,可否與大家分享一下?
韋東山:
我從2003年開始工作,那時候的技術真是差勁?。褐钡?005年,在硬件方面我只會設計兩層板,在軟件方面我用的一直是51單片機。有一次老板的朋友來做技術指導,聊起ARM、wince、Linux、操作系統(tǒng),讓人真是大開眼界。
操作系統(tǒng)才是未來!必須改變!
在硬件方面沒人指導很難有長進,但是軟件方面我可以自學啊。于是我開始買各種ARM的書,買周立功的2104板和書,用它來學習過UCOS,感覺他們還在延續(xù)著單片機的思路。這不行?。〉蒙喜僮飨到y(tǒng)!學WINCE?還是學LINUX?WINCE可是要錢的,咱學個免費的LINUX吧。買個 S3C2440開發(fā)板,就這樣開始了LINUX的自學之路。
多謝友善之臂的老板楊斌,我買的是個二手的2440開發(fā)板,他還是認真的提供技術支持,那時我沒少請教他問題。他應該發(fā)達!
2005年那會,嵌入式LINUX方面的書是沒有的,所以我的學習過程完全依賴網(wǎng)絡、論壇,現(xiàn)在回首那個時候的提問,可以發(fā)現(xiàn)很多幼稚問題(特意去試了下,我才發(fā)現(xiàn)那個網(wǎng)站已經(jīng)關閉了,世事難料?。?。
工作后再難有在校時的心態(tài)與大段時間……,直到公司倒閉……,我于是回老家閉門學習半年。在外租房,有家不回;沒日沒夜,不是在電腦前就是在床上,要不就是去吃飯的路上;自學、翻書、發(fā)貼、編程試驗、問題解決不了時苦悶得想砸電腦;現(xiàn)在回想起來感覺也挺勵志的。就這樣,用了半年終于入了門,bootloader完全掌握,基本的Linux驅動會寫了,錢也用完了,要出來工作了(想想也挺郁悶,大學4年工作2年,竟然技術不過關要回爐重造)。
我沒有Linux工作經(jīng)驗啊,怎么辦?那就自己寫個操作系統(tǒng)混經(jīng)驗值吧,仿照UCOS、LINUX,寫一個簡單的操作系統(tǒng):基于MMU的操作系統(tǒng) (MOS)。就用它作為敲門磚,寫到簡歷上去顯得有點料。去面試了三家公司,華為惠通、UT斯達康、中興,全中!因為錢沒了,而中興的通知來得最早,就去它吧。
說實話,那時我的Linux水平只是剛入門,好在2006年那會中興也剛從vxwork轉為Linux,大家都不懂都在學習,我倒也不顯得丟人。在中興里,又是沒日沒夜地工作、學習了2年。期間碰到過無數(shù)的疑難問題,煅煉了能力。說真的,只有在解決問題的同時,你才會東想西想,把有關、無關的技術都想清楚并掌握得扎實。
2007年從中興辭職開始寫書。不要笑我只有2年Linux工作經(jīng)驗就敢寫書,自學半年工作兩年,是這輩子最用功的時刻,遠比高考時努力。這2年半所學到的東西遠超大學4年。工作和寫書對技術的要求完全不同,工作上你能寫出程序解決問題就可以,而寫書則要求你對知識理解透徹。書寫了1年,也可以認為繼續(xù)學習了1年。2008年那會還沒有手把手教、從零搭系統(tǒng)開始學習嵌入式Linux的書,這本書《嵌入式Linux應用開發(fā)完全手冊》又火了一把。
書出了,我也稍有點名氣,于是從2009年開始在幾個培訓機構講課,去過華清遠見、尚觀,都是兼職,因為我當時還想著自己創(chuàng)業(yè)呢。業(yè)沒創(chuàng)好錢又沒了,只能去兼職。這樣又持續(xù)了2年,這又是一個煅煉:怎么講,別人才容易學會。
這就是我的學習工作經(jīng)歷,生活推著我在Linux上歷煉了9年。如果你還是學生,勸你盡早找到自己的興趣,全力鉆研;如果你已經(jīng)進入社會,最好能找到相關的工作,白天上班也是煅煉,晚上繼續(xù)學習。
2、自從業(yè)以來,遇到最大的困難與挑戰(zhàn)是什么?能否給我們分享些您的經(jīng)驗以及心路歷程?
韋東山:
轉行!轉行是最困難的,這意味著你前面積累的經(jīng)驗幾乎沒用了,還需要學習全新的知識──這需要大量的時間。我的第1份工作是做硬件的,后來由于工作需要也寫一下單片機程序,但是軟件水平是很低的。決定轉行學習Linux時,這需要有操作系統(tǒng)的概念知識、全新的ARM體系架構知識、完全沒接觸過的軟件設計理念(寫單片機時就是一個while循環(huán),Linux里都是面向對象的思想)。
這千頭萬緒,要學習的知識很多,從哪里入手,從哪里抽出時間,這就是2個最大的困難。
· 對于時間,我是暫停工作閉門自學了半年;
· 對于從哪里學習,我是先學習了趙炯的《LINUX內核完全注釋》,這讓我對操作系統(tǒng)有比較深的認識;接著把 ARM開發(fā)板當作單片機學習裸板,把bootloader涉及的硬件操作單獨寫程序試驗;最后開始學習驅動程序的編寫。從裸板程序開始,直到Linux驅動,這就是我的主要學習方法,這也是《嵌入式Linux應用開發(fā)完全手冊》的章節(jié)順序。
3、IP Camera帶音頻視頻功能、可以聯(lián)網(wǎng)互動,因此可能會被惡意入侵、隱私泄密,工程師如何做到保護?
韋東山:
IP Camera的使用涉及3個部件:用來錄像錄音的IP Camera、提供數(shù)據(jù)傳輸或存儲的服務器、觀看音視頻的客戶端(PC或手機等)。
我們會根據(jù)IP Camera的使用場景,為每一個階段提供數(shù)據(jù)保護,比如:
a. 客戶拿到IP Camera時,要登錄服務器注冊帳號,并綁定設備。在服務器上的WEB服務就要注意隱私保護,必要時引入手機驗證。
b. 客戶端向服務器提出請求時,要輸入用戶名和密碼,這可以參考Linux的遠程登錄密碼驗證功能。比如使用ssh協(xié)議登錄Linux服務器時,會提示你輸入用戶名和密碼。相信這一套機制非??煽?,我們可以直接引用。
c. 三者之間傳輸數(shù)據(jù)時,數(shù)據(jù)要先加密再傳輸??梢允褂霉妹荑€等加密方式。
d. 在服務器上存儲的數(shù)據(jù),如果你對安全保護不在行,可以使用大公司提供的云服務。
我只是給出一個思路,經(jīng)驗不豐富。歡迎探討。
4、IP Camera運動控制部分可以實現(xiàn)拍攝角度的調節(jié),能否通過自動控制攝像頭的角度實現(xiàn)人臉、頭部信息的鎖定、實時運動捕捉,大概怎么實現(xiàn)的,能否介紹一下?
韋東山:
術業(yè)有專攻,圖像處理不是我們的專長。但是要做這一塊,我們會這樣做:先使用開源軟件比如OpenCV,如果它達不到要求,再求助于專業(yè)人士。
[page]
5、傳統(tǒng)的Linux驅動開發(fā)和Android驅動開發(fā)有何區(qū)別?現(xiàn)在android那么火,它跟LINUX是什么關系?學好了你們的視頻,對學習android有何幫助?你們后續(xù)有無錄制android視頻的計劃?
韋東山:
簡單地說,Android驅動=Linux驅動+封裝。 Android應用程序是使用java編寫的,Linux內核和驅動程序是使用C語言編寫的,java APP要訪問驅動程序,這中間需要插入一個封裝接口。核心還是底下的Linux驅動程序;對于封裝,你只要了解了封裝規(guī)則,基本就可以一通百通了。所以,如果你的目標是掌握Android驅動,那么我們的視頻很適合你。我們后面也會講講Android驅動的封裝,它不會太難。
對于Android應用程序,可以認為它跟Linux的關系不大。即使你沒有Linux知識,也可以在1個月內入門Android應用開發(fā)──我只是說,你會開發(fā)簡單的界面。程序的核心永遠是在界面之后,所以不要沾沾自得。比如手機游戲,背后的圖像處理算法、游戲的邏輯,這才是重點。如果你的目標是掌握Android應用,我反而覺得你應該跳出“Android”來學習。應用程序的領域實在太多,有網(wǎng)絡、圖像處理、安全、搜索等等,由你的興趣來選擇方向吧。Android應用只是一個人機界面,把背后的復雜系統(tǒng)展示給客戶來使用,如果你只滿足于“寫界面”,好吧,1個月速成,再花幾個月深入理解 Android的框架。容易上手的,就容易掉價。前幾年Android應用開發(fā)由于會的人還不多,工資挺高;這兩年就開始往下掉了;要保住你的薪資水平,除了界面你還需要掌握“核心技能”:界面背后的支撐。
我沒有打擊Android應用的意思,對于急于找到工作的人,我反而建議去學習Android應用。你應聘到工作后,公司自然會壓著你去了解產(chǎn)品的相關知識,否則你也寫不出界面啊。
6、工程師一般時間都是比較緊張的,您是在什么情況下寫的《嵌入式LINUX應用開發(fā)完全手冊》這本書呢?這本書是想給大家分享些什么呢?
韋東山:
辭職寫的。我2005年自學Linux時在網(wǎng)上發(fā)布了“S3C2410完全開發(fā)流程”的學習筆記,被出版社的編輯看到。他們在2006年聯(lián)系我寫書,那時我在中興上班。在公司上班期間,根本沒有時間寫書:工作累個半死,回來哪有精力寫。于是決定2007年辭職專門寫書。
我學習時,大部分的知識都是從網(wǎng)上搜索得來,這需要耗費巨大的精力去尋找,并且不系統(tǒng)。作為初學者,不知道去搜什么來入門,也不知道搜什么來深入。所以,我想出一套“完全教程”,讓零基礎的入只看這本書,就可以入門并掌握比較深的、工作中可以使用的知識。
好吧,其實也是被編輯以名利相誘,然后催我寫寫寫!
7、“電子從業(yè)人員的發(fā)展方向”大概分為兩類:軟件工程師、硬件工程師,軟件工程師一般又可以分為:底層系統(tǒng)、上層應用。您如何看待這三種方向的職業(yè)發(fā)展呢?
韋東山:
我剛工作時也曾是個硬件工程師,但是發(fā)現(xiàn)沒人帶的話很難有進步,于是轉行做軟件了。對于他的職業(yè)發(fā)展,我也只能簡單說說。
不少人問我,到底是學驅動還是學應用?
我只能說憑興趣,并且驅動和應用并不是截然分開的
a. 我們說的驅動,其實并不局限于硬件的操作,還有操作系統(tǒng)的原理、進程的休眠喚醒調度等概念。想寫出一個好的應用,想比較好的解決應用碰到的問題,這些知識你應該懂
b. 做應用門檻低,特別是現(xiàn)在的ANDROID,純JAVA。做應用的發(fā)展路徑個人認為有兩個方向:一是業(yè)務純熟,二是成為某個專業(yè)領域的專家。比如在通信行業(yè)、IPTV行業(yè)、手機行業(yè),你了解行業(yè)的業(yè)務需求。所以,當領導的人,多是做業(yè)務應用的。另一個方面就是在網(wǎng)絡傳輸、圖像處理、人工智能等等領域的鉆研,這更多的時候像是在研究學術問題,而不僅僅是寫程序。
c. 做驅動,其實我不想稱為“做驅動”,而是想稱為“做底層系統(tǒng)”,做好了這是通殺各行業(yè)。我工作幾年,做過手機、IPTV、會議電視,但是這些產(chǎn)品對我毫無差別,因為我只做底層。他們的業(yè)務跟我沒關系。
當應用出現(xiàn)問題,他們解決不了時,我就會從內核角度給他們出主意,給他們提供工具。
在實際工作中,寫驅動的活反而不多,更多的是從系統(tǒng)的角度解決難題。底層涉及的絕不僅僅是驅動,更多在于“系統(tǒng)”:它上接應用,下接硬件。很多疑難問題只能由底層的人解決。做底層的發(fā)展方向,個人認為是著眼于整個系統(tǒng)的技術專家。
d. 其實,做底層還是做應用,之間并沒有一個界線,有底層經(jīng)驗,再去做應用,你會感覺很踏實。有了業(yè)務經(jīng)驗或是掌握某項核心技術,你再了解一下底層,很快就可以組成一個團隊。
e. 我建議你上下兼通,做應用讓你視野更廣闊,做底層讓你技術扎實。
f. 就職位而言,永遠是應用的職位多于底層的職位。所以,如果你找不到底層的工作,完全可以先做應用。在工作中把底層的本領也學會。在公司中,那些被稱為“系統(tǒng)工程師”的人絕對是上下兼通的
8、工程師經(jīng)常在談如何找一個好的平臺,您是如何看待這個問題的?
韋東山:
找平臺,這是個技術活,或是個運氣活。我有同學一直在騰迅做游戲,估計身家豐厚;也有朋友在公司分股票之前離職。就我個人經(jīng)驗來說,我先是在小公司上班,后來到大公司,各有利蔽:
· 對于技術能力:在小公司里你會成為多面手,軟件硬件生產(chǎn)調試你都會插上一腳,如果能潛心學習,對往后發(fā)展有好處。我在小公司里設計過硬件,到中興做驅動時,可以跟硬件工程師一起研究原理圖?,F(xiàn)在創(chuàng)業(yè)了,還可以自己設計產(chǎn)品。在大公司里,每人專門負責一小塊,你可以學得深入,并且有各種設計規(guī)范。
· 對于人際關系:在大公司里,你會認識更多的人,認識各個部門的人,這對今后發(fā)展也有幫助。我辭職后接到的獵頭電話,都是中興的同事推薦的?,F(xiàn)在缺乏哪方面的技能,也可以向原來的同事請教。
· 對于收入:呵呵,看運氣吧。有人被微軟拒絕后成為了億萬富翁,有人則終身在微軟里寫代碼;有人創(chuàng)業(yè)失敗,有人單憑公司年終獎就資產(chǎn)豐厚。
根據(jù)你的需求,能承擔風險的能力,來選擇平臺──這似乎是廢話,確實是。