嵌入式開發(fā)資料庫
輸入機構(gòu)/課程/服務名稱

一個嵌入式工程師的職業(yè)規(guī)劃

2021-12-09 11:15:39
# IT培訓 # 嵌入式開發(fā)



首先我想說的是不問出身,做嵌入式的同學,基本都是計算機科學、電子信息、通信類專業(yè)。剛畢業(yè)的本科生,就學到的知識,學校與非學校在起點上相差不多,大家在校園里學的都是那幾科,看的書也都差不多,如果不是很小就接觸計算機寫代碼,那畢業(yè)時的代碼量也都差不多。

而對于工程作業(yè)來說,對學術(shù)能力的要求沒那么高,只要有一定的學習能力,技術(shù)是很容易掌握的,大可不必對自己的學歷不夠自信。

對于嵌入式軟件工程師,一般是分成兩類,嵌入式Linux、嵌入式單片機,我這里只講單片機的部分,Linux的部分有機會再聊。


一. 認知的四個階段

1. 不知不知

在剛工作的第一年,基本是一個學習的過程,很難有有效的產(chǎn)出,這個階段是完成從一個生澀畢業(yè)生到企業(yè)員工的身份轉(zhuǎn)換,如果校園里接觸過比較多的代碼,看過類似Linux源碼那種級別的代碼,對你快速學習還是很有用的。

這時你寫的代碼,也能正確的點亮一個led燈,能實現(xiàn)老板的需求,可日后來看,肯定是慘不忍睹的,說難聽點,就是“像屎一樣”。但這時你還不知道這些,你甚至“不知道自己不知道”,你覺得自己表現(xiàn)的還不錯,可能偶爾會冒出“這個代碼這樣寫會不會更好”之類的念頭。

每個人都可能冒出這樣的念頭,不同的是,有的人念頭一過就去干別的了,刷刷劇玩玩手機也是一天;有些人,沒有讓念頭溜走,順著念頭走了下去,去找“這個代碼換一種寫法會不會更好”的答案。

2. 知道不知

找答案無非3個方式:問其他人(包括搜索引擎)、看書、看源碼。

你當然可以問其他人,但你不能總問其他人,而且其他人不一定什么都能解決。

你開始看源碼,你會發(fā)現(xiàn),源碼看不懂,隨便打開個開源項目,一行都看不懂。

你一定會嚇到,你想找本書來壓壓驚,隨便翻一翻,竟然發(fā)現(xiàn)自己“這個也不知道”,“那個也不知道”。

這也是好事,至少你已經(jīng)“知道自己不知道”了。

問人是*快*具體的;看源碼不能一蹴而就,大師的代碼我等凡人剛開始都是看不懂的,沒關(guān)系慢慢來,多看幾遍;看書是*系統(tǒng)的,如果你能帶著問題去看書中的具體章節(jié)當然就更好啦。

現(xiàn)在,你有了學習的動力,你要做的,是開始填補知識空白,還等什么,快開始吧!

3. 知道己知

上面列舉的三種方式,*系統(tǒng)也*有效的,當屬看書了,我這里推薦幾本書。

對于語言層面,當然*多用的是C語言,學校學的教材比如譚本《C程序設(shè)計》只介紹語法不說,還有很多誤導,堅決不要看了。我推薦你讀K&R版本的《C程序設(shè)計語言》,Bryant,R.E.的《深入理解計算機系統(tǒng)》,接著就是Andrew Koenig的《C陷阱與缺陷》、KennethA.Reek的《c和指針》、LinDen,P.V.D的《C專家編程》,對于C語言基礎(chǔ),這些已經(jīng)夠了。

看完這些,你*起碼了解了計算機程序到底是怎么一步步生成的,對語言、對系統(tǒng)又有了進一步更詳細的認識。

與此同時,可以看些實用性強的書,W. Richard Stevens的《UNIX環(huán)境高級編程》、《UNIX網(wǎng)絡編程》,把語言上的所學的進行實踐,了解編譯器編譯流程、Linux的基礎(chǔ)命令,固件的交叉編譯。注意,這2本書都很厚,不用強迫自己全看。

下一步,開始看你的專業(yè)相關(guān),你所在公司總有一個具體的方向,音視頻、圖像處理、家電等等,我從事物聯(lián)網(wǎng)安全行業(yè),當然最關(guān)注的是嵌入式軟硬件、網(wǎng)絡、安全技術(shù),那就要針對這3個方面找書了。

3.1 軟硬件

