第一篇:嵌入式學(xué)習(xí)路線建議
嵌入式學(xué)習(xí)是一個循序漸進(jìn)的過程,如果是希望向嵌入式軟件方向發(fā)展的話,目前最常見的是嵌入式Linux方向,關(guān)注這個方向,我認(rèn)為大概分3個階段:
1、嵌入式linux上層應(yīng)用,包括QT的GUI開發(fā)
2、嵌入式linux系統(tǒng)開發(fā)
3、嵌入式linux驅(qū)動開發(fā)
嵌入式目前主要面向的幾個操作系統(tǒng)是,LINUX,WINCE、VxWorks等等 Linux是開源免費(fèi)的,而且其源代碼是開放的,更加適合我們學(xué)習(xí)嵌入式。
你可以嘗試以下路線:
(1)C語言是所有編程語言中的強(qiáng)者,單片機(jī)、DSP、類似ARM的種種芯片的編程都可以用C語言搞定),因此必須非常熟練的掌握。推薦書籍:《The C Programming Language》 這本經(jīng)典的教材是老外寫的,也有中譯版本。(2)操作系統(tǒng)原理,是必需的,如果你是計算機(jī)專業(yè)畢業(yè)那也就無所謂了,如果是非計算機(jī)專業(yè)的就必須找一本比較淺顯的計算機(jī)原理書籍看一看,把啥叫“進(jìn)程”“線程”“系統(tǒng)調(diào)度”等等基本問題搞清楚。
(3)Linux操作系統(tǒng)就是用C語言編寫的,所以你也應(yīng)該先學(xué)習(xí)下Linux方面的編程,只有你會應(yīng)用了,才能近一步去了解其內(nèi)核的精髓。推薦書籍:《UNIX環(huán)境高級編程》(第2版)
(4)了解ARM的架構(gòu),原理,以及其匯編指令,我們在嵌入式開發(fā)中,一般很少去寫匯編,但是最起碼的要求是能夠看懂a(chǎn)rm匯編。
(5)系統(tǒng)移植的時候,就需要你從最下層的bootloader開始,然后內(nèi)核移植,文件系統(tǒng)移植等。而移植這部分對硬件的依賴是非常大的,其配置步驟也相對復(fù)雜,也沒有太多詳細(xì)資料。
(6)驅(qū)動開發(fā)
linux驅(qū)動程序設(shè)計既是個極富有挑戰(zhàn)性的領(lǐng)域,又是一個博大精深的內(nèi)容。
linux驅(qū)動程序設(shè)計本質(zhì)是屬于linux內(nèi)核編程范疇的,因而是對linux內(nèi)核和內(nèi)核編程是有要求的。在學(xué)習(xí)前你要想了解linux內(nèi)核的組成,因為每一部分要詳細(xì)研究的話足夠可以擴(kuò)展成一本厚書。
以上只不過是大概的框架,在實(shí)際的開發(fā)中還會涉及很多東西,比如:交叉編譯、makefile、shell腳本等等,所以說學(xué)習(xí)嵌入式的周期較長,門檻較高,自學(xué)的話更是需要較強(qiáng)的學(xué)習(xí)能力和專業(yè)功底。只要能堅持下來一定會取得成功!
其實(shí)LZ可以到一些嵌入式培訓(xùn)機(jī)構(gòu)的網(wǎng)站上看一下他們的課程設(shè)置,就會在腦子里有個清晰的思路,比如華清遠(yuǎn)見的官方網(wǎng)站,上面的嵌入式內(nèi)容很豐富,嵌入式方面的信息更新也很迅速,沒事可以去轉(zhuǎn)轉(zhuǎn)。
嵌入式是一個比較大的概念,他有四個分支,至少我只知道這四個。
1、微控制器(單片機(jī)為例);
2、微處理器(arm為例);
3、dsp(數(shù)字信號處理);
4、soc(片上系統(tǒng)); 對于我們初學(xué)者而言,首先要學(xué)習(xí)單片機(jī),以51為代表,等你學(xué)好51之后,可以深入學(xué)習(xí)更艱難的東西;
當(dāng)然,并不是說你只需要學(xué)習(xí)單片機(jī);要想學(xué)好單片機(jī),你還得學(xué)c語言,得學(xué)匯編,得學(xué)一大堆應(yīng)用軟件;等到單片機(jī)能夠掌握的不錯的時候又需要自己進(jìn)行原理圖、PCB板的設(shè)計;還得掌握系統(tǒng)設(shè)計的工程管理什么的;比較多。。
單片機(jī)還是比較簡單的,等到學(xué)好之后,開始學(xué)習(xí)arm的時候,你就接觸的多了,什么操作系統(tǒng)啊、驅(qū)動編寫啊、內(nèi)核移植啊、應(yīng)用程序的添加啊、上位機(jī)的編寫啊,那個就多了,不過到時候你就全知道了。。
ARM+LINUX路線,主攻嵌入式Linux操作系統(tǒng)及其上應(yīng)用軟件開發(fā)目標(biāo):
(1)掌握主流嵌入式微處理器的結(jié)構(gòu)與原理(初步定為arm9)
(2)必須掌握一個嵌入式操作系統(tǒng)(初步定為uclinux或linux,版本待定)
(3)必須熟悉嵌入式軟件開發(fā)流程并至少做一個嵌入式軟件項目。
從事嵌入式軟件開發(fā)的好處是:
(1)目前國內(nèi)外這方面的人都很稀缺。這一領(lǐng)域入門門檻較高,所以非專業(yè)IT人員很難切
入這一領(lǐng)域;另一方面,是因為這一領(lǐng)域較新,目前發(fā)展太快,大多數(shù)人無條件接觸。
(2)與企業(yè)計算等應(yīng)用軟件不同,嵌入式領(lǐng)域人才的工作強(qiáng)度通常低一些(但收入不低)。
(3)哪天若想創(chuàng)業(yè),搞自已的產(chǎn)品,嵌入式不像應(yīng)用軟件那樣容易被盜版。硬件設(shè)計一般
都是請其它公司給訂做(這叫“貼牌”:OEM),都是通用的硬件,我們只管設(shè)計軟件就變成
自己的產(chǎn)品了。
(4)興趣所在,這是最主要的。
從事嵌入式軟件開發(fā)的缺點(diǎn)是:
(1)入門起點(diǎn)較高,所用到的技術(shù)往往都有一定難度,若軟硬件基礎(chǔ)不好,特別是操作系
統(tǒng)級軟件功底不深,則可能不適于此行。
(2)這方面的企業(yè)數(shù)量要遠(yuǎn)少于企業(yè)計算類企業(yè)。
(3)有少數(shù)公司經(jīng)常要碩士以上的人搞嵌入式,主要是基于嵌入式的難度。但大多數(shù)公司
也并無此要求,只要有經(jīng)驗即可。
(4)平臺依托強(qiáng),換平臺比較辛苦。
興趣的由來:
1、成功觀念不同,不虛度此生,就是我的成功。
2、喜歡思考,挑戰(zhàn)邏輯思維。
3、喜歡C
C是一種能發(fā)揮思維極限的語言。關(guān)于C的精神的一些方面可以被概述成短句如下:
相信程序員。
不要阻止程序員做那些需要去做的。
保持語言短小精干。
一種方法做一個操作。
使得它運(yùn)行的夠快,盡管它并不能保證將是可移植的。
4、喜歡底層開發(fā),討厭vb類開發(fā)工具(并不是說vb不好)。
5、發(fā)展前景好,適合創(chuàng)業(yè),不想自己要死了的時候還是一個工程師。
方法步驟:
1、基礎(chǔ)知識:
目的:能看懂硬件工作原理,但重點(diǎn)在嵌入式軟件,特別是操作系統(tǒng)級軟件,那將是我的優(yōu)
勢。
科目:數(shù)字電路、計算機(jī)組成原理、嵌入式微處理器結(jié)構(gòu)。
匯編語言、C/C++、編譯原理、離散數(shù)學(xué)。
數(shù)據(jù)結(jié)構(gòu)和算法、操作系統(tǒng)、軟件工程、網(wǎng)絡(luò)、數(shù)據(jù)庫。
方法:雖科目眾多,但都是較簡單的基礎(chǔ),且大部分已掌握。不一定全學(xué),可根據(jù)需要選修。
thec++programminglanguage(一直沒時間讀)、數(shù)據(jù)結(jié)構(gòu)-C2。
2、學(xué)習(xí)linux:
目的:深入掌握linux系統(tǒng)。方法:使用linux—〉linxu系統(tǒng)編程開發(fā)—〉驅(qū)動開發(fā)和分析linux內(nèi)核。先看深,那主講原理。看幾遍后,看情景分析,對照深看,兩本交叉,深是綱,情是目。剖析則是0.11版,適合學(xué)習(xí)。最后深入代碼。
主攻書籍:linux內(nèi)核完全剖析、unix環(huán)境高級編程、深入理解linux內(nèi)核、情景分析和源代。
3、學(xué)習(xí)嵌入式linux:
目的:掌握嵌入式處理器其及系統(tǒng).方法:(1)嵌入式微處理器結(jié)構(gòu)與應(yīng)用:直接arm原理及匯編即可,不要重復(fù)x86。
(2)嵌入式操作系統(tǒng)類:ucOS/II簡單,開源,可供入門。而后深入研究uClinux。
(3)必須有塊開發(fā)板(arm9以上),有條件可參加培訓(xùn)(進(jìn)步快,能認(rèn)識些朋友)
主攻書籍:毛德操的《嵌入式系統(tǒng)》及其他arm9手冊與arm匯編指令等。
4、深入學(xué)習(xí):
A、數(shù)字圖像壓縮技術(shù):主要是應(yīng)掌握MPEG、mp3等編解碼算法和技術(shù)。
B、通信協(xié)議及編程技術(shù):TCP/IP協(xié)議、802.11,Bluetooth,GPRS、GSM、CDM
A等。
C、網(wǎng)絡(luò)與信息安全技術(shù):如加密技術(shù),數(shù)字證書CA等。
D、DSP技術(shù):DigitalSignalProcess,DSP處理器通過硬件實(shí)現(xiàn)數(shù)字信號處理算
法。
說明:太多細(xì)節(jié)未說明,可根據(jù)實(shí)際情況調(diào)整。重點(diǎn)在于1、3,不必完全按照順序
作。對于學(xué)習(xí)c++,理由是c++不只是一種語言,一種工具,她還是一種藝術(shù),一種文化,一種哲學(xué)理念、但不是拿來炫耀得東西。對于linux內(nèi)核,學(xué)習(xí)編程,讀一些優(yōu)秀代碼也是
有必要的。
注意: 要學(xué)會舉一反多,有強(qiáng)大的基礎(chǔ),很多東西簡單看看就能會。想成為合格的
程序員,前提是必須熟練至少一種編程語言,并具有良好的邏輯思維。一定要理論結(jié)合實(shí)踐。
不要一味鉆研技術(shù),雖然擠出時間是很難做到的,但還是要留點(diǎn)余地去完善其他的愛
好,比如宇宙,素描、機(jī)械、管理,心理學(xué)、游戲、科幻電影。還有一些不愿意做但必須要
做的!
技術(shù)是通過編程編程在編程編出來的。永遠(yuǎn)不要夢想一步登天,不要做浮躁的人,不
要覺得路途漫上。而是要編程編程在編程,完了在編程,在編程!等機(jī)會來了在創(chuàng)業(yè)(不要
相信有奇跡發(fā)生,盲目創(chuàng)業(yè)很難成功,即便成功了發(fā)展空間也不一定很大)。
嵌入式書籍推薦
Linux基礎(chǔ)
1、《Linux與UnixShell編程指南》
C語言基礎(chǔ)
1、《CPrimerPlus,5thEdition》【美】StephenPrata著
2、《TheCProgrammingLanguage,2ndEdition》【美】BrianW.KernighanDav
idM.Rithie(K&R)著
3、《AdvancedProgrammingintheUNIXEnvironment,2ndEdition》(APUE)
4、《嵌入式Linux應(yīng)用程序開發(fā)詳解》
Linux內(nèi)核
1、《深入理解Linux內(nèi)核》(第三版)
2、《Linux內(nèi)核源代碼情景分析》毛德操胡希明著
研發(fā)方向
1、《UNIXNetworkProgramming》(UNP)
2、《TCP/IP詳解》
3、《Linux內(nèi)核編程》
4、《Linux設(shè)備驅(qū)動開發(fā)》(LDD)
5、《Linux高級程序設(shè)計》楊宗德著
硬件基礎(chǔ)
1、《ARM體系結(jié)構(gòu)與編程》杜春雷著
2、S3C2410Datasheet
英語基礎(chǔ)
1、《計算機(jī)與通信專業(yè)英語》
系統(tǒng)教程
1、《嵌入式系統(tǒng)――體系結(jié)構(gòu)、編程與設(shè)計》
2、《嵌入式系統(tǒng)――采用公開源代碼和StrongARM/Xscale處理器》毛德操胡希明
著
3、《BuildingEmbeddedLinuxSystems》
4、《嵌入式ARM系統(tǒng)原理與實(shí)例開發(fā)》楊宗德著
理論基礎(chǔ)
1、《算法導(dǎo)論》
2、《數(shù)據(jù)結(jié)構(gòu)(C語言版)》
3、《計算機(jī)組織與體系結(jié)構(gòu)?性能分析》
4、《深入理解計算機(jī)系統(tǒng)》【美】RandalE.Bryant DavidO''Hallaron著
5、《操作系統(tǒng):精髓與設(shè)計原理》
6、《編譯原理》
7、《數(shù)據(jù)通信與計算機(jī)網(wǎng)絡(luò)》
8、《數(shù)據(jù)壓縮原理與應(yīng)用》
C語言書籍推薦
1.TheCprogramminglanguage《C程序設(shè)計語言》
2.PointersonC《C和指針》
3.Ctrapsandpitfalls《C陷阱與缺陷》
4.ExpertCLanuage《專家C編程》
5.WritingCleanCode-----MicrosoftTechiniquesforDevelopingBug-freeCProgr ams
《編程精粹--Microsoft編寫優(yōu)質(zhì)無錯C程序秘訣》
6.ProgrammingEmbeddedSystemsinCandC++《嵌入式系統(tǒng)編程》
7.《C語言嵌入式系統(tǒng)編程**》
8.《高質(zhì)量C++/C編程指南》林銳
盡可能多的編碼,要學(xué)好C,不能只注重C本身。算法,架構(gòu)方式等都很重要。
這里很多書其實(shí)是推薦而已,不必太在意,關(guān)鍵還是基礎(chǔ),才是重中之重?。?/p>
第二篇:嵌入式學(xué)習(xí)路線
語言基礎(chǔ) 1.C 與 C++ A.《c reference》 B.《c++ 編程思想》 C.《effective c++》 D.《more effective c++》 E.《effective c++ stl》 2.軟件設(shè)計 A.《UML 2.0 Reference》 B.《設(shè)計模式-可復(fù)用的面向?qū)ο筌浖幕A(chǔ)》 C.《重構(gòu)》 D.《修改代碼的藝術(shù)》 E.《面向模式的軟件體系結(jié)構(gòu)》卷 1,卷 2,卷 3,卷 4,卷 5 3.Linux 開發(fā)基礎(chǔ) A.《鳥哥的 linux 私房菜》 B.《GNU make reference》 C.《Shell 編程》 D.《unix 高級環(huán)境編程》 E.《linux kernel development》 F.《深入理解 Linux 內(nèi)核》 G.《Linux 驅(qū)動程序開發(fā)》 H.《Unix 網(wǎng)絡(luò)編程》 I.《Linux 進(jìn)程間通信》 4.嵌入式開發(fā)基礎(chǔ) A.《ARM 體系結(jié)構(gòu)》 B.《ARM 程序分析與設(shè)計》 C.《ARM 嵌入式系統(tǒng)基礎(chǔ)教材》周立功 D.《嵌入式操作系統(tǒng)μC/OS》 E.《嵌入式 Linux 基礎(chǔ)教材》 F.《嵌入式系統(tǒng)設(shè)計》 G.《嵌入式硬件設(shè)計》 H.《Qt4 圖形設(shè)計與嵌入式系統(tǒng)開發(fā)》 I.《嵌入式系統(tǒng)中的實(shí)時概念》 J.《實(shí)時設(shè)計模式》 5.專業(yè)選看 A.FPGA 設(shè)計 B.《高性能嵌入式計算》 C.數(shù)字圖像處理,視頻編解碼基礎(chǔ) MPEG4,H.264,AVS D.Android,iphone,symbian 開發(fā)。
第三篇:嵌入式培訓(xùn) 嵌入式Linux學(xué)習(xí)路線
嵌入式培訓(xùn) 嵌入式Linux學(xué)習(xí)路線_粵嵌教育
有需求就有市場,伴隨著嵌入式的應(yīng)用領(lǐng)域越來越寬廣,嵌入式工程師的缺口與日俱增,嵌入式Linux培訓(xùn)也迎來了良好的發(fā)展環(huán)境和機(jī)遇。嵌入式Linux憑借其系統(tǒng)發(fā)展的成熟度、市場應(yīng)用的高份額也受到更多工程師朋友的青睞,越來越多的企業(yè)和研發(fā)機(jī)構(gòu)都轉(zhuǎn)向嵌入式Linux的開發(fā)和研究,眾所周知,嵌入式開發(fā)在IT開發(fā)行業(yè)中一直是比較火熱的職業(yè),特別是智能硬件的發(fā)展。智能硬件從軟件到硬件,每一階段都需要開發(fā)人員擁有超強(qiáng)的開發(fā)能力和豐富的經(jīng)驗。而對于智能硬件產(chǎn)品來說,他們的開發(fā)都是建立在龐大的嵌入式系統(tǒng)生態(tài)之上的。想學(xué)習(xí)嵌入式要要怎么做呢?來看看粵嵌教育分享的嵌入式Linux學(xué)習(xí)路線:
1、基礎(chǔ)知識: C/C++編程、數(shù)據(jù)結(jié)構(gòu)和算法、操作系統(tǒng)、軟件工程、網(wǎng)絡(luò)、數(shù)據(jù)庫等。雖科目眾多,但都是較簡單的基礎(chǔ),且大部分已掌握。
2、深入掌握Linux系統(tǒng):使用Linux、Linux系統(tǒng)編程開發(fā)、驅(qū)動開發(fā)、分析Linux內(nèi)核??梢园催@樣的學(xué)習(xí)順序,由淺及深,不斷的理解掌握核心內(nèi)容。
3、學(xué)習(xí)嵌入式Linux: 主要是嵌入式Linux開發(fā)流程,嵌入式Linux應(yīng)用開發(fā)、ARM體系架構(gòu)等。建議最好就是自己買一塊開發(fā)板研究,條件允許的話還是報粵嵌培訓(xùn)班吧,有專業(yè)人士帶進(jìn)步會比較快,還能認(rèn)識很多行業(yè)的朋友。
4、深入學(xué)習(xí):深入學(xué)習(xí)ARM、Linux內(nèi)核驅(qū)動、Android移植驅(qū)動等重點(diǎn)難點(diǎn)內(nèi)容,學(xué)習(xí)傳感器開發(fā)、ZigBee開發(fā)、藍(lán)牙開發(fā)、RFID等目前比較流行的嵌入式開發(fā)技術(shù)。
目前嵌入式就業(yè)比較熱門的領(lǐng)域有物聯(lián)網(wǎng)、智能家居、智能醫(yī)療、智能汽車電子、智能硬件產(chǎn)品開發(fā)等等,可以說嵌入式Linux無處不在。想系統(tǒng)學(xué)習(xí)嵌入式開發(fā),到粵嵌進(jìn)行嵌入式Linux培訓(xùn),教學(xué)課程涵蓋了嵌入式基礎(chǔ)、項目分析與立項、Linux核心操作與算法、嵌入式Linux系統(tǒng)編程開發(fā)、嵌入式GUI系統(tǒng)編程開發(fā)、ARM開發(fā)、嵌入式底層驅(qū)動開發(fā)、項目優(yōu)化與驗收再到就業(yè)與創(chuàng)業(yè)指導(dǎo)。
第四篇:嵌入式學(xué)習(xí)的正確步驟,嵌入式 嵌入式學(xué)習(xí)路線
004km.cn 達(dá)內(nèi)教育—中國IT培訓(xùn)領(lǐng)導(dǎo)品牌
嵌入式學(xué)習(xí)的正確步驟,嵌入式 嵌入式學(xué)習(xí)路線
嵌入式門檻雖然較高,但也跟其他事物一樣,并不是牢不可破。只要我們用心去對待,冬雪終將化去,春風(fēng)定會吹來。
具體步驟如下:
1、《C語言》第二版 譚浩強(qiáng);《C程序設(shè)計語言》第二版 徐寶文譯 機(jī)械工業(yè)出版社
你能區(qū)分開指針數(shù)組和數(shù)組指針嗎?你知道函數(shù)指針嗎?
你能區(qū)分開定義一個變量時系統(tǒng)給它分配的空間與用malloc()函數(shù)給一個變量分配的空間有什么不一樣嗎?
2、《數(shù)據(jù)結(jié)構(gòu)》C語言版 黃國愉、葉乃青編 清華大學(xué)出版社
你能合上書本,用C語言實(shí)現(xiàn)書中的單鏈表、雙鏈表數(shù)據(jù)結(jié)構(gòu)嗎?
3、《實(shí)用C++程序設(shè)計》第二板 中國電力出版社 Steve_Oualline著
此階段主要是學(xué)習(xí)其面向?qū)ο蟮木幊趟枷?,加深對C語言和數(shù)據(jù)結(jié)構(gòu)的理解。
4、學(xué)習(xí)單片機(jī),最好能找個前輩帶一帶。
你能用51單片機(jī)做出一樣實(shí)際的東西嗎?即使它再簡單!
要注意加深對中斷的理解。
5、學(xué)習(xí)ARM單片機(jī)。
(1)、細(xì)讀《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》周立工編寫(注:即使你不用書中的開發(fā)板)
(2)、細(xì)讀相關(guān)芯片的原版英文文檔。如:arm920TE.pdf S3C2410_1.2.pdf
6、學(xué)習(xí)uCOS!操作系統(tǒng)。
(1)、細(xì)讀《嵌入式實(shí)時操作系統(tǒng)uC/OS-!》第二版 召貝貝譯
你能把uCOS!移植到自己的平臺上嗎?
(2)、能編寫在uCOS!操作系統(tǒng)環(huán)境下運(yùn)行的針對具體硬件的驅(qū)動程序
004km.cn 達(dá)內(nèi)教育—中國IT培訓(xùn)領(lǐng)導(dǎo)品牌
7、熟悉Linux環(huán)境,學(xué)習(xí)Linux環(huán)境編程,學(xué)習(xí)交叉編程
(1)、細(xì)讀《linux命令大全.pdf》
(2)、細(xì)讀《GNU Make 使用手冊(中譯版).pdf》
(3)、學(xué)習(xí)創(chuàng)建交叉編程環(huán)境.8、學(xué)習(xí)Linux操作系統(tǒng)。
(1)、《UNIX環(huán)境高級編程》
(2)、可以到一些好的網(wǎng)站下載一些比較好的書籍
(3)、細(xì)讀《linux內(nèi)核完全注釋》
(4)、細(xì)讀《understanding the linux kernel 2》
(5)、利用源代碼閱讀利器工具“Source Insight”進(jìn)行真正的linux內(nèi)核原碼刨析
(6)、最后進(jìn)行內(nèi)核移植,并能編寫在linux操作系統(tǒng)環(huán)境下運(yùn)行的針對具體硬件的驅(qū)動程序
9、學(xué)習(xí)Linux設(shè)備驅(qū)動編寫??蓞⒖肌禠inux設(shè)備驅(qū)動程序》
10、復(fù)習(xí)C++,學(xué)習(xí)用QT進(jìn)行圖形界面編程
(1)、細(xì)讀《QT編程寶典》
(2)、學(xué)會通過查看QT電子文檔進(jìn)行QT GUI實(shí)地編程
(3)、學(xué)習(xí)交叉編程.(其實(shí)就是把命令qmake變?yōu)閠make)
11、當(dāng)然,你也可學(xué)習(xí)一下PCB的制作和設(shè)計一個自己的CPU(即軟殼)
在嵌入式軟件方面最重要的課程包括:
(1)嵌入式微處理器結(jié)構(gòu)與應(yīng)用:
這是一門嵌入式硬件基礎(chǔ)課程,我們說過,嵌入式是軟硬件結(jié)合的技術(shù),搞嵌入式軟件的人應(yīng)對ARM處理器工作原理和接口技術(shù)有充分了解,包括ARM的匯編指令系統(tǒng)。若不了解處理器原理,怎么能控制硬件工作,怎么能寫出節(jié)省內(nèi)存又運(yùn)行高速的最優(yōu)代碼(嵌入式軟件設(shè)計特別講究時空效率),怎么能寫出驅(qū)動程序(驅(qū)動程序都是與硬件打交道的)?很多公司招聘嵌入式軟件人員時都要求熟悉 004km.cn 達(dá)內(nèi)教育—中國IT培訓(xùn)領(lǐng)導(dǎo)品牌
ARM處理器,將來若同學(xué)到公司中從事嵌入式軟件開發(fā),公司都會給你一本該設(shè)備的硬件規(guī)格說明書(xxx Specification),你必須能看懂其中的內(nèi)存分布和端口使用等最基本的說明(就像x86匯編一樣),否則怎么設(shè)計軟件。有些同學(xué)覺得嵌入式處理 器課程較枯燥,這主要是硬件課程都較抽象的原因。還有同學(xué)對ARM匯編不感興趣,以為嵌入式開發(fā)用C語言就足夠了。其實(shí)不應(yīng)僅是將匯編語言當(dāng)成一個程序設(shè)計語言,學(xué)匯編主要是為了掌握處理器工作原理的。一個不熟悉匯編語言的人,怎么能在該處理器寫出最優(yōu)的C語言代碼。在嵌入式開發(fā)的一些關(guān)鍵部分,有時還必須寫匯編,如Bootloader等(可能還包括BSP)。特別是在對速度有極高要求的場合(如DSP處理器的高速圖像采集和圖像解壓縮),目前還會用到匯編寫程序的,盡管用到的機(jī)會相對C要小得多。當(dāng)你在一個嵌入式公司工作時,在查看描述原理的手冊時,可能很多都是用匯編描述的,這是因為很多硬件設(shè)計人員只會寫或者喜歡用匯編描述,此時你就必須看懂匯編程序,否則軟硬件人員可能就無法交流。很多嵌入式職位招聘時都要求熟悉匯編。
[小知識] 目前嵌入式處理器常見的有ARM、PowerPC、MIPS、Motorola 68K、ColdFire(冷火)等,但ARM占據(jù)了絕對主流(有資料說手機(jī)中幾乎90%都是ARM處理器)。ARM是一個只賣知識產(chǎn)權(quán)的公司,目前獲得購買了ARM CPU核授權(quán)許可的大公司很多,包括Intel、Samsung、Amstel、Motorola、Philip等,他們都在ARM CPU核的基礎(chǔ)上進(jìn)行了一些外圍擴(kuò)展,形成自己的處理器(如Samsung S3C2410,Motorola i.MXL9328等處理器都是采用ARM 9內(nèi)核,指令一級是相同的)。而眾多中小公司又購買了這些處理器,設(shè)計了各種各樣的開發(fā)板,如華恒等國內(nèi)很多著名嵌入式公司都生產(chǎn)基于SamsungS3C2410的開發(fā)板,供最終用戶使用或供教學(xué)實(shí)驗。在ARM這個食物鏈上,ARM公司是大魚,Intel、Samsung等公司是小魚,而華恒等則是蝦米,最終用戶(我們這些要采購嵌入式開發(fā)板的)則是喂蝦米的。Intel早期生產(chǎn)的是低端ARM(Strong ARM,相當(dāng)于ARM 7),現(xiàn)在轉(zhuǎn)向主要生產(chǎn)高端ARM(即Intel Xscale處理器,屬于ARMv5家族,主要用在高端PDA上,如HP和DELL生產(chǎn)的PDA都采用Intel Xscale,價格較高)。目前應(yīng)用最多的是ARM 7和ARM 9兩類處理器。ARM 7較便宜,可跑uclinux(是一個不支持高級內(nèi)存管理功能的嵌入式Linux系統(tǒng)統(tǒng))、Vxworks、uc/os II等實(shí)時操作系統(tǒng),但因處理器不帶內(nèi)存管理單元MMU(無內(nèi)存分頁和地址映射機(jī)制,所以不能使用虛擬內(nèi)存),所以不能跑Windows CE,另外通用Linux中的某些內(nèi)存管理功能也不能用在ARM 7上。ARM 9大都是一個帶MMU功能的高端處理器,可跑WinCE或通用Linux的大多數(shù)功能。ARM7和ARM9的區(qū)別是在與體系結(jié)構(gòu)上,前者是馮?諾伊曼結(jié) 構(gòu),后者是哈佛結(jié)構(gòu)——指令和數(shù)據(jù)總線是分開的。以上是我的一點(diǎn)了解,可能有不對的地方。我們學(xué)院有十幾套ARM 7開發(fā)系統(tǒng)(采用Samsung S3C44b0x開發(fā)板,主要用于嵌入式處理器結(jié)構(gòu)、實(shí)時操作系統(tǒng)等課程實(shí)驗用),ARM 9的系統(tǒng)好象也已經(jīng)到了(采用的芯片我不知道也沒去問),還有以前的十幾套MPC860開發(fā)板(聽說價格都很貴,很容易損壞),同學(xué)應(yīng)愛護(hù)使用和珍惜這樣 的實(shí)驗機(jī)會。
(2)嵌入式操作系統(tǒng)類課程
004km.cn 達(dá)內(nèi)教育—中國IT培訓(xùn)領(lǐng)導(dǎo)品牌
除了WinCE的實(shí)時性稍差外,大多數(shù)嵌入式操作系統(tǒng)的實(shí)時性都很強(qiáng),所以也可稱為實(shí)時操作系統(tǒng)Real Time Operating System.從事嵌入式的人至少須掌握一個嵌入式操作系統(tǒng),這在嵌入式的所有技術(shù)中是最為關(guān)鍵的了。目前最重要的RTOS主要包括:
第一類、傳統(tǒng)的經(jīng)典RTOS:最主要的便是Vxworks操作系統(tǒng),以及其Tornado開發(fā)平臺。Vxworks因出現(xiàn)稍早,實(shí)時性很強(qiáng)(據(jù)說可在1ms內(nèi)響應(yīng)外部事件請求),并且內(nèi)核可極微(據(jù)說最小可8K),可靠性較高等,所以在北美,Vxworks占據(jù)了嵌入式系統(tǒng)的多半 疆山。特別是在通信設(shè)備等實(shí)時性要求較高的系統(tǒng)中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術(shù)都和Linux很類似,主要是C語言開發(fā)。像Bell-alcatel、Lucent、華為等通信企業(yè)在開發(fā)產(chǎn)品時,Vxworks用得很多。但Vxworks因價格很高,所以一些小公司或小產(chǎn)品中往往用不 起。目前很多公司都在往嵌入式Linux轉(zhuǎn)(聽說華為目前正在這樣轉(zhuǎn))。但無論如何,Vxworks在一段長時間內(nèi)仍是不可動搖的。與Vxworks類似 的稍有名的實(shí)時操作系統(tǒng)還有pSOS、QNX、Nucleus等RTOS。
第二類、嵌入式Linux操作系統(tǒng):Linux的前途除作為服務(wù)器操作系統(tǒng)外,最成功的便是在嵌入式領(lǐng)域的應(yīng)用,原因當(dāng)然是免費(fèi)、開源、支持軟件多、呼擁者眾,這樣嵌入式產(chǎn)品成本會低。Linux本身不是一個為嵌入式設(shè)計的操作系統(tǒng),不是微內(nèi)核的,并且實(shí)時性不強(qiáng)。
目前應(yīng)用在嵌入式領(lǐng)域的Linux系統(tǒng)主要有兩種:
一種是專為嵌入式設(shè)計的已被裁減過的Linux系統(tǒng),最常用的是uClinux(不帶MMU功能),目前占較大應(yīng)用份額,可在ARM7上跑;另一種是跑在 ARM 9上的,一般是將Linux2.4.18內(nèi)核移植在其上,可使用更多的Linux功能(當(dāng)然uClinux更可跑在ARM 9上)。很多人預(yù)測,嵌入式Linux預(yù)計將占嵌入式操作系統(tǒng)的50%以上份額,非常重要。缺點(diǎn)是熟悉Linux的人太少,開發(fā)難度稍大。另外,目前我們 能發(fā)現(xiàn)很多教材和很多大學(xué)都以ucOS/II為教學(xué)用實(shí)時操作系統(tǒng),這主要是由于ucOS/II較簡單,且開源,非常適合入門者學(xué)習(xí)實(shí)時操作系統(tǒng)原理,但 由于ucOS/II功能有限,實(shí)用用得較少。況且熟悉了Linux開發(fā),不僅在嵌入式領(lǐng)域有用,對開發(fā)Linux應(yīng)用軟件,對加深操作系統(tǒng)的認(rèn)識也有幫 助,可謂一舉多得。據(jù)我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發(fā),F(xiàn)ujitum則是在自己的處理器上大搞Linux 開發(fā)。目前在嵌入式Linux領(lǐng)域,以下幾個方面的人特別難找,一是能將Linux移植到某個新型號的開發(fā)版上;二是能寫Linux驅(qū)動程序的人;三是熟悉Linux內(nèi)核裁減和優(yōu)化的人。不過LINUX有一個硬傷,就是沒有WINDOWS那樣的友好方便美觀的交互界面,不然微軟帝國早就守不住了。
第三類、Windows CE嵌入式操作系統(tǒng):Microsoft也看準(zhǔn)了嵌入式的巨大市場,MS永遠(yuǎn)是最厲害的,WinCE出來只有幾年時間,但目前已占據(jù)了很大市場份額,特別是在PDA、手機(jī)、顯示儀表等界面要求較高或者要求快速開發(fā)的場合,WinCE目前已很流行(據(jù)說有一家賣工控機(jī)的公司板子賣得太好,以至來不及為客戶裁減WinCE)。WinCE目前主要為4.2版(.NET),開發(fā)平臺主要為WinCE 004km.cn 達(dá)內(nèi)教育—中國IT培訓(xùn)領(lǐng)導(dǎo)品牌
Platform Builder,有時也用EVC環(huán)境開發(fā)一些較上層的應(yīng)用,由于WinCE開發(fā)都是大家熟悉的VC++環(huán)境,所以我院學(xué)過Windows程序設(shè)計課程的同 學(xué)都不會有多大難度,這也是WinCE容易被人們接受的原因,開發(fā)環(huán)境方便快速,微軟的強(qiáng)大技術(shù)支持,WinCE開發(fā)難度遠(yuǎn)低于嵌入式Linux。對于急于完成,不想拿嵌入式Linux冒險的開發(fā)場合,WinCE是最合適了(找嵌入式Linux的人可沒那么好找的),畢竟公司不能像學(xué)生學(xué)習(xí)那樣試試看,保證開發(fā)成功更重要。根據(jù)不同的側(cè)重點(diǎn),WinCE還有兩個特殊版本,一個是MS PocketPC操作系統(tǒng)專用于PDA上(掌上電腦),另一個是MS SmartPhone操作系統(tǒng)用于智能手機(jī)上(帶PDA功能的手機(jī)),兩者也都屬于WinCE平臺。在PDA和手機(jī)市場上,除WinCE外,著名的PDA 嵌入式操作系統(tǒng)還有Palm OS(因出現(xiàn)很早,很有名)、Symbian等,但在WinCE的強(qiáng)勁沖擊下,Palm和Symbian來日還能有多長?同學(xué)學(xué)過VC++后再學(xué) WinCE,非常方便自然,通過學(xué)習(xí)WinCE同樣也可了解嵌入式軟件的一般開發(fā)過程,對Linux有懼怕心理的同學(xué)也很合適。很顯然,嵌入式Linux 永遠(yuǎn)不可能替代WinCE,而且將來誰占份額大還很難講,畢竟很多人更愿意接受MS的平臺,就像各國政府都在大力推LINUX已好長時間,但你能看到幾個 在PC機(jī)上真正使用LINUX的用戶?據(jù)我觀察,目前在嵌入式平臺上,LINUX是叫得最響,但還是WinCE實(shí)際用得更多.嵌入式LINUX可能更多地是一些有長遠(yuǎn)產(chǎn)品計劃的公司,為降低成本而進(jìn)行長遠(yuǎn)考慮.WinCE和多媒體(如MPEG技術(shù))是微軟亞洲工程院目前做得較多的項目領(lǐng)域之 一,現(xiàn)在社會很需要精通WinCE的人。現(xiàn)在有WINCE的智能手機(jī),金山詞霸、WORD、EXCEL、REGEDIT等居然都有 smartphone版的,PC上的MP3、DOC等居然在download時都可被自動轉(zhuǎn)換成smartphone格式,很爽的。完全可用 Windows CE自己開發(fā)一些需要的程序download到自己的手機(jī)上。現(xiàn)在市面銷售PDA智能手機(jī)火爆,MS總是財源滾滾。
總結(jié)關(guān)于嵌入式操作系統(tǒng)類課程,若你覺得自己功底較深且能鉆研下去,則可去學(xué)嵌入式Linux;若你覺得自己VC++功底較好且想短平快地學(xué)嵌入式開發(fā),自學(xué)WINCE是非常好的選擇。
(3)嵌入式開發(fā)的相關(guān)領(lǐng)域
搞嵌入式若能熟悉嵌入式應(yīng)用的一些主要領(lǐng)域,這樣的人更受企業(yè)歡迎。主要的相關(guān)領(lǐng)域包括:
A、數(shù)字圖像壓縮技術(shù):這是嵌入式最重要最熱門的應(yīng)用領(lǐng)域之一,主要是應(yīng)掌握MPEG編解碼算法和技術(shù),如DVD、MP3、PDA、高精電視、機(jī)頂盒等都涉及MPEG高速解碼問題。
B、通信協(xié)議及編程技術(shù):這包括傳統(tǒng)的TCP/IP協(xié)議和熱門的無線通信協(xié)議。首先,大多數(shù)嵌入式設(shè)備都要連入局域網(wǎng)或Internet,所以首先應(yīng)掌握 TCP/IP協(xié)議及其編程,這是需首要掌握的基本技術(shù);其次,無線通信是目前的大趨勢,所以掌握無線通信協(xié)議及編程也是是很重要的。無線通信協(xié)議包括無線 局域網(wǎng)通信協(xié)議802.11系列,Bluetooth,以及移動通信(如GPRS、GSM、CDMA等)。
004km.cn 達(dá)內(nèi)教育—中國IT培訓(xùn)領(lǐng)導(dǎo)品牌
C、網(wǎng)絡(luò)與信息安全技術(shù):如加密技術(shù),數(shù)字證書CA,以及各種網(wǎng)絡(luò)安全設(shè)備,包括硬件防火墻,入侵檢測IDS,還有防毒墻,IPS等,中國在這方面還是沒有自己優(yōu)勢的,我們陳院長好象正在往這方面發(fā)展.D、DSP技術(shù):DSP是Digital Signal Process數(shù)字信號處理的意思,DSP處理器通過硬件實(shí)現(xiàn)數(shù)字信號處理算法,如高速數(shù)據(jù)采集、壓縮、解壓縮、通信等。數(shù)字信號處理是電子、通信等硬件 專業(yè)的課程,對于搞軟件的人若能了解一下最好。目前DSP人才較缺。如果有信號與系統(tǒng)、數(shù)字信號處理等課程基礎(chǔ),對于學(xué)習(xí)MPEG編解碼原理會有很大幫助。
(4)嵌入式開發(fā)的相關(guān)硬件基礎(chǔ)
對于軟件工程專業(yè)的學(xué)生,從事嵌入式軟件開發(fā),像數(shù)字電路、計算機(jī)組成原理、嵌入式微處理器結(jié)構(gòu)等硬件課程是較重要的。另外,匯編語言、C/C++ 數(shù)據(jù)結(jié)構(gòu)算法、特別是操作系統(tǒng)等軟件基礎(chǔ)課也是十分重要的。我們的主要目地是能看懂硬件工作原理,但重點(diǎn)應(yīng)是在嵌入式軟件,特別操作系統(tǒng)級軟件,那將是我們的優(yōu)勢。我們的研究生里有些是學(xué)電子、通信類專業(yè)過來的,有較好的模擬電路和單片機(jī)基礎(chǔ),學(xué)嵌入式非常合適。嵌入式本身就是從單片機(jī)發(fā)展過來的,只是單片機(jī)不帶OS,而現(xiàn)在很多嵌入式應(yīng)用越來越復(fù)雜,以至不得不引入嵌入式操作系統(tǒng)。另外,為追求更高速的信號處理速度,現(xiàn)在在一些速度要求較高場合,有不少公司是將一些DSP算法,如MPEG壓縮解壓縮算法等用硬件來實(shí)現(xiàn),這就涉及到HDL數(shù)字電路設(shè)計技術(shù)及其 FPGA/IP核實(shí)現(xiàn)技術(shù),這方面的人目前市場上也很缺。
第五篇:給予Java初學(xué)者的學(xué)習(xí)路線建議
給Java初學(xué)者的學(xué)習(xí)路線建議
在校學(xué)生,務(wù)必要在學(xué)好基礎(chǔ)(比如計算機(jī)系統(tǒng)、算法、編譯原理等等)的前提下,再考慮去進(jìn)行下面的學(xué)習(xí)。第一部分:對于尚未做過Java工作的同學(xué),包括一些在校生以及剛準(zhǔn)備轉(zhuǎn)行Java的同學(xué)。
一、Java基礎(chǔ)首先去找一個Java的基礎(chǔ)教程學(xué)一下,或者你也可以去找相應(yīng)的視頻。學(xué)習(xí)Java基礎(chǔ)的時候,應(yīng)該盡量多動手,很多時候,你想當(dāng)然的事情,等你寫出來運(yùn)行一下,你就會發(fā)現(xiàn)不是這么回事兒,不信你就試試。了解過以上內(nèi)容以后,你對Java就應(yīng)該有一個基本的了解了,你可以用Java語言寫出一些簡單的程序,并且你用的是最簡單的編輯器,比如記事本。這個時候,不要急于進(jìn)入下一部分,留下幾天好好寫一些程序,盡可能熟悉這些基礎(chǔ)內(nèi)容。
二、Web開發(fā)等你寫上幾天程序以后,你往往會比較迷茫,因為你寫的東西似乎看起來毫無用處,比如實(shí)現(xiàn)一個簡單的計算器,讀取一個文件等。這個時候你就應(yīng)該去學(xué)著寫一些讓你覺得有意思的東西了,所以你應(yīng)該學(xué)習(xí)更多的知識。這些內(nèi)容主要是Web開發(fā)相關(guān)的內(nèi)容,包括HTML/CSS/JS(前端頁面)、Servlet/JSP(J2EE)以及Mysql(數(shù)據(jù)庫)相關(guān)的知識。它們的學(xué)習(xí)順序應(yīng)該是從前到后,因此最先學(xué)習(xí)的應(yīng)該是HTML/CSS/JS(前端頁面),這部分內(nèi)容你可以去上面的那個runoob網(wǎng)站上找。
你可以試著自己寫一些頁面,當(dāng)然,你可以盡你最大的努力讓它變得最漂亮。這部分內(nèi)容對于后端Java來說,理論上不是特別重要,但至少要達(dá)到可以自己寫出一些簡單頁面的水平。接下來,你需要學(xué)習(xí)的是Servlet/JSP(J2EE)部分,這部分是Java后端開發(fā)必須非常精通的部分,因此這部分是這三部分中最需要花精力的,而且這個時候,你要學(xué)會使用開發(fā)工具,而不能再使用記事本了,可以選擇eclipse。當(dāng)你下載安裝好eclipse以后,請視頻中的教程一步一步去學(xué)習(xí),一定要多動手。關(guān)于Servlet/Jsp部分視頻的選擇,業(yè)界比較認(rèn)可馬士兵的視頻,因此推薦給大家。
當(dāng)然了,我本人并沒有看過他的視頻,所以不好說的太絕對,如果大家自己有更好的選擇,可以堅持自己的,不要被我干擾。最后一步,你需要學(xué)會使用數(shù)據(jù)庫,mysql是個不錯的入門選擇,而且Java領(lǐng)域里主流的關(guān)系型數(shù)據(jù)庫就是mysql。這部分一般在你學(xué)習(xí)Servlet/Jsp的時候,就會接觸到的,其中的JDBC部分就是數(shù)據(jù)庫相關(guān)的部分。你不僅要學(xué)會使用JDBC操作數(shù)據(jù)庫,還要學(xué)會使用數(shù)據(jù)庫客戶端工具,比如navicat,sqlyog,二選一即可。
三、開發(fā)框架當(dāng)你學(xué)會以上內(nèi)容以后,這個時候你還不足以參加工作,你還需要繼續(xù)深造。公司里為了提高開發(fā)的效率,會使用一些Java Web框架,因此你還需要學(xué)習(xí)一些開發(fā)框架。目前比較主流的是SSM框架,即spring、springmvc、mybatis。你需要學(xué)會這三個框架的搭建,并用它們做出一個簡單的增刪改查的Web項目。你可以不理解那些配置都是什么含義,以及為什么要這么做,這些留著后面你去了解。
但你一定要可以快速的利用它們?nèi)齻€搭建出一個Web框架,你可以記錄下你第一次搭建的過程,相信我,你一定會用到的。還要提一句的是,你在搭建SSM的過程中,可能會經(jīng)常接觸到一個叫maven的工具。這個工具也是你以后工作當(dāng)中幾乎是必須要使用的工具,所以你在搭建SSM的過程中,也可以順便了解一下maven的知識。在你目前這個階段,你只需要在網(wǎng)絡(luò)上了解一下maven基本的使用方法即可,一些高端的用法隨著你工作經(jīng)驗的增加,會逐漸接觸到的。
四、找工作當(dāng)你完成開發(fā)框架的學(xué)習(xí)以后,你就該找工作了,在校的找實(shí)習(xí),畢業(yè)的找全職。與此同時,在找工作的同時,你不應(yīng)該停下你的學(xué)習(xí),準(zhǔn)確的說,是你在以后都不能停下學(xué)習(xí)。上面這些內(nèi)容你只是囫圇吞棗的學(xué)會了使用,你可以逐步嘗試著去了解更多的東西。
第二部分:對于參加工作一年以內(nèi)的同學(xué)。恭喜你,這個時候,你已經(jīng)擁有了一份Java的工作。這個階段是你成長極快的階段,而且你可能會經(jīng)常加班。但是加班不代表你就可以松懈了,永遠(yuǎn)記得我說的那句話,從你入行那一刻起,你就要不停的學(xué)習(xí)。在這一年里,你至少需要看完《Java編程思想》這本書。這本書的內(nèi)容是幫助你對于Java有一個更加深入的了解,是Java基礎(chǔ)的升級版。這個階段的核心學(xué)習(xí)思想就是,在工作中實(shí)踐,并且更加深入的了解Java基礎(chǔ)。
第二部分:對于參加工作1年到2年的同學(xué)。這部分時間段的同學(xué),已經(jīng)對Java有了一個更加深入的了解。但是對于面向?qū)ο蟮捏w會可能還不夠深刻,編程的時候還停留在完成功能的層次,很少會去考慮設(shè)計的問題。于是這個時候,設(shè)計模式就來了。我推薦《大話設(shè)計模式》這本書,而設(shè)計模式就是你的開端。
請記住,我所提的基本都是最低要求,因此不要有任何松懈的心理,否則五年后,你不要去羨慕別人高于你的工資,也不要去羨慕別人進(jìn)入了某公司。這一年,你必須對于設(shè)計模式了如指掌,《大話設(shè)計模式》可以作為你的開端。此外,設(shè)計模式并不是你這一年唯一的任務(wù),你還需要看一些關(guān)于代碼編寫優(yōu)化的書。比如《重構(gòu) 改善既有代碼的設(shè)計》,《effective java》??偠灾?,這個階段,你的核心任務(wù)就是提高你的代碼能力,要能寫出一手優(yōu)雅的代碼。
第三部分:對于參加工作2年到3年的同學(xué)有的同學(xué)在這個時候覺得自己已經(jīng)很牛逼了,于是忍不住開始慢慢松懈。請記住,你還嫩的多。這個階段,有一本書是你必須看的,它叫做《深入理解Java虛擬機(jī)》。這本書絕對是Java開發(fā)者最重要的書,沒有之一。在我眼里,這本書的重要性還要高于《Java編程思想》。這本書的內(nèi)容是幫助你全面的了解Java虛擬機(jī),在這個階段,你一定已經(jīng)知道Java是運(yùn)行在JVM之上的。所以,對于JVM,你沒有任何理由不了解它。
另外,在過去2年的工作當(dāng)中,你肯定或多或少接觸過并發(fā)。這個時候,你應(yīng)該去更加深入的了解并發(fā)相關(guān)的知識,而這部分內(nèi)容,我比較推薦《Java并發(fā)編程實(shí)戰(zhàn)》這本書。只要你把這本書啃下來了,并發(fā)的部分基本已經(jīng)了解了十之六七。與此同時,這個階段你要做的事情還遠(yuǎn)不止如此。這個時候,你應(yīng)該對于你所使用的框架應(yīng)該有了更深入的了解,對于Java的類庫也有了更深入的了解。
因此,你需要去看一些JDK中的類的源碼,也包括你所使用的框架的源碼。這些源碼能看懂的前提是,你必須對設(shè)計模式非常了解。否則的話,你看源碼的過程中,永遠(yuǎn)會有這樣那樣的疑問,這段代碼為什么要這么寫?為什么要定義這個接口,它看起來好像很多余?由此也可以看出,這些學(xué)習(xí)的過程是環(huán)環(huán)相扣的,如果你任何一個階段拉下來了,那么你就真的跟不上了,或者說是一步慢步步慢。而且我很負(fù)責(zé)的告訴你,我在這個階段的時候,所學(xué)習(xí)的東西遠(yuǎn)多于這里所羅列出來的。
因此千萬不要覺得你已經(jīng)學(xué)的很多了,我所說的這些都只是最低要求,不光是我,很多人在這個時間段所學(xué)習(xí)的內(nèi)容都遠(yuǎn)超本文的范圍。如果你不能跟上節(jié)奏的話,若干年后,如果不是程序猿市場還不錯的話,你很可能不僅僅是工資比別人低,公司沒別人好,而是根本就找不到工作??偠灾@個階段,你需要做的是深入了解Java底層和Java類庫(比如并發(fā)那本書就是Java并發(fā)包java.concurrent的內(nèi)容),也就是JVM和JDK的相關(guān)內(nèi)容。而且還要更深入的去了解你所使用的框架,方式比較推薦看源碼或者看官方文檔。另外,還有一種學(xué)習(xí)的方式,在2年這個階段,也應(yīng)該啟用了,那就是造輪子。不要聽信那套“不要重復(fù)造輪子”的論調(diào),那是公司為了節(jié)省時間成本編造出來的。重復(fù)造輪子或許對別人沒有價值,因為你造的輪子可能早就有了,而且一般情況下你造出來的輪子還沒有現(xiàn)存的好。
但是對別人沒有價值,不代表對你自己沒有價值。一個造輪子的過程,是一個從無到有的過程。這個過程可以對你進(jìn)行系統(tǒng)的鍛煉,它不僅考察你的編碼能力,還考察你的框架設(shè)計能力,你需要讓你的輪子擁有足夠好的擴(kuò)展性、健壯性。而且在造輪子的過程中,你會遇到各種各樣的難題,這些難題往往又是你學(xué)習(xí)的契機(jī)。當(dāng)你把輪子造好的時候,你一定會發(fā)現(xiàn),其實(shí)你自己收獲了很多。所以,這個階段,除了上面提到的了解JVM、JDK和框架源碼以外,也請你根據(jù)別人優(yōu)秀的源碼,去造一個任何你能夠想象出來的輪子。
第四部分:參加工作3年到4年的同學(xué)這個階段的同學(xué),提升已經(jīng)是很難了,而且這個階段的學(xué)習(xí)往往會比較多樣化。因為在前3年的過程中,你肯定或多或少接觸過一些其它的技術(shù),比如大數(shù)據(jù)、分布式緩存、分布式消息服務(wù)、分布式計算、軟負(fù)載均衡等等。這些技術(shù),你能精通任何一項,都將是你未來面試時巨大的優(yōu)勢,因此如果你對某一項技術(shù)感興趣的話,這個時候可以深入去研究一下。這項技術(shù)不一定是你工作所用到的,但一定是相關(guān)的。而且在研究一門新技術(shù)時,切忌朝三暮四。有的同學(xué)今天去整整大數(shù)據(jù),搞搞Hadoop、hbase一類的東西。過不了一段時間,就覺得沒意思,又去研究分布式緩存,比如redis。然后又過不了一段時間,又去研究分布式計算,比如整整Mapreduce或者storm。結(jié)果到最后,搞得自己好像什么都會一樣,在簡歷上大言不慚的寫上大數(shù)據(jù)、分布式緩存、分布式計算都了解,其實(shí)任何一個都只是浮于表面。到時候面試官隨便一問,就把你給識破了。
一定要記住,作為一個程序猿,平日里所接觸的技術(shù)可能會很多,但是想要讓一門技術(shù)成為你的優(yōu)勢,那么一定是你對這門技術(shù)的了解強(qiáng)過絕大多數(shù)人才行。因此在這個階段,你就不能再簡單的去學(xué)習(xí)前3年的內(nèi)容了,雖然前面的學(xué)習(xí)如果還不夠深入的話依舊要繼續(xù),但這個時候你應(yīng)該更多的考慮建立你的優(yōu)勢,也可以稱為差異性。差異性相信不難理解,就是讓你自己變得與眾不同。你前面三年的學(xué)習(xí)足夠你成為一名基本合格的Java開發(fā)者,但你離成為一名優(yōu)秀的Java開發(fā)者還有很大的距離。
所謂優(yōu)秀,即能別人所不能。而你前三年所學(xué)習(xí)的內(nèi)容,是很多做過幾年的Java開發(fā)都能夠掌握的。那么為了讓自己有差異性,你就需要另辟蹊徑,找一個方向深入研究下去,以期在將來,你能夠成為這個領(lǐng)域的專家,比如分布式計算領(lǐng)域的專家,大數(shù)據(jù)領(lǐng)域的專家,并發(fā)領(lǐng)域的專家等等。此外,你除了建立你的差異性之外,還要去彌補(bǔ)你基礎(chǔ)上的不足,直到現(xiàn)在,我都沒有提及基礎(chǔ)知識。原因是基礎(chǔ)是很枯燥無味的,學(xué)的太早不僅容易懵逼,而且懵逼的同時還容易產(chǎn)生心理陰影,以至于以后再不想去研究這些基礎(chǔ)。但基礎(chǔ)又是你深入研究一些領(lǐng)域時所必須掌握的,比如你去研究分布式計算,你不懂算法你玩?zhèn)€毛毛?比如你去做分布式緩存,你對計算機(jī)系統(tǒng)的內(nèi)存不了解,你如何去做緩存?
如果你的基礎(chǔ)本來就非常強(qiáng),那么恭喜你,相信你在之前的工作中已經(jīng)充分體會到了這些基礎(chǔ)對你的幫助。但我相信大部分人的基礎(chǔ)都很薄弱,哪怕是科班畢業(yè)的人,很多人也不敢說自己當(dāng)初的基礎(chǔ)學(xué)的多么強(qiáng)大,比如算法、計算機(jī)系統(tǒng)原理、編譯原理這些。但是每個人時間都是有限的,而且這些基礎(chǔ)的書籍每一本讀下來,沒個一年半載的,還真拿不下來,因此還是要有所抉擇的。雖然藝多不壓身,但問題是藝多是有代價的,是需要你付出時間和精力的,而我個人更贊成在同等代價的情況下獲取最大的收獲。
首先,我比較推崇的基礎(chǔ)書籍有三本,分別是《深入理解計算機(jī)系統(tǒng)》,《tcp/ip詳解 卷一、二、三》,《數(shù)據(jù)結(jié)構(gòu)與算法》。其中TCP/IP有三本書,但我們這里把這三本看成是一本大書。這三本分別適合三種人,《深入理解計算機(jī)系統(tǒng)》比較適合一直從事Java Web開發(fā)和APP后端開發(fā)工作的人群?!秚cp/ip詳解 卷一、二、三》比較適合做網(wǎng)絡(luò)編程的人群,比如你使用netty去開發(fā)的話,那么就要對TCP/IP有更深入的了解。而《數(shù)據(jù)結(jié)構(gòu)與算法》這本書,則比較適合做計算研究工作的人,比如剛才提到的分布式計算。另外,我要強(qiáng)調(diào)的是,這里所說的適合,并不是其它兩本對你就沒有用。比如你做Java Web和APP后端開發(fā),《tcp/ip詳解 卷一、二、三》這本書對你的作用也是很大的。這里只是分出個主次關(guān)系而已,你要是時間足夠的話,能把三本都精讀那當(dāng)然最好不過了。
但如果時間有限的話,那么就先挑對你幫助最大的書去讀。理論上來講,這一年你能把這三本其中一本精讀下來,就已經(jīng)非常厲害了。有了基礎(chǔ),有了前面的工作經(jīng)驗,你就可以去開拓屬于你的領(lǐng)域了。在這一年里,一定要規(guī)劃好自己的領(lǐng)域,建立好自己的優(yōu)勢,制造出差異性。如果你對自己的領(lǐng)域不夠清晰的話,隨著你工作的時間日益增多,你接觸的技術(shù)會越來越多,這個時候,你很容易被淹死在技術(shù)的海洋里,看似接觸的技術(shù)越來越多,會用的也越來越多,但你毫無優(yōu)勢。有的同學(xué)可能會問,“我,我也不知道我的領(lǐng)域是什么啊?怎么辦呢?”對于這種人,我只想說,“臥槽,這還問我?要不干脆我替你學(xué)習(xí)得了,好不好?”
第五部分:參加工作4年到5年的同學(xué)經(jīng)過前面一年的歷練,相信你在自己所鉆研的領(lǐng)域已經(jīng)有了自己一定的見解,這個時候,技術(shù)上你應(yīng)該已經(jīng)遇到瓶頸了。這個時候不要著急提高自己的技術(shù),已經(jīng)是時候提高你的影響力了,你可以嘗試去一些知名的公司去提高你的背景,你可以發(fā)表一些文章去影響更多的人。當(dāng)然,你也可以去Github創(chuàng)建一個屬于你的開源項目,去打造自己的產(chǎn)品。
技術(shù)學(xué)到這個階段,很容易遇到瓶頸,而且往往達(dá)到一定程度后,你再深入下去的收效就真的微乎其微了,除非你是專門搞學(xué)術(shù)研究的。然而很可惜,大部分程序猿做不到這一步,那是科學(xué)家做的事情。這個時候提高影響力不僅僅是因為技術(shù)上容易遇到瓶頸,更多的是影響力可以給你創(chuàng)造更多的機(jī)會。程序猿在某種程度上和明星很像,一個好的電視劇和電影就可以成就一批明星,程序猿有的時候也是,一個好的項目就可以成就一群程序猿。比如國內(nèi)幾個膾炙人口的項目,像淘寶、支付寶、QQ、百度、微信等等。這每一個項目,都成就了一批程序猿。我敢說,這里面任何一個項目,如果你是它的核心開發(fā),光是這樣一個Title,就已經(jīng)是你非常大的優(yōu)勢。更何況還不止如此,Title說到底也是個名頭,更重要的是,這種項目在做的時候,對你的歷練一定也是非常給力的。
而你如果想要參與這樣的項目,除了靠運(yùn)氣之外,影響力也是很重要的一個手段。比如你在分布式計算領(lǐng)域有一定的影響力,那么如果有什么好的關(guān)于分布式計算的項目,對方就很可能會邀請你。就算人家不邀請你,你自己主動去面試的時候,對方如果知道你在這個領(lǐng)域的影響力,也肯定會起到很大的作用,而這個作用,甚至可能會超過你現(xiàn)在的技術(shù)能力。所以,在這個階段,你最大的任務(wù)是提高自己的影響力,為自己未來的十年工作生涯那一天做準(zhǔn)備。如果你能夠靠你的影響力和以前積累的技術(shù),參與到一個偉大的項目當(dāng)中,那么你后面的五年也就有著落了。當(dāng)然了,我現(xiàn)在滿打滿算,做程序猿也就4年半不到,因此關(guān)于4年到5年這一部分,我的見解不一定是對的,就算是對的,也不一定是適合任何人的。
所以,希望大家自己有的判斷力,去決定到底該如何度過這一年。結(jié)語本文到此就基本結(jié)束了,整篇文章很長,但其實(shí)主要就說了兩部分內(nèi)容,一個是社招面試的準(zhǔn)備,一個是Java生涯的學(xué)習(xí)。關(guān)于這兩部分,我已經(jīng)給出了自己的見解,但是還是那句話,每個人吸收知識的時候,都要有抽取精華,去除糟粕的能力。我所說的,可能有些是對的,有些是錯的,有些是適合你的,有些是不太適合你的,你要自己能夠判斷。其實(shí)你在生活和工作當(dāng)中也是一樣的,你身邊的人形形色色,有的人你喜歡,有的人你很討厭。但其實(shí)你喜歡的人也有缺點(diǎn),你討厭的人也有優(yōu)點(diǎn)。你要學(xué)會從你討厭的人身上學(xué)會他的優(yōu)點(diǎn),千萬不要一棒子打死,這只會讓你失去很多學(xué)習(xí)成長的機(jī)會。好了,說了這么多了,就到此為止吧,希望本文可以幫助到作為程序猿或即將成為程序猿的你。