前言
- 讀者定位是兩類人羣: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++進階(技術研究)
參考標準:內部機理,奇淫技巧
- 深入C++內部,探究實現的機理[爲什麼模板不支持分離編譯?虛函數/多重繼承是怎麼實現的?類型轉換做了那些事情?異常處理?等]
- STL源碼學習[學習別人的設計方法?爲什麼STL效率高(爲達效率,無所不用其極)?學習數據結構和算法?內存池?RTTI?等]
- 內存[理解指針運算?內存對齊?類的內存佈局?new/delete 和 malloc/delete的區別?函數變參的實現?存儲方式?智能指針?等]
- 編譯器在編譯,鏈接的過程中偷偷的做了那些事情。[如何分析編譯器的提示?鏈接錯誤代表可能出現哪些問題?等]
- 跟上C++庫的潮流,研究新標準。
如何實現進階?
- 看書。Effective 系列書籍,《STL源碼剖析》,《C++標準程序庫》,《C++沉思錄》,《高質量C/C++編程》,《C++編程思想》,《深度探索C++對象模型》等。
- 寫軟件,遇到問題之後自己折騰,自己探索。
- 逛社區,回答別人的問題。
- 多看看別人的博客。
- 結交自己的技術圈子。
最後
現在的互聯網是浮躁的,導致現在的學生是浮躁的,都想一步登天。
現在學習環境的骯髒的,是個人都想出來賺幾聲吆喝,就拿博客園的首頁口水戰一樣,你噴我,我噴你,其實到最後都不知道大家在噴什麼,只知道必須站出來噴一下證明自己的存在!這是多麼可悲的一個環境。
最後給大家幾個忠告來結束本文吧:
多交流:不管你的技術多麼硬,你都不可能一個人做完所有的事情,你要學會與別人合作,與別人交流。交流過程中,要注意交流技巧。學會尊重別人,但要不亢不卑。
多動手:熟能生巧,這是萬能之理。我們乾的是技術活,最能證明自己能力的就是幹!不是扯淡!
多思考:不要做編碼機器。
多總結:相同的問題不可能只出現一次,尤其是在我們這個行業。總結是爲了你在以後更快的解決類似的問題,提高工作效率。
能說的還有很多,讓博客待續……
文章福利
對於自己找不到視頻、書籍資源的讀者,可以加小編的C語言/C++交流羣:967051845!整理了一些個人覺得比較好的學習書籍、視頻資料共享在羣文件裏面,需要的可以自行添加下載即可~