做驅(qū)動開發(fā)還是做應用開發(fā)更在前途,意思就是說,“你告訴我哪個更有前途,我就好好學哪個,另外一個就不用學了”。問這種問題的同事往往會同時問另外一些問題:我以后就想做驅(qū)動開發(fā),你教我這些應用開發(fā)的技術(shù)有什么用?C++用得多嗎?學了有什么用?我以后不想做GUI,你教我Qt有什么用?
QQ 黃工 2685896890
學習較忌諱的就是“有用的就學,沒有用的就不學”這種功利的態(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ā)還是做應用開發(fā)更有前途的問題。我只能說,做好了都有前途,做不好都沒有前途,只會做一樣而完全不懂另一樣是較沒前途的。不要以為內(nèi)核開發(fā)者就不寫應用程序,Linus寫了一個源代碼管理系統(tǒng)git來維護內(nèi)核,因為覺得現(xiàn)有的源代碼管理系統(tǒng)都不好用。牛人都是這樣,需要什么就寫什么,才不管是kernel?space還是user space。
同樣,做應用開發(fā)如果不懂內(nèi)核,也沒有辦法很好地利用內(nèi)核提供的服務(wù)寫出性能較優(yōu)的程序。做內(nèi)核難,因為調(diào)試難,要跟蹤大量的并發(fā)線程,因為入門難,要寫一個hello world都需要學很多知識。做應用也難,回頭去看1,計算機科學從理論到實踐大部分都在上面兩層做文章。所以不存在哪個更難哪個更有前途的問題,任何關(guān)于哪個更難的討論都是too naive的。
|