從小白到月薪20K,我的C++學習思路總結!

前言
  • 讀者定位是兩類人羣:a.初學者,即將入手 C++ 語言、不知道如何開始;b.已經開始學習C++許久了,卻進度緩慢,抓不到精髓,倍感迷茫。
  • 本文不會深入到C++語言內部挖掘技術點。
  • 如果你自詡C++高手,請繞道;如果你本就是C++高手,開發經驗豐富,可以對本文提一些建議。
  • 本文將結合我自己的學習經歷和經驗,談一談 C++ 應該如何學習。
  • 文章中提及書籍的時候沒有評價。我的書籍推薦中列舉了一些 C++書籍,都有我的相關評價,感興趣的可以看一看。

【文章福利】:小編推薦一個C語言/C++交流羣:967051845!整理了一些個人覺得比較好的學習書籍、視頻資料共享在羣文件裏面,有需要的可以自行添加~

爲什麼 C/C++?

C++ 是一門編程語言,請注意它僅僅是一門編程語言。這句話的意思就是一旦有人在做語言好壞之爭的時候,一笑而過即可。特定的語言只是用來在特定的領域解決特定的問題,僅此而已,尤其是現在衆多語言紛飛的年代,這句話的正確性不容置疑。

在編程領域裏,每個人都會有他/她的入門語言,各持己見。我個人認爲 C 語言是一個很不錯的選擇,語法簡單,深度可深可淺,高級語言的鼻祖。很重要的一點是現今的各種編程語言,或多或少都是 C 語言的衍生品,或者是衍生品的衍生品。語言相通,只要 C 語言學好了,上手其他語言問題不大。C 語言的靈魂在於指針,指針可以幫助你更好的理解內存,理解操作系統的工作機理。

