可以介紹下嵌入式軟體工程師和後台工程師這兩個職業未來的發展么 ?

個人感覺嵌入式工程師和軟體工程師在語言上個人感覺區別不大,能否請各位大神從知識儲備、薪資,未來工作過程中的所涉及的知識、未來的發展等方面來談談。

本人現在是准大三學生,軟體工程專業,學校是普通二本。現在實驗室里做關於嵌入式驅動的學習,可是我感覺和我以前的純代碼學習有太多的不同,迫切需要各位大牛的指導。現在我到底是專註後台學習,還是沿著嵌入式在老師的指導下學習。現在沒有考研的打算,從零開始學習嵌入式兩年我可以做到什麼水平(按照普通的發展規律推斷)。


作為linux驅動開發工程師,在遇到這個問題不能不回答一下,因為題主的迷茫無助,我曾經也

感同身受。

------

問題中關於嵌入式工程師和軟體工程師表述的並不是很明白,所以我姑且以我的理解來回答一下。嵌入式工程師從事一些設備的開發工作;你所說的軟體工程師,我的理解是從事Android/IOS 應用開發、網站前端後端開發、遊戲開發...;因為我只在嵌入式領域有一些經驗可供參考,所以只就嵌入式方向討論一下,至於非嵌入式的方向如應用開發、遊戲開發、BAT類似的互聯網公司相關互聯網行業內的開發工作就留給專業領域內的人士來回答吧。

------

嵌入式開發,分兩個大的方面來介紹,1.學習嵌入式開發需要哪些知識。2.嵌入式開發的職業發展

  • 學習嵌入式需要哪些知識。

首先什麼是嵌入式?嵌入式主要是指基於微控制器開發具有專屬功能的計算機系統,嵌入式設備是什麼?比如手機、醫療設備、交換機、路由器、汽車電子和智能穿戴設備等都是嵌入式設備。從事嵌入式開發的工作就是作為一名工程師開發上述設備所需的程序,意味著你需要不斷的與微控制器以及外圍晶元、外圍介面(USB、I2C、SPI、UART、SATA、PCIe等等)打交道。所以你的知識可以說都是和上面涉及到的東西相關的。

那到底需要哪些知識呢?

說到這我講講我自己的一些經歷和體悟。我上大學學習的專業是電氣工程及其自動化,我對自己的專業興趣缺缺。正好有個機會能進實驗室就去了,那時候從51單片機開始,用51單片機來模擬I2C、SPI、RS232這些協議同外部設備通信和控制一些如溫度感測器之類的感測器。那時候覺得特別神奇,特別好玩,整個暑假我都是在實驗室度過的。後來為智能車寫程序,和團隊一起參加比賽。比完賽之後覺得很迷茫,不知道到底該學習什麼,跟實驗室的老師聊過之後,我萌生了做Linux驅動開發的想法,於是我馬上做了一個決定,去參加嵌入式的培訓。培訓結束之後覺得自己只懂得一點嵌入式的皮毛,心裡也很虛,後來找到一份做VxWorks/Linux驅動開發的工作,算是踏上這個行當。雖然工作四年了,但是還是覺得自己所知有限,需要學習很多東西。這幾年陸陸續續的學習完善自己的知識體系直到現在。所以我想我的這種從迷茫困惑到有一點頭緒或許能給你帶來一些參考。現在說一下學習嵌入式都需要哪些知識。這些知識的重要性在我的工作中已經被反覆的印證過了,可以說滿滿的都是乾貨:

  1. C語言:這是基礎,基礎一定要紮實。
  2. 操作系統原理:作為計算機專業的想必你也是學過的,希望你是好好學過的。
  3. 計算機體系結構原理:不是讓你看ARM這樣體系結構手冊,而是要看那些告訴你為什麼這麼設計的書,比如Computer Organization and Design這本書。
  4. 基本的經典演算法和數據結構知識:這些數據結構和演算法的課都有,想必你不陌生。
  5. Linux 基礎:能熟練使用Linux
  6. Linux 系統編程:最好還是學習一下Linux下的系統編程。APUE這本書不錯。
  7. 網路基礎知識:最好能系統的學習一下計算機網路,掌握好網路相關的知識。掌握網路的知識絕對百利而無一害,只要你還端著軟體工程師這碗飯。
  8. 數字電路:不用說這是基礎
  9. I2C/SPI 這些簡單且基本的協議: 這個最好能自己做個小項目,自己寫寫程序調試一下。只看是沒有用的。
  10. 打好基礎很重要:上面說的這些知識都是基礎知識。對於一個剛畢業的想從事嵌入式方向的工作的新人來說,如果能很好的掌握了上面說的基礎知識就是很不錯的成績。然而很少有這樣的人,大多數人都學的淺嘗輒止,這部分人也包括我自己。
  11. linux驅動:可以看看《linux設備驅動程序》,還是要自己動手寫寫。