做軟件工程師也應該知道些硬件知識,模電、數(shù)電的基礎(chǔ)還是要了解的。

硬件架構(gòu),我用arm比較多,推薦看Joseph Yiu的《ARM Cortex-M3與Cortex-M4權(quán)威指南》,然后就是各個芯片的芯片手冊了,我還記得第一次看芯片手冊的感受,“天書!” 寫的都是啥,全然看不懂——后來我發(fā)現(xiàn)所有的芯片手冊竟然都是一個套路,只要看完一個手冊,再看其他的就很快了。

我還推薦你學習些FPGA的知識,用Verilog嘗試做些簡單的硬件設(shè)計,會讓你更深入的了解硬件的工作原理。

操作系統(tǒng)是一切軟件的地基,對于嵌入式操作系統(tǒng)的學習,推薦左忠凱的《FreeRTOS源碼詳解與應用開發(fā)》和FreeRTOS、RT-Thread的源碼。

3.2 網(wǎng)絡

先掃一遍《TCP/IP詳解卷1》,這些本科課程學過就掃一遍,沒學過就仔細看看了。

接著可以看實現(xiàn),我用lwip比較多,推薦看朱升林的《嵌入式網(wǎng)絡那些事》,配合lwip源碼一起看。這本書看完,可以看看《TCP/IP詳解卷2》和《TCP/IP詳解卷3》,這2本也都是神級科學家W. Richard Stevens的著作,超級厚,還是那樣不要強迫自己全讀完,有選擇的看。

3.3 安全技術(shù)(換成你自己的領(lǐng)域)

我這里只推薦一本密碼學入門,結(jié)城浩的《圖解密碼技術(shù)》,寫的通俗易懂,又不是特別深入,適合初學者,其他就要去找更加具體的資料了,讀者們從事各個領(lǐng)域,自然知道要找什么書來看。

對于與這些書,我希望你能帶著問題看,解決問題就合上,只看你感興趣的部分,其他的章節(jié)偶爾翻翻混個眼熟就好;另外,很多書都是翻譯過來的,有些表述并不準確,讀起來不是那么容易,我也沒有什么好辦法,只能勸你靜下心來慢慢看,反復看,多看幾遍;最后,希望你能邊看邊實踐,確認書中說的是對的,實踐了才能內(nèi)化成自己的。

為什么要“混個眼熟”?就是你要知道這本書還講了什么,以后有類似的問題,就可以來有目的的翻閱了。

我覺得吧,真正學的學會一樣東西,有下面這么3個階段,這3個階段可能不是線性的,尤其第三個,可能是你很久以后恍然大悟才能達到。

3.4 真正知道的三個階段

3.4.1 會用

比如那些網(wǎng)絡接口函數(shù),硬件驅(qū)動接口,你可以利用它們寫出沒有bug的代碼,完成了項目任務,那就是會用了。

3.4.2 了解怎么實現(xiàn)

會用之后就是學習它背后是怎么實現(xiàn)的,這時你就要去查深入些的資料,看深入些的代碼了,幸運的是,我們目前所能接觸到的問題,大部分在互聯(lián)網(wǎng)上都有答案,很容易就能找到,那些熱愛求知的前輩們早已經(jīng)為我們準備好了答案。

了解了實現(xiàn),你就可以對之前寫的代碼進行優(yōu)化了,你之前只能保證寫出的代碼沒有bug,現(xiàn)在你知道它為什么沒有bug了,遇到難搞的問題,你的思路會很開闊,馬上找到問題點。

3.4.3 明白為什么這么實現(xiàn)

第三個階段,就是你不單單要知道它怎么實現(xiàn),你還要探求它為什么這么實現(xiàn)。

比如TCP/IP,為什么要分那么多層,還有沒有其他的網(wǎng)絡協(xié)議棧,幾種協(xié)議棧不同之處在哪里,為什么其他協(xié)議棧就沒這么普及呢?

比如各類嵌入式操作系統(tǒng),為什么都宣稱自己又快又小,他們的性能怎么評估,技術(shù)上實現(xiàn)的不同點在哪里,各個系統(tǒng)的作者為什么要那么實現(xiàn)?

當你能「評估」一類方案/技術(shù)的幾種實現(xiàn)形式,說出各個形式的好壞差別,你就能做到融會貫通,在項目層面,你就知道如何取舍選擇了。

以上是認知的第三個階段,即不斷的學習,真正的學會。這個階段應當是貫穿整個職業(yè)生涯的始末,別人問一個問題,你第一時間的反應是”知道自己知道“,然后腦子里搜索答案。

