送樓主一篇文章:
當你能自如的運用資料結構和演算法、TCP/IP原理、編譯原理、作業系統原理、資料庫以及Win32 API 呼叫、構造自己的C++庫(網路程式庫、數學庫、測試庫、圖形庫)以及各種引擎,出去畢業應該能在短短半年時間裡薪水至少有7000以上甚至上萬吧(其實畢業生出去95%以上可能沒達到這個水平)。
其實也不用說太多,你問你自己幾個問題,如果你都能做到或者學習半到2個月就能做到,那肯定是達標了:
1、我能用C++做出2D的RPG遊戲嗎?(C++與api或架構的結合運用能力)
2、我能用C++通過3種以上的方法寫出四則運算運算式分析器嗎?(C++與資料結構、演算法的結合能力)
3、我能用C++寫出類似STL的簡化版的庫嗎?(庫與架構設計能力與C++進階文法運用能力的結合)
補充:
①、你能這麼問,說明你知道編程能力對IT行業高薪工作的重要性是至關重要的。
②、你的目的性已較強(知道要深入下去),但是你也想有更加明確的目標,我可以給你講一下怎麼自己去尋找目標和路線以及怎樣學習。
③、電腦專業領域一共有幾個大方向,十幾個分支方向,而每個分支方向又有幾十個小方向,每一個方向的深入學習與熟練到一定火候都不是一朝一夕,互相之間也不是完全沒聯絡的,但是你現在就應該選擇一個大方向並在其中的一個小方向內深入(為什麼要這麼早就選擇具體的分支方向?後面說)。
④、這裡列出電腦的幾個大方向(非編程開發類的我就不說了):
基本方向:
1、單片機、嵌入式方向
2、網路編程:涉及到伺服器程式、用戶端開發、指令碼設計等。
3、系統編程:基礎API開發、案頭開發、系統程式開發、服務程式
4、圖形學:3D、2D、Image Recognition、Face Service
5、音頻:語音辨識、音頻解碼、音頻軟體
6、編譯原理:編譯器設計、指令碼解譯器、虛擬機器、非自然語言翻譯系統
7、應用程式層開發:利用高層語言去開發表層應用
8、安全:反工程、病毒、反病毒、木馬、反木馬、軟體破解、軟體加殼
附加方向:
8、人工智慧:遺傳演算法、神經網路、灰色系統等等
9、遊戲設計:各種遊戲引擎設計以及商務邏輯設計等
⑤、基本方向是你一定要選的,附加方向只是基於基本方向的一些錦上添花,但是不管你怎麼選,最開始某些東西一定要深入而不是只是懂就夠(當然你對自己要求似乎不會很低),我把這個列出來:
資料結構:下面其他理論的基礎。
作業系統原理:理解作業系統的架構和細節,你才能對以後關於多線程、檔案管理、記憶體管理、指令優先順序等有一個正確理解和運用。
編譯原理:能夠升華你對電腦程式設計語言的理解,對以後出現的各種編譯、解釋、相容、移植、最佳化、並發與並行演算法等有一個深入理解。
資料庫系統原理:這個是進入公司都要會的,也是大型軟體開發的基礎。
軟體工程:這個是你能夠在經驗不足還能保證大項目正常完成的理論基礎。
網路技術:這個是必須學的,因為目前幾乎沒有一款裝幾率很高的軟體或者平台跟網路無關。
數學的話,主要是:離散數學、線性代數、高等數學、電腦圖形學、機率論
以上幾個基礎就是你成為一個融匯各個主要分支牛人必須學的(當然不是指理論,而是理論+實踐編碼能力)
⑥以上都是大的基礎,要一一攻破並深入學習,雖然網路時代電腦專業知識爆炸式的增長,但是以上幾個基礎掌握後,會發現,以後的什麼新的理論和技術都是基於這些大基礎,你就很容易理解了。
⑦我為什麼開頭不講你要具體學什麼怎麼順序學呢?因為那些技術你要掌握的話,根本可以自己解決,但是如果你由於興趣,沉迷於一些自己可見的小範圍技術的話,那麼畢業後雖然也能找到不錯的工作,薪水也可能高,但是不能成為一個大牛。
現在才開始講學習順序,雖然你說不要推薦書,不過我還是要用書來做順序。
C語言是可以寫很多核心和進階的東西,而不只是小東西,但是從你代碼來看,居然用到了 goto,我不是說你那些程式用到GOTO有什麼不好,而是一定要避免用GOTO,goto是錯誤之源,如果你有什麼內容非要用到goto才能寫到,說明你的編碼技巧還有不少提高空間。
你的學習順序應該是:
C:做一個超級馬里奧出來,並能夠讀取文本指令碼來更新關卡。
C++:寫一個2D圖形引擎,封裝掉細節,實現物件導向設計和可複用設計,並且用到《設計模式》中提到的一些設計模式,這樣才能算對C++有一個很好的掌握。
MFC:MFC技術雖然近期已經冷下來了,但是你能熟練掌握它,才能證明你的C++OO技術夠純熟,嚴格證明你掌握了MFC很簡單,你只要用MFC做出一個殺毒引擎就差不多了。推薦的書有《深入淺出MFC》。
《Windows程式設計》:和MFC不同的是,用的是windows核心SDK,也就是API,這本書學完後,你才能從作業系統層面上算掌握了win32 平台下的機理(其實win64和win32大部分機理類似)。
C#:C#裡**了當代和前沿電腦科學裡最先進的一些文法(雖然執行效率一直被人質疑),但是你學完C#並深入後,至少能夠算是對電腦語言有一個更加深刻的理解了。如何證明你C#學的不錯了?也很簡單,再次寫一個隨便什麼遊戲,比如俄羅斯方塊。如果更加證明自己呢?用它寫一個P2P網路對戰遊戲。
(如果你注意的話,會發現我說的學習順序都是沿著語言和某些技術的,為什麼呢?因為這些語言和技術涉及到特定的領域技術和電腦理論思想,比如【真正】學完了C#的話,就不單指學完了C#,而是把多種語言範式都學習了一遍,以及現代的程式開發思維(因為裡面用到了很多讓你一勞永逸的技術))
以上5個步驟都是基礎大步驟,要解決的話要沒1-2年應該不夠。
與此同時,要儘快選出文中你感興趣的方向作為3-5年的長期方向,不要擔心過早選擇分支方向會有什麼損失,因為電腦很多分支是相通的,只有你把分支方向深入進去,才能真正理解很多理論的實踐意義。並且一旦你在某個分支領域形成了較強的優勢(比如,到公司裡只有你這方面最強),那麼你就是稀缺人才。
關於大方向的步驟就不說了,你主要就是要把我說的這幾個基礎步驟先解決,同時平時要注重大方向理論結合實際去編碼和開發。
如果只是看了一本經典的C++教材,基本上也就只能做一個基於控制台的的“圖書管理系統或者類似而的東西”,而真正需要的東西往往總是與一些其它東西結合的。
比如如果要做一個Windows程式員,首先肯定要會開發Windows下的GUI程式,這就涉及了兩個常用工具――MFC和.net framework。關於MFC有兩本經典的書,候俊傑的《深入淺出MFC》和孫鑫的另外一本,如果要學習.net framework,那麼不妨順便學習一下C#,經典書籍無疑是《C#入門經典》。順便說一下,有了C++的基礎,C#的語言部分基本上兩三天就能熟悉了。
Windows程式員如果要對作業系統更加的熟悉,肯定還要瞭解Win32 API。無論是MFC還是VB、.net framework其本質都是對API的封裝,在對API的瞭解過程中,可以更深刻的理解Windows的運行機制。這裡推薦的無疑是《Windows核心編程》
如果需要開發Windows平台下比較底層的程式,比如RamDisk、殺毒軟體、防火牆等,那麼就又有兩個必學的課題了。一個是Win32彙編,一個是基於C/C++的驅動程式編寫。Win32彙編的書無疑就是羅雲彬的《琢石成器》,而驅動程式的書實在是太少了,將WDM的書可能還有一兩本算是經典,WDF就是開玩笑了。
如果要用C++開發Windows下的遊戲,那麼DirectX無疑是一個必學項目。
如果要用C++開發嵌入式系統,那麼當然要看看單片機和ARM的書籍了(順便說一下,單片機程式基本上都用彙編或者C語言來寫)
如果是編寫用於Linux的GUI程式,那麼就有必要瞭解幾個流行的GUI庫。QT、GTK+、wxWidgets是其中最優秀的幾個。順便說一下,QT還是跨平台的,一次編寫,然後就可以編譯到Linux、Windows、Mac不同的系統中。關於QT的書這裡推薦《C++ GUI Qt4 編程》,官方教材。
如果是編寫涉及網路的程式,比如說類似eMule這樣涉及應用程式層協議的東西,那麼首先學習一下網路的基本知識是很必要的,這裡推薦的是《電腦網路:自頂向下方法》
最後再加一些比較根本的東西:演算法。演算法始終是軟體的靈魂,經典教材有《演算法導論》和《具體數學》等
C++的進階技巧。一般的C++通用教材不會涉及的,而在實踐中又會遇到的某些很彆扭的、比較難回答的問題。這類涉及C++進階技巧的書,最經典的無疑是《Effective C++》,另外關於C語言的《C陷阱和缺陷》、《C專家編程》也不錯。
______________________網摘