1. gzyueqian
      13352868059

      學習嵌入式的過程中很多人都有這樣的困惑,解答!

      更新時間: 2019-02-26 14:18:57來源: 嵌入式培訓(xùn)瀏覽量:5374

              1、為什么要學習嵌入式技術(shù)?

              學習嵌入式系統(tǒng),你將需要詳細了解系統(tǒng)功能層的各部分是如何工作的,也會在面向?qū)ο缶幊獭UI、數(shù)據(jù)庫、網(wǎng)絡(luò)服務(wù)等系統(tǒng)集成層的技術(shù)方向進行探索。嵌入式系統(tǒng)可以說是麻雀雖小五臟俱全,雖然沒有PC和服務(wù)器那么復(fù)雜,但計算機系統(tǒng)的各種組成一樣也不缺。因此,以嵌入式系統(tǒng)作為切入點開始學習軟件技術(shù)是非常好的選擇,避開不必要的復(fù)雜性,把握計算機系統(tǒng)根本的概念和技術(shù)要點。打下扎實的基礎(chǔ)之后,你的職業(yè)發(fā)展則完全不必局限于嵌入式領(lǐng)域,即使你日后做PC或服務(wù)器開發(fā),學習嵌入式所得的知識和技能同樣使你終生受益。正如庖丁解牛,心中有全牛,自然就能游刃有余。

              另一方面,你一定見到各大媒體都有大量的宣傳,說現(xiàn)在嵌入式行業(yè)前景空前的好,嵌入式人才緊缺,有幾百萬職位空缺等等。這些說法也是對的,但我們需要更深入地理解這說明了什么問題。剛才我們說,嵌入式系統(tǒng)也是一個完整的計算機系統(tǒng),和PC或服務(wù)器沒有本質(zhì)的區(qū)別,事實上,嵌入式、PC和服務(wù)器的界限已經(jīng)越來越模糊了。以前的嵌入式就是單片機,只能做簡單的運算處理,現(xiàn)在的很多嵌入式處理器性能比從前的奔騰還強,打游戲、看電影都沒問題,誰能說它不是PC呢?另外有些專用的嵌入式系統(tǒng)已經(jīng)在充當服務(wù)器的功能了,而集群技術(shù)更是可以使許多廉價的處理器組合在一起發(fā)揮大型服務(wù)器的作用。由于嵌入式越來越多地應(yīng)用到家用電器、汽車和控制領(lǐng)域的各種設(shè)施上,無處不在,并且與PC、服務(wù)器呈融合的趨勢,所以嵌入式行業(yè)前景空前的好。

              那么,為什么說嵌入式人才緊缺呢?其實,學嵌入式系統(tǒng)就是學計算機系統(tǒng),本質(zhì)上并沒有什么特殊的只有嵌入式系統(tǒng)才有的技術(shù)。說嵌入式人才緊缺,其本質(zhì)上是說真正懂計算機的人才少。現(xiàn)在很多學校的所謂“軟件學院”培養(yǎng)的軟件人才都是一葉障目不見泰山的:只懂J2EE和.NET,即便學過C和匯編,也沒有把它們作為核心課程;只會調(diào)庫函數(shù)sort(),而對各種排序算法一無所知;設(shè)計模式、軟件工程講得頭頭是道,卻不知道好的軟件還是要靠牛人靠智商來做的。培養(yǎng)人像蒸包子一樣一屜一屜地出,靠軟件工程搭一條生產(chǎn)線,然后讓熟練工人站在生產(chǎn)線上擰螺絲,幻想著這樣就能生產(chǎn)出好的軟件,那是把軟件工程和程序員的作用本末倒置了。現(xiàn)在嵌入式開發(fā)對程序員的素質(zhì)要求更高了,以上這類“軟件人才”不能勝任了,因此說嵌入式人才緊缺。所以要培養(yǎng)一種有完整的計算機系統(tǒng)概念的軟件人才,而不是只會擰螺絲的軟件工人。

              2、有人說軟件技術(shù)變化太快,現(xiàn)在學的東西過兩年就要完全淘汰,是嗎?

              你知道這話是什么人說的嗎?必然是已經(jīng)被淘汰的人說的。比如Delphi、BCB、PB這些開發(fā)工具和語言,都曾經(jīng)很是風光了一陣,但現(xiàn)在已經(jīng)完全被Java和.NET取代了。那么Java和.NET會不會被取代呢,也許在相當長的時間內(nèi)還不會。

              這些被淘汰的程序員有一些共同的特點:只會用鼠標拖拽控件,離開IDE就不知道如何工作,學點兒花拳繡腿的功夫就想吃一輩子,對學習新技術(shù)不感興趣,做和尚撞鐘。現(xiàn)在請回頭看看1,在整個軟件技術(shù)領(lǐng)域,這些變化快的技術(shù)其實只占了很小的一塊,卻成了這些人的全部看家本領(lǐng),這樣的人能不被淘汰嗎?

              與這些流行的開發(fā)工具和語言相反,很多技術(shù)和思想是很少變化的。比如,POSIX和SUS標準規(guī)定了一套系統(tǒng)函數(shù)接口和基本命令的語義,只有實現(xiàn)了這些才可以稱作UNIX,因此今天的Linux、Solaris跟20多年前的UNIX在系統(tǒng)功能層上是基本一致的。而指導(dǎo)計算機科學發(fā)展的數(shù)學理論,甚至是老祖宗們在計算機還沒誕生的年代就替我們想好的:布爾代數(shù)發(fā)表于19世紀,直到一個世紀后發(fā)明了計算機和數(shù)字電路才有了用武之地;數(shù)論在17世紀就出現(xiàn)了,一直都被數(shù)學家們當成一套好玩的理論,但只是好玩而已,直到計算機密碼學誕生后才發(fā)現(xiàn)它的實際用處。

              各種流行的開發(fā)工具和語言雖然變化很快,但是底層的編程語言卻非常穩(wěn)定,各種操作系統(tǒng)的內(nèi)核都是用C語言寫的,以前是這樣,以后也不會改變。另一方面,各種編程語言的設(shè)計思想也是非常穩(wěn)定的。其實世界上只有兩種編程語言,一種是C,一種是LISP,前者是imperative的,是對計算機模型的抽象,后者是functional的,是對數(shù)學函數(shù)模型的抽象。面向?qū)ο笫且环N重要的軟件工程思想,卻算不上一種新的語言模型,應(yīng)該歸在C的一類。屬于同一類的各種語言其實都大同小異,一個精通C++的人學習Java需要多長時間?熟悉語法一個星期,熟悉類庫三個星期,一個月足矣,以往的經(jīng)驗都可以套到新的編程語言上。然而要想習得深厚的算法功底、邏輯思維和抽象思維修養(yǎng),能夠真正說清楚“系統(tǒng)”是什么,如何分析和設(shè)計“系統(tǒng)”,需要多長時間?恐怕要數(shù)十年。

              3、C和Java哪種語言更好?

              計算機科學與編程語言無關(guān),甚至與計算機本身也沒太大關(guān)系,它研究的對象并不是計算機,而是人分析問題解決問題的方法論。程序?qū)懗鰜碇饕皇菫榱私o計算機執(zhí)行的,而是為了給人看的,使用編程語言和使用自然語言一樣是為了表達和交流,只不過程序還可以順便給計算機執(zhí)行而已。

              以上這些話并不是我說的,而是一位的計算機科學家說的。所以,在編程語言的層面上爭論是沒有意義的。很多初學者錯誤地認為掌握了編程語言就等于學會了計算機,一種編程語言都還沒有掌握好,更沒有上升到方法論的層面,只有這種無知的人才會去爭論哪種語言好的問題。掌握了編程語言遠遠不等于學會了計算機,而只是開始的一步,簡單的一步,到了工作中,用到什么語言就去學什么語言,什么語言過時了就丟掉,編程語言不需要積累因為它太簡單了,真正需要積累的是方法論。

              很多人喜歡參與到這類爭論之中,毫無例外,每個人都在為自己熟練掌握的編程語言辯護,就是“我會的語言,我不會的語言都不好”,其實這些人真正想說的是“我會的語言是千秋萬代,我就不必學新的語言,不必適應(yīng)新的變化了”,概括起來說就是一個字,懶。真正的高手都是會很多編程語言的,國外有些做技術(shù)咨詢的,每年都要學好幾門新的編程語言,這樣才能應(yīng)對市場的變化。不斷丟掉舊的編程語言學習新的,看起來好像完全是白費力氣,沒有積累,其實,每種編程語言的設(shè)計都有獨到之處,體現(xiàn)了每種語言的精髓,在融匯百家之后積累下來的正是方法論。

              爭論哪種語言能做的事情更多、功能更強是沒有意義的。從理論上說,任何一種符合圖靈機模型的編程語言,加上適當?shù)腎/O擴展都可以做任何事情,用shell腳本也可以寫出很像樣的游戲來。只不過各種語言的設(shè)計目標不同,表達能力不同,做不同的事情所需的代碼量不同而已。

              另外一種錯誤認識是:哪種語言的市場,開發(fā)人員多,哪種語言就。單從這種意義上說,Java的確比C更好,但是請你注意,操作系統(tǒng)內(nèi)核是用C寫的,各種底層的應(yīng)用程序包括Java虛擬機也是用C寫的。如果你想學Java,學習完嵌入式后你將有能力分析Java虛擬機的實現(xiàn),站在計算機系統(tǒng)的高度來學Java才會使你成為真正的Java高手。

              世界上有C和LISP兩種編程語言,你現(xiàn)在學了C,以后學了C++、Java、.NET等等,也仍然只認識了半個世界。LISP和Haskell構(gòu)成了另外半個世界,現(xiàn)在很常見的Python和Java等解釋型語言也借用了functional programming的思想。如果你只管悶著頭寫代碼,而不去廣泛涉獵,那么你將錯過很多精彩。

              4、我聽說編程編到三十五歲就沒人要了一定要轉(zhuǎn)行找出路是嗎?

              這個觀點雖然很流行,但根本不值一駁。現(xiàn)在三十五歲轉(zhuǎn)行的那些人,都具有前面所說的那些特征,對學習新技術(shù)不感興趣,對探索計算機的本質(zhì)不感興趣,得過且過,下了班就是打游戲、看電視,總之就是懶。如果是開出租、擺攤,勤快人懶人都有飯吃,而IT這一行對懶人是非常無情的,懶人就不該入IT這一行,不從自身找原因,卻到處散布這種言論,怪社會不好,打擊新人的信心,著實可恨。

              另外一種情況,編程編到三十五歲,進入公司的管理層,或者自己創(chuàng)業(yè),這都是很勤快的人,如果他們把這種勤快用在技術(shù)上肯定也可以做得更好,所以也無法證明編程編到三十五歲會因為沒有出路而轉(zhuǎn)行。

              編程不是個體力活,需要高強度的思考和智力投入,分析能力、思考能力都需要時間積累起來,所以并不是越年輕干得越好。相反,我認為三十歲以前寫的代碼都是垃圾,三十歲以后才能寫出像樣的程序來。如果希望一輩子走技術(shù)的道路而不會被迫轉(zhuǎn)行,就要不斷地把自己的工作性質(zhì)從“體力活”變成“腦力活”。什么叫“不斷地”變呢?這里的“體力活”并不是指種地、蓋房子這種勞動,而是指簡單重復(fù)地編寫代碼,這時你會感覺,派給你的工作都能憑以往的經(jīng)驗輕松應(yīng)付了,但是千萬不要滿足于現(xiàn)狀,就像溫水煮青蛙一樣,這是危險的處境!要擺脫這種處境就需要學習、思考、提高,讓公司派給你更有挑戰(zhàn)性的工作,在工作中應(yīng)用新學到的知識和技術(shù)就是“腦力活”了,但是用得久了又會變成簡單重復(fù)的“體力活”,這時就需要再學習、再提高,所以叫做“不斷地”把自己的工作性質(zhì)從“體力活”變成“腦力活”。如果有你發(fā)現(xiàn),自己長期陷于簡單重復(fù)的勞動之中,并且業(yè)余時間非常少,無法學習提高,這說明公司不會用人,你就該考慮跳糟了。

              從另外一個角度來說,如果希望一輩子走技術(shù)的道路,就要有自己的核心競爭力,這個核心競爭力決不是憑以往的經(jīng)驗?zāi)軌蜃瞿承┕ぷ鞯哪芰Γ菍W習能力、思考能力和解決有挑戰(zhàn)性的新問題的潛力。在IT這一行,憑借以往的經(jīng)驗干重復(fù)的活是干不長久的,原因很簡單,一個問題不會被解決兩次,當你發(fā)現(xiàn)你的經(jīng)驗?zāi)軌蚪鉀Q一類問題時,別人早把解決這一類問題的套路編寫成framework,新上手的人即使不具備你的這些經(jīng)驗也可以調(diào)用framework中的類和函數(shù)來解決問題,然后在這個framework的基礎(chǔ)上積累新的經(jīng)驗解決新的問題。正因為如此,全世界開發(fā)人員的經(jīng)驗才會積累起來,促使軟件技術(shù)發(fā)展得如此迅速。這并不是說經(jīng)驗完全沒有用,關(guān)鍵的,學習和思考也是建立在以往經(jīng)驗的基礎(chǔ)之上的。另一方面,現(xiàn)有的framework并不一定是某方面開發(fā)經(jīng)驗的完美整合,也需要不斷發(fā)展,用新的辦法重新解決老問題,以Web開發(fā)為例,從早期的ASP、PHP到后來的.NET、J2EE,到現(xiàn)在的Ruby on Rails、Django等等,這些framework解決的是同一問題,就是如何快速有效地開發(fā)Web應(yīng)用,這方面的經(jīng)驗被不斷重新整合,推陳出新。總結(jié)一下,什么才是核心競爭力呢?應(yīng)該是在經(jīng)驗的基礎(chǔ)上學習新技術(shù)、解決新問題的能力。

              5、做驅(qū)動開發(fā)還是做應(yīng)用開發(fā)更有前途?

              意思就是說,“你告訴我哪個更有前途,我就好好學哪個,另外一個就不用學了”。問這種問題的同事往往會同時問另外一些問題:我以后就想做驅(qū)動開發(fā),你教我這些應(yīng)用開發(fā)的技術(shù)有什么用?C++用得多嗎?學了有什么用?我以后不想做GUI,你教我Qt有什么用?

              學習忌諱的就是“有用的就學,沒有用的就不學”這種功利的態(tài)度。兩個問題:,在你還沒學進去、還不了解這種技術(shù)時,要如何判斷這種技術(shù)學了有沒有用?只能是根據(jù)道聽途說,看各種論壇上都怎么說的,豈不知論壇上參與這種討論的都是菜鳥,有的水平還不如你。第二,就算你學的技術(shù)沒有用上,有什么損失嗎?從嵌入式工程師可以從事各種各樣的開發(fā)工作,有做驅(qū)動的,有做系統(tǒng)編程的,有做GUI的,有做Web開發(fā)的,只要確定了做一類工作,就不可能把嵌入式所學的知識都用上,但至少也用得上3/4的知識,假設(shè)剩下的1/4你一輩子也沒機會用上了,那也就損失你一個月的學習時間而已,相比于你的收獲,這算是很大的損失嗎?請注意,上面的假設(shè)是不成立的,沒用上的那1/4也只是暫時沒用上而已,程序員要換工作或者換項目是很常見的,任何人都不可能只涉及一類開發(fā)工作,只要有扎實的基礎(chǔ)、完備的知識體系,任何工作都能輕松上手。

              扎實的基礎(chǔ),完備的知識體系,我們在安排課程體系的時候,正是以這兩點為依據(jù)的。有的課程內(nèi)容很少有學員在以后工作中會用到,但是缺了這一環(huán)就不成為一個完備的知識體系,例如通過C++來講面向?qū)ο缶幊蹋ㄟ^Qt來講面向?qū)ο蟆⑹录?qū)動和狀態(tài)機編程,這些編程思想是程序員必備的基本素質(zhì),而C++和Qt可能有些學員以后工作用不到,那這種課該不該上呢?毫無疑問該上。至于還有些人爭論說C++不如Java用得多,Qt不如GTK用得多,其實這種爭論是無意義的,有工夫爭論誰優(yōu)誰劣,不如把兩種都學了,會更有收獲。

              回到做驅(qū)動開發(fā)還是做應(yīng)用開發(fā)更有前途的問題。我只能說,做好了都有前途,做不好都沒有前途,只會做一樣而完全不懂另一樣是沒前途的。不要以為內(nèi)核開發(fā)者就不寫應(yīng)用程序,Linus寫了一個源代碼管理系統(tǒng)git來維護內(nèi)核,因為覺得現(xiàn)有的源代碼管理系統(tǒng)都不好用。牛人都是這樣,需要什么就寫什么,才不管是kernel space還是user space。同樣,做應(yīng)用開發(fā)如果不懂內(nèi)核,也沒有辦法很好地利用內(nèi)核提供的服務(wù)寫出性能的程序。做內(nèi)核難,因為調(diào)試難,要跟蹤大量的并發(fā)線程,因為入門難,要寫一個hello world都需要學很多知識。做應(yīng)用也難,回頭去看1,計算機科學從理論到實踐大部分都在上面兩層做文章。所以不存在哪個更難哪個更有前途的問題,任何關(guān)于哪個更難的討論都是too naive的。

              6、我一開始看什么書都看不懂,怎么才能理出一個學習順序?

              以前有個學員在學C語言時說,“C語言很多地方都很奇怪,都得用內(nèi)核的知識去解釋,可是你又不先教我內(nèi)核,我沒法學C語言。我只好自己看操作系統(tǒng)的書,看內(nèi)核代碼,可是看不懂。”當然看不懂了,內(nèi)核代碼都是用C寫的,如果不學內(nèi)核就沒法學C語言,那不學C語言又怎么可能看懂內(nèi)核?看來這是一個雞生蛋還是蛋生雞的問題。

              懶真的是人的本性,就連學習的過程都希望是一條路順利地走下去,不用動腦就能學會的:身后走過的路都是“已知”,每走一步就把眼前新的“未知”變成“已知”,如此一路走來,把所有的“未知”都變成“已知”就算學成了。可惜,知識不是一條路,而是一個圈,你從任何一個地方跳進這個圈開始走,身后都是“未知”,眼前也都是“未知”。有的人就是不能容忍自己的身后是“未知”:看一本書,一個新的概念A(yù)是用我不了解的概念B、C來解釋的,我連B、C都不懂怎么學A?沒法學了!

              不是人家書寫得不好,而是沒有任何辦法能把一個圈扯成一條直線的。學習的過程本質(zhì)上就是一個循環(huán)往復(fù)的過程,的辦法就是“存疑”:在本子上記著,有B、C這樣兩個概念是我暫時不理解的,然后就不再去想這回事,而是相信自己已經(jīng)理解了B、C,基于自己的理解和假設(shè)去學習A,由A再去理解X、Y,這樣學下去,走完一圈之后再回來,自然就明白當初對B、C的假設(shè)正確不正確了,理解了這兩個概念,就從本子上劃掉,這時需要再走一圈,把原來的一些錯誤認識糾正過來。所以,任何書都要至少看兩遍,第二遍看的時候你會對很多概念有新的認識,因為你看過這個概念后面的章節(jié),在此基礎(chǔ)上產(chǎn)生了新的認識。古人早就明白這個道理,所以提出了“溫故而知新”。

              7、如何處理打游戲和學習的關(guān)系?

              黑客們都有一些特別的業(yè)余愛好,并且往往是非理性思維的愛好,大概是需要換換腦子吧。典型的例子是因滑翔機事故去世Stevens,他寫了FAQ8所推薦的Bible當中的三本。愛打游戲的程序員肯定大有人在,有一些還成了的游戲開發(fā)人員。但是我認為,要想成為的程序員,必須有兩點基本素質(zhì),一是對編程非常感興趣,二是對所有別的事情都不感興趣,或者都不如對編程感興趣。有人說,人的有24小時,8小時休息,8小時上班,另外的8小時在干什么就決定了你以后有多大發(fā)展。一有時間就看書學習,這就是一個程序員應(yīng)該做的。今天打游戲,明天看電影,后天炒股,那么你就等著三十五歲下崗。如果你不能夠認同編程和思考是比其它事情更有吸引力的,那么你不必學編程,集中精力去做喜歡的事情或許會有更大的成就。

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩欧美亚洲一中文字暮精品 | 性高朝久久久久久久 | 在线偷着国产精选视频 | 一区国产亚洲欧美日韩在线一区 | 亚洲精品视频在线看 | 亚洲国产在人线午夜播放 |