C++ 是一門爭議性語言,喜歡研究的人很多,吐槽的(包括一些大神級的人物)的人也很多。在 C/C++ 的時代(C/C++剛出道的時候),語言的可選性較少,所以 C++ 幹了許多事情,現在時代不一樣了,正如我前面所謂語言紛飛,針對性語言衆多,程序員的選擇性也就多了(有很多的優秀的語言可以去學,C#,java,php,python,ruby……),所以 C++ 不再是必須品。

在你開始學習之前,請慎重考慮一下,爲什麼要學?如果考慮好了,請繼續閱讀。

C++新手

選擇一本好書

如果你發現以“數字”命名的書籍,請扔掉!(21天學通C++?)
如果你發現以“通”字樣命名的書籍,請扔掉!(零起點學通C++?C++從入門到精通?)
如果你發現把“Visual” 和 “C++” 聯繫起來的 C++ 教程,請扔掉!(太多了,不舉例了)
如果你發現“void main”作爲實例的書籍,請扔掉!
如果你發現“”作爲實例的書籍,請扔掉!
……

有幾本書可以供你選擇:《C++ Primer Plus》,《C++ Primer》,《C++程序設計語言》

我入門用的是《C++入門經典》,繼而讀的是《C++ Primer》。其實好書和差書很容易區分,厚度和價位是一個很關鍵的點,通常薄薄的,又便宜,書名卻非常霸氣的告訴你如何精通,那你果斷扔了,想都不要想。

選擇一個好的IDE

請注意我強調的是IDE(集成開發環境),而不是套餐(GCC+VIM/EMACS+GDB+[linux]),對於一個初學者來說,一定要抓住重點。

初學者一定要相信這一點,網上太多人吹噓學 C++ 不應該用 IDE ,就應該直接 文本編輯器+GCC 用 GDB 調試,進而言語鄙視 IDE 。我不知道你抱着什麼心態,我只想說你入門是那樣入門的嗎?當時有沒有 IDE ?你瞭解 IDE 嗎?你公司用什麼開發?

對於一個入門新手,一個人性化的調試環境是必須的。當然,作爲一個 C++ 程序員的話,GCC/GDB 是必須要去了解的,linux 也是必須要會的。

C++入門(停留在表面)

參考標準:熟練掌握 C++ 語法結構,瞭解 C++ 主要模塊,技術難點。大部分書上可以找到的知識點。

學習 C++ 要不要學習 C ?

作爲這樣的一篇文章,這個探討幾乎是必須要做的。

我的觀點很明確,要學!

因爲我先學 C 語言,後學的 C++ 的,而且學習使用過程中無數次穿插的相互學習。我的程序中從來沒有刻意的區分這是 C 還是 C++,我把握的標準是怎麼樣方便怎麼來。

就好像文件讀寫我從來都不用 C++ 的文件流,因爲我習慣了 C 語言的 fread、fwrite、 fopen、 fseek、 ftell 等等。

我是站在語言的語法和庫的角度來說“要學”的。如果你要學面向對象的話,那就沒必要學 C 了,好像也沒有學 C++ 的必要了,你可以選擇一個純面向對象的語言去學面向對象豈不更好。

總結,以我的個人經歷來說,學 C++ 可以先學習 C 語言(觀點已明確,探討結束!)。

要了解哪些東西呢?總結是兩點:語法和庫。所有的語言幾乎都是一樣的。

  • 語法[基本類型、標準庫類型、數組和指針、表達式、語句、函數等]
  • STL[容器,算法]
  • 模板與泛型編程
  • 類與面向對象

語法熟練的是必須的;熟練使用 STL 編程,面向對象思想不是一天兩天就可以有的,需要不斷的歷練和實戰才能培養出來的;面向對象在C++中的實現方式一定要熟(繼承,派生,虛函數等);模板的實參演繹要搞清楚。

如何實現入門?

  • 看書。《C++ primer》,《C++標準程序庫》,《C++ template》
  • 多思考,多寫小程序。
C++進階(技術研究)

參考標準:內部機理,奇淫技巧

  1. 深入C++內部,探究實現的機理[爲什麼模板不支持分離編譯?虛函數/多重繼承是怎麼實現的?類型轉換做了那些事情?異常處理?等]
  2. STL源碼學習[學習別人的設計方法?爲什麼STL效率高(爲達效率,無所不用其極)?學習數據結構和算法?內存池?RTTI?等]
  3. 內存[理解指針運算?內存對齊?類的內存佈局?new/delete 和 malloc/delete的區別?函數變參的實現?存儲方式?智能指針?等]
  4. 編譯器在編譯,鏈接的過程中偷偷的做了那些事情。[如何分析編譯器的提示?鏈接錯誤代表可能出現哪些問題?等]
  5. 跟上C++庫的潮流,研究新標準。

如何實現進階?

  • 看書。Effective 系列書籍,《STL源碼剖析》,《C++標準程序庫》,《C++沉思錄》,《高質量C/C++編程》,《C++編程思想》,《深度探索C++對象模型》等。
  • 寫軟件,遇到問題之後自己折騰,自己探索。
  • 逛社區,回答別人的問題。
  • 多看看別人的博客。
  • 結交自己的技術圈子。
最後

現在的互聯網是浮躁的,導致現在的學生是浮躁的,都想一步登天。

現在學習環境的骯髒的,是個人都想出來賺幾聲吆喝,就拿博客園的首頁口水戰一樣,你噴我,我噴你,其實到最後都不知道大家在噴什麼,只知道必須站出來噴一下證明自己的存在!這是多麼可悲的一個環境。

最後給大家幾個忠告來結束本文吧:

  • 多交流:不管你的技術多麼硬,你都不可能一個人做完所有的事情,你要學會與別人合作,與別人交流。交流過程中,要注意交流技巧。學會尊重別人,但要不亢不卑。

  • 多動手:熟能生巧,這是萬能之理。我們乾的是技術活,最能證明自己能力的就是幹!不是扯淡!

  • 多思考:不要做編碼機器。

  • 多總結:相同的問題不可能只出現一次,尤其是在我們這個行業。總結是爲了你在以後更快的解決類似的問題,提高工作效率。

能說的還有很多,讓博客待續……

文章福利

對於自己找不到視頻、書籍資源的讀者,可以加小編的C語言/C++交流羣:967051845!整理了一些個人覺得比較好的學習書籍、視頻資料共享在羣文件裏面,需要的可以自行添加下載即可~

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