錄播課程和知識付費機構(gòu)入駐教育寶網(wǎng)課平臺
公立私立幼兒園、中小學、職業(yè)學校入駐教育寶學校庫
研學、周末活動、冬夏令營機構(gòu)入駐研學活動子平臺
首先我想說的是不問出身,做嵌入式的同學,基本都是計算機科學、電子信息、通信類專業(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)系刪除。
點贊
收藏
稍后學習規(guī)劃師會與您聯(lián)系,請保證手機暢通