4. 不知已知

買過很多書,看過很多書,你就形成了買書的習慣,看到一本新書,發(fā)現(xiàn)一本你沒看過的書,你就想買來看。

買來新書,抱著學習的激情翻看目錄,掃一遍,找到你感興趣的章節(jié)開始讀,邊讀邊發(fā)現(xiàn),咦,這說的不就是xxx原理嗎,在xxx那本書中介紹過啊,這作者怎么換了個說法又講一遍,這書真是買的多余。這時你其實不用怪作者,而是應該恭喜自己,恭喜你來到認知的第四個境界“不知道自己知道”。

你已經(jīng)不需要再過多的看基礎(chǔ)技術(shù)圖書了,遇到一個問題,你自然有自己的解法,你不知不覺將之前從很多書中吸收的知識融匯貫通,任意組合,付與實踐,而這些都是自然而然的事,你在解決問題時,不知道自己已經(jīng)在用那些曾經(jīng)學習到的知識了!

對于嵌入式領(lǐng)域的認知,我在這里引入一個問題,這是我認為的嵌入式技術(shù)里的問題,這一個問題能知道你處于上面哪個狀態(tài),這一個問題也足夠讓你“學海無涯苦做舟”了,如果能把這個問題詳詳細細說的明明白白,你的嵌入式能力已經(jīng)爐火純青,至少不會遇到技術(shù)層面無法解決的問題了。

“有2個設(shè)備A、B,通過網(wǎng)絡連通可交互數(shù)據(jù),其中A有外接按鍵,B有小顯示屏。

2個設(shè)備實現(xiàn)這樣的程序:A鍵盤上按下某個按鍵,B顯示屏將按鍵值顯示出來”。

請問:從A按下按鍵那一刻起,到B顯示屏看到按鍵值,”按鍵值“這個數(shù)據(jù)是怎么從A的按鍵傳輸?shù)紹的顯示屏的?


二. 升級打怪

寫了這么多,是不是學完這些就可以獨步天下了?

當然不是!這只是萬里長征的小小一步,這小小的一步在我看來,一般需要5-10年左右的時間,有些人只是有著一個念頭但從沒有抬起腳。

這一步什么時候邁都不晚,最難的是你有勇氣抬起腳。

邁過來后什么什么樣的世界呢?我引用吳軍博士的五級工程師劃分來說明你的職業(yè)規(guī)劃。


如圖,吳軍博士在他的很多書里提到這個五級工程師的劃分,我們剛剛說的,完成那些學習與解決問題后,基本可以說,你已經(jīng)站在這個金字塔的*底層了。

五級工程師,你好,你看這塔,一點也不高。

這個時候你該做的,不單單只是一心沉浸在技術(shù)的海洋知識的海洋里了,因為我們畢竟是工程師,而非科學家,要開始運用知識,解決實際問題,再解決更大的實際問題了。

解決更大的實際問題就要向著四級工程師邁進,這時你不單單要自己懂技術(shù),還要想辦法盡快把你的”魚“和”漁“授給其他人。

你還要學習管理知識,掌握與上、下級溝通的技巧,如何推動自身和團隊快速進步是你的挑戰(zhàn)。

對于三級工程師,除了具備4級工程師的能力,還需要能夠緊跟時代,預判市場,懂得營銷,不單單做得出產(chǎn)品,還能賣得出產(chǎn)品。

二級工程師是指能做出先前沒有的東西,世界會因為這多少有點不同,吳軍博士舉了這兩人作為例子:北極光風投的創(chuàng)始人鄧鋒、Google云計算的發(fā)明人迪恩(Jeff Dean)。我見識有限,所知甚少,嵌入式領(lǐng)域我能想到的人包括大疆的汪滔,柔宇的劉自鴻,這里大膽激進的把他們放在第二級。

第一級是開創(chuàng)一個產(chǎn)業(yè)的人,包括愛迪生、福特、貝爾等人。

各位應該好奇我處于第幾級呢,我給自己定在4.5級,目前我能獨立完成老板交代的任務,也在努力學習提高自己團隊的整體效率,產(chǎn)出更具創(chuàng)造性的成果。


三. 一點點建議

由于實際經(jīng)驗有限,我也在探索如何爬這個塔,不敢妄加定義,引人入歧途,下面只說一些個人看法,權(quán)當拋磚。

1. 博覽群書

