看來讀者圈中做單片機,RTOS的不少。盡管火哥目前從事Linux/Android方面的嵌入式開發(fā)工作,但是讀書的時候也有5年左右單片機裸機和RTOS經(jīng)驗,之前面試也拿過一些做單片機stm32開發(fā)的offer,所以今天分享一些關(guān)于單片機是否要轉(zhuǎn)嵌入式Linux的一些觀點。
一、你真的決定要轉(zhuǎn)嵌入式Linux嗎?
要不要從單片機轉(zhuǎn)嵌入式Linux是一個影響到職業(yè)發(fā)展的嚴肅決策,火哥不能幫你拿主意,只能幫你列出利弊,你需要根據(jù)自身的各種環(huán)境(比如所在城市Linux嵌入式相關(guān)崗位多嗎?是否決定背井離鄉(xiāng)去北上深發(fā)展等等)做出最有利的決策?;鸶绲挠^點并不是Linux嵌入式絕對比單片機開發(fā)職業(yè)發(fā)展好,只是根據(jù)自身的一些經(jīng)歷,給出一些看法。
1. 單片機開發(fā)相對于Linux嵌入式最大的劣勢在于基層的打工崗位平均薪資偏低。我想這是大部分單片機工程師想轉(zhuǎn)嵌入式Linux的最主要的原因。技術(shù)本身各有優(yōu)劣,但是就基層打工而言,在同一座城市,就打工而言,單片機的薪資比嵌入式Linux低30%到50%。也許很多有會拿某些做單片機的高薪的老板(比如野火的火哥,周立功等)或者一些公司高管的薪資和做嵌入式Linux打工的工程師對比,證明單片機也可以拿高收入。
但是他們都犯了田忌賽馬的錯誤,拿別人的上等馬和你的中等馬對比,火哥認為這種田忌賽馬的比較非常不切實際,基層打工的就應(yīng)該和基層打工的這個水平的對比。目前火哥調(diào)查到情況來看,在深圳的基層就業(yè)市場,單片機(含RTOS)開發(fā)的起步薪資在6K-7K, 一般人到15K就是高薪,很難突破。20K以上的單片機offer也有,但是很少,最多也見過25K的單片機offer,但是那都是有名企,名?;蛘咂渌麡I(yè)務(wù)背景換來的,一般人真拿不到。嵌入式Linux/Android這塊,薪資相對高不少,起步價12K很正常,工作2年一般都能突破15K,3-5年突破20K甚至到25K也是很多的,5年以上去一線土豪大廠(華為、OPPO、VIVO等)可以到30K,如果在手機大廠做到模塊owner專家,突破40K也是可以有,但是在往上就有點難了。
整體來看,同檔次的基層打工者,嵌入式Linux薪資比單片機開發(fā)還是高不少,單片機15K就會遇到瓶頸,突破20K就很難了,嵌入式Linux突破20K并不是難事,到25K以上才遇到瓶頸。
2. 你所在的城市嵌入式Linux崗位多嗎?我覺得這是影響你做決定的另一個大問題。我們學嵌入式Linux這門技術(shù),絕大部分人是為了從事相關(guān)的工作,而不是陶冶情操。但是根據(jù)火哥統(tǒng)計來看,嵌入式Linux的普遍薪資雖然高于單片機,但是就業(yè)崗位并沒有單片機那么多。深圳目測是嵌入式Linux就業(yè)機會最多的城市,但是單片機機會看起來似乎更多,在深圳,單片機和Linux崗位數(shù)量對比大概6比4。
從嵌入式Linux城市的崗位數(shù)量來看,依次是深圳 》 上海 》 北京 》 成都 = 杭州 = 蘇州 》 東莞(華為加持)》= 珠海 》= 南京 = 廣州 = 武漢 = 西安 = 福州 = 廈門 》 佛山 = 長沙 = 天津 = 合肥 》 其它,
在其它城市我就很少了解到做嵌入式Linux開發(fā)相關(guān)的崗位。所以如果你要考慮轉(zhuǎn)行,首先考慮是否愿意背景離鄉(xiāng)去以上幾個城市工作。否則哪怕你學了牛逼的Linux技術(shù),可能也會在當?shù)卣也坏綄诓坏貌焕^續(xù)從事單片機開發(fā)。
3. 單片機雖然待遇較低,但是就業(yè)機會更多,對大齡求職者相對友好。這點其實并不矛盾,做單片機各行各業(yè)的小公司特別多 (當然像格力,美的這種傳統(tǒng)家電大廠也有,但是華為、商湯等新興高科技大廠很少招單片機),業(yè)務(wù)多種多樣,需要的人更多,但是一般小廠可能資金并不充裕,給不起人才高價,加上單片機開發(fā)門檻較低(不考慮產(chǎn)品穩(wěn)定性,EMC等有工作經(jīng)驗自然會知道的概念,僅指學習使用單片機干活編程的培養(yǎng)門檻), 培養(yǎng)周期比較短(大二學生一個暑假的功夫),所以導(dǎo)致中低端能干活的人還是挺多,拉低平均薪資。
但這就像富士康一樣,招人多,但抱怨缺人,老板就是不想把待遇提上去,要控制成本,這是缺人但是待遇低之間一種永遠存在的矛盾。但是對大齡求職者來說,由于單片機崗位實在是多,很多小廠真的很難以高的性價比招到優(yōu)秀的人,在小廠也沒有HR插手做人力資源規(guī)劃,年齡梯隊建設(shè),反而在年齡上卡的不嚴,大齡求職者只要薪資不挑,也能找到一份工作,所以相對于做Linux的大廠,對年齡問題比較寬容一些(可能由于單片機有點歷史了,大齡從業(yè)者也多)。
4. 單片機也有一些較高薪職位。在單片機工程師眼中,20k以上就算是高薪,以這個為標準,火哥也見過一些較高薪的職位,但是這里面有些特殊的要求。某家做智能門鎖STM32 RTOS的公司給火哥開過20K的offer,主要是因為公司希望招的技術(shù)人員都有985 211以上學歷背景,這樣溝通起來可能觀念比較一致,所以薪資能給到20k。另外還有一家明星獨角獸創(chuàng)業(yè)公司給過25K的單片機offer, 但是前提要求是能在Linux環(huán)境下開發(fā)單片機,而且面試難度較高,本來25K要價超出他們預(yù)期了,他們不愿意給這么多,后來火哥吊著他們一個星期,謊稱拿到華為同等價格的offer,他們才最終答應(yīng)給25K的offer。剩下火哥還了解到有年薪80w的單片機高級工程師(掌握某些行業(yè)特殊的認證標準)。
但是整體來說,單片機較高薪的offer確實不容易拿到,而且拿到也不僅僅是因為你的單片機技術(shù)好,解bug能力強,而是因為你的背景,學歷,有其它offer抬價,掌握特殊的業(yè)務(wù)競爭力等等(關(guān)于嵌入式業(yè)務(wù)競爭力可以讀讀火哥上一篇關(guān)于嵌入式競爭力的文章),
這些特殊業(yè)務(wù)和文憑,背景都不是能靠當下自己砸時間努力看書學習寫代碼就能輕易獲取的。如果能單單靠自己砸時間努力就能獲取的技術(shù)就不是啥門檻性的技術(shù)。
列舉了以上這幾點,要不要從單片機開發(fā)轉(zhuǎn)嵌入式Linux相信你也應(yīng)該可以下決定了。
二、 單片機和嵌入式Linux開發(fā)到底有什么異同
1. 單片機轉(zhuǎn)嵌入式Linux保留的優(yōu)勢主要在于熟練的C語言編程能力以及豐富的底層軟件與硬件接口的調(diào)試經(jīng)驗。因為Linux內(nèi)核本身就是C語言編寫的,Linux底層應(yīng)用程序大部分也是C語言的,一般有單片機開發(fā)經(jīng)驗的,C語言應(yīng)該不是問題,所以在切換的過程中,不需要考慮語言的切換,當然如果沒有系統(tǒng)學過數(shù)據(jù)結(jié)構(gòu)(火哥認為數(shù)據(jù)結(jié)構(gòu)是熟悉C語言必不可少的內(nèi)容,哪怕單片機也要懂數(shù)據(jù)結(jié)構(gòu)),可能需要補補,另外有uCOS FreeRTOS這類的實時操作系統(tǒng)開發(fā)經(jīng)驗就更好,至少在看大規(guī)模C語言代碼的時候不害怕(其實懂uCOS內(nèi)核也不代表能馬上掌握Linux內(nèi)核,Linux內(nèi)核真的復(fù)雜太多,設(shè)計理念也很不一樣)。另外豐富的單片機底層調(diào)試與寄存器配置經(jīng)驗,可能幫助你在學習Linux嵌入式開發(fā)的時候能快速定位底層的一些問題,節(jié)約一些時間。
2. 單片機轉(zhuǎn)Linux嵌入式需要熟悉一套風格迥異的開發(fā)環(huán)境。對于大部分單片機工程師而言,都是在Windows上用IDE環(huán)境開發(fā)單片機程序為主(不排除有些公司已經(jīng)使用Linux開發(fā)單片機了),Ubuntu這類Linux系統(tǒng)接觸比較少,所以你們要越過的第一關(guān)并不是Linux內(nèi)核源碼,而是如何使用Ubuntu這種Linux系統(tǒng)。因為在Debian Ubuntu CentOS 等各種Linux系統(tǒng)做軟件開發(fā),主要都是通過命令行操作,而不是鼠標界面點擊。并且Linux系統(tǒng)里面的應(yīng)用軟件不像Windows里面的IDE這樣給你集成好了,點擊就能用,Linux里面很多Makefile之類的編譯腳本以及Samba, SSH Server等各種服務(wù),arm-linux-gcc等各種編譯鏈接工具,就像IDE軟件里面的各個組件,需要自己重新組裝使用,并且用的時候可能有各種環(huán)境甚至編譯問題(開源軟件猛糙快就是這樣),需要自己折騰花費不少時間。
所以對于Linux入門者,哪怕你有豐富的單片機C語言經(jīng)驗,折騰起來也挺耗時間,需要克服心理的障礙。
Linux系統(tǒng)開發(fā)環(huán)境就像一匹不聽話的烈馬,馴服他才能發(fā)揮出它的價值,而Windows系統(tǒng)開發(fā)環(huán)境更像一匹聽話的普通馬。
3. 嵌入式Linux開發(fā)代碼的掌控程度遠低于單片機開發(fā),單片機轉(zhuǎn)Linux需要適應(yīng)如何在這種低掌控度的不安全感中進行開發(fā)。做單片機開發(fā),包括RTOS, 一般代碼量最多幾萬行,哪怕不是每行代碼都讀過,也基本能夠精確掌控每個模塊,大概哪里出了bug,作為開發(fā)者很容易定位。而做嵌入式Linux開發(fā),單獨Linux內(nèi)核就有幾百萬甚至上千萬行,還不包括各種你不熟悉的應(yīng)用層的開源庫,這導(dǎo)致大部分代碼都不可能掌控。嵌入式Linux的開發(fā)模式就是在這種大部分代碼都不是你開發(fā)的,你也掌控不了大部分代碼的情況下開發(fā)驅(qū)動或者應(yīng)用,你經(jīng)常會不熟悉的東西需要各種搜索問人,這種開發(fā)模式,會把人置于一種不安之谷當中,很多你使用的函數(shù)你并不知道它的實現(xiàn)細節(jié),可能工作機制都只是略懂。在這種模式下開發(fā)需要很好的搜索,溝通,團隊協(xié)作能力,不能再像單片機那樣一個人全局掌控,蒙著頭開發(fā)了,這種不可掌控的不安全感是單片機工程師往Linux嵌入式工程師發(fā)展過程中最需要適應(yīng)的。
4. 嵌入式Linux開發(fā)需要有大局觀,不用迷失在細節(jié)的叢林找不到方向和出口。
很多單片機工程師有個思維習慣,編程時喜歡細摳到每個寄存器的工作原理,每個功能的實現(xiàn)細節(jié)邏輯,每個if else都不放過。這在Linux嵌入式學習中將非常耗費時間,事倍功半的做法。注重細節(jié)固然好,但是當系統(tǒng)龐大到一種程度的時候,過于注重細節(jié)的人,往往很難駕馭這個系統(tǒng)。我看到很多初學者,每個寄存器,鏈接腳本的每種寫法都要去糾結(jié)很久,芯片啟動方式更上生搬硬套把2440的啟動流程作為芯片啟動的唯一真理,處處往其他芯片套。殊不知很多東西都是人為約定的一些習慣性做法,每家公司的芯片有自己的特點,流程是死的,人是活的。
掌握大局觀,讓自己迅速熟悉整個系統(tǒng)的知識,很多細節(jié)上習慣性的東西自然而然就明白了,對整個系統(tǒng)的掌控力度就高了,遇到具體阻礙你前進的細節(jié)問題,再去嘗試處理。掌控并不意味著你知道每行代碼每個寄存器的意思,但是你能讓整個系統(tǒng)按照你的想法去運行。
三、 單片機轉(zhuǎn)嵌入式Linux大概需要學哪些基本的知識
吹了這么多水,到了真正上干貨的時候了,從單片機轉(zhuǎn)Linux嵌入式到底需要學些啥。如果沒有這一段,火哥真怕你下定轉(zhuǎn)行決心之后,馬上拿起一本Linux內(nèi)核架構(gòu)與實現(xiàn)的書,以為像學uCOS等RTOS系統(tǒng)一樣,都是C語言代碼,然后看得云里霧里,從入門到放棄。其實火哥在剛學習Linux嵌入式的,也犯過類似的錯誤,因而總結(jié)了一些經(jīng)驗教訓(xùn)。
1. 你需要花一定時間熟悉如何使用Linux系統(tǒng)進行編程開發(fā)。相信很多童鞋都是從小使用Windows電腦長大的,在學計算機編程之前,應(yīng)該沒有接觸過Ubuntu等Linux系統(tǒng),而這個系統(tǒng)又不像Windows那樣點點鼠標就聽話,需要各種命令行操作。而且系統(tǒng)里面有各種服務(wù)和應(yīng)用工具需要你自己按照需求去配置。所以學習嵌入式Linux開發(fā)不是急于鉆進Linux內(nèi)核代碼的海洋中,而是先用好Linux系統(tǒng)。你可以參考《鳥哥的Linux私房菜》等Linux系統(tǒng)如何安裝使用等書籍,學會使用命令行。
但是火哥認為學習要有目標性,如果對著《鳥哥的Linux私房菜》一頁一頁每個命令學下去,看幾天就會枯草乏味了,所以火哥建議由單片機開發(fā)經(jīng)驗的童鞋,第一個目標就是在Linux系統(tǒng)上如何搭建你的單片機開發(fā)板交叉環(huán)境,編譯出一個裸機的Led點燈的程序(不需要跑Linux內(nèi)核),并通過開發(fā)板產(chǎn)商提供的工具燒寫。
這件事情并不難,網(wǎng)上已經(jīng)有很多如何在Linux系統(tǒng)下交叉編譯單片機程序的文章,尤其是stm32系列的,你可以參考別人的文章做一遍,在這過程中你將會熟悉各種常用的命令,shell, arm-linux-gcc交叉編譯工具鏈,Makefile(可以單獨參考陳皓的文章)等Linux編程環(huán)境相關(guān)的知識,從而開始進入Linux的世界。
2. 你需要知道嵌入式Linux系統(tǒng)是怎么跑起來的,一般由哪些組成部分。相信大部分人轉(zhuǎn)行嵌入式Linux開發(fā)并不是為了在Linux系統(tǒng)上開發(fā)單片機程序,而是想做Linux驅(qū)動或者應(yīng)用開發(fā)。在走完入門第一步之后,就不要太糾結(jié)那些編譯,鏈接腳本那些文件格式怎么寫,而是盡快把精力專注到Linux系統(tǒng)開發(fā)。學習嵌入式Linux系統(tǒng)開發(fā),首先就得知道一個Linux系統(tǒng)如何跑起來,如何把一個Linux系統(tǒng)環(huán)境在開發(fā)板上搭起來。這牽涉到bootrom, bootloader, uboot, dts, Linux內(nèi)核,cmdline, rootfs等一系列組件,以及nand啟動,nor啟動等各種不同的方式,知道一個Linux嵌入式系統(tǒng)如何工作,再進一步修改添加自己的驅(qū)動和應(yīng)用。
這里有很多實踐性的東西,可能需要視頻資料帶你跑一遍,才能快速入門,火哥之前看的是韋東山老師的嵌入式Linux視頻,總共有一二三四期等,有免費試看,也有付費的,直接X寶聯(lián)系賣家可以了解,火哥就不貼廣告鏈接了。另外還有其它視頻,火哥沒有看過的,就不隨便推薦了,在嵌入式Linux學習這塊,理論性的知識需要慢慢看書,但是實踐性的知識還是需要視頻資料帶你操作快速入門,看書和實踐循環(huán)漸進。
3. 你可以嘗試做一些簡單的Linux應(yīng)用和驅(qū)動開發(fā)了。走完了前面兩個步驟,相信你對嵌入式Linux開發(fā)有一定專業(yè)性認識了。在嵌入式Linux學習這塊,火哥更傾向于在做中學,60%實踐+40%理論。因為嵌入式Linux里面很多系統(tǒng)環(huán)境相關(guān)的東西,并不是書本上那種嚴格的理論公式,通過看書很難找到規(guī)律,而且在Linux內(nèi)核里面有一整套GNU(GNU是啥意思自己搜)世界的行話,那些寫Linux內(nèi)核,驅(qū)動書籍的技術(shù)專家不可能所有行話都給你解釋,所有在沒有使用和開發(fā)經(jīng)驗的前提下就直接打開《Unix環(huán)境高級編程》、《Linux設(shè)備驅(qū)動程序》等大牛的經(jīng)典書籍,容易讓你云里霧里?;鸶缃ㄗh是,跟著一個視頻教程,比如韋東山老師的嵌入式Linux視頻,從0開始寫一個簡單驅(qū)動和應(yīng)用,讓自己寫的驅(qū)動和應(yīng)用代碼跑起來,點亮1個Led燈,先不用管Linux驅(qū)動中你調(diào)用的那些初始化,注冊等框架函數(shù)如何實現(xiàn)。通過實踐的過程,熟悉整個代碼的運行環(huán)境以及Linux開發(fā)中的各種行話(系統(tǒng)調(diào)用,vfs等等)。
這也是讓你一步一步取得學習正反饋,提升成就感和學習信心的方法。其實Linux驅(qū)動開發(fā)本身并不難(難度不會超過你復(fù)變函數(shù)課本上的公式),也并不神秘,只不過它一整套行話術(shù)語,容易讓初學者云里霧里,熟悉這套行話,擺脫恐懼心理,一個智商正常的普通本科生應(yīng)該是能夠掌握的。
4. 你需要補充一些計算機的理論知識。據(jù)火哥了解,大部分單片機工程師都是電子、通信、自動化、機械等專業(yè)出身,很少計算機專業(yè)的。這些專業(yè)的童鞋,相對會缺乏計算機專業(yè)的基本理論知識,如數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng),計算機組成原理,計算機網(wǎng)絡(luò),算法,編譯鏈接的基本原理,數(shù)據(jù)庫等等。
補充理論知識是一個長期的過程(可能需要2-3年),并不是要等到計算機的專業(yè)理論都學完才可以去找工作,你可以一邊補充基礎(chǔ)知識一邊面試一邊找工作,同時檢驗自己的基礎(chǔ)知識。這些基礎(chǔ)知識不但能提高你的技術(shù)功底,也能幫你通過筆試面試,決定你能否在一線城市突破20K的薪水。
在有了計算機科班的基礎(chǔ)知識,以及有一定Linux驅(qū)動開發(fā)經(jīng)驗之后,Linux內(nèi)核的學習是有必要的,但是入門的初學者不用急于進入Linux內(nèi)核源碼,內(nèi)核這塊東西還是挺多的挺艱深的,得花時間邊看書邊看代碼慢慢啃,沒法速成,但是Linux內(nèi)核功底還是能夠提高你的薪資競爭力。
四、 給有工作經(jīng)驗的轉(zhuǎn)行者的建議
1. 有工作的轉(zhuǎn)行者,你的優(yōu)勢是有保底的工作和收入,劣勢是沒有足夠的學習時間自由。有了當前的工作飯碗,不用急著找新工作,你可以保持一個良好的心態(tài),不驕不躁,可以邊學習邊騎驢找馬,找到合適的工作。當然有工作的人,時間上并不自由,如果你想學的新東西和你當前工作內(nèi)容并不直接相關(guān),火哥建議你可以先選擇一份加班少的工作,這樣可以騰出下班后的業(yè)余時間來學習嵌入式Linux的新知識。
有工作的人,有了一些小積蓄,缺的是時間,那么在學習上可以適當買一些性價比高的付費視頻,加快入門和學習進度,節(jié)約寶貴的時間,這也是用金錢換時間。一般情況下,不需要學精通才出去找工作,學到可以self correct(這個詞來源于一個TED關(guān)于如何快速自學的演講), 能夠干一些活的狀態(tài),就可以出去面試找相關(guān)的工作了,Linux嵌入式學習以通用基礎(chǔ)知識為主,驅(qū)動里面的音視頻,通信協(xié)議相關(guān)的業(yè)務(wù)上的知識可以找到相關(guān)的工作再補充。
2. 如何在只有單片機經(jīng)驗,沒有Linux開發(fā)經(jīng)驗的情況下,如何通過社招嵌入式Linux開發(fā)工作?這個對于社招看中相關(guān)工作背景的求職者是個頭疼的問題,火哥有以下幾點建議:
首先,看看公司是否有Linux相關(guān)的部門和開發(fā)計劃,可以主動嘗試內(nèi)部轉(zhuǎn)崗。
第二,看看能不能建議公司技術(shù)負責人把單片機開發(fā)的環(huán)境遷移到Linux系統(tǒng)上,在Linux系統(tǒng)環(huán)境上開發(fā)單片機,這樣至少你在工作中有使用Linux系統(tǒng)的機會。
第三,可以先嘗試面一些在Linux環(huán)境下開發(fā)單片機的公司,面試后詢問面試官是否在Linux環(huán)境下開發(fā)單片機,如果是,可以先加入用Linux開發(fā)單片機的公司繼續(xù)做一段時間單片機,順便再工作中熟悉一下Linux.
第四,嘗試一下面試真正做Linux系統(tǒng)開發(fā)的公司一些Bootloader或者固件開發(fā)相關(guān)的崗位,因為Bootloader和存儲控制器,電管管理等固件代碼和單片機裸機rtos開發(fā)有很多相關(guān)性,甚至ARM SOC里面就有單片機核以及相關(guān)的固件,用于控制wifi,存儲,電源休眠喚醒等相關(guān)的功能,這樣能保證你能夠在新工作中有一定輸出貢獻,而不是完全的學習者。
第四,嘗試面試一些流動性高,離職率高的真正做Linux公司。這樣的公司一個詞形容:“缺人”。火哥之前在珠海某IC原廠工作,由于珠海相關(guān)的從業(yè)者基數(shù)少,應(yīng)屆畢業(yè)生很多也不愿意來小城市發(fā)展,再加上公司近年業(yè)績不好,離職率高,導(dǎo)致公司缺人,并且很難招到人,所以后來放開招人標準,愿意培養(yǎng)只有單片機經(jīng)驗,沒有Linux經(jīng)驗社招者。
當然現(xiàn)在火哥在的深圳知名大廠,由于從業(yè)人口基數(shù)大,公司品牌和待遇都很有競爭力,競爭較為激烈,雖然號稱缺人(其實是招人太挑剔了),但是一般不會給沒有Linux經(jīng)驗的求職者機會。
最后,在學習Linux嵌入式的過程中,遇到的問題和寫的代碼,最好有技術(shù)博客和GitHub記錄下來,把相關(guān)鏈接貼在簡歷上,這也是像面試官證明你真的對嵌入式Linux有一定了解,面試官看完你的博客和GitHub,才能對你的技術(shù)水平有進一步了解,決定是否給你機會。
看來讀者圈中做單片機,RTOS的不少。盡管火哥目前從事Linux/Android方面的嵌入式開發(fā)工作,但是讀書的時候也有5年左右單片機裸機和RTOS經(jīng)驗,之前面試也拿過一些做單片機stm32開發(fā)的offer,所以今天分享一些關(guān)于單片機是否要轉(zhuǎn)嵌入式Linux的一些觀點。
一、你真的決定要轉(zhuǎn)嵌入式Linux嗎?
要不要從單片機轉(zhuǎn)嵌入式Linux是一個影響到職業(yè)發(fā)展的嚴肅決策,火哥不能幫你拿主意,只能幫你列出利弊,你需要根據(jù)自身的各種環(huán)境(比如所在城市Linux嵌入式相關(guān)崗位多嗎?是否決定背井離鄉(xiāng)去北上深發(fā)展等等)做出最有利的決策。火哥的觀點并不是Linux嵌入式絕對比單片機開發(fā)職業(yè)發(fā)展好,只是根據(jù)自身的一些經(jīng)歷,給出一些看法。
1. 單片機開發(fā)相對于Linux嵌入式最大的劣勢在于基層的打工崗位平均薪資偏低。我想這是大部分單片機工程師想轉(zhuǎn)嵌入式Linux的最主要的原因。技術(shù)本身各有優(yōu)劣,但是就基層打工而言,在同一座城市,就打工而言,單片機的薪資比嵌入式Linux低30%到50%。也許很多有會拿某些做單片機的高薪的老板(比如野火的火哥,周立功等)或者一些公司高管的薪資和做嵌入式Linux打工的工程師對比,證明單片機也可以拿高收入。
但是他們都犯了田忌賽馬的錯誤,拿別人的上等馬和你的中等馬對比,火哥認為這種田忌賽馬的比較非常不切實際,基層打工的就應(yīng)該和基層打工的這個水平的對比。目前火哥調(diào)查到情況來看,在深圳的基層就業(yè)市場,單片機(含RTOS)開發(fā)的起步薪資在6K-7K, 一般人到15K就是高薪,很難突破。20K以上的單片機offer也有,但是很少,最多也見過25K的單片機offer,但是那都是有名企,名?;蛘咂渌麡I(yè)務(wù)背景換來的,一般人真拿不到。嵌入式Linux/Android這塊,薪資相對高不少,起步價12K很正常,工作2年一般都能突破15K,3-5年突破20K甚至到25K也是很多的,5年以上去一線土豪大廠(華為、OPPO、VIVO等)可以到30K,如果在手機大廠做到模塊owner專家,突破40K也是可以有,但是在往上就有點難了。
整體來看,同檔次的基層打工者,嵌入式Linux薪資比單片機開發(fā)還是高不少,單片機15K就會遇到瓶頸,突破20K就很難了,嵌入式Linux突破20K并不是難事,到25K以上才遇到瓶頸。
2. 你所在的城市嵌入式Linux崗位多嗎?我覺得這是影響你做決定的另一個大問題。我們學嵌入式Linux這門技術(shù),絕大部分人是為了從事相關(guān)的工作,而不是陶冶情操。但是根據(jù)火哥統(tǒng)計來看,嵌入式Linux的普遍薪資雖然高于單片機,但是就業(yè)崗位并沒有單片機那么多。深圳目測是嵌入式Linux就業(yè)機會最多的城市,但是單片機機會看起來似乎更多,在深圳,單片機和Linux崗位數(shù)量對比大概6比4。
從嵌入式Linux城市的崗位數(shù)量來看,依次是深圳 》 上海 》 北京 》 成都 = 杭州 = 蘇州 》 東莞(華為加持)》= 珠海 》= 南京 = 廣州 = 武漢 = 西安 = 福州 = 廈門 》 佛山 = 長沙 = 天津 = 合肥 》 其它,
在其它城市我就很少了解到做嵌入式Linux開發(fā)相關(guān)的崗位。所以如果你要考慮轉(zhuǎn)行,首先考慮是否愿意背景離鄉(xiāng)去以上幾個城市工作。否則哪怕你學了牛逼的Linux技術(shù),可能也會在當?shù)卣也坏綄诓坏貌焕^續(xù)從事單片機開發(fā)。
3. 單片機雖然待遇較低,但是就業(yè)機會更多,對大齡求職者相對友好。這點其實并不矛盾,做單片機各行各業(yè)的小公司特別多 (當然像格力,美的這種傳統(tǒng)家電大廠也有,但是華為、商湯等新興高科技大廠很少招單片機),業(yè)務(wù)多種多樣,需要的人更多,但是一般小廠可能資金并不充裕,給不起人才高價,加上單片機開發(fā)門檻較低(不考慮產(chǎn)品穩(wěn)定性,EMC等有工作經(jīng)驗自然會知道的概念,僅指學習使用單片機干活編程的培養(yǎng)門檻), 培養(yǎng)周期比較短(大二學生一個暑假的功夫),所以導(dǎo)致中低端能干活的人還是挺多,拉低平均薪資。
但這就像富士康一樣,招人多,但抱怨缺人,老板就是不想把待遇提上去,要控制成本,這是缺人但是待遇低之間一種永遠存在的矛盾。但是對大齡求職者來說,由于單片機崗位實在是多,很多小廠真的很難以高的性價比招到優(yōu)秀的人,在小廠也沒有HR插手做人力資源規(guī)劃,年齡梯隊建設(shè),反而在年齡上卡的不嚴,大齡求職者只要薪資不挑,也能找到一份工作,所以相對于做Linux的大廠,對年齡問題比較寬容一些(可能由于單片機有點歷史了,大齡從業(yè)者也多)。
4. 單片機也有一些較高薪職位。在單片機工程師眼中,20k以上就算是高薪,以這個為標準,火哥也見過一些較高薪的職位,但是這里面有些特殊的要求。某家做智能門鎖STM32 RTOS的公司給火哥開過20K的offer,主要是因為公司希望招的技術(shù)人員都有985 211以上學歷背景,這樣溝通起來可能觀念比較一致,所以薪資能給到20k。另外還有一家明星獨角獸創(chuàng)業(yè)公司給過25K的單片機offer, 但是前提要求是能在Linux環(huán)境下開發(fā)單片機,而且面試難度較高,本來25K要價超出他們預(yù)期了,他們不愿意給這么多,后來火哥吊著他們一個星期,謊稱拿到華為同等價格的offer,他們才最終答應(yīng)給25K的offer。剩下火哥還了解到有年薪80w的單片機高級工程師(掌握某些行業(yè)特殊的認證標準)。
但是整體來說,單片機較高薪的offer確實不容易拿到,而且拿到也不僅僅是因為你的單片機技術(shù)好,解bug能力強,而是因為你的背景,學歷,有其它offer抬價,掌握特殊的業(yè)務(wù)競爭力等等(關(guān)于嵌入式業(yè)務(wù)競爭力可以讀讀火哥上一篇關(guān)于嵌入式競爭力的文章),
這些特殊業(yè)務(wù)和文憑,背景都不是能靠當下自己砸時間努力看書學習寫代碼就能輕易獲取的。如果能單單靠自己砸時間努力就能獲取的技術(shù)就不是啥門檻性的技術(shù)。
列舉了以上這幾點,要不要從單片機開發(fā)轉(zhuǎn)嵌入式Linux相信你也應(yīng)該可以下決定了。
二、 單片機和嵌入式Linux開發(fā)到底有什么異同
1. 單片機轉(zhuǎn)嵌入式Linux保留的優(yōu)勢主要在于熟練的C語言編程能力以及豐富的底層軟件與硬件接口的調(diào)試經(jīng)驗。因為Linux內(nèi)核本身就是C語言編寫的,Linux底層應(yīng)用程序大部分也是C語言的,一般有單片機開發(fā)經(jīng)驗的,C語言應(yīng)該不是問題,所以在切換的過程中,不需要考慮語言的切換,當然如果沒有系統(tǒng)學過數(shù)據(jù)結(jié)構(gòu)(火哥認為數(shù)據(jù)結(jié)構(gòu)是熟悉C語言必不可少的內(nèi)容,哪怕單片機也要懂數(shù)據(jù)結(jié)構(gòu)),可能需要補補,另外有uCOS FreeRTOS這類的實時操作系統(tǒng)開發(fā)經(jīng)驗就更好,至少在看大規(guī)模C語言代碼的時候不害怕(其實懂uCOS內(nèi)核也不代表能馬上掌握Linux內(nèi)核,Linux內(nèi)核真的復(fù)雜太多,設(shè)計理念也很不一樣)。另外豐富的單片機底層調(diào)試與寄存器配置經(jīng)驗,可能幫助你在學習Linux嵌入式開發(fā)的時候能快速定位底層的一些問題,節(jié)約一些時間。
2. 單片機轉(zhuǎn)Linux嵌入式需要熟悉一套風格迥異的開發(fā)環(huán)境。對于大部分單片機工程師而言,都是在Windows上用IDE環(huán)境開發(fā)單片機程序為主(不排除有些公司已經(jīng)使用Linux開發(fā)單片機了),Ubuntu這類Linux系統(tǒng)接觸比較少,所以你們要越過的第一關(guān)并不是Linux內(nèi)核源碼,而是如何使用Ubuntu這種Linux系統(tǒng)。因為在Debian Ubuntu CentOS 等各種Linux系統(tǒng)做軟件開發(fā),主要都是通過命令行操作,而不是鼠標界面點擊。并且Linux系統(tǒng)里面的應(yīng)用軟件不像Windows里面的IDE這樣給你集成好了,點擊就能用,Linux里面很多Makefile之類的編譯腳本以及Samba, SSH Server等各種服務(wù),arm-linux-gcc等各種編譯鏈接工具,就像IDE軟件里面的各個組件,需要自己重新組裝使用,并且用的時候可能有各種環(huán)境甚至編譯問題(開源軟件猛糙快就是這樣),需要自己折騰花費不少時間。
所以對于Linux入門者,哪怕你有豐富的單片機C語言經(jīng)驗,折騰起來也挺耗時間,需要克服心理的障礙。
Linux系統(tǒng)開發(fā)環(huán)境就像一匹不聽話的烈馬,馴服他才能發(fā)揮出它的價值,而Windows系統(tǒng)開發(fā)環(huán)境更像一匹聽話的普通馬。
3. 嵌入式Linux開發(fā)代碼的掌控程度遠低于單片機開發(fā),單片機轉(zhuǎn)Linux需要適應(yīng)如何在這種低掌控度的不安全感中進行開發(fā)。做單片機開發(fā),包括RTOS, 一般代碼量最多幾萬行,哪怕不是每行代碼都讀過,也基本能夠精確掌控每個模塊,大概哪里出了bug,作為開發(fā)者很容易定位。而做嵌入式Linux開發(fā),單獨Linux內(nèi)核就有幾百萬甚至上千萬行,還不包括各種你不熟悉的應(yīng)用層的開源庫,這導(dǎo)致大部分代碼都不可能掌控。嵌入式Linux的開發(fā)模式就是在這種大部分代碼都不是你開發(fā)的,你也掌控不了大部分代碼的情況下開發(fā)驅(qū)動或者應(yīng)用,你經(jīng)常會不熟悉的東西需要各種搜索問人,這種開發(fā)模式,會把人置于一種不安之谷當中,很多你使用的函數(shù)你并不知道它的實現(xiàn)細節(jié),可能工作機制都只是略懂。在這種模式下開發(fā)需要很好的搜索,溝通,團隊協(xié)作能力,不能再像單片機那樣一個人全局掌控,蒙著頭開發(fā)了,這種不可掌控的不安全感是單片機工程師往Linux嵌入式工程師發(fā)展過程中最需要適應(yīng)的。
4. 嵌入式Linux開發(fā)需要有大局觀,不用迷失在細節(jié)的叢林找不到方向和出口。
很多單片機工程師有個思維習慣,編程時喜歡細摳到每個寄存器的工作原理,每個功能的實現(xiàn)細節(jié)邏輯,每個if else都不放過。這在Linux嵌入式學習中將非常耗費時間,事倍功半的做法。注重細節(jié)固然好,但是當系統(tǒng)龐大到一種程度的時候,過于注重細節(jié)的人,往往很難駕馭這個系統(tǒng)。我看到很多初學者,每個寄存器,鏈接腳本的每種寫法都要去糾結(jié)很久,芯片啟動方式更上生搬硬套把2440的啟動流程作為芯片啟動的唯一真理,處處往其他芯片套。殊不知很多東西都是人為約定的一些習慣性做法,每家公司的芯片有自己的特點,流程是死的,人是活的。
掌握大局觀,讓自己迅速熟悉整個系統(tǒng)的知識,很多細節(jié)上習慣性的東西自然而然就明白了,對整個系統(tǒng)的掌控力度就高了,遇到具體阻礙你前進的細節(jié)問題,再去嘗試處理。掌控并不意味著你知道每行代碼每個寄存器的意思,但是你能讓整個系統(tǒng)按照你的想法去運行。
三、 單片機轉(zhuǎn)嵌入式Linux大概需要學哪些基本的知識
吹了這么多水,到了真正上干貨的時候了,從單片機轉(zhuǎn)Linux嵌入式到底需要學些啥。如果沒有這一段,火哥真怕你下定轉(zhuǎn)行決心之后,馬上拿起一本Linux內(nèi)核架構(gòu)與實現(xiàn)的書,以為像學uCOS等RTOS系統(tǒng)一樣,都是C語言代碼,然后看得云里霧里,從入門到放棄。其實火哥在剛學習Linux嵌入式的,也犯過類似的錯誤,因而總結(jié)了一些經(jīng)驗教訓(xùn)。
1. 你需要花一定時間熟悉如何使用Linux系統(tǒng)進行編程開發(fā)。相信很多童鞋都是從小使用Windows電腦長大的,在學計算機編程之前,應(yīng)該沒有接觸過Ubuntu等Linux系統(tǒng),而這個系統(tǒng)又不像Windows那樣點點鼠標就聽話,需要各種命令行操作。而且系統(tǒng)里面有各種服務(wù)和應(yīng)用工具需要你自己按照需求去配置。所以學習嵌入式Linux開發(fā)不是急于鉆進Linux內(nèi)核代碼的海洋中,而是先用好Linux系統(tǒng)。你可以參考《鳥哥的Linux私房菜》等Linux系統(tǒng)如何安裝使用等書籍,學會使用命令行。
但是火哥認為學習要有目標性,如果對著《鳥哥的Linux私房菜》一頁一頁每個命令學下去,看幾天就會枯草乏味了,所以火哥建議由單片機開發(fā)經(jīng)驗的童鞋,第一個目標就是在Linux系統(tǒng)上如何搭建你的單片機開發(fā)板交叉環(huán)境,編譯出一個裸機的Led點燈的程序(不需要跑Linux內(nèi)核),并通過開發(fā)板產(chǎn)商提供的工具燒寫。
這件事情并不難,網(wǎng)上已經(jīng)有很多如何在Linux系統(tǒng)下交叉編譯單片機程序的文章,尤其是stm32系列的,你可以參考別人的文章做一遍,在這過程中你將會熟悉各種常用的命令,shell, arm-linux-gcc交叉編譯工具鏈,Makefile(可以單獨參考陳皓的文章)等Linux編程環(huán)境相關(guān)的知識,從而開始進入Linux的世界。
2. 你需要知道嵌入式Linux系統(tǒng)是怎么跑起來的,一般由哪些組成部分。相信大部分人轉(zhuǎn)行嵌入式Linux開發(fā)并不是為了在Linux系統(tǒng)上開發(fā)單片機程序,而是想做Linux驅(qū)動或者應(yīng)用開發(fā)。在走完入門第一步之后,就不要太糾結(jié)那些編譯,鏈接腳本那些文件格式怎么寫,而是盡快把精力專注到Linux系統(tǒng)開發(fā)。學習嵌入式Linux系統(tǒng)開發(fā),首先就得知道一個Linux系統(tǒng)如何跑起來,如何把一個Linux系統(tǒng)環(huán)境在開發(fā)板上搭起來。這牽涉到bootrom, bootloader, uboot, dts, Linux內(nèi)核,cmdline, rootfs等一系列組件,以及nand啟動,nor啟動等各種不同的方式,知道一個Linux嵌入式系統(tǒng)如何工作,再進一步修改添加自己的驅(qū)動和應(yīng)用。
這里有很多實踐性的東西,可能需要視頻資料帶你跑一遍,才能快速入門,火哥之前看的是韋東山老師的嵌入式Linux視頻,總共有一二三四期等,有免費試看,也有付費的,直接X寶聯(lián)系賣家可以了解,火哥就不貼廣告鏈接了。另外還有其它視頻,火哥沒有看過的,就不隨便推薦了,在嵌入式Linux學習這塊,理論性的知識需要慢慢看書,但是實踐性的知識還是需要視頻資料帶你操作快速入門,看書和實踐循環(huán)漸進。
3. 你可以嘗試做一些簡單的Linux應(yīng)用和驅(qū)動開發(fā)了。走完了前面兩個步驟,相信你對嵌入式Linux開發(fā)有一定專業(yè)性認識了。在嵌入式Linux學習這塊,火哥更傾向于在做中學,60%實踐+40%理論。因為嵌入式Linux里面很多系統(tǒng)環(huán)境相關(guān)的東西,并不是書本上那種嚴格的理論公式,通過看書很難找到規(guī)律,而且在Linux內(nèi)核里面有一整套GNU(GNU是啥意思自己搜)世界的行話,那些寫Linux內(nèi)核,驅(qū)動書籍的技術(shù)專家不可能所有行話都給你解釋,所有在沒有使用和開發(fā)經(jīng)驗的前提下就直接打開《Unix環(huán)境高級編程》、《Linux設(shè)備驅(qū)動程序》等大牛的經(jīng)典書籍,容易讓你云里霧里?;鸶缃ㄗh是,跟著一個視頻教程,比如韋東山老師的嵌入式Linux視頻,從0開始寫一個簡單驅(qū)動和應(yīng)用,讓自己寫的驅(qū)動和應(yīng)用代碼跑起來,點亮1個Led燈,先不用管Linux驅(qū)動中你調(diào)用的那些初始化,注冊等框架函數(shù)如何實現(xiàn)。通過實踐的過程,熟悉整個代碼的運行環(huán)境以及Linux開發(fā)中的各種行話(系統(tǒng)調(diào)用,vfs等等)。
這也是讓你一步一步取得學習正反饋,提升成就感和學習信心的方法。其實Linux驅(qū)動開發(fā)本身并不難(難度不會超過你復(fù)變函數(shù)課本上的公式),也并不神秘,只不過它一整套行話術(shù)語,容易讓初學者云里霧里,熟悉這套行話,擺脫恐懼心理,一個智商正常的普通本科生應(yīng)該是能夠掌握的。
4. 你需要補充一些計算機的理論知識。據(jù)火哥了解,大部分單片機工程師都是電子、通信、自動化、機械等專業(yè)出身,很少計算機專業(yè)的。這些專業(yè)的童鞋,相對會缺乏計算機專業(yè)的基本理論知識,如數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng),計算機組成原理,計算機網(wǎng)絡(luò),算法,編譯鏈接的基本原理,數(shù)據(jù)庫等等。
補充理論知識是一個長期的過程(可能需要2-3年),并不是要等到計算機的專業(yè)理論都學完才可以去找工作,你可以一邊補充基礎(chǔ)知識一邊面試一邊找工作,同時檢驗自己的基礎(chǔ)知識。這些基礎(chǔ)知識不但能提高你的技術(shù)功底,也能幫你通過筆試面試,決定你能否在一線城市突破20K的薪水。
在有了計算機科班的基礎(chǔ)知識,以及有一定Linux驅(qū)動開發(fā)經(jīng)驗之后,Linux內(nèi)核的學習是有必要的,但是入門的初學者不用急于進入Linux內(nèi)核源碼,內(nèi)核這塊東西還是挺多的挺艱深的,得花時間邊看書邊看代碼慢慢啃,沒法速成,但是Linux內(nèi)核功底還是能夠提高你的薪資競爭力。
四、 給有工作經(jīng)驗的轉(zhuǎn)行者的建議
1. 有工作的轉(zhuǎn)行者,你的優(yōu)勢是有保底的工作和收入,劣勢是沒有足夠的學習時間自由。有了當前的工作飯碗,不用急著找新工作,你可以保持一個良好的心態(tài),不驕不躁,可以邊學習邊騎驢找馬,找到合適的工作。當然有工作的人,時間上并不自由,如果你想學的新東西和你當前工作內(nèi)容并不直接相關(guān),火哥建議你可以先選擇一份加班少的工作,這樣可以騰出下班后的業(yè)余時間來學習嵌入式Linux的新知識。
有工作的人,有了一些小積蓄,缺的是時間,那么在學習上可以適當買一些性價比高的付費視頻,加快入門和學習進度,節(jié)約寶貴的時間,這也是用金錢換時間。一般情況下,不需要學精通才出去找工作,學到可以self correct(這個詞來源于一個TED關(guān)于如何快速自學的演講), 能夠干一些活的狀態(tài),就可以出去面試找相關(guān)的工作了,Linux嵌入式學習以通用基礎(chǔ)知識為主,驅(qū)動里面的音視頻,通信協(xié)議相關(guān)的業(yè)務(wù)上的知識可以找到相關(guān)的工作再補充。
2. 如何在只有單片機經(jīng)驗,沒有Linux開發(fā)經(jīng)驗的情況下,如何通過社招嵌入式Linux開發(fā)工作?這個對于社招看中相關(guān)工作背景的求職者是個頭疼的問題,火哥有以下幾點建議:
首先,看看公司是否有Linux相關(guān)的部門和開發(fā)計劃,可以主動嘗試內(nèi)部轉(zhuǎn)崗。
第二,看看能不能建議公司技術(shù)負責人把單片機開發(fā)的環(huán)境遷移到Linux系統(tǒng)上,在Linux系統(tǒng)環(huán)境上開發(fā)單片機,這樣至少你在工作中有使用Linux系統(tǒng)的機會。
第三,可以先嘗試面一些在Linux環(huán)境下開發(fā)單片機的公司,面試后詢問面試官是否在Linux環(huán)境下開發(fā)單片機,如果是,可以先加入用Linux開發(fā)單片機的公司繼續(xù)做一段時間單片機,順便再工作中熟悉一下Linux.
第四,嘗試一下面試真正做Linux系統(tǒng)開發(fā)的公司一些Bootloader或者固件開發(fā)相關(guān)的崗位,因為Bootloader和存儲控制器,電管管理等固件代碼和單片機裸機rtos開發(fā)有很多相關(guān)性,甚至ARM SOC里面就有單片機核以及相關(guān)的固件,用于控制wifi,存儲,電源休眠喚醒等相關(guān)的功能,這樣能保證你能夠在新工作中有一定輸出貢獻,而不是完全的學習者。
第四,嘗試面試一些流動性高,離職率高的真正做Linux公司。這樣的公司一個詞形容:“缺人”?;鸶缰霸谥楹D矷C原廠工作,由于珠海相關(guān)的從業(yè)者基數(shù)少,應(yīng)屆畢業(yè)生很多也不愿意來小城市發(fā)展,再加上公司近年業(yè)績不好,離職率高,導(dǎo)致公司缺人,并且很難招到人,所以后來放開招人標準,愿意培養(yǎng)只有單片機經(jīng)驗,沒有Linux經(jīng)驗社招者。
當然現(xiàn)在火哥在的深圳知名大廠,由于從業(yè)人口基數(shù)大,公司品牌和待遇都很有競爭力,競爭較為激烈,雖然號稱缺人(其實是招人太挑剔了),但是一般不會給沒有Linux經(jīng)驗的求職者機會。
最后,在學習Linux嵌入式的過程中,遇到的問題和寫的代碼,最好有技術(shù)博客和GitHub記錄下來,把相關(guān)鏈接貼在簡歷上,這也是像面試官證明你真的對嵌入式Linux有一定了解,面試官看完你的博客和GitHub,才能對你的技術(shù)水平有進一步了解,決定是否給你機會。
五、 給在校生轉(zhuǎn)行者的建議
對在校生來說,你多的是時間上的自由,缺的是金錢以及沒有一份保底的工作。
當然時間這東西就像衛(wèi)生紙,看起來多,但是用著用著就沒有了,所以即使有充裕的時間,也要好好規(guī)劃,盡量多學一些東西。
在校生既然缺錢,火哥就不建議花好幾萬培訓(xùn)費去參加線下的嵌入式培訓(xùn),實際上培訓(xùn)的內(nèi)容都是嵌入式入門級知識,質(zhì)量上可能還比不過幾百塊的韋東山嵌入式Linux視頻。而且視頻教程在時間上可能比培訓(xùn)更加靈活。
在校生的優(yōu)勢在于大家都沒有行業(yè)相關(guān)經(jīng)驗,校招的時候,不會考察你行業(yè)相關(guān)的知識,而更加注重計算機基礎(chǔ)知識的考察(火哥甚至是憑著操作系統(tǒng),C語言,數(shù)據(jù)結(jié)構(gòu)的筆試成績,基本沒有Linux開發(fā)經(jīng)驗的情況下拿到IC原廠Linux的offer, 當然校招之后還有大半年,買了韋東山付費視頻狂補相關(guān)知識),所以在校生應(yīng)該乘著寶貴的時間,把火哥上一節(jié)提到的第4點基礎(chǔ)知識打牢固,這樣工作之后就可以專注業(yè)務(wù)知識學習,更快升職加薪,不用因為基礎(chǔ)知識不牢,回爐重造。
另外,在校生可能有各種單片機嵌入式的競賽,在競賽過程中,可能可以拿到很多獎,得到老師同學的夸贊。但是切記戒驕戒躁,不要因為比普通的同學多掌握2個技術(shù)就自以為了不起(你們以后面試的競爭對手根本不是這些完全沒有技術(shù)同學),不要因為幾個獎狀就飄了,而不能靜下心來學習數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng)原理等基礎(chǔ)知識。
如果不是在知名期刊發(fā)表高水平論文,或者國際上認可的ACM, Kaggle, ISLVRC圖像競賽中拿到那種高質(zhì)量有分數(shù)和名次比賽結(jié)果的獎,其它國內(nèi)競賽的獎在面試與實際工作中并沒有太多說服力,面試官反而喜歡基本功扎實,可塑性強的學生,而不是國內(nèi)各種獎一堆,結(jié)果時間復(fù)雜度,鏈表堆棧,mmu虛擬地址空間等概念一問三不知的學生。
對在校生來說,你多的是時間上的自由,缺的是金錢以及沒有一份保底的工作。
當然時間這東西就像衛(wèi)生紙,看起來多,但是用著用著就沒有了,所以即使有充裕的時間,也要好好規(guī)劃,盡量多學一些東西。
在校生既然缺錢,火哥就不建議花好幾萬培訓(xùn)費去參加線下的嵌入式培訓(xùn),實際上培訓(xùn)的內(nèi)容都是嵌入式入門級知識,質(zhì)量上可能還比不過幾百塊的韋東山嵌入式Linux視頻。而且視頻教程在時間上可能比培訓(xùn)更加靈活。
在校生的優(yōu)勢在于大家都沒有行業(yè)相關(guān)經(jīng)驗,校招的時候,不會考察你行業(yè)相關(guān)的知識,而更加注重計算機基礎(chǔ)知識的考察(火哥甚至是憑著操作系統(tǒng),C語言,數(shù)據(jù)結(jié)構(gòu)的筆試成績,基本沒有Linux開發(fā)經(jīng)驗的情況下拿到IC原廠Linux的offer, 當然校招之后還有大半年,買了韋東山付費視頻狂補相關(guān)知識),所以在校生應(yīng)該乘著寶貴的時間,把火哥上一節(jié)提到的第4點基礎(chǔ)知識打牢固,這樣工作之后就可以專注業(yè)務(wù)知識學習,更快升職加薪,不用因為基礎(chǔ)知識不牢,回爐重造。
另外,在校生可能有各種單片機嵌入式的競賽,在競賽過程中,可能可以拿到很多獎,得到老師同學的夸贊。但是切記戒驕戒躁,不要因為比普通的同學多掌握2個技術(shù)就自以為了不起(你們以后面試的競爭對手根本不是這些完全沒有技術(shù)同學),不要因為幾個獎狀就飄了,而不能靜下心來學習數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng)原理等基礎(chǔ)知識。
如果不是在知名期刊發(fā)表高水平論文,或者國際上認可的ACM, Kaggle, ISLVRC圖像競賽中拿到那種高質(zhì)量有分數(shù)和名次比賽結(jié)果的獎,其它國內(nèi)競賽的獎在面試與實際工作中并沒有太多說服力,面試官反而喜歡基本功扎實,可塑性強的學生,而不是國內(nèi)各種獎一堆,結(jié)果時間復(fù)雜度,鏈表堆棧,mmu虛擬地址空間等概念一問三不知的學生。
編輯:hfy
-
單片機
+關(guān)注
關(guān)注
6030文章
44491瀏覽量
632007 -
嵌入式
+關(guān)注
關(guān)注
5059文章
18975瀏覽量
302079 -
工程師
+關(guān)注
關(guān)注
59文章
1565瀏覽量
68408 -
Linux
+關(guān)注
關(guān)注
87文章
11212瀏覽量
208721
發(fā)布評論請先 登錄
相關(guān)推薦
評論