做驅(qū)動(dòng)開發(fā)還是做應(yīng)用開發(fā)更在前途,意思就是說,“你告訴我哪個(gè)更有前途,我就好好學(xué)哪個(gè),另外一個(gè)就不用學(xué)了”。問這種問題的同事往往會(huì)同時(shí)問另外一些問題:我以后就想做驅(qū)動(dòng)開發(fā),你教我這些應(yīng)用開發(fā)的技術(shù)有什么用?C++用得多嗎?學(xué)了有什么用?我以后不想做GUI,你教我Qt有什么用? 學(xué)習(xí)最忌諱的就是“有用的就學(xué),沒有用的就不學(xué)”這種功利的態(tài)度。兩個(gè)問題: 第一,在你還沒學(xué)進(jìn)去、還不了解這種技術(shù)時(shí),要如何判斷這種技術(shù)學(xué)了有沒有用?只能是根據(jù)道聽途說,看各種論壇上都怎么說的,豈不知論壇上參與這種討論的100%都是菜鳥,有的水平還不如你。第二,就算你學(xué)的技術(shù)沒有用上,有什么損失嗎?從嵌入式工程師可以從事各種各樣的開發(fā)工作,有做驅(qū)動(dòng)的,有做系統(tǒng)編程的,有做GUI的,有做Web開發(fā)的,只要確定了做一類工作,就不可能把嵌入式所學(xué)的知識(shí)都用上,但至少也用得上3/4的知識(shí),假設(shè)剩下的1/4你一輩子也沒機(jī)會(huì)用上了,那也就損失你一個(gè)月的學(xué)習(xí)時(shí)間而已,相比于你的收獲,這算是很大的損失嗎? 請注意,上面的假設(shè)是不成立的,沒用上的那1/4也只是暫時(shí)沒用上而已,程序員要換工作或者換項(xiàng)目是很常見的,任何人都不可能只涉及一類開發(fā)工作,只要有扎實(shí)的基礎(chǔ)、完備的知識(shí)體系,任何工作都能輕松上手。扎實(shí)的基礎(chǔ),完備的知識(shí)體系,我們在安排課程體系的時(shí)候,正是以這兩點(diǎn)為依據(jù)的。有的課程內(nèi)容很少有學(xué)員在以后工作中會(huì)用到,但是缺了這一環(huán)就不成為一個(gè)完備的知識(shí)體系,例如通過C++來講面向?qū)ο缶幊蹋ㄟ^Qt來講面向?qū)ο蟆⑹录?qū)動(dòng)和狀態(tài)機(jī)編程,這些編程思想是程序員必備的基本素質(zhì),而C++和Qt可能有些學(xué)員以后工作用不到,那這種課該不該上呢?毫無疑問該上。至于還有些人爭論說C++不如Java用得多,Qt不如GTK用得多,其實(shí)這種爭論是無意義的,有工夫爭論誰優(yōu)誰劣,不如把兩種都學(xué)了,會(huì)更有收獲。回到做驅(qū)動(dòng)開發(fā)還是做應(yīng)用開發(fā)更有前途的問題。我只能說,做好了都有前途,做不好都沒有前途,只會(huì)做一樣而完全不懂另一樣是最沒前途的。不要以為內(nèi)核開發(fā)者就不寫應(yīng)用程序,Linus寫了一個(gè)源代碼管理系統(tǒng)git來維護(hù)內(nèi)核,因?yàn)橛X得現(xiàn)有的源代碼管理系統(tǒng)都不好用。牛人都是這樣,需要什么就寫什么,才不管是kernel space還是user space。同樣,做應(yīng)用開發(fā)如果不懂內(nèi)核,也沒有辦法很好地利用內(nèi)核提供的服務(wù)寫出性能最優(yōu)的程序。做內(nèi)核難,因?yàn)檎{(diào)試難,要跟蹤大量的并發(fā)線程,因?yàn)槿腴T難,要寫一個(gè)hello world都需要學(xué)很多知識(shí)。做應(yīng)用也難,回頭去看1,計(jì)算機(jī)科學(xué)從理論到實(shí)踐大部分都在上面兩層做文章。所以不存在哪個(gè)更難哪個(gè)更有前途的問題,任何關(guān)于哪個(gè)更難的討論都是too naive的。
|