我是2011年畢業於三流本科學校的,大學時候學的電子信息工程,畢業後通過關係進入到本行業的一家公司,做硬體開發。大學幾乎沒怎麼學習,全都在玩了,其實現在想起來的話大學玩的確實爽,就是有點後悔大學畢業時候怎麼就沒考研或者考公務員試試。
題回正傳,我學習差,剛進公司啥都不懂,簡單的上拉下拉電阻不知道什麼意思,三極體更不懂得開關座用啥的,我記得我們領導當時說過一句話:你是我見過做研發基礎最差的。在後邊的四年我一直在這家公司工作,慢慢的也適應了工作,不得不說,剛畢業的學生確實勁頭十足,我也得感謝自己那時候的努力和付出,慢慢的基本上對硬體開發也都熟悉了,自己也可以獨立設計電路,獨立做個MCU系統,獨立畫板等等等等,所以我想說,
對電子行業有興趣的各位,不要害怕基礎差,只要你開始這份工作後,有一顆肯學習的心,慢慢的一切你都會熟悉和上手。2011年到2014年四年整的時間,我都在一個公司,公司屬於國企的三產,待遇不高,但是公司管理層次分明,文件嚴格按照9000標準卡,公司部門之間也都是依靠文件聯繫,部門內部真的是非常非常和諧,有老有小,大家一起工作,基本上沒有什麼內部鬥爭,工作也很輕鬆,經常有時間聽他們談談古代歷史,一起侃侃大山之類的。現在的公司文件一團糟,採購的BOM與生產BOM完全不一致,研發沒有BOM備份,原來人走了找不到原始文件,分管研發的老總直接越過研發經理與具體研發人對話,感覺研發經理就像是打雜的,不過研發經理上個月辭職了;現在公司研發人員不多不說,好幾個項目同時進行,領導只會壓你時間,只會催你進度。對於這些我想說的是,如果你是畢業生我建議選擇一家管理相對成熟的大一些的公司,即便是技術你沒有小公司學的全面,但你得到的是一個管理模式的頭腦,一個系統的研發體系和一個讓你步入職場不至於失望的起點,但是也可能讓你後續的工作感覺很不順心,如我現在一樣。其實這個問題應該從電子信息工程這個專業是什麼來分析,你們可能會去百度然後得到一堆不實用的官方言論,說下我的認識:從字面上分析 電子 ,有硬體、弱電、非電力能源強電類、信息、軟體甚至編程,所以這個專業的就業方向可謂是廣泛到漫無邊際,各行各業都能涉及到。專業對口的職業硬體上有電子設計工程師、硬體工程師,半軟硬的有嵌入式硬體工程師、單片機開發工程師、嵌入式軟體開發工程師,純軟體甚至已經不能算是百分之百對口,但同樣可以有,而且大概率主要偏向於計算機專業系,比較正統的有C/C++軟體工程師、linux系統開發工程師,稍微擦邊的有java開發、安卓開發工程師,學個html5做個前端開發工程師,學幾門腳本php、Python等等都沒問題,而且我的身邊大把這樣的人,我說的還只是研發方向,不包括測試類。其實就業這個東西,你得再從行業和公司去分析——行業即是你的這些技術本領最後都應用在什麼方面上,比如通信、網絡、醫療電子、汽車、智能製造、物聯網智能家居、外包公司、系統運維等;公司指的是你最後選擇去的公司情況,大小規模以及技術力量。為什麼要特別指出這些東西呢因為涉及到就業中大家最關注的點——就業工資高不高。就業工資,其實取決於很多方面,但最重要的肯定是和你自身的能力有關,能力越高,能拿到的也就越高。這裡所指的能力包括一切硬實力,甚至學校的知名度也算一方面。另外,與所在的公司盈利情況、發展情況及所在的地域也有關,本人位於廣東,對其他地方沒有太大了解,廣州深圳了解的更深一些。對於剛畢業可能參差不齊,我認為廣州深圳研發類轉正後是不會低於5K的,當然,如果從高處想的話,高的可以無限的想像,工資高的人大有人在,不過這取決於自己的心有多高。雖然工資永遠是我們追求的核心,但也不要過於好高騖遠,一畢業就想蛇吞大象,對於畢業生,一般公司給一般群體都是1w以下的,其實你剛畢業能拿到7k+就可以安然自得了,已是高於平均水平。另外還有些公司是包吃住的,可能剛入學的人不會有考慮這個因素,實際上,開給你的工資和你每個月能存到的錢那不是一回事,如果包吃住6000,那可要比你那7000啥都沒有划算多了。如果你在廣州深圳找不到一份工資高於5k的工作,那說明你學的還不到家,這個跟學校和學歷關係不大。因為技術類這行就是靠實力說話,筆試面試下來,人家公司不會冤枉你,所以別問我什麼我是大專的是不是就拿不到這個數。另外,當你報了這個專業或者你在選專業的時候優先從工資就業這一點開始考慮,那麼你是不明智的。術業有專攻,三百六十行,行行出狀元。無論是建築、金融還是管理,只要學的好,本領過硬,都可以混的好,一句話,還是靠自己。再者,有很多人聽說很多身邊的朋友這個專業工資待遇什麼的出來還不錯就選過來了,其實,這個專業對等的行業不是個混吃等死的行業,你的工資通過跳槽會升的非常快,一年破萬是普遍情況,穩定下來以後基本工資都只會停在15k到20k,再漲很難,這時就要看公司了,有很多公司有項目獎,年終分工,股份等等,這個對於幹了好幾年的老員工才是拿大頭的地方。如果漲不上去,你就只能轉行轉型了,而且這裡有一個硬道理,你工資越高,代表你能力越大,能力越大,你的責任越大,你要扛的事就越多,壓力很大,總監級別的心態不好頭髮掉光是肯定的。所以,從選專業的角度來說興趣是關鍵,當然很多調劑過來或者已經稀裡糊塗報進來的人就沒辦法。如果想以技術類作為看家本領只能好好學,平心而論,技術的路屬於「穩」的路,換句話說,如果你有一顆不滿足於現狀喜歡搞事情,年輕力壯意氣風發一心想賺大錢做馬雲的那種,那請你放棄本專業別浪費時間馬上開始考慮其他發展道路。因為技術類的工作就要坐得住、有興趣,靠著你對本業堅持不懈地探索。一步一步來,你才有可能走的更遠。我不會因為我是業內人士就很推崇本業,找到自己的道路,明白自己想要什麼,才是真的,特別是大學生,最好在大二就有自己的方向,這樣,你有充足的時間做一切準備,比如換行!因為我是專業對口的,所以我就從對口的角度,說下我們專業學的啥以及怎麼學。有很多人在問專業難度,以及哪些課需要讀好認真學等,其實這些需要看你的心有多大,才能決定你要走多遠。另外,電子信息的專業難度只要智商沒問題其實一般都學的來,男女都一樣,至少學到就業水平是沒問題的,所以別問我什麼對女生是不是不友好,女生是不是學不來,我只能說那是因為很多女生最後沒興趣沒堅持下來。對於女生來講,這確實是一條孤獨之道,學的人不多,學成的人更不多,但我覺得是個人思想和學習環境導致的,大環境下女生都不喜歡這個,所以想走遠可能會難。但現在女程式設計師也已越來越多,「誰說女子不如男」?如果你想搞科研,有什麼高端大氣上檔次的理想,那本專業就很難。對於任何工科類的專業,肯定是智商高和有毅力的人最後能走的遠,所以也沒有必要去比較,優秀的人大有人在。學的東西很泛,開的課程情況看學校,主要的課程還是偏硬體類、模電、數電、電路,好的學校會開通信原理、計算機網絡、單片機、c語言這些、專業課很多,我就不一一列舉了,反正我大學的課是排的滿滿的,一般來說你有一兩門學的精基本就能吃飯了。這個專業應該怎麼學,有哪些出路決定於畢業後想從事哪種工作,此處暫且先不討論技術外的出路。大一大家都比較迷茫和青澀,估計不明不白所以也沒什麼決心,對未來有各種憧憬和期待,野心勃勃,各種搞活動搞事情。到了大三才明白過來,一事無成,才又回頭揚言搞技術!接下來就是學不會、難入門、堅持不下來的狀態……崩潰、懊悔、迷茫……其實,這是大部分本專業學生的現狀。我建議花一年時間,即大一就去闖去蕩、去搞事情,最後確定你是不是想穩下來搞技術。大二開始認真學習,堅持下來你到大三就會很強了,沒錯,已經強到可以找初級工作的地步。如此,便可早入行,到大四大家一起找工作的時候就會比別人起點高一些。當然如果你在大一就一心一意就想搞技術那就更不用說了。那麼這個專業具體怎麼學?我接下來的建議只適用於普通想找工作出路的人,對於胸懷鴻鵠之志的請忽略。其實一般的課程你只要過得去就行了,有的人問什麼高數物理很難啊用不用學好啊,其實我大二開始混飯吃(本人是相對特殊的大學生,比較早工作),到現在好幾年了都沒用過高數和物理。但並不建議完全捨棄高數和物理,因為其他科目都與高數物理息息相關,雖然工作上用到的機會並不多,實在無力回天的話,即使不太精通也無妨。有人問C語言用不用學好?這決定於你從業的工種,目前,我的工作偏軟體,吃飯的傢伙就是C語言。可以跟自信的跟你講,精通c語言很重要,不是熟悉,不是了解,就是精通。那麼如果不喜歡軟體,你是一個硬體工程師或者單片機工程師,那麼c語言就用得偏少,那麼只要會語法、會編程就可以了。雖然單片機工程師也玩C語言,但相對用的比較淺薄,就是用來控制硬體,主題還是硬體,所以就相對不那麼重要。其實很多男生一開始對本專業有興趣都是因為硬體,確實動手焊焊東西,看到作品還是蠻有成就感的。有些小項目,智能尋跡小車,看看小車在跑啊或者搞個光立方燈閃啊閃的,看著特別好玩,確實比較吸引男生,這些以前本人都玩過深有體會。但是大部分人其實入門之後後面放棄了硬體搞軟體去了。究其原因有兩方面:第一是硬體確實很難,存在瓶頸,入門容易,也很好玩,大部分人只要會焊個東西,會畫個板,造一輛會跑會叫的小車就算是入門了。但是真正從業的時候會發現以前都是玩玩具。工業級的產品都要求過硬的質量,要經得起風霜的考驗,要經得起人為的摧殘,也就是說實際上除了功能之外的東西,還得做很多措施保護,除了這個,單單就產品的功能也有嚴格的要求——精確到每個電阻、每個電流和電壓,要有過硬的理論基礎、電路分析、模電、數電、電磁波原理,可能還需要物理。畫板要考慮幹擾、emc、信號完整性、紋波等,沒錯,聽起來是不是很難,所以其實一般的應屆生都不具備一定的經驗和水平,書也讀的不夠紮實,所以很難做到這些,工作中就經常犯錯,壓力很大,局限性很大,會發生很多你不可理解的事情,就會做著做著發現,啊,不是應該是這樣的電流這樣的功能嗎,怎麼沒反應或者不是這樣的!?然後連查問題都不知道怎麼查,然後拋給大佬。由此引申出第二個原因,因為你一畢業能力不夠,其實很難,很少人能達到工作需求,所以企業一般不會開給你高工資,而且還要教你,還要容錯,所以剛畢業普遍看起來硬體工程師工資比軟體的低,因為軟體很多人在校期間就能學好,甚至達到社會工程師水平,所以工資自然就高了,三五年後誰也說不好,硬體確實是個需要積累的東西。所以對於有志於此的人,我還是鼓勵學硬體,別老看個待遇,而且硬體工程師比較穩,一般公司想動你都得想一想,畢竟是社會稀缺資源。怎麼學習硬體?大部分課程過得去就成,但是,你最好把電路、模電、數電都讀精通。對於已經到了大三下學期然後突然想搞技術的人,其實純硬體對你來說有點接近關門了,除非你很有毅力,因為這時候你沒時間補基本功,後面要想玩好電容、電感、運算放大器、二極體、三極體、mos管很有難度,而且這些理論課程偏枯燥。此外,對於已經在大二鋪設好了理論的人,大三就要開啟你的魔鬼積累之路,多呆實驗室,找老師,找師兄指導,盡你所能做作品去吧,可以找幾本電子設計類的書籍或者網上的論壇照著搭,儘量多地積累小電路模型,儘可能多地熟悉一些集成晶片,比如LDO之類的,特別推薦思維好的同學學習開關電源,很考硬體功底,如果你能自己搭出合格的拓撲較為複雜開關電源,那麼你的純硬體已經過關,可以考慮實習了,然後這個時候要學畫板,layout那些,熟悉altium designer,俗稱AD,但是其實大企業用的不多,多數是allegro,CAD。很多公司畫板的工程師是女生,而且其實女生會更有優勢。大學期間儘量多參加比賽,電子設計大賽和各種杯,瑞薩杯,飛思卡爾杯等等等,有沒有獲獎都行,這些就是你的經歷,你的簡歷,寫的就是這些你做過的項目,大小都行,寫的就是你參加過什麼比賽,有獲獎更會在你面試的時候加上不少分。然後,還是要儘量早點實習,學校的環境和公司的差距還是很大,出來一趟你會發現強的不是一星半點。對於純硬體設計工程師,言盡於此。我是從去年9月份辭職,然後到了一個相對陌生的城市發展,說實話,是因為我對象喜歡這個城市,也就來了。一開始辭職時候找了一家物聯網公司,因為沒深入了解,導致了幹了一個月之後就辭職了,那次辭職是裸辭,辭職後的壓力很大,不斷的找工作,發現真正適合的工作只能是本行業的工作,其實從2014年年初我就有點厭倦硬體開發的工作了,後來迫於生活壓力,又快過年了,原來城市的一家世界500強的公司錄用了我,我就暫時又回到原來城市工作,與對象暫時分居兩地。進了500強的大公司,確實感覺到與小公司不一樣,但是說句實話大公司裡面的人際關係太複雜了,複雜的超出了我的想像程度,一個完全不懂研發的人管理研發,不懂電路的人做電路設計,剛畢業的人沒接觸過DSP寫出來的程序就敢用來做小批量,唉,不說了。今年三月還是由於感覺跟對象在不同城市又辭職回來了,不過也錯失了一個能在大公司往上爬的機會,那時候基本在大公司轉正就可以自己負責電路開發這塊(其它人都不懂),不過也不後悔,看看他們那邊的小高層,全都是心眼啊。辭職後又開始新的找工作歷程,大約一個月後找到了現在的工作,裸辭找工作就像剩女找對象,會慢慢慢慢的放低自己的要求,後來就來到了現在的公司。公司研發人員有10多個,但是上位機的太多,做MCU和產品硬體的這邊一共5個人。現在的感覺就是公司管理特別混亂,沒有一套完整的產品研發-生產體系,研發出來的新產品出貨速度太快,導致後期維護量巨大,生產也是一塌糊塗,一個集中器生產100臺,至少有40臺以上會有毛病,剛才領導又來催時間了,研發這邊的領導也是個逗比,就知道催催催,也不看具體工作數量和質量。文件管理混亂不堪啊,真心的,領導哪天想起來了就讓你出個這文件,哪天又讓你出個那文件,真心煩。在這一行幹的越久就會越明白,這行想繼續做下去,要麼自己有好的項目自己幹,要麼有興趣,要麼遇上一個讓你想跟隨的好領導。對於選擇工作上,個人感覺畢業後有機會進大公司一定要進大公司,一個系統的公司可以給你一個系統的培訓,讓你有個整體的工作思路,小公司當然有小公司的好,什麼雜活都幹,學的東西必然多,但絕對不利於個人的長期發展。單片機 ARM Linux C 彙編 C++ QT 驅動 說來說去都圍繞這幾個單詞。一大群開發初學愛好者迷失在Linux驅動開發 Bootloader移植中,還有QT移植中?甚是心痛。如果是一個學生,如果是一個即將走向嵌入式開發崗位的兄弟。好好的在Linux環境下,寫點C代碼,實現點數據結構練習基本語法和算法。調用調用open read ioctrl 然後寫點進程線程和網絡,做個項目。扎紮實實的,基礎牢牢固固的,對於我們招聘初級工程師來說,是最喜歡不過的了。據網友光華居士表示「嵌入式軟體工程師,兩手都要硬!」嵌入式軟體編程顯然不同於PC軟體開發,它和硬體密切相關。想寫好嵌入式軟體代碼,就必須了解清楚所使用MCU的硬體特性、各個外圍電路和接口電路的原理。不僅要深挖細究MCU內核架構的知識,是否支持浮點處理器/DSP,是否支持協處理器、指令數據緩存。還要了解MCU的編程模型、各種存儲器的地址空間分配及其訪問效率如何,在MCU之外,還必須了解各種電路知識,什麼地方需要上下拉,什麼地方需要加濾波電路,什麼地方必須隔離,哪裡必須加抑制器件,等等不一而足。
1.軟硬結合,更好地實現用戶需求。比如輸入捕捉,如果是通過上升沿或者下降沿捕捉,加了不合適的濾波電容會造成對沿的破壞,不加濾波電容就會受困於各種空間幹擾產生的雜波。倘若硬體工程師搬來的是加了不合適電容的電路,搞得沿之間位寬失真,便會出現數據不正常的偶發故障,倘若硬體工程師搬來的是不加電容的電路,搞得軟體工程師必須進行軟體濾波,把代碼搞得又複雜又難解,你說這怨誰來著?
2.方便定位Bug。愛因斯坦曾經說過,「提出一個問題往往比解決一個問題更重要,因為解決一個問題也許僅是一個數學上的或試驗上的技能而已,而提出新的問題、新的可能性、從新的角度去看舊的問題需要有創造性的想像力,而且標誌著科學的真正進步。」鑽研硬體電路可以幫助軟體工程師提出更多解決問題的思路,發現導致Bug的更多可能性。一般來說,當遇到Bug時,對硬體一知半解的軟體工程師只在代碼層面上打轉轉,基本不會在硬體方面提出問題,最終為了迎合蹩腳的硬體設計出彆扭無比的代碼,卻不曾想,只要稍稍改變一下硬體設計,就可以輕鬆且優雅地完成代碼設計。
3.藝多不壓身,求人不如求己。當我們對硬體電路設計起了懷疑,倘若自己悄沒聲地拿起烙鐵飛個線、換個元件,驗證了自己的思路,這時直起腰版、拿著板子理直氣壯地去找硬體工程師,豈不是順順利利,又送順水人情?倘若直接拿著板子,心底發虛面上露怯地去找硬體工程師理論,一場唇槍舌戰在所難免,腥風血雨不說,到頭來硬體工程師硬著頭皮給你調調電路,真是解決了問題還好說,若是自己思路錯了,那不是自找苦吃?上個班,掙點錢養家餬口而已,當個老好人,和同事其樂融融多好,吵來吵去,搞得那麼辛苦,何必來著?但是實際中嵌入式開發需要的知識體系和技能,80%其實跟硬體平臺無沒有無關係的。比如計算機系統原理、編程技能、程序的編譯連結、你對Linux內核的理解、設備模型、驅動架構、項目管理等等。真正跟硬體平臺有關的,比如驅動開發,上面的框架是跟平臺無關的,下面跟各個硬體平臺的適配部分,可能跟硬體平臺就有關係了,寄存器配置、開發板硬體配置等。而對於嵌入式工程師來說,尤其是驅動開發工程師,等你工作後,你會發現,跟應用開發相比,真正要寫的代碼量很少,往往只需要改幾行代碼。但是往往這幾行的代碼量,需要你深厚的背景知識:硬體知識、通信協議、對晶片、開發平臺資源掌握、對Linux內核架構、設備模型、驅動框架的理解,這些才是嵌入式工程師的核心競爭力。如果你看到很多廣告還在以開發板或者平臺作為噱頭,能拿多少工資作為宣傳,這時候你的腦海裡要有這種意識,這是一種推廣宣傳。工資多少是由你自己的水平和市場大行情決定的,雖然在面試時HR會對你本身的水平評估有一些誤差,但是要相信,時間會證明你自己的真實價值,不斷提高自己的知識水平和技能才是王道。真正的技術需要自己花時間慢慢吸收、積累、消化,內化為自己的知識體系和技能。外在的心靈雞湯或高煲老鴨湯,只能讓你一時地熱情高漲,產生暫時的錯覺,並不能真正的提高技能。據王利濤表示,很多嵌入式初學者認為,學嵌入式,就是學習ARM,就是學習開發板。買一塊開發板,然後在上面「移植」u-boot、Linux內核,再使用busybox製作一個根文件系統,大功告成!覺得可以出去找工作了。這其實是有一定片面性的:首先ARM是個CPU架構,跟PC上的X86架構一樣,你見過有人在Windows下面學習C/C++編程、MFC編程、網絡編程、網際網路編程,說自己學習X86的嗎?當然,也不可否認,嵌入式平臺的多樣性、硬體的可定製性導致我們在嵌入式平臺上開發應用程式、驅動之前,首先要搭建這個平臺,就像我們在Windows下面要裝作業系統一樣,但是這僅僅是我們學習嵌入式開發的第一步。其次,關於系統的「移植」,很多人玩了開發板之後,會在自己的簡歷上寫自己移植過u-boot,Linux內核.其實,這種寫法也是有點瑕疵的。真正的移植,往一個新的晶片或開發板上porting一個u-boot或Linux內核,那可不是一個人能幹的事情,是一個團隊幹的事情。時鐘、DDR、存儲,可能牽涉到各個模塊,哪裡遇到問題,都需要各個模塊的owner去debug,有時候甚至可能是晶片的bug,或者硬體開發板的bug,這就需要我們使用軟體去解決、去規避這個坑,這都需要我們在很短時間,甚至一兩天的時間去解決這個問題,需要一個團隊的各個模塊專家合力完成。所以說,我們所說的「移植」,其實就像是在Windows下面安裝作業系統,按照步驟完成裝機。當然,通過這個過程,可以加深我們對嵌入式系統的理解,但是我們首先要知道的是,我們「移植」的系統,都是晶片公司團隊做好的系統鏡像,我們做的只是配置、編譯、安裝、甚至升級這些基本的操作。這些環境只是我們學習嵌入式開發的平臺,萬裡長徵才走完了第一步。嵌入式越來越複雜,一個SOC晶片上集成的模塊越來越多。以手機為例,典型的嵌入式產品,我們看看上面集成了多少模塊:觸控螢幕、LCD、USB、WiFi、4G等無線通信、音視頻編解碼IP、DDR、存儲控制器、3D/2D加速、GPS、指紋識別、NFC、DMA、G-sensor各種傳感器..。可以說,現在一個手機的複雜度和硬體配置,已經超過我們的桌面PC了。除了不斷增加的硬體,軟體方面,比如Linux內核,光內核代碼就有1000多萬行,每天更新的速度超過你學習的進度,你能學得完嵌入式的所有知識和技能嗎?早期PC時代,我們知道能做出X86 CPU量產的也沒有幾家,Intel、AMD和威盛。但是嵌入式時代不一樣了,ARM的IP授權模式導致不同的晶片廠商百家齊放,不同的SOC平臺和開發板眼花繚亂,針對不同行業需求定製的SOC平臺雨後春筍:手機晶片、平板晶片、視頻安防、物聯網、汽車電子、工業控制,甚至人工智慧AI晶片....,你到Linux內核的ARCH下面可以看看有多少種CPU架構,再到arch/arm下面看看有多少種開發平臺,這還只是加入到內核mainline的平臺,算上沒有加入Linux內核主線的各種平臺,其實數量更多。眾多的晶片架構、不同的開發板平臺,我們該如何去學習?嵌入式和PC的概念也越來越模糊了,Intel已經推出X86架構的CPU和嵌入式產品了,比如平板。ARM也開始進軍伺服器和筆記本領域了。無論什麼CPU架構,ARM、X86、MIPS、PowerPC,還有最近火熱的物聯網晶片,無論是做嵌入式產品,還是PC、伺服器,他們的底層本質其實都沒有變,都是計算機原理和系統架構,都是馮諾依曼的計算機架構,圖靈原型機的各種實現。不斷複雜的軟硬體系統,對嵌入式工程師或者學習者來說是一個挑戰。這對我們本身的知識和技能有一個更新的要求。早期51單片機時代,我們可以自己使用麵包板或者自己畫PCB,做一個開發板,然後在上面開發軟體。軟體、硬體自己全搞。現在不斷複雜的SOC平臺,再想一個人全搞,軟硬通吃,基本不可能,這也導致我們需要分工協作來完成。首先軟硬體的分工,各司其職,各自精通自己的領域,然後進行軟硬體整合,協作開發。再次,軟體方面,嵌入式軟體也越來越複雜,Linux內核1000多萬行,android源碼下載下來就佔幾個G的空間,自己想全搞,同樣不可能,同樣需要進行分工。比如android,需要分為BSP工程師、Linux內核工程師、驅動工程師、android中間層開發工程師、APP開發工程師。對於一個Linux內核,也需要分工,各個模塊同樣進行分工:Linux內核的USB子系統、音頻子系統、視頻編解碼、文件系統.把其中一個模塊你搞精通了,工資絕對不是問題。
對於嵌入式學習者來說,我們該學習什麼,或者說如何學習?才能提高自己的職場競爭力,或者說對於一個新手來說,如何通過自學,達到公司的用人標準和技術要求,找到一份自己想要的工作?首先,你要學會做減法,從現實出發,要有這樣一個意識:我不可能精通所有的嵌入式技術,學會堅持,制定合理現實的小目標。很多人喜歡那種不切實際的廣告轟炸營銷,擊中你心理上的某個軟肋,某個G點,一下子興奮起來。越熬越濃的心靈雞湯,並不能解決我們吃飯的生存現實問題。很多人,包括我,在學習的時候,都喜歡給自己樹立各種路線、計劃、日程表。制定計劃時激情滿滿,熱情高漲,激動得睡不著覺。計劃宏偉而飽滿,仿佛成功就在眼前。但是往往不切實際,往往在早期,遇到各種困難,各種坑,各種拖延導致沒有堅持下來,最後夭折。然後接著制定下一個宏偉的計劃,繼續夭折,生活周而復始,day after day。觀察我們生活周圍,真正做出成績的都是那些基於現實出發,能一路堅持下來的人,day by day。有時候你會發現,並不覺得他們有多聰明。
其次,保持自己的興趣,說白了就是為了堅持下去。見過很多人想學習嵌入式,花了很多米買一塊開發板,激情滿滿,過一段是過去再看,已經不折騰了。嵌入式開發難,難在哪裡呢?主要在於開發環境的搭建,軟體調試上,不像在Windows上使用VC開發程序,集成開發環境都幫你弄好了,各種斷點、單步、查看堆棧、寄存器、內存窗口。而嵌入式不一樣,硬體環境搭建會遇到各種各樣的問題,各種電腦的兼容問題,各種莫名其妙的問題,有時候著實讓人抓狂,時間久了,慢慢地學習的激情殆盡,也就不想學習了。這還不算什麼,更嚴重的是,很多人學習嵌入式遇到挫折,往往會打擊人的自信,覺得自己能力不行,智商不夠,不適合幹這行,在心理留下了陰影。對於個人學習者來說,買了開發板,你不買配套的萬用表、示波器等調試設備,遇到硬體問題也是一籌莫展,無法解決。其實我們可以完全使用其它的平臺去開展我們的研究和學習,比如QEMU,一款可以仿真開發板的開源軟體,使用這款開源軟體,我們可以在電腦上虛擬一個世面上流行的開發板,然後再在這個仿真的開發板上跑u-boot、Linux內核、掛載根文件系統,使用和開發板一樣的源碼,運行效果和真實的開發板是一樣的。而且,使用QEMU的好處就是,「硬體」永遠不會出問題,可以讓我們避過硬體的各種坑,騰出更多的精力去研究嵌入式軟體的各種架構、編程技能、內核驅動....,這些才是嵌入式工程師的核心競爭力,需要花大量的時間不斷地去積累,去磨合,去提高的。把大量的時間耗在一個本該不屬於學習範疇的硬體bug上或者硬體環境不兼容上,不划算,因為你以後進公司後,遇到同樣的問題,找硬體工程師,半分鐘幫你搞定。所以說,選擇一個理想的嵌入式學習平臺,尤其對於初學者來說,很重要。
最後,要保持學習的深度,刻意練習。不要讓自己永遠待在學習的舒適區,要學會挑戰自己,不斷去擴展自己知識的邊界,完善自己的知識體系和技能。很多人買了開飯,按照教程,「移植」了u-boot,Linux內核,製作了根文件系統,然後就陷入了迷茫:接著要幹什麼?要學習什麼?想學習又感覺深入不下去,東一耙子,西一耙子,看看這,看看那,時間不知不覺就過去了。其實,學習嵌入式,基本的嵌入式知識和理論學習還是必要的,很多人推崇邊做邊學,到項目中學習,實踐出真知。當然這也是一個方法,但是也有弊端,那就是學習的不系統,很多有心人到後來還是得回來補課,完善自己的知識體系和技能。很多人玩開發板,燒寫鏡像,玩得賊溜,但是你知道這裡面的原理嗎?知道JTAG怎麼下載的嗎?Jlink和JTAG有什麼區別?為什麼PC上要裝個JTAG軟體而Jlink不用?程序的編譯和連結是怎麼樣的?為什麼內核鏡像要下載內存的某個地址?換個地址行不行?為什麼我們編寫的程序要在有OS的環境下運行,在ARM開發板裸機環境下,你能寫一個跑起來的程序嗎?只有對這些問題深入思考,你才會對嵌入式有一個更深的認識,超越了平臺,一通百通。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