如何成爲一個優秀的高級C++程序員

C++這門語言從誕生到今天已經經歷了將近 30 個年頭。不能否認,它的學習難度都比其它語言較高。而它的學習難度,主要來自於它的複雜性。如今 C++ 的使用範圍比之前已經少了不少,java、C#、python 等語言在不少方面已經能夠代替 C++。可是也有不少地方是其餘語言徹底沒法替代的,主要集中在須要運行效率比較高的行業,好比遊戲、高效的服務器。java

  如今學習 java、C#等語言的人數遠遠高於C++,主要是 C++ 的入門門檻過高,可能學習了一段時間後還作不了什麼東西,致使信心大受打擊,進而放棄。python

  我想把我本身的經驗分享給你們,但願幫助新人少走些彎路。mysql

  在此咱們不討論具體的技術細節,只說咱們應該學習什麼東西。linux

  1、技術能力程序員

  1. 語言算法

  咱們要成爲一個程序員,學的東西會不少很雜,可是最開始必定要從語言開始學習,而學習語言最關鍵的莫過於選好一本書,學校的教材就算了,根本沒有寫得好的。在此隆重推薦《C++ Primer》,這本書很厚,內容也很豐富,對知識的講解不只僅停留在表面。若是這本書能有耐心看完,語言方面基本就沒有什麼大問題了,對之後的學習也打下了一個很好的基礎。sql

  2. GUI數據庫

  C++方面的 GUI 庫有不少種,好比 MFC、WTL、wxWidgets、QT。這些 GUI 庫都各有本身的特色,其實咱們只要先了解一種就能夠了, 只要深刻了解了一種 GUI 庫,須要的時候再學習其餘的就夠了,本質上都差很少,很快就能夠上手了。MFC 雖然設計上有不少問題,可是做爲入門仍是不錯的, 並且學習資料不少,碰到問題也好解決。編程

  3. 數據結構和算法windows

  不少人都忽視了數據結構和算法方面的知識,尤爲是一些編程語言的庫作得很是好,幾乎不須要本身去實現一些數據結構和算法,致使如今不少程序員不重視甚至忽略這方面的知識。可是,當咱們想讓咱們的程序跑的更快、內存佔用更少的時候,這些知識就很是很是重要了。不少程序員都是剛開始的時候不重視這些,可是工做幾年後又來補習這些知識。

  最開始可能不須要學習的太深刻,可是基本的數據結構和算法必定要知道。

  推薦《數據結構(C語言版)》,在數據結構和算法的學習中,最好不要去關心面向對象方面的技巧,就用C語言來實現,這樣能更關注於算法自己的內容。

  4. 數據庫

  學習數據庫的基礎知識,而且掌握一種數據庫使用,推薦使用 mysql,並且最好不要用一些封裝好的接口,而應該直接用 mysql 提供的數據庫 api,可能對數據庫瞭解的會更深刻。

  5. 並行

  cpu 主頻已經不能遵循摩爾定律了,如今 cpu 發展的趨勢是多核心。不管是多線程,仍是多進程,都是爲了更好的利用 cpu 的性能,提供更好的用戶體驗。這就要求咱們若是要寫出高效的應用程序,必然要涉及到並行計算。多花些精力在並行計算上吧,必定會有豐富的回報。

  6. 網絡編程

  這裏所指的網絡編程是指 socket 編程。如今 C++ 的應用不少都是在作服務器開發,如何開發一個高併發、大吞吐量、高穩定性的服務器就是咱們要考慮的了。

  7. 設計模式

  設計模式不是具體的技術,更多的是如何讓代碼更容易閱讀、更好擴展、更容易使用。

  8. 庫的使用

  C++標準庫僅僅提供了一些很基本的功能,因此咱們常常會引入一些第三方庫。最著名的恐怕就是被稱爲準標準庫的 boost 庫,它提供了咱們編程中用到的各方面的技術,文本處理、算法、網絡、多線程、圖像處理等等,幾乎無所不包。其它也有一些專著於某一方面的庫,好比 ACE 是網絡通訊方面的,TinyXML 是解析 xml 的,OGRE 是圖形渲染方面的。

  9. 操做系統的知識

  程序員須要瞭解的操做系統知識和普通用戶是不同的,一個高手是須要深刻了解操做系統的方方面面,而不是停留在使用層面。至於應該瞭解哪些知識,windows 上的去看《windows 核心編程》,linux 的去看《深刻理解 linux 內核》,應該能夠知道本身應該學什麼了。

  2、項目經驗

  以上的內容若是都精通了,也算是個比較厲害的程序員了。可是對程序員來講,項目經驗更加劇要。一個好的項目可讓你把各類技術進行綜合運用,而且能學到一些新的知識。好比說作遊戲的就須要學習圖形方面的知識,作播放器的要學習編解碼器方面的知識。

  不少程序員會忽略項目的經驗,而單純的談技術能力,這是錯誤的。其實這就是理論和實踐的關係,技術就是理論知識,作項目就是實踐,理論對實踐有知道做用,實踐能加深咱們對理論的深刻理解。

  3、溝通能力

  溝通能力是一個高級程序員要具有的軟實力。

  我這裏想說的溝通能力並非通常說的能說會道,誇誇其談,說話天花亂墜。而是創建在技術基礎之上的溝通能力。

相關文章
相關標籤/搜索