嵌入式是大坑的說法,是否與學生的信息不對稱有關?
知乎向來流傳嵌入式是大坑的說法,我混跡嵌入式話題快2年了。總結出了以下幾點,希望已經從事該行業的前輩,能現身給個說法。
知乎大部分人眼裡的嵌入式:1工資低的不像話 2小學生乾的活 3學的要死要活的,付出很多,最後付出得不到回報,還不如趁早轉互聯網。對於這個現象,我從學生角度,有如下發現:
現象1:想從事嵌入式方向的學生,大部分是ee專業。在本專業中,單片機被過度神話,尤其在一些二三本院校中,單片機被看作是救命稻草的存在。彷彿學好單片機就能xx,學不好連工作都找不到。現象2:學生基礎不紮實。說嵌入式是坑的大部分人有以下特徵:1學歷或本科普遍不高 2死磕單片機,然而單片機只是工具,重點應該放到模電數電等基礎課程上,但這些人大部分基礎很不紮實,非常浮躁,沉迷於校園各種高大上的製作和項目,對原理的思考甚少。3大部分所謂的項目,是在重複勞動,驅動大部分來自網上,很少有人能看著晶元手冊編程。現象3:害怕跨專業。從大部分學生的經歷來看,從事的方嚮應為嵌入式軟體,但因為專業的緣故,經常給自己冠名以嵌入式硬體工程師,因為害怕脫離本專業。結果,兩邊都學的不精。本專業的電路基礎,模電數電,信號與系統,高頻電路等學的非常一般。而軟體方向的,編程語言,數據結構,操作系統等根本沒有系統學過,冠冕堂皇稱之,在項目中學習就可以了。從很多答主的經歷來看,不懂指針,不懂數據結構操作系統,就開始上手linux。因而校招中,軟體方向因數據結構等課程不過關,筆試被殘忍淘汰,電路設計因為學校沒有很好的研究環境更是不堪一擊。於是發出了嵌入式要完,我學的那麼用功,依然找不到好工作等言論。現象4:沒有上升到linux,在win裸機中打轉,板子的bootloader甚至沒聽過,對自己的開發平台一無所知。現象5:少部分人聲稱,學好了也沒什麼用,普通人干10年,最多就20w,和互聯網差太多,而且招的人少。從我調查來看,嵌入式人才供不應求。以拉鉤網為例,嵌入式3年經驗工程師,北上廣12k月薪以上遍地都是。3年或者5年工作經驗者,20k也比比皆是。從校招來看,海康華為等給的薪水,10k以上已經是非常普通。985研究生校招,14k以上也非常多,只是略遜互聯網,根本沒到要完的地步。而且聽很多hr說,他們非常缺嵌入式工程師,有招人難的問題。我單獨私聊了幾位已經工作的嵌入式的前輩,大部分表示工作壓力不大,甚至不加班。尤其手上的項目一結束,就會有很大的空檔期。
問題來了,在堅持目前互聯網優於嵌入式的大前提之下。說嵌入式是大坑的人,是否和以上因素分不開,還是有其他因素在?ee嵌入式圈,是否存在不利於長久發展的學習風氣???補充現象:在知乎純cs交流區內可以發現,很多業界大神或者有經驗的在校生,都向新人推薦走科班的路子,即系統學習c?指針,看c primer c指針等書,並系統學習數據結構,操作系統等知識,比如公開課或者看某些名著。我也是ee專業,非常贊同這個辦法,自己也去實行了。然而到了我們嵌入式區,就成了在項目中學習就行了。項目中學習這句話我覺得本沒有錯,但說的是先系統學習了,再在項目中深入理解並融會貫通。倘若你連指針都沒用過,內存管理也沒有聽過,怎麼可能自己突然就想到在項目中改用指針優化程序?用釋放內存節省空間?這樣的項目恐怕做100遍,程序質量也無法提高啊。我朋友和我爭辯這個問題,他認同項目中學習的觀點,有一次和我說他準備學數據結構和操作系統了。結果一個周不到就給我說,他學完了。。。我說啊?隨後對我發表觀點,只有鏈表可以用用,其他的太占內存,跑不起來的。我問你會寫鏈表嗎,他說這個模式很固定,用的時候查就行了,沒必要會寫。。。我又問操作系統,對我說,操作系統其實原理和裸機一樣,我用中斷也能實現多任務切換,用os反而跑的不快,沒必要太過於專註。。。我當時真的一臉懵逼。。PS言辭可能有點傷人,很多人還在逃避,但我相信這些問題是現在很多嵌入式愛好者包括我自己的毛病,我們都需要反思,希望能有前輩出來指點。與君共勉。
開門見山的說, 在國內,是,並不是信息不對稱。嵌入式(embedded sysytem)的平均收入不如互聯網行業。在歐洲,兩者差不多,senior level的ES會高一點,也更難招一些。其他地區我不知道。
工資水平從來不取決於你工作的內容難不難掌握,而是就業市場的產業結構和供需關係。嵌入式和普通的software engineer比起來,主要的不同是硬體的資源。Limited resource決定了沒有,或者是有很弱的OS。尤其是在十年前,這是非常重要的區別。這樣就要求ES的工程師要自己manage heap, stack, resource share 和driver。 也是因為資源限制,ES的程序里幾乎沒有什麼複雜的演算法和數據結構,尤其是類似Recursion和需要長時間計算基於iterator的演算法。ES主要完成的任務是兩大塊,一個是M2M(machine to machine)的通訊和real-time control。
這就決定了ES的程序和最終的商業產品是strongly depends on hardware。對於這樣的行業,最終deliver的產品是具體的實物,這相對於互聯網行業而言,是重資產的。越是重資產的行業,人力資源所分享的利潤比例就越低。所以從整體行業上看,ES是要比互聯網行業的低的。
其次,工業控制和M2M是一個幾十年前就存在的成熟行業了,也是歐美非常看重的工業基礎。國內這方面的起步比較晚,積累和產業資源都不夠。國內的產品絕大部分都是2C的市場,很多產品是拿半導體廠商的stack來做application。用這樣封裝好stack,程序確實就是API的組合體,並不是ES工程師應該體現出的competence。國內很少有廠家可以拿到大廠的source code,開發起來也是知其然而不知其所以然,ES工程師成長也會比較慢。所以ES比互聯網行業收入低,主要還是因為國內ES相關產業處在下游,低附加值的階段,而互聯網行業正好相反。這是大環境,不是個人努力能夠解決的問題。再看看歐洲這邊,很多裝備製造領域的企業都需要ES的工作,比如說消費和工業電子的Philips, 半導體設備商ASML,機床里的Gildemeister,和所有的汽車類廠商 like BMW.這些領域的開發都是ES裡面的hardcore,從BootLoader, driver, OS到Application。這些廠商大多積累和發展了很多年,處於產業鏈上游,高附加值,相應的ES崗位收入也說得過去,工程師成長也比較快。
最後才是所謂的教育問題,在我看來,一個好的ES工程師的min knowledge requirement至少要有:計算機體系結構,network,data structure, algorithm, OS, RTOS再加上編譯原理。這些課,都是需要長時間學習和實踐的科目,沒有一門是可以速成的,自學的成本比較高。這些知識絕大部分是計算機基礎課程,最好的教材還是要讀英文原版,很多工科生的英語水平是不足的。而國內老師大多並不看重教學,加上自己也沒有產業經驗,不知道教什麼,也不想教。而ES需要很多硬體相關的知識,這個學習曲線確實比較陡,需要老師的知道和幫助。而互聯網行業,因為良好的開源氛圍,自學的barrier比較低,好出成績,也比較容易成為一個合格的工程師。這一點是個人努力可以克服的, 但是比起產業結構而言,是居次要地位的。
再看看未來, ES面臨很多挑戰。最重要的一個變化就是硬體資源極大的豐富,很多產品都自帶RTOS,這侵蝕了很多原來ES engineer的工作,ES也主要handle是Application Level的事情了,這不是ES的價值所在。其次,很多工業領域為了加速開發進度和質量,DSL(domain-specific language)會越來越多的替代C和C++成為開發語言。這樣一來,ES就真的成為了API的組合。而開發DSL的要求比較高,編譯原理和數學是一大門檻。所以,ES的前景是不如互聯網行業的。
綜上所述,ES對於一個純粹的從業者而言確實不如互聯網行業。但是,如果想要run your own business,我覺得IoT才剛剛開始,是藍海市場,好於純粹的互聯網行業。正好是從嵌入式轉的換聯網,在嵌入式領域有過一年工作經驗,當然,一年僅僅是入門而已,只是在這一年中發現嵌入式這個坑確實很深,所以毅然決然轉行了。
就技術難度而言,嵌入式涉及到軟體和硬體。評價一個嵌入式產品好不好,僅僅完成了基本功能,能跑起來只是最初級的,即便是這樣的產品已經足夠很多小公司拿去忽悠了,畢竟識貨的很少。一個嵌入式產品要想做好,在硬體上,各種測試得做,什麼高低溫,三防,尤其是玄之又玄的電磁兼容性,電源上的各種脈衝得打一遍吧,信號完整性得模擬模擬吧,每一個領域都是大坑。一個硬體工程師便是在這些大坑上居中協調。而涉及到軟體,坑就更深了,操作系統裁剪,演算法設計,系統參數設定,每一樣都需要在足夠高的平台上積累很長時間才能有所收穫。要做成一個合格的嵌入式,是需要採購,硬體,測試,驅動,軟體,演算法等很多工程師配合完成的,而每個工程師,都是一個螺絲釘。在技術難度上,嵌入式是絕對不亞於互聯網的。其實互聯網也是個大坑,只是這兩個坑是有區別的。
之所以轉行,是因為覺得在這個領域成長周期太長了。一個熟練的前端的成長周期大概是兩年,到時已經是可以獨當一面,可以不用操心了,而他的成長,是可以通過自己的學習來完成的,初期需要的就是一台電腦然後擼代碼。而一個硬體工程師,焊板子,調試,帶著產品去各種單位去做測試來獲得最直觀的信息,在成長周期上就長了很多。而軟體工程師想自我提高也很難,畢竟平時在公司的工作平台動輒上萬,自己備不起。而且,嵌入式方向工程師們的自我提升在很大程度上依賴單位的整體技術水平。而加入想在業餘時間去提升,只能去啃乾巴巴的課本一樣的東西,學些理論,至於怎麼和實際聯繫起來,得有 項目文檔吧,但是詳細的文檔只有大公司才有,好吧,又繞回去了。
轉行另外一個十分重要的原因是,自己在下班後費心費力學的點東西無法和公司需求掛鉤,簡單來說就是很難變現。嵌入式產品開發,從開始就是大兵團作戰,每個人都是螺絲釘。一個嵌入式產品,從研發,採購,測試,聯調,定型,國產化,量產化,每一個步驟,動輒幾個月。雖然很多步驟是並行的,但是當缺了人手,你必須啥都得干。這樣,你被當做革命一塊磚,哪裡用你哪裡搬。這樣的模式,對於技術成長而言,沒有益處。其實,做互聯網的說嵌入式坑很深,不是說嵌入式在技術上簡單,而是相比於互聯網,嵌入式開發和機械,車輛等領域一樣,已經是傳統領域了。互聯網領域迭代速度快,小團隊很快就能做出一個功能上能用的產品來發布,開發所需要的生產資料很少很少。快速的迭代,開放的技術社區,這些都十分有利於年輕人的成長。比如一個前端,在工作之餘研究下nodejs,做幾個小項目,在GitHub上跟幾個開源項目。他這段時間的努力,工資水平就會反饋給他。而嵌入式方向,沒這種機會。一塊賽靈思demo板動輒幾萬,買不起。。。 不否認,嵌入式方向,無論是機電,通信,測控,都是十分有意義的領域。但是作為年輕人,尤其是有著 住房等壓力的年輕人,還是傾向於互聯網領域。這是個好問題啊.
我先佔個坑,後面慢慢補充.
首先回答問題,
嵌入式可是推動著人類進步的重要工具啊.我們生活的各行各業隨處可見嵌入式設備, 手機, 路由器. 汽車電子, 無人販賣機, POS機, 人類已經離不開嵌入式. 所以嵌入式是大坑的說法並不成立.
但是,一般的高校學生從事嵌入式,顯然是門檻太高.
接下來,就要講我自己的故事了.
&<我的嵌入式之路&>
接觸嵌入式是從2007年開始的,那個時候我大三了,湖南科技大學 通信工程專業.
面對即將畢業,我一臉的迷茫.
各種課程學了.但又不知道學了啥,數電,模電,單片機,51彙編,c語言,計算機原理學了有啥用,
那時候只知道魔獸世界,
有一天,和室友打完遊戲,我對著電腦發獃.
"還有一年畢業了,我畢業以後怎麼辦..."
"老家是沒有什麼本事安排我進個好單位的,更何況我老家在西北的一個小地方,好不容易考大學出來了, 不能再回去."
上網.百度"通信工程","就業","未來","發展"之類的關鍵詞.
映入眼帘的就是"嵌入式Linux"
-----------------------------------------那天是我和"嵌入式" "Linux"的第一次見面.
原來嵌入式是我們這個專業的一個延伸,結合硬體和軟體,區別於X86架構的電子行業.在這裡我找到了一個答案, "各種課程學了.但又不知道學了啥,數電,模電,單片機,51彙編,c語言學了有啥用".原來就是用在這地方的,當時覺得這就是我以後的路了.開始各種收集資料.了解和學習.
那時嵌入式linux還是個新鮮玩意,沒什麼太多資料,咬咬牙,和家裡父母講了一聲,我暑假不回家了.去廣州學技術,學嵌入式,學Linux.於是那年暑假,我去了廣州.開始了暑假40天的培訓,這個課程我學得非常認真.比在大學上課的時候認真多了.從早到晚泡在電教室,拿著發給學員的三星2410 ARM9的板子做實驗, 點亮液晶,實驗按鍵,認真的看調試信息,分析啟動過程,中間遇到的問題就太多了.為什麼代碼燒不進去?為什麼代碼編譯不通過?為什麼屏幕點不亮?為什麼按了按鍵中斷不出來?那時就是一隻小白,看到別的學員調通了.自己確還卡在問題里,簡直急的想哭.
40天的時間很快過去了.學的東西一大堆,發了一堆資料,買了個移動硬碟,把這些相關的課程資料全部拷貝了.回學校,整個大四時間繼續看這些東西.接著就是找工作的階段,
-----------------------------------------------------找工作
那時自己一門心思的找嵌入式的開發崗位,別的崗位都不考慮.
但是無奈湖南這方面工作太少了.
好不容易找到一家做儀器儀錶的,居然不要應屆生做開發,
他們只招去跑銷售的應屆生.
面試了幾家,都是不要應屆生做開發,
我有個高中同學在南京上學,她說要不來南京看看,剛好有招聘會.我就去了,
走遍招聘會,只看到了一家做導航的,和嵌入式沾點邊,所以投了簡歷,很快就通知我面試,
然而,面試官問了我一些問題,
其實現在看來都是很基礎的問題,C語言的指針的概念.C語言各個循環的區別,一些演算法的實現,
當時的我卻沒有答上來.
看來,不招應屆做開發是有道理的.
還面試了一家公司,但是人家主要產品是基於Wince的,問我做不做.
我說"我還是想做Linux"
於是打道回府,回學校,開始惡補嵌入式面試的題目,
很快,收到了來自周立功先生的面試郵件,
哇!開心的不得了.
在這個行業,這是我的男神了,(後面會再次提到).
因為我剛開始學嵌入式 ARM時.看的很多書和學習資料,作者都是周立功
然後到了面試那天,
一早有大概100多人在教室里,聽著周立功先生的宣講,
而內容是周立功先生在勉勵我們這些就要步入社會的大學生,要堅持學習.不要以為畢業了,就告別學習了,其實進入社會.進入工作崗位,是更嚴酷的學習,
當然了.也有批判,說他面試的一些學生里,什麼都不會,天天打遊戲.最基礎的51都講不清楚,這樣的學生來學校混日子,以後也就是啃老,靠父母.
問了幾個問題.台下沒有人敢舉手,他又說,你們現在太靦腆.膽子太小,放不開.沒有年輕人該有的朝氣,然後他在台上清唱了一首騰格爾的&<天堂&>.
台下氣氛被點爆.宣講會結束,開始筆試環節.
拿到題目.我又懵逼了.
難.
一句話,我會的都沒考,他考得我都不會.
時至今日.
我回想起來.
那時的校招,怎麼可能有嵌入式linux的崗位給應屆生呢,學校都沒有設這個專業.
嵌入式linux應該是簡單的硬體原理 + 軟體 + 操作系統的範疇.
而那次考試的試卷是彙編,電路設計,數電,電機馬達控制相關的,
所以,那次的校招,要的是開發單片機和硬體開發的.
於是,我再次的落選了.
繼續看書,學習,
很快,又收到面試電話了,
是一家軟體培訓學校,類似北大青鳥這樣的.
讓我去當老師.教他們的學生使用單片機.
我去試講了一節課.
看到他們的學生,我心涼了一大截.
都是初中肄業高中退學上不了大學的,
果斷拒絕.
又收到了面試電話,
來自廣東,
原來是同專業的學長,叫我來他們公司,
我就去了,
公司是在國內做POS和收款機比較有名的公司.
面試我的是他們的總工程師,
問了幾個問題,都是ARM和Linux的
我全都答出來了.
靠! 這才是專業對口啊! 找到組織了.
然後談了一下待遇,
"試用期1300,包吃包住,正式錄用以後根據能力加薪"
我當時想都沒想.
可以!
哈哈 ,說出來不怕大家笑啊, 當年我一個應屆生,又沒什麼大能力,沒有實際項目,覺得能有一個學習的機會已經非常不容易了.更何況還包吃住,解決了一個生存的大問題,最起碼畢業後的著落問題解決了.就想著先學習,然後以這裡作為跳板就可以了,
於是蓋了公司的蓋章,回學校,這是我們班的第一份就業證明.
-----------------------------------------------------------------------------畢業了
有的同學們還來不及說上一句道別,就已經在深夜踏上了火車,
我去送室友時,我們幾個互相擁抱,說著以後還會見面的.一轉身,眼淚卻也不爭氣的流了下來,
同學送我時,他們幾個有的幫我提行李,有的幫我拿袋子,搬到計程車上,
車開了,我回過頭看到他們還在校門口揮動著胳膊說著再見,保重,一路順風.
直到在我的視野里慢慢變小,然後消失不見....
---------------------------------------------------------------------------工作了
剛開始工作的節奏非常快.
早8:00~17:30,一周上6天班.
每天學習和培訓.
陸陸續續又從各個地方來了很多和我一樣的應屆畢業生.
我們十幾個人一起住在公司宿舍.
崗位不同,有開發,測試,銷售.
貌似最終能通過試用的名額不多.其他的只能走人.
我接手的第一個任務是,實現一個用ARM7做的能同時給幾台熱敏印表機用串口燒程序的小工具,
因為公司有生產印表機產品,如果每台機器都要用電腦來載入程序的話,那這個生產效率就太慢了.
有一個前輩帶著我入門,幫我解決了很多問題,
後來只要是通過串口升級的都用這個工具, 直到後來USB載入逐漸代替了串口載入.這個工具也就告別了歷史舞台.
接著,試用期過了,順利轉正,工資加了,不過開始交五險一金,所以拿到手也沒比以前多多少.一起來的幾個大學生有的已經另謀出路了.
我則馬不停蹄的繼續做新東西,
公司之前在深圳設立了一個分部,用Atmel9261 ARM9 + linux做了一個嵌入式Linux的系統.
但是因為POS機行業太多外接設備了,要移植的驅動太多,而且這個系統一直都有問題.
那個分部耗了太久終於耗不下去了,解散了.
而我就開始背著個鍋,
把Linux移植到Atmel9261上,並且實現POS行業內的各種外設,最後再這個嵌入式linux上開發應用程序,
vmare虛擬機.redhat9.交叉編譯工具.busybox,linux相關的中斷,Linux目錄,源碼結構,Linux啟動過程,腳本配置,shell, 輸入子系統,TCP/IP.塊設備,字元設備,進程線程,信號量.Platform.Devices和Drivers的配對過程,驅動的結構體,SPI,I2c,I2S,外接串口熱敏印表機,USB射頻卡.USB轉串口驅動.
這個系統,我足足做了1年,
像蹲監獄一般的做事,沒和外界接觸,
每天早上從宿舍醒來,下樓就是辦公室,1樓就是食堂,下了班也是在食堂吃完飯回宿舍就用電腦看資料.
因為基礎不好,在大學時C語言和數電模電,單片機,計算機那些課沒有認真學.很多資料讀的不是太懂,只能翻來覆去的讀.有的時候,一些內容要幾本書結合起來讀才能明白.
比如大學時候,不知道指針到底是幹啥的,後來.看書看通了計算機原理,明白了數據在內存里存放的原理,搞清楚了地址的原理,後面很多東西就都迎刃而解了.尤其是在對Linux的驅動開發時,控制數據發送實際上就是控制發送寄存器,而寄存器其實就是被映射成了地址,通過改變地址上的值,達到修改寄存器的值.
這段時間是我人生中的低谷.是最艱難的時候.
整個東西做完以後,
本以為如釋重負了,但是沒有.
公司又有新任務了,
用minGUI和QT在這上面開發應用程序.
不過這時,公司給我配了2個新員工幫我,我的工資加到3000,
我可以搬出去租房子了,不用住在公司宿舍了,
娛樂活動也多了一些.
大半年後,minGUI的項目完成了.
我也對開發產品開始得心應手了.
任何客服反饋給我的產品問題,都能很快意識到系統問題還是應用層問題,然後快速的解決.
慢慢的,我負責的產品有了市場.
在公司的會議上得到一些領導的表揚,
那是2010年,中國的房價開始普漲,
我找到公司大BOSS.探討人生,
do or go?
最後,公司決定給我一筆錢,用來買房子,
這筆錢是十萬塊.前提是我5年內不能辭職.
於是,拿著公司的10萬,管父母要了15萬,自己的5萬,銀行貸款20萬.
買了一套130平的房子,
那時我剛滿24歲.
-----------------------------------------------------------新階段
那時,基於ARM9 Linux miniGUI的產品賣的並不是很多,
市場也不是特別好.
開始尋找新的方向,
然後Android出現了.
尋找各種途徑學習Android開發,買書,上網看視頻,在手機上調一些簡單的應用,
掌握那些控制項的用法,調用一些框架,然後自己買開發板,在開發板上外接一些I/O.接上收款機用的上的外設,比如說射頻卡,磁卡讀卡器.熱敏印表機,8位數碼管,VFD顯示屏之類的,
我覺得這個可行啊!
首先Android基於Linux,可移植性很好,而且界面友好,開發應用也快,
然後我跟公司談了這個規劃,
公司讓那個我作為產品經理全權負責這個事,
做產品經理要關注的事情就多了.
首先,產品性能定義,功能定義,機器的外形,平台選擇.價格成本分析,物料選擇,出差去各種供應商那裡了解情況,去模具廠那裡了解人家的生產規模,然後訂計劃,時間表, 當然了,做產品經理的這一切有一個前輩帶著我干,就是公司的總工程師.
最後,在全志,瑞芯微和飛思卡爾裡面,最終選擇了用飛思卡爾imx6q做為產品的核心,因為當時都覺得美國貨穩定性最高,還支持雙屏異顯,
最後產品出來了.雖然不算是國內最早的Android POS機.但是是目前同期最穩定的,
這些產品的銷售情況不如預期,原因還是POS機行業也不太規範.
很多商家還不用嵌入式的POS,而是找一台電腦裝個盜版免費的收款軟體.
2015年
很多有名的互聯網公司也看到POS機,收款機這個蛋糕,
紛紛投資收購建廠做宣傳,
競爭也越來越大了.
其中,小米投資的商米公司
百度投資的OnPOS
餐飲收銀設備,餐飲管理軟體,POS收銀機-客如雲,最新餐飲管理系統電器巨頭海信投資的
有這些巨頭和科技廠商的推動,
應該會帶動一波嵌入式POS的浪潮.
存在競爭是必然的,
但也讓人們熟知和接受嵌入式POS,
那種找一台電腦裝個盜版免費的收款軟體的作坊應該會越來越少.
我現在的工作,還在優化升級,解決產品的各種問題,
比如,這個型號的wifi模塊停產了,供應商發來新型號,做適配,做驅動,測試穩定性,測試OK,發布,
隔了幾天,售後告訴我有客戶投訴觸摸屏不好用,總是上下跳,聯繫客戶,在邊邊角角有個點擊效果一直在點擊,出差到現場發現裡面的大型設備居然對觸摸屏產生了干擾,趕緊聯繫觸摸屏供應商的人來解決,通過軟體增加抗干擾過濾.解決問題.
前陣子,核心板內存型號升級,在工廠測試中發現機器會有時啟動不了,又在一步步的排查問題.終於發現內存時序導致的,解決問題,
--------------------------------------------------------------------一些思考
一直在思考這份工作給我的意義是什麼
實話說,有無數次的念頭想要放棄了,
有時調試某新模塊,愁眉苦臉一個月了也找不到問題,
領導捶胸頓足催我什麼時候交產品.
遇到公司業績下滑,工資遲遲不漲.
遇到愛抬杠的同事為了一個小小的事情爭論不休.
做銷售出身的領導問這麼簡單小功能加不進去?
內心想過無數次辭職算了.改行干別的去.
真是不想幹了.
然而最後還在公司電腦前調著軟體硬體.
想了很久,我覺得我的人生也不會遇到什麼大富大貴的機會了.
老老實實做一個普通人吧.
什麼跑車,什麼豪宅,美人,應該跟我都沒什麼關係.
人的一切煩惱,來自於對現實世界無能的憤怒!
是的.
上面那些煩惱都是因為確實挺無能的.
如果不幹嵌入式我還能幹啥呢?
身邊各種各樣的人都有.各行各業的朋友都有.
有錢人有有錢人的煩惱,沒錢人有沒錢人的煩惱.
公司的老總.一個星期差不多有5天在出差.為了集資擴建廠房,到處找關係拉投資,在桌上應酬喝了多少酒,光我看到的醉成爛泥的就有好幾次.
辦公室一個同事,他老婆和他都是外地的,還有2個孩子,老婆沒有工作,負責在家看兩個孩子,他一個人的工資養活四口人.
我現在能做的,只能是通過我的努力,
用我掌握的技術融合一些創新的想法,
持續開發順應時代的產品.
給使用這些產品的人們,
帶來切切實實的方便,
這不就是嵌入式誕生的初衷嗎?
十年前的收款機長這樣
現在的收款機長這樣
很高興.在我和一群同事的共同努力下.
把公司的產品,甚至行業的產品.
帶到一個前所未有的高度.
隨著嵌入式技術的發展和進步.
還有很多很多行業可以被優化和改變.
人們的生活會變得越來越好.越來越方便.
這就是嵌入式存在的意義.
-----------------------------------------------------------------------關於未來
之前做這行迷茫過一陣子.
我自己趁著業餘時間逛科技論壇,
看國外的新發明.新概念,
自己也搞搞新的發明創造.
在wifi剛普及的時候,就做了手機控制家裡電器開關的APP.
有了嵌入式的基礎,玩玩Arduino上手還是很快的.
給自己做了一個自行車上的測速器和里程記錄器.
人體感應燈. 溫控濕度監視器. 電子秤, 還幻想過要不要搞個智能農場.呵呵呵
一些東西雖然沒有量產,但是身邊朋友用起來覺得很有意思,
在朋友眼裡我是個技術宅.
以後應該也會持續的搞點小發明,
未來,物聯網還是挺有前景的.
科幻片里的東西說不定真的有一天會變成現實,
前面說到的周立功先生------------------------------------
工作很多年以後,我去參加一個會議.
在國內是比較大的電子行業的一次峰會,
畢業這麼多年又偶遇了.
他還是那麼雷厲風行.
那天他在台上做了演講,講述他們從零到有研發示波器的常式.
受益匪淺,
會議結束後.我去跟他聊了聊天.加了微信.
以前需要仰視的偶像,現在的隔閡變得更小了一點.
覺得生活真是很奇妙.只要朝著一個方向持續的努力,總有一天會發生想像不到的事.
------------------------------------------------------------
最近在想要研究機械臂控制
機械臂可以給工廠生產提供幫助.解放工人.做一些重複,高精度.力氣大的工作.
但是如何把機械臂和家庭生活結合起來,
一直在思考...
沒有忍住來回答幾句。
我在通信行業工作了八年,一直從事的就是大家所說的嵌入式。在華為中興都待過,現在在一家小公司里,有個小職位。說說我自己的感受。1:嵌入式學起來難。不談Linux內核中的內存管理,任務調度機制,把C語言寫的清晰易懂易維護就需要一定的功底,這個時候還不談軟體架構,穩定性和擴展性。2:要學習的東西太多。硬體要懂一點吧(CPU,業務晶元等),彙編至少要看的懂,指針數組要理解透吧,不然搞個異常出來怎麼查?編譯原理,數據結構和演算法要懂吧!然後軟體架構設計要學習,你寫出來的東西至少邏輯清晰。編程語言至少要精通C,C++。3:工資高不高看公司,看能力,還有你的身體素質,扛得住加班啊!我曾經轉崗到網管部門用Java做前端,剛開始總是提出質疑代碼是否考慮內存的使用和效率,同事覺得我事多,說實話思維方式一下子還轉變不過來。
推薦一本書吧《深入理解計算機系統》,我每年都會重溫一遍,每次感受都不一樣。話說,我老婆我越看越覺得普通了,這本書卻越看越覺得屌。
呵呵,其實我水平爛的很。想寫個操作系統一直都寫不完。卸 @Kerr Wang 腰,
轉到嵌入式軟體部門已經有半年時間了,說實話還沒有入門,最大的感受就是嵌入式實在是太博大精深,沒個三五年是不可能完全掌握的。另一個大的感受是,IC廠就他么是個任勞任怨的保姆,底層驅動都幫你寫好,上層應用給你出個demo,甚至一些低端的寨廠他么板子都得幫你做好。。。然後求你快量產吧!額,好像跑題了!題主是要問嵌入式坑不坑是吧?答案是目前很坑。為什麼那?
其他答主已經說了,沒有對比就沒有傷害。跟目前大火的互聯網比確實挺坑,我很多同學快畢業隨便報了培訓班出來工資都比我高,我能怎麼樣那?我也很悲傷!
但是,但是互聯網行業為什麼工資高那?主要原因是互聯網快速發展,相應的人才培養沒有跟上,供不應求必然抬高價格,然而當大家紛紛轉去互聯網的時候,互聯網高薪還能持續多久?當做嵌入式的人越來越少,那企業如何招人?對,就是抬高嵌入式工資,而且你要知道,嵌入式可不像互聯網隨便培訓幾個月就能輕鬆上崗的喔!所以,你懂的!不請自來,爪機碼字,寫點感受。
先自我介紹一下,半路出家,目前已經從事相關工作近十年,一直開發單片機裸機程序,硬體略懂,軟體比較擅長。熟悉51,各路廠商的各種單片機,arm7,m3等,操作系統略懂ucos和Linux。開發出來的產品稀奇古怪,涵蓋儀器儀錶,家用商用電器,工業自動控制等等,頗多上市的產品。題主的描述中有和互聯網進行比較的部分,以我了解的情況來看,確實是實際情況,這個沒什麼好否認的,無論從收入水平,就業崗位數量上來看,嵌入式是不如互聯網的,有以下幾個原因:
1,幾個大公司拉高了互聯網的待遇水平,bat的起薪從應屆生的角度來講,還是有競爭力的。2,目前的環境來講,開發app,微信程序,甚至美工的崗位都很多,這個比例是遠遠高於嵌入式崗位的數量。3,相對來說,嵌入式的修鍊成本更高,時間更長,所以同等時間內,薪酬或晉陞會不如互聯網。當然其他原因也很多,不一一列舉,從事一門職業,沒有必要非得從別的職業上找優越感,比如說我的朋友,從事互聯網,現在輕輕鬆鬆年薪百萬,還算不是特別冒尖的技術人員,而在我這個層面上,一樣的嵌入式工程師,即使在華為,也需要相對出色才能拿到這個薪水(大家可以查查,07年左右進華為的,現在是大概一個什麼薪資)。所以嵌入式只能說比上不足,比下有餘吧,我這裡的上下,全指薪水待遇,不涉及高尚卑劣。嵌入式其實不分技術高低,這一行,你能做出來穩定可靠的產品,你就是nb的,操作系統玩得再熟,理論上再厲害,比如說做一個智能家電,你肯定是用不上的,你總不能開機就開好幾分鐘吧?所以適合的技術才最重要。
同時這裡引申出來的一個問題就是,嵌入式的產品也相對錯綜複雜,不像其他和軟體開發有關的工作,(比如說早些年的ERP系統,也是風光了好些年),相對更有體系和套路。萬能寶隨便搜一個智能硬體,有多少種啊,你擅長做四軸,那你不一定能做好機器人,你擅長做倒車雷達,那你不一定能做好自動泊車。你的經驗和閱歷,只能幫助你繞過一些坑,但是每進入一個新領域,嵌入式工程師有些開發和填坑的時間是怎麼也省不掉的。綜上,嵌入式可以說是一個坑人的職業,並不過分,但每個人對坑的理解不一樣,它同樣代表了機遇和挑戰,等題主真正在這個行業里摸爬滾打許多年以後,相信會有自己的另一番感受的。瀉藥
首先,題主的這個問題問的非常好,五個現象的分析很客觀。
「知乎大部分人眼裡的嵌入式:1工資低的不像話 2小學生乾的活 3學的要死要活的,付出很多,最後付出得不到回報,還不如趁早轉互聯網。」 這個觀點裡面初看有那麼一點道理,但是很多人從來就不想想,現在自稱是嵌入式工程師的,有幾個具有正兒八經的完整的知識體系的,大部分人眼中認為會玩點ARM,會點C語言,甚至連指針都用不熟的就是嵌入式工程師了。
那些個幾天嵌入式培訓課程上完,一點原始的技術積累都沒有,能拿著人家弄好的內核鏡像燒著玩,拿著人家的程序也能改幾行,大部分這樣的人實際上只是搬磚的,拿低薪也是正常的。
不過話又說回來了,現在很多小公司也只需要這樣的人打打下手的也就行了,主要是開發平台越來越先進,開發的成本越來越低,而且小公司壓根就不需要保證性能和可靠性,直接使用晶元提供商或者硬體提供商的評估板評估代碼改改就能用,並不需要去了解架構這些東西,只需最後的東西能工作就行了,你覺得這些工作需要什麼水準的人?我覺得這樣的工作讓小學生去干,確實是可以的。
但是嵌入式開發真的就這麼簡單嗎?我一個師兄在華為無線部門,上次聊了會天,他們給設備寫代碼增加功能,代碼功能一加再加,但是要求編譯出的二進位文件體積和程序運行佔用的內存不能比之前的代碼大,因為新代碼要兼容舊設備,舊設備的flash和ram就那麼大,你增加了體積,舊設備就沒法用了,所以就得不斷的優化,甚至得到彙編級別,寄存器級別去優化。這要是換在小公司或者初創的公司的話,沒事,代碼體積增大了,換大存儲大內存完了咯,這樣他們需要的就不是嵌入式工程師了,或者只需要水平很低的所謂的工程師了,工資拿不高也是正常的。
這個時候有人就會說,那些大公司進不去啊,那沒辦法,自己水平低又不願意突破還天天抱怨那又有什麼辦法呢?但是有人會說,那些初創的互聯網公司要的人水平也不咋地,隨便培訓幾天工資就很高了。這個是真沒辦法,這個是由經濟情況決定的,互聯網經濟下熱錢多,投資人不差錢,自然給的就多,這個不是技術水平決定的,反觀嵌入式開發,實體經濟下滑,真正能開起大價格的只有大公司,從這個角度來看,嵌入式工程師的工資是很符合經濟規律的。互聯網公司的大牛的工資也很高啊,所以就得出結論,不論是嵌入式還是互聯網,真正能稱得上是工程師的工資都不會低,你看今年海康的嵌入式開發就比軟開高了1K。工資差異大的,只是那批打下手的,這個是經濟情況決定的,但是三十年河東三十年河西,誰敢保證互聯網經濟就不是一個泡沫呢?到那時,只剩下大公司能夠運營,情況你就可想而知了。仔細研究一下你就會發現,嵌入式的公司大多都是服務提供商,提供的是通信,基站等等行業,這些行業永遠都是不會垮的,所以在經濟危機當中,嵌入式行業不見得就是一個坑,中國可以沒有那些創業的電商,但是絕對不能沒有華為,中興這樣的公司。另一方面,現在智能硬體火起來了,你看各種智能家居,各種無人機,VR都需要嵌入式的支持,今年網易不是還有招硬體開發的么?到這裡,搞嵌入式的是不是心情爽了一點。總之一句話,不論哪一行,互聯網還是嵌入式還是其他行業,你要想不被淘汰,只需要一個字,「屌」,夠屌就行。
至於題主後面的現象分析,現象1和現象2這個是當前的教育環境與生產環境脫節導致的,體制導致的東西,這個誰都沒辦法的。儘管學校大搞產學研,但是都TM是假的,當年嵌入式課的時候,老師一直在那讀PPT,有些關於架構和編程的東西還講錯了,嵌入式實驗課的時候,第一節課發一份pdf文檔教大家ADS軟體是怎麼用的,這個軟體ARM公司當時都不再提供支持了,我的Win7電腦裝都裝不上。第二節課的時候每人發一塊板子,我記得是OMAP138的,給了一個bin文件,燒進去看看現象,代碼都沒開放,這叫上課,這TM在逗我,不過我也不需要那些個實例代碼,因為我自己也可以寫,成功裝個逼,要不是先前自學了點,還真被忽悠的一愣一愣的,覺得嵌入式開發就是拿著bin文件燒著玩。
教育體制的東西就不去吐槽了,所以么,自己心中要有數,知道自己該學什麼,該幹什麼。
問題5前面最前面分析的差不多了,不說了。
至於問題3和問題4,那是自己的問題了,其實很多人都知道問題在哪了,就是不去做不去改啊,老西醫就要說一句了,別治了,已經治不好了,沒救了,等死吧。
本科階段是打基礎的時候,廣而學之,這是很重要的,開闊眼界,串聯各個技能樹和知識體系最重要的階段,培養自學能力和查找資料能力最重要的時候,大一大二的時候就是培養這個能力的,這個時候很多東西自己都要有個概念,什麼叫有個概念,就是這個東西你知道名詞,你知道它是幹什麼,但是可能對細節不了解,這個沒關係的,當你遇到一個任務或者需求的時候,因為你知道每個東西是幹什麼的,你就知道用什麼東西去做,至於細節上怎麼去操作,查啊,網路這麼方便,至於怎麼查,這個時候就是名詞的作用了,這個才是你大一大二甚至大三上學期真正應該掌握的能力了,後面的時間就是不斷的深化和實踐。不要覺得本科的理論課程不重要,記住啊,是理論課程,你應該清楚理論課程都是在大二的時候結束的吧?他們的目的是什麼,目的就是通識,需要你去掌握概念,你要是現在問我,小信號放大怎麼實現,我不一定馬上就能答得出來,但是我可以去百度三極體,靜態工作點,直流通路,交流通路,小信號模型,運算放大器,同相放大,反相放大這些東西了,很快就可以給你一個電路,這就是概念的重要性,但是如果你不知道三極體這個名字或者你也不知道三極體的作用,你告訴我,你拿什麼關鍵詞去查,關鍵詞理不理解?當然,你要是夠聰明,直接查放大器就行了,當然這裡只是舉一個例子而已,不必當真。前一段時間啊,由於一定的需要,去看了一下《數字信號處理》和《現代譜估計》裡面的AR模型,伯格演算法,時頻域分析,為什麼呢?因為我知道要這麼干啊,卧槽,看一下還真TM有用,當然啦,這幾門課當年都是學過的,我知道要這麼干,所以我就去看了AR估計,深入了解了一下細節,然後去吹牛逼吹得很是牛逼啊,要是不知道這些個概念啊,這個牛逼啊,它就吹不起來了……
所以,對於現象3和現象4,最重要的能力不是你會寫幾行代碼,會玩點Linux,而是一個完整的體系,這個體系搭不起來,都是扯淡的。軟體工程師也要懂一點硬體啊,硬體工程師也要懂一點軟體啊,不是說精通,但是至少知道概念啊。至於這個能力怎麼培養,我也不知道,我能怎麼辦,我也很絕望啊。我可以猜出來,有人會說,我學校不咋地,學校軟硬體設施跟不上,我該怎麼辦?我也不知道啊,我能怎麼辦,我也很絕望啊,但是我只知道認真學就對了。不要覺得,其他學校就能怎麼樣,馬克思主義告訴我們,「人的主觀能動性是很重要的」,但是習主席又告訴我們,「空談誤國,實幹興邦」,所以還是趕緊幹活去了,哎,我能怎麼辦?我也很絕望啊……
一家之言,不喜勿噴!!!誰噴我,我就罵誰,老子TM這麼多年的馬列毛思想政治可不是白學的……我也不想說髒話啊,但是,我能怎麼辦?我也很絕望啊……我就是所謂的「大神」,16年畢業,實習加工作一年多後準備18考研,下面是我勸師弟不要入坑寫的,歡迎廣泛討論,我也是一家之言而已。
#為什麼我跳出單片機的坑?#
1、單片機發展趨勢
現在硬體發展得很快,嵌入式(嵌入式範圍很廣,包括單片機、linux、Android等方面的開發)漸漸地會向計算機那邊靠攏,因為現在晶元性能強勁和價格的下降,我預想單片機會發展成為樹莓派那樣子的模式,用一些高級語言進行開發,計算機的同學很快可以上手,那學習單片機其實沒有什麼優勢。你說那我這麼多年操作寄存器的總該比他們強吧?漸漸地我看到一些廠商開始封裝寄存器,留下一些介面來給外面的開發,不給你操作寄存器了,原廠自動會給你這樣子做,這樣子加快開發者的上手速度,例子:ST公司的庫函數、我接觸到一些藍牙晶元的根本就封裝起來,給你個介面手冊而已,沒有寄存器、wifi模塊也遇到過直接封裝起來。計算機的同學在編程方面有優勢,加上軟體操作性會更強,因此建議你上手樹莓派,搞搞演算法,反正跟單片機一樣都是工具而已,你真的有必要在工具上花很多時間嗎?「底層你們不用管,我來搞定就好」——藍牙廠商對一個做演算法的同學如是說(小米旗下公司)。一些大客戶晶元廠商已經排技術人員幫忙加快進程,根本不用公司自己弄底層。有人說,「那你可以去那些廠商給你的計算機同學做封裝」,那崗位少很多啊!競爭也激烈很多啊,人生已經如此的艱難......
給出兩個本可以用嵌入式開發,但是在不差錢和設備少的情況下用台式機+windows系統,想想統一平台,高級語言真的是方便。
圖書館借書機
友寶零售機,死機了。。。
2、單片機就業行情
現在單片機就業行情比不上計算機,但是還可以,因為還沒有真正發展到我預想中不用操作寄存器的地步,計算機的同學沒有辦法搶你飯碗,等到那天真的到了,還有救?不過計算機的同學估計也沒有興趣吧。我看電子論壇上面搞單片機的大神也是過得還好而已,沒有達到我覺得更好的程度。人總要順應潮流,不然就是秋後的螞蚱。這樣的一幕經常讓我心驚,三四十歲,拼不過公司二十七八歲的年輕人,他沒有家庭,加了班比誰都狠,你抱著老闆的大腿加班給他看,讓他不開你,否則你下個月的房貸就還不上,周末還在微信上曬調試板子的圖片,老婆一旁對你嗤之以鼻,最後你還禿頭。「我面試了一些工程師,有好些技術都不錯,50多歲微信朋友圈裡時間線上都是開發板/項目板子及調代碼的畫面。東莞這邊也就喊價月薪1W到1.5W之間,看著就覺得凄涼。好些搞了一輩子連個代步工具都沒有,近40歲才結婚的也有。我司有個寫PLC的40歲了現在還沒老婆,感觸良多。」3、單片機真的有趣嗎?
我之前一直這樣子認為,可是樹莓派也可以這樣子做啊,操作起來更簡單,雖然你還不能用樹莓派去開發產品(已經有,因為其性能非常強勁和價格逐漸降低,而且上手快)。為什麼不花點時間在演算法,比如機器學習,人工智慧,圖像處理,模式識別這些更加有趣的東西上面呢?打好數學的基礎。另外我也很心疼我自己去做這些重複,簡單邏輯的工作,白瞎了我這麼智能的大腦。這份工作是幹什麼呢?讀讀datasheet, 有庫抄庫,沒庫寫寄存器,實現一些邏輯功能,我覺得其實電腦程序也可以做這些工作啦,現在只是不成熟而已,有些廠家出的自動生成代碼的工具不就是雛形咯,現在雖說很難完全代替,將來可不一定(好吧,我承認有點遠)。我也知道有些嵌入式程序也不簡單,但是總體對比做演算法還是白瞎我的智能大腦。
上面推薦樹莓派是給那些喜歡實踐操作的,不喜歡就一台pc就可以做很多實驗了。
每做一個產品換一個MCU,在邏輯之間遊走的我終於受夠了。
另外說下為什麼要順應潮流: 作為個人的命運是很卑微的,人來此世上一遭很多東西都是身不由己,很多時代碾壓個人的例子比比皆是,比如文革讓很多知識分子一下子進監獄,社會階層固化讓一些職業的人成為另外一些人的奴隸,幹得更苦,得到更少,人到中年,干著不喜歡的工作,錢不多的人比比皆是。從宇宙的觀點來說,不要說個人,地球都是很渺小的。所以來著世上幾w天,60年是2w天,最重要是明白自己來世上一遭要得到什麼,干成什麼,努力去做到。
鑒於你還是個學生,不想說太多。搞嵌入式薪水不算低,但性價比(收益/學習難度)的確是比互聯網低很多!另外,月薪20~30K的多得是。
謝邀。
Kerr Wang 已經回答得很不錯,我下面的答案僅僅作為補充,順便針對性的做一些探討。另外 牧羊不是犬 也稍微提到了我想說的東西。感謝很多答案讓我了解這個世界,也順便給 文藝程序猿 、 mianbier 和 神出鬼沒的七叔 的答案點了贊。
================================================================
下面回答題主的問題:「嵌入式是大坑」這種說法,和學生的的信息不對稱沒有太大關係,但也不能說完全沒有關係。
因為嵌入式本來就很坑,相對於互聯網(不是指計算機科學與技術(CS))來說那個坑多得簡直是難走。不過相對於純電子電路、機械、化工、醫藥、生物等工科領域,似乎倒也不錯。所以有時候會看到學機械的想轉嵌入式,學文科的想轉互聯網。
對了,題主描述的五個現象,很有意思,有些現象我自己本身就有很深的體會,有些現象我則聽都沒聽過,下面我會一一分析。
- 現象一
想從事嵌入式方向的學生,大部分是EE專業。在EE專業尤其是在二三本的EE專業,學好單片機是找工作的救命稻草。
第一個現象基本屬實,我本身也是電子信息工程專業出身。電子信息工程本科畢業去向,如果從工程師和研究生的專業方向來看,電子信息專業的方向大概有:
1、數字電子線路方向。從事單片機(8位的8051系列、32位的ARM系列等)、FPGA(CPLD)、數字邏輯電路、微機介面(串口、並口、USB、PCI)的開發,更高的要求會寫驅動程序、會寫底層應用程序。單片機主要用C語言和彙編語言開發,複雜的要涉及到實時嵌入式操作系統(ucLinux,VxWorks,uCOS,Windows CE等等)的開發、移植。大部分搞電子技術的人都是從事這一方向,主要用於工業控制、監控等方面。
2、通信方向。一個分支是工程設計、施工、調試(基站、機房等)。另一分支是開發,路由器、交換機、軟體等,要懂7號信令,各種通信相關協議,開發平台從ARM、DSP到Linux、Unix。
3、多媒體方向。各種音頻、視頻編碼、解碼,mpeg2、mpeg4、h.264、h.263,開發平台主要是ARM、DSP、windows。4、電源。電源屬於模擬電路,包括線性電源、開關電源、變壓器等。電源是任何電路中必不可少的部分。5、射頻、微波電路。也就是無線電電子線路。包括天線、微波固態電路等等,屬於高頻模擬電路。是各種通信系統的核心部分之一。6、信號處理。這裡包括圖像處理、模式識別。這需要些數學知識,主要是矩陣代數、概率和隨即過程、傅立葉分析。從如同亂麻的一群信號中取出我們感興趣的成分是很吸引人的事情,有點人工智慧的意思。如雷達信號的合成、圖像的各種變換、CT掃描,車牌、人臉、指紋識別等等。7、微電子方向。集成電路的設計和製造分成前端和後端,前端側重功能設計,FPGA(CPLD)開發也可以算作前端設計,後端側重於物理版圖的實現。8、其他方向。比如音響電路、電力電子線路、汽車飛機等的控制電路和協議。
其中,2、3、4、5、6、7,我不認為EE本科生畢業後可以從事這方面的工作。通信專業本科生估計可以去2通信方向。微電子專業本科生估計也可以去7微電子方向。那麼剩下的只能從事1數字電子線路方向和8其他方向了。
再看方向1、2、3,哪一樣不是涉及單片機或嵌入式晶元的開發?而且單片機也是電子信息工程所有學科中最簡單的一門課程了,不會單片機我都不好意思說自己是EE出來的了。
&(圖,電子信息工程專業涉及到的課程,星號(*)為我們學校不教的課程)
(圖,電子信息工程專業涉及到的課程,星號(*)為我們學校不教的課程)
當然,也可以考慮做硬體或PCB工程師,左手萬用表右手電筒烙鐵中間放個電路板,二層板四層板六層板層層遞進。然後問一句:老師,我可不可以不學單片機?老師不教育你一頓才怪。
所以,說單片機是EE本科生找工作的救命稻草,也不奇怪。更進一步的,我認為,以單片機為核心的電子系統設計才是EE學生的重中之重。這方面還有相關的比賽了:電子設計大賽和單片機設計大賽。(當然電賽有些題目並不是單片機為核心而是輔助)
- 現象二
學生基礎不紮實。說嵌入式是坑的大部分人有以下特徵:
1、學歷不高;
2、只會單片機,數電模電基礎不紮實,喜歡參與項目;
3、而且大部分項目,在網上都找的到,幾乎不用看晶元手冊編程。
- 現象四
(他們)沒有上升到Linux,在win裸機(?)中打轉,板子的bootloader甚至沒聽過,對自己的開發平台一無所知。
我重新梳理了題主的描述,不知道準確不準確。現象二和現象四我放在一起說:
這就對了,他們基礎不紮實,不會看晶元手冊,不會用Linux,Bootloader沒聽說過,想做嵌入式開發?沒門!坑死你!坑!坑!坑!
- 現象三
(他們)害怕跨專業。他們本專業課程(電路基礎,模電數電,信號與系統,高頻電路)學得非常一般,而軟體方向(編程語言、數據結構、操作系統)又沒有系統地學習過。因此在校招中因為軟體知識體系不過關而被刷掉,電路設計因為學校沒有很好的研究環境更是不堪一擊。於是認為嵌入式要完,學嵌入式找不到好工作。
依舊先梳理了題主的描述。如有理解錯誤請指正。
同我對現象二、四的評價一樣,CS基礎都不紮實,就想學嵌入式?!而且嵌入式本身是EE和CS專業知識的結合,在現在的本科四年中(實際上是三年,第四年大都出去實習了),EE的課程就是EE的課程,CS的課程就是CS的課程,時間對每個人都是公平的,今天學了EE的課程,就不可能再去學CS。(這裡的嵌入式特指基於Linux的嵌入式)
大一:
EE、CS都學C語言、數電;
大二:
EE學模電、高頻、單片機(微機原理)等,可學習畫電路圖和PCB;
CS可以開始演算法與數據結構、計算機組成原理,Java、前端技術HTML+CCS+JS等,順便可接觸SVN、git版本控制;
大三:
EE接觸電子系統設計、FPGA、DSP、ARM等;
CS可以接觸操作系統、編譯原理、軟體設計架構甚至人工智慧機器學習等。
Linux兩邊都會學,說EE不學Linux的反正我們學校在教ARM的時候順便教Linux了。
一般的EE專業學生,或者說我這種上了大學才知道單片機的學生,大學畢業時能把STC系列(或AVR系列)和STM32玩得非常熟練已經是很不錯的水平了!電賽和單片機比賽也僅僅需要達到用STM32的水平即可。如果還要分精力去學嵌入式Linux,兼顧EE的課程同時還要補CS的課程,不好意思,你要放棄一些東西,你的時間極大的不夠用!
EE學生大二在學模電、高頻、單片機的時候,CS學生已經在學數據結構、Java、前端技術或UI設計了。到了大三,EE學生開始接觸電子系統設計,CS學生可以嘗試設計Web頁面、搭建Web後台、開發APP等等。
而且嵌入式(廣義)領域卻是跨這兩個專業的知識!從嵌入式硬體開始,模電數電單片機(微控制器),到可以上小型嵌入式系統的STM32,到ARM+Linux,到最後用QT做UI設計,底層屬於電子,上層屬於計算機。所以一般來說,在嵌入式Linux領域,底層硬體是由電子出身的人做,上層軟體由計算機出身的人做。嵌入式操作系統則是作為一個中間層,隔離兩邊的技術知識,當然,如果項目大,驅動層也是需要有資深的工程師來做的。
「那麼既然現在嵌入式那麼火,我作為一個高中畢業生,本科階段想學嵌入式,好像電子專業和計算機專業的課程都不太合適,應該報什麼專業呢?」
這個問題問得好!這位同學,本答主推薦你去報考物聯網專業。從某種角度來說,嵌入式就等於物聯網。現在的時代是互聯網時代,未來的時代是物聯網時代~報了物聯網專業,你可以學習以下課程,包括電子專業的數電模電單片機(微機原理)、ZigBee(無線感測網路)、RFID,也包括計算機系的Java語言、網路通信(TCP/IP),當然也會有ARM+Linux嵌入式開發。當然這位同學你可能會問師資怎樣?這個你放心,物聯網專業的老師不是電子系的老師就是計算機系的原班人馬,他們擁有豐富的教學經驗,絕對不是那些新來的老師來任教物聯網專業。當然啦,前面也說過,某種角度物聯網就是嵌入式系統,本專業畢業的學生,上可做嵌入式系統軟體,下可做嵌入式硬體系統,可以用手機APP控制MCU做任何事情,你要是都不喜歡,還可以學好Java做物聯網設備的後台系統。我們這專業不用學高頻電路,也不用學什麼數字信號處理,拉普拉斯變換、傅立葉變換什麼的這些太高深了,可以等你到研究生階段在學,啊對了物聯網專業目前沒有碩士點,如果想報考研究生請出門左轉電子系或右轉計算機系。只要你肯努力學習,花百分之二百的時間,畢業後一定能找到一份高薪的嵌入式工作。如果找不到,說明你學習還不夠努力~
- 現象五
少部分人聲稱,學好了也沒什麼用,普通人干10年,最多就20w,和互聯網差太多,而且招的人少。題主調查發現,嵌入式人才供不應求。以拉鉤網為例,嵌入式3年經驗工程師,北上廣12k月薪以上遍地都是。3年或者5年工作經驗者,20k也比比皆是。從校招來看,海康華為等給的薪水,10k以上已經是非常普通。985研究生校招,14k以上也非常多,只是略遜互聯網,根本沒到要完的地步。而且聽很多hr說,他們非常缺嵌入式工程師,有招人難的問題。題主單獨私聊了幾位已經工作的嵌入式的前輩,大部分表示工作壓力不大,甚至不加班。尤其手上的項目一結束,就會有很大的空檔期。
這些少部分人的觀點,我先幫題主分析一下,「普通人」——我估計指的是普通的本專科生,研究生估計不在這範圍內(當然你們研究生硬要說自己也是普通人我也沒辦法~)。所以,嵌入式三年經驗工程師,12K月薪,一年算它發14個月的工資。12K乘以14等於16.8W,好像和20W有點差距,以後隨著工作經驗增長,也可以達到年薪20W了。985研究生,月薪14K,14個月,是19.6W,差不多了。畢業後就能達到20W,很不錯了。
但是這麼高的工資,也需要個人的長期努力和一定的機遇。
「和互聯網差太多」
截圖純粹隨手舉個例子。「和互聯網差太多」,這觀點我認為是真的。題主所在學校如果有計算機專業或網路工程專業,畢業後可以打聽一下他們的薪資。我已經不小心聽到同學院網路工程的某朋友的薪資了,我就不說出來了。
「(嵌入式)只是略遜互聯網,根本沒到要完的地步。」
略遜是對的,誰也沒說嵌入式到要完的地步,這個是題主誤解。
題主如果有更多興趣可以去這個問題下面看看:為什麼在中國電子工程師的發展明顯不如軟體工程師方向?
雖然比較的是電子和軟體,但嵌入式,不就是夾在電子和軟體之間的東西嗎?
- 關於題主的補充現象
在EE專業中,代碼不是全部,還有電子硬體。對單片機操作,本質上也就是對寄存器的讀寫。
EE專業大都是用MCU開發,這些MCU代碼空間大的可以有64KB,小的可以去到4K、2K,標準的51隻有128位元組的RAM(可擴展)。在這種開發環境下,會不會那些鏈表、二叉樹、操作系統什麼的都不是重點了,數據結構和指針都有點不受重視。電賽和單片機比賽都不考這些。
所以你那位大神同學,看了一周的數據結構和操作系統,最後說到時候用到了再查,也沒什麼大問題。能用裸機實現的功能,為什麼還要上操作系統呢?鏈表在MCU中幾乎用不到,如果用到再去查就可以了。很多技術不一定能在項目用得上,大概了解就行了,而且大多數技術只需要會用就行,並不需要重新造輪子。有弊端嗎?當然有,學得不夠深入,對這方面技術一知半解,如果哪一天用到還必須翻出來看。
PS:操作系統不單單只有任務切換,還有內存管理、文件系統、網路設備和驅動管理,不同操作系統所包含的組件也不同。
================================================================
開頭提到,「嵌入式本來就很坑」,下面一一列舉為什麼說嵌入式是大坑。
- 坑一:開發平台不統一,呈現百花齊放。
有經驗的人都知道,要想玩51系列的單片機,可以裝keil C51,要想玩ARM系列晶元,比如STM32F1(ARM Cortex-M3核),就需要安裝MDK-ARM,雖然keil C51和MDK-ARM都是keil公司開發。但是兩個軟體都要獨立安裝。聰明的做法是讓keil C51和keil ARM共存,當然我曾經桌面上就有兩個keil軟體,再初學一點的:「為什麼我的Keil uVision找不到STM32的晶元啊!!!」
關於keil4的ARM與51的共存安裝方法:http://jingyan.baidu.com/article/3c48dd3491701fe10ae3585b.html
keil C51和keil ARM還好說,還都是在uVision環境下,如果想開發藍牙、ZigBee、用MSP430做超低功耗的產品。那必須使用IAR了。
&你們可能會說,keil和IAR只是開發環境不同,其核心思想還是單片機開發的思想,單片機軟體開發的本質就是對寄存器的讀寫。我曾經也是這麼認為,可是後來接觸到了CC2530(ZigBeeContiki)和CC2540(BLE),才發現並不能很快的上手,雖然TI公司的CC2530和CC2540都是基於增強型的51核晶元,但是要用ZigBee和BLE功能,必須在其協議棧上開發!我需要自學ZigBee和BLE的協議棧!
你們可能會說,keil和IAR只是開發環境不同,其核心思想還是單片機開發的思想,單片機軟體開發的本質就是對寄存器的讀寫。我曾經也是這麼認為,可是後來接觸到了CC2530(ZigBeeContiki)和CC2540(BLE),才發現並不能很快的上手,雖然TI公司的CC2530和CC2540都是基於增強型的51核晶元,但是要用ZigBee和BLE功能,必須在其協議棧上開發!我需要自學ZigBee和BLE的協議棧!最少我要知道怎麼使用!
這是坑二。
- 坑二:需要學習的東西多,如果是做項目需要學習,會拉長項目周期。
對比於互聯網,mianbier 說:「一個熟練的前端的成長周期大概是兩年」,我也認同這個觀點。CS專業學生大學四年里認真專研前端技術,本科畢業後是有可能進入BAT的。而EE,我大學時的德高望重的老教授還建議我們,我們這個專業(電子信息工程)去考研比較好。而後台,在我眼中,Java是目前最好就業的,有的人花幾個月學會了Java的SSH框架,就馬上去找工作了(小學生乾的活[doge臉])。
不過後台開發也形成了一個成長體系,複雜度不亞於嵌入式成長路線。
既然後台技術有那麼複雜的架構,為什麼我不認為其開發難度大?項目周期長呢?因為代碼的無成本複製+封裝提供介面。複雜的代碼可以交給資深程序員做,然後封裝起來提供介面給初級程序員(碼農)即可,人家最底層最核心的東西就是數據或演算法。而嵌入式,最底層的東西是硬體,CPU、內存、LCD外設等。如果對硬體底層有一層封裝(比如操作系統)還好,上層程序員不用了解底層的技術,底層程序員開發好後也只需要提供介面給上層即可。如果是裸機開發,不好意思,先看晶元手冊吧。然後如果換另一個晶元廠家,重新學習吧。「重新學習」是指,比如說我知道單片機有定時器,我知道怎麼用STC系列的的,但是HT(合泰)的晶元使用方法不用啊!我要學習如何使用!
- 坑三:相對於互聯網,學嵌入式需要花更多的錢和精力。
買萬用表、電烙鐵、示波器、邏輯分析儀要不要錢?打板、元器件要不要錢?再不濟的我不做嵌入式硬體,我就只做嵌入式軟體,買開發板要不要錢?買模擬器要不要錢?還好我學習ZigBee和BLE時是公司買的開發板。
關於模擬器,做嵌入式開發都要用到模擬器,用來調試嵌入式設備。JLINK淘寶上少說也要幾十塊錢,我還估計不是正版的,算了窮人還是用ST-LINK V2吧,便宜又不會掉固件。——沒有遇到過JLINK掉固件的問題?沒玩過STM32的吧?
而對比於互聯網,一台聯網的電腦足夠學習很多了,前端HTML+CCS+JS,後台開發比如Java,再配個安卓手機又可以開發APP,如果想做桌面應用程序,可學C++、C#等等。
- 坑四:相對於互聯網,不容易做出產品。
由於工作需要,我要獨立做一個車位鎖的原型。應用類似於下圖:
由於答主所處的公司並不具備硬體開發的條件,所以領導在網上找了塊主控板讓我嘗試,單片機代碼自己寫。市場上的車位鎖都是基於RFID或藍牙的,只能近距離控制,並沒有遠程控制,能用APP查詢車位鎖狀態的產品。我看了下買回來的主控板,基於STM32F051,板載GSM/GPRS模塊,NANO SIM卡槽、地磁感應感測器的主控板。我又默默的打開了keil MDK...
一兩個月後,這個車位鎖原型基本完工了,但是我不認為這個原型進行量產。主要有兩大問題。
- 功耗。我沒有考慮其功耗性能,鉛酸電池6V供電究竟能上下開鎖多少次?
- 請求和響應。由於前期設計和對GSM模塊不熟悉,對主控板的下行請求採用簡訊方式,主控板上行響應是HTTP請求方式。我自己在內網搭建了一個後台接收主控板的響應。雖然是每次請求都可以收到響應了,但是響應時間是10秒以上…
如果我還是學生,我估計這個產品拿去參賽至少還能拿個省獎,但是我已經不是學生了啊!!!
這個項目,做完原型後暫時沒下文了。也正如 mianbier 答案所寫的,我僅僅完成了基本功能,後面的東西沒得測試。坑!
對比於互聯網。一個月時間,我就可以設計出一個WiFi探針的後台管理系統,基於Python的Flask框架,已經部署在內網。雖然也只是一個Demo,但是我只要再重新規劃一下設計架構和梳理一下業務代碼。上線運行估計沒有什麼問題。
PS:
- 車位鎖到目前為止準備吃灰了,估計不會拿出去展示;WiFi探針後台系統拿去給客戶看都沒問題;
- 電子我學了四年,Python自學了一年,Flask框架半年。
- 最大坑:「嵌入式」這門技術涉及範圍太大太多太廣泛,以至於「此嵌入式非彼嵌入式」,有定義模糊、定義廣泛之嫌。
當然對嵌入式的吐槽肯定吐槽不完的,都怪嵌入式這領域涉及太廣泛。嵌入式系統的概念我只提三個關鍵字:可裁減的、專用的、計算機系統。我們也可以認為,嵌入式=電子+計算機。
有嵌入式開發經驗的人轉去做互聯網開發,會發覺互聯網的代碼真的很好寫!
前面提到的STC系列、STM32(Cortex-M系列)、ZigBee晶元和BLE晶元可以歸納到電子微控制器。要是上了微處理器,比如ARM公司的Cortex-A系列。配上嵌入式Linux,Android、Debian、Win CE等等,這些也屬於嵌入式領域,樹莓派等都算在內。
由於答主目前工作偏向於微控制器+後台開發,所以並沒有提及微處理器級別的嵌入式Linux。想了解可以參考 王錘錘 的回答及其它答案。
如果是做嵌入式Linux系統這個級別,我猜測,大多數人肯定是在大公司大企業,肯定有專門的硬體部門、軟體部門,硬體工程師、固件/驅動工程師、系統工程師、UI工程師、測試工程師等等,如果不是那麼你們公司的硬體產品估計是外包出去讓別的公司設計出來,然後自己寫軟體(很類似於自己買嵌入式開發板然後自己玩)。但是嵌入式的產品軟硬結合性非常強,能做嵌入式硬體的公司肯定也能自己做嵌入式軟體了,除非軟體涉及到高深的核心技術比如演算法。
回正題。嵌入式是大坑的說法,除了前面幾個開發問題以外,在很多情況下都是相對於互聯網行業,和學生對嵌入式不了解並沒有太大關係。為什麼不拿嵌入式和其它行業比較呢?因為嵌入式和互聯網,都同屬於計算機技術,同是編程寫代碼,都有程序員。
在互聯網公司做得有經驗了,可以出來創業,使用自己的伺服器或租一套伺服器就可以提供服務,小而美。
嵌入式行業則難很多,沒有人脈資源以及知道個上下游產業鏈關係,怎麼量產和銷售產品?當然,提供技術支持的不再此列,互聯網創業也可以做技術支持。
================================================================
開頭我說 Kerr Wang 寫得挺好的,真的是挺好的。比如
- 教育環境與生產環境脫節;
- 本科階段是打基礎的時候,要廣而學之、開闊眼界
- 學習時先有個概念,後期遇到了再去查資料
這些觀點我都很贊同。不過其他方面我發表一些不同意見。從「這個時候有人就會說」段落開始:
- 真正能開起大價格的只有大公司
那些初創的互聯網公司要的人水平也不咋地,隨便培訓幾天工資就很高了。這個是真沒辦法,這個是由經濟情況決定的,互聯網經濟下熱錢多,投資人不差錢,自然給的就多,這個不是技術水平決定的,反觀嵌入式開發,實體經濟下滑,真正能開起大價格的只有大公司,從這個角度來看,嵌入式工程師的工資是很符合經濟規律的。
前面部分我基本贊同,互聯網創業熱錢多,公司不差錢,所以能給程序員開出高薪,這是經濟情況。
不過後面,我就不贊同了:「反觀嵌入式開發,實體經濟下滑,真正能開起大價格的只有大公司」BAT這些大公司也能開大價格啊!為什麼說得好像只有嵌入式大公司在實體經濟下滑下可以開高薪,互聯網大企業不可以?要比較就要互聯網大公司和嵌入式大公司比較,不要拿互聯網創業公司和嵌入式大公司比。
然後後面說「嵌入式工程師的工資是很符合經濟規律的」,這一點也不符合好吧?
- 海康的嵌入式開發就比軟開高
互聯網公司的大牛的工資也很高啊,所以就得出結論,不論是嵌入式還是互聯網,真正能稱得上是工程師的工資都不會低,你看今年海康的嵌入式開發就比軟開高了1K。
還是和前面一樣,前半句,Kerr Wang 的意思是「大牛的工資都很高」,這論點我也贊同。
但是後面,海康的例子就不太好。我依稀記得在年級畢業群里看到一條關於汽車4S店招聘程序員的信息,你們猜我們的網路專業和計算機專業的同學怎麼回答:「去4S店做程序員,工資能有多高啊?」
海康威視,最主要的業務就是旗下的視頻監控產品,而開發測試這些東西就需要相關的嵌入式人才。做軟體開發的也只是輔助其業務,你要說你一個打輔助的去搶ADC人頭,隊友不罵死你才怪!
嵌入式開發比軟開工資高,也和公司的主要業務有關。
大牛工資高。這點沒錯,但是和海康的嵌入式開發和軟開高1K有什麼關係呢?
- 關於互聯網泡沫。
工資差異大的,只是那批打下手的,這個是經濟情況決定的,但是三十年河東三十年河西,誰敢保證互聯網經濟就不是一個泡沫呢?到那時,只剩下大公司能夠運營,情況你就可想而知了。仔細研究一下你就會發現,嵌入式的公司大多都是服務提供商,提供的是通信,基站等等行業,這些行業永遠都是不會垮的,所以在經濟危機當中,嵌入式行業不見得就是一個坑,中國可以沒有那些創業的電商,但是絕對不能沒有華為,中興這樣的公司。
照舊,我依舊同意前面:打下手的工資不高。「初級程序員」工資不高,在嵌入式領域,下面打雜的工資也不高。這是個人技術原因,而不是由經濟情況決定。
然後後面說互聯網泡沫。在歷史上,互聯網泡沫並不是沒有,根據 互聯網泡沫_百度百科 記載,其發生時間是在1995年至2001年之間。那個時候情況可想而知,無數碼農一邊上班一邊自學電路,想要轉行做模擬/射頻電路,「硬體越老越吃香,寫代碼只是吃青春飯」也是那個時候出現的。對了,地點在美國。[1]
但是,中國是在1994年才接入國際互聯網,查閱一下中國互聯網20年發展簡史[2]。也可以發現很多信息:
- 1994年,網景——第一家互聯網公司,現在已經消失。
- 1995年3月1日,楊致遠與合作夥伴在美國成立雅虎。
- 1995年4月,馬雲在杭州辦起中國黃頁。
- 1995年7月16日,亞馬遜剛成立,如今市值2600億美元。
- 1995年9月4日,eBay成立。網路拍賣模式。
- 1997年1月,張朝陽創辦愛特信ITC。
- 1997年5月,丁磊(26歲)自立門戶,50萬創辦網易。
- 1998年,門戶時代元年
- 1998年2月25日,愛特信更名為搜狐。
- 1998年6月18日,劉強東在中關村成立京東。目前是中國最大自營電商。
- 1998年9月4日,谷歌成立。
- 1998年11月12日,馬化騰、張志東、許晨曄、陳一丹、曾李青五位創始人共同創立騰訊。目前是中國最大互聯網企業之一。
- 1998年12月,四通利方與美國華淵資訊網合併,新網站取名新浪。
- 1999年~2001年,互聯網巨頭初長成
- 1999年9月9日,馬雲第三次創業,以馬云為首18人湊足50萬啟動資金,在杭州創立阿里巴巴。目前是全球最大電子商務公司。
- 1999年,陳天橋以50萬元啟動資金和20名員工為基礎,創立盛大。
- 2000年1月,李彥宏和徐勇等人在中關村創立百度。全球最大的中文搜索引擎。
- 2003年,電商崛起
- 2003年5月10日,淘寶網(C2C平台)創立。
- 2004年2月4日,馬克扎克伯格創立Facebook。
- 2005年2月15日,美籍華人陳士駿創立YouTube。
- 2006年3月21日,微博鼻祖推特TWITTER上線。
- 2006年5月15日,土豆網宣布完成第二輪850萬元風投融資。
- 2006年6月21日,前搜狐總裁古永鏘創立優酷。
- 2007年,網路遊戲公司上市熱潮
- 2009年11與1日,阿里巴巴創造雙11購物節。
- 2010年3月4日,王興在北京創立美團。
- 2010年月6日,雷軍重新創業,成立小米。
- 2012年3月,蘇寧宣傳線上線下融合,蘇寧易購發力。
- 2014年,京東、阿里巴巴上市。
- 2016年,映客、花椒、熊貓TV、鬥魚等直播平台崛起,一鍵直播成焦點。
看完上面互聯網發展史,你們覺得互聯網要完了嗎?互聯網作為一個新型的行業,不受制於舊的制度以及歷史負擔,同時加上有無成本複製和長尾效應等互聯網因素,軟體可能一時疲軟,但還是會回歸巔峰狀態。
嵌入式大公司也不一定那麼穩穩噹噹,比如諾基亞。當年的手機行業巨頭,我的第一部手機還是諾基亞E72呢,塞班系統。且不說現在都見不到諾基亞手機的身影,14年裁員事件,不知道有多少嵌入式工程師人心惶惶?現在我估計還在繼續裁員。
「中國可以沒有那些創業的電商,但是絕對不能沒有華為,中興這樣的公司。」——我也覺得非常正確!
- 網易招硬體開發
另一方面,現在智能硬體火起來了,你看各種智能家居,各種無人機,VR都需要嵌入式的支持,今年網易不是還有招硬體開發的么?到這裡,搞嵌入式的是不是心情爽了一點。
現在智能硬體火起來了,說明一件事情——硬體復甦,這個不是我發明的名詞。華爾街日報對這個名詞也有提到。而且還有人對硬體復甦存有質疑。硬體復甦是什麼意思?意思就是說,硬體曾經「死」過!死氣沉沉的死。
再說網易,看下圖:
硬體開發並不是網易的核心業務,賺錢的業務甚至不是郵箱,最賺錢的居然是遊戲!
打個可能不太恰當的比方,如果我在網易工作,網易發了8.9W工資給我,那麼大約有6.4W是遊戲玩家的錢……同學,趕快給陰陽師(網易一款手游)充錢,我今年的獎金全靠你啦~[doge臉]
網易創始人丁磊,1993年本科畢業於電子科技大學。電子科技大學啊!全國最優秀的電子大學畢業,居然都去搞互聯網了!!!你們覺得再繼續學嵌入式是不是大坑?是不是?!
但是且慢!丁磊是1993年畢業,而1994年中國才接入互聯網,一個剛剛萌芽的新時代,還沒有那麼多的相關技術,當然誰也不可能遇見如今的互聯網的繁榮。現在的情況不同了,互聯網這個金礦已經被開發了近22年,有人說互聯網紅利已經快要結束了,是選擇留在電子或嵌入式行業,還是去互聯網,也請三思哦。當然大牛都是高工資的~
- 關於總結
總之一句話,不論哪一行,互聯網還是嵌入式還是其他行業,你要想不被淘汰,只需要一個字,「屌」,夠屌就行。
沒有什麼反對意見。這點我和 Kerr Wang 看法一致。不過我再多加一條,選好方向,順勢而為。
小節的最後,答主我第一次對別人的答案評頭論足,由於 Kerr Wang 答案好壞參半,因為感覺整篇答案有認為嵌入式不坑之嫌,全都是個人原因、教育原因和經濟原因。特此針對某些觀點的發表自己的看法。如有冒犯,還請見諒。
===================================================================
最後我著重說幾點:
嵌入式的坑大都是相對於互聯網而言,嵌入式這個行業還是很不錯的,這是一個要運用到電子和計算機知識的領域。要在嵌入式領域裡如魚得水,一個必要條件是深刻理解計算機組成原理(或微機原理),還有也要熟悉各種開發工具、測試工具,熟悉操作系統、網路通信等。
同時,嵌入式也是一個被炒作的概念,14年培訓機構大肆宣傳嵌入式,不知多少學生不是進入培訓機構就是自己買開發板學習,可是自學的人又有多少人找到了工作呢?我並不是說自學嵌入式不好,而是感概年輕的時候誰沒有自以為是,自認為僅憑四年(三年?兩年?)的努力就可以學好嵌入式,找到高薪工作,走向人生巔峰?人家宣傳嵌入式高薪是為了讓你交錢進培訓機構學習!
另外,我認為本科畢業的和研究畢業的絕對不可相提並論——平台和視野不同,還有深度。
本科四年大都是打基礎,廣泛學習的階段,畢業出來後可能對自己的專業領域略懂皮毛,或稍微深入了解過某一點,四年時間裡不可能就完全熟悉了嵌入式領域的所有內容。畢業後肯定還需要在某方向加深學習,或者多做項目積累經驗,很多時候會接觸到以前完全沒有接觸過的嵌入式技術!這就是所謂的坑。沒有一定的項目經驗,得不到高工資,這就是所謂的坑。做硬體總會燒壞某些東西,做電路板不小心炸了電容,或者因為電容放電電到了自己,這也是所謂的坑。
而研究生,至少在某一方面深耕了兩年或三年,在這兩三年間挖坑無數也填坑無數,在技術上,視野及所處的平台肯定要比本科生高一個層次,學識深度肯定要比本科的深。很多東西別人認為是坑的在自己眼中則完全不是。這個時候已經具備了大神的身形。出來找工作身價自然就高。
如果真的喜歡嵌入式的或想進嵌入式行業的(特指嵌入式Linux級別而不是MCU級別),一讀研,再花兩三年時間磨練自己的技術;二如果不讀研就去嵌入式Linux公司做個兩三年四五年,這個時候也基本熟悉嵌入式是怎麼回事了。
參考資料:
- 《射頻IC行業為什麼這麼慘》.李一雷.鏈接:https://zhuanlan.zhihu.com/p/21800401
- 中國互聯網20年發展簡史
願意跟題主分享一下自己的經歷,希望對題主有幫助。
/*剛上研的時候就想,互聯網和嵌入式學哪個好?
自己本科學的自動化,學的都是模電、數電、微機原理這些硬體相關的課程,互聯網我懂啥?前端、後台還是移動端開發?HTML、PHP、Java還是Objective-C?我只會C語言啊媽蛋,演算法和數據結構、操作系統和計算機網路都沒學過啊!
可是聽他們說互聯網工資高?年薪竟然20W?卧槽,我要轉CS,為了錢我啥都幹得出來!
去圖書館借了兩本書,隨便看看就扔了——真心推不動,沒項目支撐啥都學不會,草,我還是老老實實接點嵌入式的私活和實習賺錢吧……
干著干著突然發現,原來嵌入式也挺好玩的呀,改一行代碼馬上就可以看到LED亮了、小車跑了、機器人動了,原來模電數電還真有作用?原來C語言還有這麼多玄機?原來還有嵌入式操作系統?卧槽要學的東西好多啊!
終於開始找工作了,好激動啊,跟著他們互聯網的刷點筆試題吧,卧槽怎麼互聯網面試一個也沒用?我要找不到工作了?好著急!
媽蛋,老子不找互聯網了……
來了個做智能交通的公司?產品佔全國70%份額?還有做無人機的?產品佔全球70%份額?做廚房家電的?做手機的?原來這麼多公司都要嵌入式?好多都沒聽過名字啊!不管了都投吧,工作都快找不到了……收到第一個offer了好開心!雖然只有12k,但差互聯網也不遠了,畢竟年薪也有18W呢!
就這樣,offer一個比一個好,最後也拿到了20W+的offer……
原來我也能拿20W,最重要的是做的是自己喜好而擅長的東西,好像也不比互聯網差太多?
*/以上就是一個搞嵌入式的研究生的找工作經歷。目前也算是在搞嵌入式,當然我也做驅動上層的軟體部分,基本就現在做的那塊,除了app不做,其他都有做,我之前也是純軟體的,做了些嵌入式的項目後,對現在的方向有了更加深入的認識,所以我不覺得是坑。任何方向只要搞專業搞深了照樣拿高薪,要比所謂很多的互聯網高。大疆華為嵌入式崗位很多,他們的待遇不用我多說了。老東家同組一個同事,最近跳到大疆,拿到一個將近60w年薪的包,這個算高薪了吧?其實不管是互聯網,還是傳統的嵌入式,都能拿高薪有好的發展。關鍵就看個人的能力,努力程度,個人的興趣和方向。互聯網大熱,即使底子不算很好也能高薪,但是風口一過很多公司裁員,再出來找工作的時候,那時的工資才是能力的真是反應。嵌入式這幾年行業不怎麼好,很多公司利潤不高,更沒辦法拉到風投,待遇相比起來確實要差點。如果智能硬體,ai, ar能夠起來,類似大疆的公司越來越多的話,相信嵌入式工程師整體待遇會好很多
能認識到是坑的說明信息已經對稱了。
目前知乎上關於類似問題的討論中,有一個觀點聽起來有道理實際上是自欺欺人: 你覺得學xx不好,賺不到錢,是因為你學得菜,你看某某大牛怎麼怎麼滴,年入多少多少萬。
這種觀點和"你之所以過的不好就是因為你不夠努力"一樣具有欺騙性。目前真實的情況就是這樣,沒錯,相對於互聯網,嵌入式是一個坑,雖然我的研究方向聽起來和嵌入式相關,但是實驗室的項目,導師的研究側重點均向互聯網方向傾斜了,而且這並不是個別現象。我的一個武大物理系同學,研究生階段剛開始就開始搞.net。我一個武漢理工測控系同學,研究生階段也主要搞java。即使華科那牛逼閃閃的國光實驗室,據說也沒有真正搞光電子研究。
回想起本科時一心一意搞硬體,參加比賽,覺得自己比計算機系那幫只會編程的人不知道高到哪裡去了,然而機緣巧合最後還是轉向了互聯網。
只能說,沒有坑或不坑,這都是歷史的行程。這個問題每個人根據自身的情況應該都會有不同的看法。就算嵌入式是個大坑也會有人毫不猶豫的往下跳,就算互聯網待遇很高也有苦逼的人存在。如果單單是為了找一份工資比較高的工作的話互聯網確實要比嵌入式要高,這一點是肯定的,但是有一點需要注意,全國的互聯網公司也不算少,能生實現真正盈利的公司有幾家?依靠優秀的互聯網產品創造價值的公司有幾家?他們大部分不都是靠融資來維持的么?嵌入式也好,互聯網也罷,每個領域都有各自優秀的企業,都能為這個社會創造價值,促進社會發展。我們應該考慮的是如和在一個領域做好,而不是在一個比較好的領域天天混日子。互聯網和嵌入式歸根結底就是兩種不同的技術罷了,並沒有什麼好與不好,坑與不坑的區別。但是同時也不要讓技術束縛了我們的發展,每個人的成長都是循序漸進不斷迭代的一個過程,不可能只憑藉一項技術就能一輩子衣食無憂。不斷地自我發展與自我完善才是我們應該做的。至於是不是坑應該不是我們需要關心的問題,我們要做的應該是想想到底要不要跳下去。
不是信息對不對稱問題,現實情況就是,相對於純寫程序,嵌入式的坑的確更大。
我發現,好書都是列舉大量例子,我從入門,調試,成本等幾個方面進行舉例比較兩者區別:(程序員寫JS的,嵌入式用STM32的。)入門:程序員入門是列印Hello world,嵌入式入門是點亮LED燈。我們先看一下兩者代碼://JS程序員:打開瀏覽器或node,即在JS環境中輸入就顯示Hello world
console.log("Hello world!");
//STM32嵌入式,點一個LED燈
int main(void)
{
LED_GPIO_Config();// LED 埠初始化
GPIO_SetBits(GPIOB,GPIO_Pin_0); //低電平,GPIOB0(LED0)燈亮
}
void LED_GPIO_Config(void)
{
/*定義一個GPIO_InitTypeDef類型的結構體*/
GPIO_InitTypeDef GPIO_InitStructure;
/*開啟GPIOB和GPIOF的外設時鐘*/
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE);
/*選擇要控制的GPIOB引腳*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
/*設置引腳模式為通用推挽輸出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*設置引腳速率為50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*調用庫函數,初始化GPIOB0*/
GPIO_Init(GPIOB, GPIO_InitStructure);
/*選擇要控制的GPIOF引腳*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
/*調用庫函數,初始化GPIOF7*/
GPIO_Init(GPIOF, GPIO_InitStructure);
/*選擇要控制的GPIOF引腳*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
/*調用庫函數,初始化GPIOF7*/
GPIO_Init(GPIOF, GPIO_InitStructure);
/* 關閉所有led燈 */
GPIO_SetBits(GPIOB, GPIO_Pin_0);
/* 關閉所有led燈 */
GPIO_SetBits(GPIOF, GPIO_Pin_7|GPIO_Pin_8);
}
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx-&>BSRR = GPIO_Pin;
}
//在啟動文件startup_stm32f10x_hd.s里有這麼一句話:
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
執行main函數之前,還要執行SystemInit函數,這個函數主要用於配置單片機頻率。(一般入門不會講這個,我也跳過算了~,大家知道有這麼一回事就好。)
/**
* @brief Setup the microcontroller system
* Initialize the Embedded Flash Interface, the PLL and update the
* SystemCoreClock variable.
* @note This function should be used only after reset.
* @param None
* @retval None
*/
void SystemInit (void)
{
/* Reset the RCC clock configuration to the default reset state(for debug purpose) */
/* Set HSION bit */
RCC-&>CR |= (uint32_t)0x00000001;
/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
RCC-&>CFGR = (uint32_t)0xF8FF0000;
#else
RCC-&>CFGR = (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
/* Reset HSEON, CSSON and PLLON bits */
RCC-&>CR = (uint32_t)0xFEF6FFFF;
/* Reset HSEBYP bit */
RCC-&>CR = (uint32_t)0xFFFBFFFF;
/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
RCC-&>CFGR = (uint32_t)0xFF80FFFF;
#ifdef STM32F10X_CL
/* Reset PLL2ON and PLL3ON bits */
RCC-&>CR = (uint32_t)0xEBFFFFFF;
/* Disable all interrupts and clear pending bits */
RCC-&>CIR = 0x00FF0000;
/* Reset CFGR2 register */
RCC-&>CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* Disable all interrupts and clear pending bits */
RCC-&>CIR = 0x009F0000;
/* Reset CFGR2 register */
RCC-&>CFGR2 = 0x00000000;
#else
/* Disable all interrupts and clear pending bits */
RCC-&>CIR = 0x009F0000;
#endif /* STM32F10X_CL */
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
#ifdef DATA_IN_ExtSRAM
SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */
#endif
/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
/* Configure the Flash Latency cycles and enable prefetch buffer */
SetSysClock();
#ifdef VECT_TAB_SRAM
SCB-&>VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB-&>VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
}
這些程序是不是覺得寫得很好呢,這就是外國人寫的STM32官方庫文件。要想用這些官方庫文件,就需要進行移植,這又是另外一個話題了。
總結,JS入門的第一堂課就是寫一句程序列印一句話,而STM32入門的第一堂課是:看原理圖--&>看寄存器--&>使用官方庫--&>點LED燈。前者所需時間不過十幾分鐘,後者所需時間從半天至一天不等,決定於學生之前的所積累的硬體基礎。(當然,51單片機點個LED燈還是很簡單的~不用配置那麼多~我之所以用STM32就是為了更好地嚇你們。)
調試:
舉例是需要背景的,各自拿個大約是相同進度的例子。(以下兩個例子我都獨立完成過。)JS程序員就在雲伺服器(CentOS系統)搭建一個nodejs+express+mongodb,最終搭建一個可以訪問的簡單網站。STM32的就搞個智能家居系統,最終實現在液晶屏上顯示溫度濕度,防盜防火的簡單模擬。具體開發流程我就不說了,我就說說,當我們遇到問題時,兩者是怎麼去debug:JS:
咦,按著別人教程來做,為什麼同樣是調用這個API,我會提示出錯?第一反應是:stackoverflow+google,基本能解決問題。STM32:
咦,為什麼我的液晶屏不亮呢?第一反應是:是不是沒通電?用電錶/示波器檢查一下電源引腳供電電壓是否正常。第二反應是:是不是程序問題?下載別人常式可不可以讓液晶屏工作,若不能證明是我的硬體有問題(轉A),若不能則證明程序還有問題(轉B)。(A)下載別人的常式之後,就開始檢查硬體問題。
第A1反應是:是不是引腳沒接收到信號?拿示波器/邏輯分析儀檢查一下信號是否都到達引腳。第A2反應是:是不是這液晶屏本身是壞的? 有條件就換一個液晶屏測試一下。第A3反應是:是不是我這塊STM32板本身有問題? 有條件就換一個板來測試一下。第A4反應是:是不是杜邦線接觸不良?換條杜邦線試試。第A5 反應是:看上去這個點焊得不太好,是不是虛焊?拿電烙鐵重新焊一下。......第A15反應是:今天是調不出來的,明天再調吧。請大家別笑,解決不了的bug,睡一覺就好的情況,硬體出現的頻率比軟體就多得多。(B)別人常式可以,我寫的程序不行,下載我的程序用JLINK進行模擬,debug。
第B1反應是:我程序是不是卡住在哪一步程序?設置斷點,模擬。第B2反應是:我寫的時序是不是不行?移植別人的時序,替換掉試試。第B3反應是,是不是我給液晶屏上電時間/初始化時間太短?延時調大點看看。第B4反應是:是不是硬體有問題? 嘆一口氣,跳回A類再找找。第B5反應是:要不把優化級別調低試試?......第B15反應是:今天是調不出來了,明天從頭再來吧。第n-1反應是:百度一下別人不亮是哪些原因,自己去從這些方面去debug一下。
第n反應是:這兩天還調不出來,就要找技術支持來幫幫忙了。總結:
JS程序員有初級的調試問題,別人都遇到過,stackoverflow+google基本能解決。嵌入式有初級的調試問題,絕對不會先google:Why my LCD not work?,別人是很難幫到你的。一般是帶著程序可能有問題的懷疑下調試硬體,帶著硬體可能有問題的懷疑下調試程序。難度係數絕對不是10+10這樣簡單地線性相加,而是10的10次方這樣的指數級難度上升。硬體的調試絕對比軟體要難,影響因素實在太多了。調試所需要時間,前者從幾分鐘到半天,後者從幾分鐘到幾天。調試難度的天壤之別,成了我轉行的最主要原因。
成本:
程序員,只需要一台電腦,伺服器,就可以開工的。來個舒服的椅子,再配兩個大屏,完美~嵌入式,請幫我配上,多少MHZ的示波器,邏輯分析儀,喂,採購晶元一定要買可靠的呀喂。所做產品精度越高,所需要的儀器就需要更高級,開始研發的費用極高。
程序做出來後,從一到一百萬的使用量,成本不會上升多少,伺服器擴一下?優化一下?
嵌入式的板子做出來後,從一到一百萬的使用量,代表著一百萬塊板的成本。你算一下研發成本與生產成本,誰更低?哪個更適合創業?這也是我轉行的另一個主要原因,寫代碼讓我看到更大的世界,更多的可能。(其實呢,轉行這個詞不太合適,畢竟我還是學生,還沒出來工作。)
總結:
其實這方面的討論已經有很多,大家可以廣泛閱讀,總結就是對於同樣是普通一般的人,程序員的入門門檻更低,調試難度更低,研發/生產成本更低,利潤更高。嵌入式的別哭,君不見,一山還有一山低,21世紀是生物的世紀。如果你興趣就是電子/嵌入式,請堅持,一樣大把錢賺。不管什麼專業,適合自己的就是最好的,興趣愛好是賺錢的第一生產力。
而我的興趣是賺錢,別跟我談信仰。從嵌入式開發滑向程序開發,感受到的是一種開發效率更高,調試效率更高的感覺,那種感覺如同墮落的快感,一發不可收拾。
知乎上好工作的排名大概順序是:去日本拍片&>自己興趣行業&>金融業&>程序員&>嵌入式&>其它。
那麼問題來了,最好的編程語言是MySQL還是Mongodb?理論上驅動開發的來這裡答下,沒在大公司,在小公司墨跡中!
大學不努力,畢業去培訓,而我去培訓了嵌入式!(-ι_- )現在工作兩年了,據我觀察就嵌入式與互聯網行業的中位數來說互聯網比嵌入式的高。而如果要說技術上那必須要嵌入式的高啊,看高通的文檔都看得要死要死的,從硬體到軟體,還好幾個晶元,好幾個操作系統:)而且資料還少!嵌入式是一個坑,坑在需要積累的東西太多,而且很重要的一點,積累那些東西來你又不能改你只是知道。像內核進程管理XXXX,你想改即使你改成了,也沒有任何人認同!相當沒有成就感的一個職業,當然你不要別人認同自己心裡有個價值觀也可以,做嵌入式的唯一的成就感可能就是我的公司牛逼……而不是我牛逼了!還有一個成就感就是,我事情少!相對來說互聯網行業,就好多了,直接跟需求對接(當然這也要看做的是什麼)。就是加班比較多!
來兩句對話:互聯網與上司上級:boss給你的任務市場給你的任務,你都做好了?你:沒有我只做了一半,但我天天加班!上級:哦 給你加工資上級:你這次改的東西有問題,程序有bug
你:重啟一下就好,而且bug已想到,已經改好上級:好樣的,給你加工資嵌入式與上司
上級:上次發的版本幾萬台設備里有幾台設備出現異常死機而且起不來了你:還在定位問題,實驗室模擬不出來啊上級:想辦法模擬你:……上級:小伙你最近在幹什麼?(看你很閑),幫我整理下部門資料你:我在看文檔!!好的!馬上……以前學校的一個老師,做了十多年嵌入式相關開發,硬體經驗、軟體編程、上位機開發一手抓,感受最深是他對整個系統、項目的思考和整體方案的設計,有些公司的產品弄了好久最後請他出馬修改方案,直接一看就能解決。舉一個例子,某產品使用紅外通信。他看了之後直接改成用電磁感應通信,解決產品的一個大bug。做這行技術上來了之後其實真的還是很不錯的哈哈。好好學習,不要糾結於用什麼單片機什麼開發板,把基礎知識學好,經驗多了工具也就慢慢會用了。講真,做嵌入式興趣很重要啊,太關注收入還是去其他行業好。我自己因為學校的原因從大一開始跟團隊的師兄們就接觸外面企業的項目,雖然很多都是玩具或者是物聯網方面的開發,不過有很多還是一些比較高端難度比較大的項目。從大一開始到現在,就單片機從一毛錢多的台灣單片機到幾十塊錢的f429各種類型都玩過,也拿過20塊錢可以跑一個安卓系統的arm晶元、或者imx283去做開發,用過java、mfc、qt去做上位機,甚至還試過用一種夾彙編c語言叫mimic,還自己寫過一個實時操作系統的調度器。到我大三我才開始意識到這都是在使用工具,核心還是我的那些思想經驗和基礎知識。以最簡單的單片機為例子,把那些匯流排和外設的知識搞懂了,開發軟體的基本操作熟悉了,一本數據手冊就可以開發了,不管用什麼單片機都是一個套路。像很多rtos,其實其調度器最核心的任務上下文切換,也是基於我們常用的那些數據結構和操作系統的知識實現的,很多只是一個從鏈表中刪減節點和添加節點罷了。我只是個還沒畢業的小菜鳥,我還是很熱愛嵌入式 ??哈哈哈哈,興趣真的是第一驅動力。我覺得那些說嵌入式是大坑的,估計是當初就被迫進了這個行業吧。真正喜歡的,終究還是想繼續留在這裡,比如說我就鐵了心不想進cs。
////////////20161213更新/////////////
參照美國過去的發展道路,互聯網浪潮過後出現了智能設備浪潮,並且智能設備方興未艾,遠遠沒有達到頂點。國內的情況也是類似,互聯網技術帶來了一波商業模式的快速升級。但國內的互聯網大佬們逐步發現商業模式創新難度加大,目前也先知先覺的向智能硬體上靠攏,VR、可穿戴、物聯網莫不是如此。硬體更考驗一個國家的工業基礎。以我們為例,開發了contex-A8的核心板設計,卻無法找到一家合適的代工生產廠家,因為BGA自動貼裝技術下沉的依然不夠,必須上一定規模生產才有利可圖。而自動貼裝技術的下沉對機械加工工藝(軸承、絲桿的硬度和精度)、晶元生產供貨(性能和成本)、編程經驗的積累(自動控制、參數整定、視覺等)都提出了較高的要求。當然,中國各方面的積累目前都已經在路上,能依靠的唯有我們自己腳踏實地。嵌入式將會成為新浪潮,而現在應該只是個開始。當中國充滿了腳踏實地的實幹家,成為上帝又有什麼不可能?至於我本人搞了10年單片機軟硬體設計。去年在我開發的 cortex-a8設備上,又開始學習linux編程技術,並且該產品明年3月就要上線運行了。
做自己喜歡的事情,堅持學習,不懈的探索,又有多少可能會變成現實呢?/////////////////////////////////////////////////我一直認為,真正的嵌入式工程師,是比軟體工程師更接近上帝的存在,因為我們能造實體和承載其上的靈魂。
我是學習電氣的,大學畢業後改行搞嵌入式。
05年剛工作的時候,搞單片機,自己畫板子自己焊電路,自己編程序。去電子市場買51開發板,因為板子不上電和售後吵架。多年的寒假一個人蹲在學校的實驗室里,守著雕刻機眼巴巴的等板子刻出來,A4紙大的板子要刻6個小時,殺毒軟體一彈窗電腦就卡,一塊板就刻廢了。
07年輔導學生獲得大學生電子競賽山西省一等獎,感覺摸著點單片機開發的門檻。
08年獲得節能減排設計競賽全國二等獎。雖然現在看來,作品很粗糙。覺得尷尬和無奈。
09年頂著壓力,拉下高校教師的臉皮,跑去企業里找兼職。每天12點下課,1點半跨過半個城市趕到公司打卡,只有20分鐘吃飯。兼職工資一大部分都做了路費。然而學校里練的花把式終究不夠用,經常覺得心有餘知識不足,尷尬和無奈。
10年在太原電子研究設計院,終於做出個成型的產品,雖然不完善但能實地用了,心裡很激動。
11年老婆懷孩子,推掉了兼職,專心守著老婆。
12年經介紹,進入一家公司兼職至今,開發了到目前最成功的一套產品,基於cortex-m3和cortex-a8。到16年賣了3000多套。
13年去清華參與進一個項目組,半年時間後無疾而終。理想照進現實,現實依舊是現實。從此養了個泡咖啡廳的習慣。
15年在學生中發現個好小伙,開始合夥開公司,主營業務是生產我自己設計的那些產品。
16年11月,在輾轉反側一周後,在答辯現場說出了我多年的努力和成果,那些反覆斟酌的話,自我一張嘴便一瀉千里,因為那就是我的生命。目前副教授公示已結束。
成為上帝的路上,註定會有更多的磨練。
今年我35歲。只是,我依然感覺到,這一切只是剛剛開始。畢業大半年了,入了嵌入式,計算機專業的,本科階段學的主要的專業課:
C/C++,數據結構,編譯原理,計算機組成原理,數模電,信號系統,操作系統,嵌入式系統計算機網路...也學了java,但java只是專業選修課,本身我就不喜歡java,也沒怎麼學,幾個室友為了能夠找到好一點的上層工作,都去花錢培訓了,也都找到了比較好的工作,我因為沒考上心怡的學校,沒選擇調劑,打算直接找工作。 思前想後,本身對上層開發就沒有太大興趣,我不太想成為那種只會寫邏輯調介面實現功能的程序員,而本科學的這些專業課不正是嵌入式的基礎嘛,入了國內一家手機廠商,做的system模塊,之前公司一直做的多是MTK平台,剛入職那會瘋狂看bootloader,打log,燒板子,研究boot流程,調試usb,OTG,嘗試porting代碼,自己研究新的feature,研究kernel panic,等等。覺得真的學到了好多東西,最近換了高通平台,又開始了新的學習。 說嵌入式大坑的,可能確實剛入這一行待遇不是很高,那是因為你確實啥都不會,純軟體可能稍稍學習一下就能上崗,但嵌入式的學習不是一蹴而就的,學習路線比較陡峭,首先C語言要過關,code都看不懂就別說嵌入式坑好嗎?然後要會看硬體原理圖還有各種spec,不要求自己能畫,但我們要會看,然後bootloader都不知道是什麼的別來談論嵌入式好嗎?再有就是要熟悉kernel的系統調用,要會對kernel進行裁剪優化,各個模塊的driver調試,就光一個kernel就夠研究好久好久了,如果做上層的兄弟們覺得底層太low,寫不了多少code,煩請read the fucking source code 好嗎?看得懂再來說嵌入式不行好嗎?(l我是Linus的究極無敵小迷弟) 第一次發言獻給嵌入式了,只想說上層和底層都很重要,都有自己發光發熱的點,沒有誰坑,只是底層比上層學習難度大,要求掌握的東西多,沒成長為master之前工資不像上層給的那麼誇張,但我喜歡這個行業,Somebody has to win, so why not be me?讓自己成為mater!匿了我現在是一家醫療設備廠商的嵌入式開發小組組長。嵌入式技術本來需要很強的技術積累,但是小廠的嵌入式工程師由於和硬體打交道,必會牽扯到很多雜事,你看似公司啥事都管,生產,研發,售後都會找你,但是最後發現這些東西並不能給你多大成長。 硬體設備很多調試不方便,一百台機器有一台出了問題,而且是幾率性的,你也很難找到原因,鍋卻是你需要背著。 小廠的嵌入式開發很多用上游的供應商方案,出了問題或者有新需求 ,你也就修修補補,很難有機會獨立寫整個系統。 還有,我感覺越老越吃香這種話真的是自我安慰下就好。
推薦閱讀:
※寧美國度等等組裝機真的那麼差勁?
※如何徹底的破壞一台電腦?
※作為底層碼農被精英碼農的成功事迹不斷鞭笞是什麼感受?
※如何評價我國的<神威.太湖之光>超級計算機獲得「戈登?貝爾」獎?
※不同型號的 CPU,是如何在生產線上被區分的?