以上說的都是以linux驅動開發為前提的基礎,當然這些知識也適用於嵌入式領域其他方向,畢竟這些都是基礎知識。我的看法是,在你做項目的同時能學好這些基礎就很好了,基礎很重要。打好這些基礎,再去學習其它的相關知識也會駕輕就熟事半功倍,對以後的發展有很大的好處。我反覆強調基礎,希望你能認真的學習。當你學習完這些基礎之後,也做過一些項目,或者也已經進入了工作崗位那時候你就可以再次審視自己的知識結構然後決定學習什麼,想必那個時候你心裡的困惑比現在少很多,可能新的困難是能否堅持學習下去。不過這些都是後話,看看就好。

  • 嵌入式開發的職業發展。

  1. 驅動開發工程師:比如通訊行業路由器交換機基站相關設備。主要開發操作系統+設備的驅動模塊。
  2. MCU開發工程師: 開發手環這類智能設備,開發家用電器的控制程序等等。往往寫一些裸板程序,很少與操作系統結合起來。這類設備對動能簡單且單一,對成本十分敏感,所以基本上都是運行裸板程序。

其實嵌入式領域的發展大的方向發展我覺得分為上述兩個方面就可以了,能拿多少要看在什麼平台履職和自己的技術水平。

以上。

如有錯漏,望各位指正,共同探討。

最後,祝題主學業有成!


處女答這麼快就來臨咯。本人這兩方面都有涉獵,說一些自己的看法吧。我大學之前就開始做軟體方面的開發了。大學專業是電子信息工程,就是專業學嵌入式開發的,但是學校比較渣,教的還是avr,所以都是靠自學,大二一年把單片機玩的差不多了,大三開始搞嵌入式Linux驅動開發。這裡說一下,嵌入式編程的話其實分兩種,一種是嵌入式軟體開發,一種是嵌入式驅動開發。第一種就是根據驅動手冊進行開發,屬於應用層的開發。從這個角度來說,後端開發等等也是屬於應用層。這種開發你不需要深入了解底層的知識,只要有API手冊,就可以按照手冊進行相關開發。而嵌入式驅動開發,其實屬於底層的開發。所謂底層開發就是跟硬體打交道,距離硬體最近。如果是裸板的驅動,很好開發。但是驅動開發難就難在需要接入操作系統。就拿linux驅動開發來說,想要做好這種開發,你必須得對linux內核非常熟悉,這裡的熟悉指的就是對內核的各種函數,各種方法的熟悉。linux驅動開發我也是剛剛入門,給我的感覺就是,這裡太亂了,沒有規範。為什麼這麼說,首先,內核版本太多了,各種linux內核版本,不同的版本又會對函數進行各種封裝。可以這麼說,同樣的驅動,可以用好幾種方式實現,那麼你到底該用哪種?該用第幾級封裝的函數?可能也是因為我剛入門,所以感覺有些亂,如有大牛歡迎指導。

回到正題,這兩個方向哪個更有前途。其實這個沒有什麼可比性,上文已經說了,他們一個是應用層的開發,一個是驅動層的開發,最起碼在現在他們都是缺一不可的,就看題主對哪個方向更感興趣。

ps:本人雖然對驅動開發很感興趣,但是可惜技術積累還不夠,不能拿到很好的薪資,所以還是投入後端的懷抱了。預計五年後會轉行⊙▽⊙


兩年,看你的努力程度,還有你買的資料,嵌入式對硬體不用太熟悉,只要了解寄存器就行了,如果努力兩年,國內大部分企業你去應聘都沒問題


推薦閱讀:

現在做遊戲學習opengl還有必要嗎?
軟體外包,需求分析由誰來做?
作為一名軟體工程的本科生,怎麼培養自己對本專業的興趣?自己對於編程的確興趣不大
大學四年考證順序應該怎樣規劃?(普通大學的軟體工程)?
設計模式是不是有點太玄了?

TAG:軟體工程 | 軟體工程師 | 嵌入式系統 | 工程師 | 嵌入式軟體開發 |