軟件究竟如何學----勸告那位92的孩子

今天讀到了一篇很讓我震驚的文章,一位92年的孩子早早開始工作,做着很多人認爲高不可測的程序員工作,拿着一個月5500塊的工資。在北京,這對於一個剛剛入行沒多久的孩子來說,這算是個奇蹟了。可是,這個92的孩子,請不要被眼前現象所迷惑。
   
   每個工作過一段時間的人都知道,剛開始賺多少錢,無論是1000,還是10000,都不重要,這只是你剛剛起步時的一個工資罷了,以後日子還很長。所以任何人都不要拿剛起步時的工資來作爲評價一個人水平高低的標準。重要的是,在這份工作上你究竟可以學到什麼,接觸到什麼?
   
   這位孩子(對不起,原諒我這麼叫你,可是你的確還是個孩子)是這樣介紹自己的,熟悉JAVA,C#等等,這是一個很誘人的條件,可是我想問,究竟何爲熟悉呢?現在的IDE,尤其是.NET的Visual Studio實在是太強大了,我幾近想把他稱爲傻瓜式操作。如果只是做一些最常見的管理軟件,網頁,我個人認爲是沒有什麼技術含量的。當然我並不是指大數據量,海量數據之類,只是那種大學時期的課程設計之類的東西。如果說把這些理解下來就叫熟悉,那就有些自欺欺人了。
   
   現在的程序員入口越來越低,看北京很多的培訓班號稱三個月讓一個零基礎的人精通.NET,這是個多麼可笑的笑話!我也曾報這那麼一絲幻想去看過他們的培訓,最後的成果是做出來一個沒有安全性,沒有面向對象,沒有線程,幾乎就是所謂傻瓜式的開發出來的網上書店。如果這就是精通,我們又何必去苦讀若干年學,一個天賦好些的人我認爲半個月就可以達到這種水平,那究竟該如何去學習軟件。
   
   我認爲學軟件最重要的一點就是千萬不要急於求成,在軟件的世界中,請你永遠都不要相信有速成這個詞。基礎很重要,什麼是基礎,就是我們在大學學到的那些東西,離散數學,數據結構,概率論以及操作系統,軟件工程等等當時我們覺得沒什麼用的基礎課,恰恰相反,這纔是軟件生涯中最重要的東西。語言是不斷變化的,從曾經的面向過程,到今天的面向對象,再到今天的很多很多什麼函數式編程,面向服務架構很多很多,只有思想是不變的!
   
   在這裏,給出一個我個人建議的學習軟件的路線。
   
   一直以來,這點都不曾變過,也是很多人都堅信的觀點。面向過程在當今的應用越來越少,但是請記得C是一定要學的語言,我個人認爲C是學習軟件最好的入門磚。學習C,你可以不用瞭解太多細節,不用去懂圖形化編程,而是要通過C來掌握程序設計的基本思想,在我的軟件生命中,我認爲C是對我影響最大的一門語言。C究竟要學到什麼程度。我認爲可以寫出簡單的算法程序,懂得鏈表,可以用鏈表做出一個電話薄之類的東西也就可以了。當然專業C和C++程序員除外。
   
   學習過C之後,選擇一門面向對象的語言,諸如JAVA,C#之類的語言。學習面向對象軟件開發的基本思想,打好語法基礎!這點是最重要的,一定要打好語法基礎。用C#做例子,千萬不要去着急學Winform開發,ASP.NET之類的東西,記得這只是.NET的一個小應用罷了,C#和麪向對象纔是根本。C#語法學得差不多之後,看着,我這裏說的是學的差不多。高級特性你可以拋開不去看。這支需要很短的時間,因爲你有了C的經驗,對於你來說難的也許只是面向對象。
   
   然後就應該是基礎課程的學習了,我想這個就不用我多說了,各種數學,操作系統,數據結構,算法分析等等。就是很多人說沒有用的東西,很多人質疑中國的教育,曾經我也這樣想過,我認爲中國的教育很失敗,因爲在這裏什麼都學不到,學到的只是沒有用的。直到前段時間才發現自己的想法是多麼的幼稚,中國的教育失敗的只有大學的考試太過於容易,很多人不用學也能夠輕鬆通過,這是中國教育失敗的地方。但是中國的基礎教育,我認爲還是相當成功的!老師的水平問題我們拋開不談,我指的是這種培養體系。
   
   好了,這些基礎課程學得差不多了,我想時間應該要很久。這段時間你也許會很受折磨,因爲對於任何一個程序員來說,學這些枯燥的理論是很痛苦的,憑這些,你也找不到一份好工作。但是,這些會讓你終身受益!可以開始我們最愛學的程序設計語言了,這個時候還不是學Winform,ASP.NET等應用的時候,你的語言水平還差得遠,還是用.NET說話,多買些C#高級的書去看一看,你會發現你學的C#語法還只是冰山一角,開始去解析下.NET本質吧,也去看看C#的高級特性,比如泛型,比如特性等等。然後看看2.0,3.0,再到3.5,去想想.NET每代的更新究竟都是爲了什麼,究竟什麼是.NET真正的提高,而哪些只是編譯器的口香糖。學點IL吧,對你有好處的。
   
   接下來才應該是Winform和ASP.NET的學習,有了好的C#基礎,學起來這些是很容易的,拖幾個控件,小學水平都可以做到。買本像<<ASP.NET2.0揭祕>>之類的書,快速地把控件看一遍,然後看看一些高級應用和Web理論基礎。這個時候你做的網站還都是些垃圾代碼。這個時候一個重要的東西出現了,就是設計模式。有些人說設計模式是在應用中學習的,我不認同這個觀點,也許你沒有工作還不知道變化點,不知道什麼地方該設計,什麼地方設計後是過度設計。但是至少你要形而上學,也就是說至少你該知道有什麼設計模式,每種設計用於什麼場合。然後在你的代碼中強行加入設計模式,即使是設計過度,記得!不會設計模式的人遠遠比設計過度的人多得多,而且設計過度是你學習設計模式最好的方法。
   
   好了,這些都差不多了,你基本可以算得上一個入門級程序員了。可以保證你找到一份工作了,雖然不會太好。
   
   開始回頭重學一遍吧,從C再來一遍,或者是C++。看看你的面嚮對象語言和C究竟差在哪,有什麼優點,有什麼缺點,內存分配上差在哪等等.......然後深層地學學C#,比如《.NET框架設計》,《CIL》之類偏理論的書,這個時候你會知道你從前的C#學習是多麼膚淺。剩下,還是一樣,快速的重覽數據結構,軟件工程,(要快!)這時,你的感觸會和以往不一樣,然後重看設計模式,用.NET框架重析設計模式,自己好好想想這個設計模式在.NET框架的什麼地方有了應用,我還記得前段時間有位牛人朋友在博客園上發了一系列的文章叫《圖解.NET框架》,讓我受益匪淺。好了,如果這些你都可以了,你可以真的去學Winform和ASP.NET了,比如《.NET安全編程》之類的東東。
   
   這些你都掌握了,好了,剩下的不用我說了,我也沒資格說了,你沒問題了。你只需要追隨着微軟的步伐就可以了,推出什麼你學什麼!你是個牛人了!
   
   對那位92的孩子,對你,我只是勸告,我很羨慕你,羨慕你那麼早的可以接觸到軟件,接觸到程序設計,但沒有半點嫉妒,也沒有嫉妒的必要。我想說,在這麼小的年齡就放棄繼續深造的機會,絕不是什麼好事,不要把自己當作蓋茨,戴爾,這樣的可能性很小,在中國,這樣的可能性更小。如果你仍然憤慨中國的教育,我不想說太多。只告訴你,不要被眼前的景象迷惑雙眼,你還小,基礎一定要打好,沒有誰願意敲一輩子代碼,做一輩子開發。你想出國深造,這是件好事,如果這樣的話,我勸你一定要把英語和數學學好,否則你是讀不上好學校的,出國不是你想象中的那麼簡單。
   
   最後,我祝你成功!我希望若干年後再新聞上可以看到,一位92年的孩子成爲了軟件.......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章