計算機專業(yè)的同學不要只專研技術(shù),也要看看經(jīng)濟、政治、生物、天文、地理、藝術(shù)、醫(yī)學、歷史等等,要知道,計算機這門學問,誕生不過幾十年,放在人類歷史長河中,比前面那些簡直就是滄海一粟。

看雜書多的人理解力要比看的少的人強,看的多了,就會有一種「類比」的能力。

比如對于“面向?qū)ο蟆保绻趯W習面向?qū)ο笾?,你了解過亞里士多德的唯實論和他對「共相」的闡述,你就會理解的很快,跟本不用老師教思想,只用學學語法就行了,而且你免不了會在心里嘀咕,面向?qū)ο蟮脑O(shè)計者是否正是受亞里士多德「共相」啟發(fā)而設(shè)計出了這樣的軟件開發(fā)方法?

2. 慢慢的爬,聰明的爬

爬金字塔呢,就是攢的過程,很多人浮躁,學知識只學一半;有些人自以為聰明,總想找捷徑;有些人勤奮刻苦,但不得其法。

文章一開始我說過,工程作業(yè)不比科學家,是不是學校,*好不好都不是大問題,想想你本科接受的教育也才4年,況且4年只是有那么一丁點基礎(chǔ)知識,而工作是一場人生馬拉松,可不單單要跑4年的。

只要一個人有學習能力,就可以解決大部分遇到的問題,區(qū)別無非學的快慢、攢的快與慢。

有些攢的快些,N年后,他們被稱為「神」,這個比例是1%;

有些人攢的慢些,N年后,他們被稱為「牛」,這個比例是9%;

有些人基本沒攢什么,N年后,他們?nèi)允恰皋r(nóng)」,這個比例有90%。

N ≥ 20

不好意思,上面這個比例是我杜撰的,故意把「農(nóng)」的比例增大,目的是警惕自身,也希望讀者能警惕不要成為那90%。

進入那9%的「捷徑」就是慢慢積累,我們普通人只要堅持學習積累,就一定能達到。

進入那1%可能就比較有挑戰(zhàn)了,據(jù)我所知,好的工程師年薪會到百萬美金以上(股票+獎金),注意這僅僅是工程師,這個層次能達到*好,達不到也不要強求。

3. 多重構(gòu)

總結(jié)是使人加速進步、聰明進步的很好的手段,對程序員來說,對代碼*好的總結(jié)就是重構(gòu)。

重構(gòu)代碼能帶來至少兩個好處,一個是對公司的,優(yōu)化代碼,易于維護,日后有其他人接手會更快上手;另一個就是對個人了,誰重構(gòu)誰獲益,這是學習的*佳手段,如果你寫了10個項目,沒有重構(gòu)過一次,那你第11個項目用的數(shù)據(jù)結(jié)構(gòu)、模塊劃分方式可能和第1個項目是還是一樣的。

而如果你但凡重構(gòu)過哪怕一次,當你寫下一個項目時會更加得心應手高屋建瓴。

重構(gòu),不單單是為了優(yōu)化過去,更大的好處是指引未來。

這就是爬金字塔的方法,不斷的重復:學習-->實踐-->總結(jié),這個閉環(huán)。

全文完,希望你能從文中得到或多或少的啟發(fā)。


*文章內(nèi)容和圖片均來源于網(wǎng)絡,如有侵權(quán),請聯(lián)系刪除。

查看剩余內(nèi)容
loading
Hi,我是教育寶平臺顧問 添加我的微信,在查找或下載資料時,有任何問題,我會隨時為您解決~
loading
掃描二維碼 添加顧問微信

點贊

收藏

資深學習規(guī)劃師,免費幫您答疑解惑,定制學習方案
限時免費咨詢
喜歡此內(nèi)容的人還喜歡
  1. 對嵌入式技術(shù)的認知上產(chǎn)生了一些偏見
    攻略
    # IT培訓 # 嵌入式開發(fā)
  2. 單片機,又稱為單片微控制器
    科普
    # IT培訓 # 嵌入式開發(fā)
  3. 嵌入式開發(fā)是在嵌入式操作系統(tǒng)下進行的開發(fā)
    科普
    # 嵌入式開發(fā) # IT培訓
職位/薪酬更多
教育寶IT技術(shù)頻道
教育寶致力于打造中國最專業(yè)的IT技術(shù)學習平臺,為IT技術(shù)學員、教育機構(gòu)、從業(yè)者和上下游搭建連接、互動、交流和賦能平臺。