C++ 學到什麼程度才能叫精通?

羅鎮鴻


很高興回答你的問題,我是一名從事c++工作的科技工作者

我先回答問題,這個精通的定義是什麼,恐怕每個人心中都有個版本,但是我還是想來談談這個問題。

首先精通的基本就是紮實掌握c++基礎,瞭解它的特性和優勢以及劣勢,這樣你對這個c++有一個客觀的認識。

這點也可以歸結為“技巧”,技巧就是外在的東西,通過短時間的針對訓練可以掌握,就是形於外的東西,具體比如c++的語法,基本的使用方法,基礎的類庫等等,這些東西形於外的東西。

還有就是內化的東西,這個就是編程思想了,是利用外在的工具和技巧,怎麼最優化實現需求的思想,這個編程思想是相對於外在的技巧來說的,只有編程設計思想OK,那麼才能符合設計要求,才能做到最優化實現。

只有“技巧”和“思想”結合起來,兩個都要硬,這樣才能實際編程中游刃有餘,真正做到融會貫通,這樣才是精通的境界。

希望我的回答對你有用。

高手過招


山海皆可平z


一個非常好的問題。C++是主流開發語言,應用非常普遍,不同的業務場景會用到不同的知識點。

一,怎樣才算精通?

其實這個問題應該這麼說,學無止境,你準備學到什麼程度?

1,初級開發工程師

開發完成分配的任務,只要按照要求做就行了。項目框架都是已經搭好的,不需要考慮使用什麼樣的框架,甚至怎麼用、怎麼寫都有明確的要求。

2,中級開發工程師

相比初級來說,發揮餘地稍微大一點,比如開發實現一個功能,就要多考慮一下,使用什麼樣的數據結構更高效,是否使用Set、List或者HashMap?

3,高級開發工程師

有些技術公司和團隊對高級工程師的定義標準是非常高的,比如為什麼要選擇這個架構或者設計模式?優缺點、性能和擴展性好不好?部署維護是否方便?數據備份方案是否完善等等。

二,有比較才有定位

推薦一個在線編程網站,HackerRank,看名字就知道很牛,Hacker排行榜,不僅提供了很多針對初學者的編程練習題,還有成績排名、編程競賽、勳章標記等。

1,註冊賬號,登錄,選擇要學習的編程語言

2,選擇題目,可以設置難度和功能分類

3,編寫代碼

4,運行測試

5,提交代碼,通過單元測試用例後,得到評分

6,積累到一定分數後,獲得C++勳章

可以邀請同學朋友一起練習,參加編程競賽,增加學習樂趣和動力。


我是工作多年的Web應用架構師,陸續發佈關於軟件開發方面的文章,歡迎關注我,瞭解更多IT專業知識。


急速馬力快de源碼控


當你能自如的運用數據結構和算法、TCP/IP原理、編譯原理、操作系統原理、數據庫以及Win32API調用、構造自己的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、圖像識別、人臉識別  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和.netframework。關於MFC有兩本經典的書,候俊傑的《深入淺出MFC》和孫鑫的另外一本,如果要學習.netframework,那麼不妨順便學習一下C#,經典書籍無疑是《C#入門經典》。順便說一下,有了C++的基礎,C#的語言部分基本上兩三天就能熟悉了。  Windows程序員如果要對操作系統更加的熟悉,肯定還要了解Win32API。無論是MFC還是VB、.netframework其本質都是對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++GUIQt4編程》,官方教材。  如果是編寫涉及網絡的程序,比如說類似eMule這樣涉及應用層協議的東西,那麼首先學習一下網絡的基本知識是很必要的,這裡推薦的是《計算機網絡:自頂向下方法》  最後再加一些比較根本的東西:算法。算法始終是軟件的靈魂,經典教材有《算法導論》和《具體數學》等  C++的高級技巧。一般的C++通用教材不會涉及的,而在實踐中又會遇到的某些很彆扭的、比較難回答的問題。這類涉及C++高級技巧的書,最經典的無疑是《EffectiveC++》,另外關於C語言的《C陷阱和缺陷》、《C專家編程》也不錯。


分享到:


相關文章: