攝于2020-12-11 上海環球港 一樂拉面
大家好,我是阿秀。
前言
上篇文章發布后,問我如何學習 C++ 的小伙伴可遠比問我如何寫簡歷和刷題的多多了,思慮再三還是先把自己的 C++ 學習路線發出來吧,從入門到入土的那種。坐好小板凳,準備發車了~
萌新入門
我在 2019 年 8 月之前對 C++ 的認識只停留在“Hello world”上,本科時期學的全忘光了,面向對象三大特性:封裝、繼承、多態,我就記得一個多態。出于想要掌握一門工業級語言的初衷,去年 8 月我開始了 C++ 的學習之旅。
不少人問我為什么選擇 C++ 而不是 Java ,我能說是喜歡 C++ 的嚴謹和不好學嗎…
“我在 B 站上大學” 對阿秀而言并不是一句玩笑話,當時第一反應就是去B站上看看有沒有相關視頻,再三選擇后最終確定了 黑馬機構出版的 《C++ 入門視頻》,樓主當時開著 1.5 倍速很快就看完了,還跟著視頻里敲了不少代碼,這個視頻會教你一些最基本的 C++ 常用知識比如多態、繼承之類的,但是都不是很深,只是大概提了一下。看完之后自己覺得大概懂了 C++ 有哪些知識點了,可后來事實證明,我確實有點想多了。

黑馬的視頻很快就看完了,又開始看經典的 C++ 書籍,我選擇了《C++Primer 5th》,這本書相當不錯,共分為 19 章:前 8 章為變量、循環等基本知識,第 9-12 章為標準庫的知識比如容器算法等,第 13-19 章為設計、拷貝、重載等知識。課后習題基本都做了一下,并且從網上找了正確的習題答案,進行查漏補缺,自己也在書上也做了不少筆記,大概花了 3 個月左右的時間過了一遍這本 C++ 圣經。
C++ Primer 筆記
在看前 8 章期間就已經直接去力扣開始懟題了,慫什么,就是干,干就完事了,在實戰中學習進步,哈哈!大概是在 2019.9 月開始到 2019.12 月期間前前后后刷了 180 多道力扣。

在 11.13 號那天最瘋狂,我一晚上提交了 29 次,清楚地記得那晚刷了 7 道題,那天我是夜里三點回宿舍睡覺的,最后一道題卡了我 2 個多小時才做出來。
漸入佳境
時間來到了 2019.12 月末,在學習《C++Primer 5th》與刷題過程中,我知道了還有 STL 這種神奇的東西,也知道了另外四本經典的 C++ 書籍:《Effective C++》、《More Effective C++》、《STL 源碼剖析》、《深度探索 C++ 對象模型》。

我一口氣全買了回來,看完《C++Primer 5th》后一頭扎進《STL 源碼剖析》這本書里看,可是我看的云里霧里,完全不知作者侯捷老師在書中所云為何物。遂轉而去看《Effective C++》越看越覺得自己是頭豬,也越看越了解到C++的博大精深,花了大概一個月的時間看完了這本書后又接著去看《More Effective C++》,這個時候學校也快放假了,就把兩本《Effective C++》帶回家了,打算寒假在家接著看。
在坐火車回去的路上我也沒閑著,把 B 站的《C++ STL 體系結構與內核分析-從平地到萬丈高樓》的視頻下載在 ipad 上,一邊坐火車一邊看視頻。
2019年寒假期間在家刷完了兩本《Effective C++》,又看了侯捷老師的其他 C++ 視頻:《侯捷C++手把手教學(上),適合新手》、《侯捷手把手教學C++(下)已補充完畢》、《C++內存管理-從平地到萬丈高樓》、《C++程序的生前死后-解密 CRT Startup code》。除了前兩個視頻是開 2 倍速看的,其余的均是仔細慢慢看的。侯捷老師不愧是 C++ 大師,真不是吹的,被侯捷老師深深折服了。
當時2019年寒假的時候家里有人生病住院了,我去陪床,把自己的ipad帶著,一邊陪護病人一邊刷C++視頻,233~
后來的事情大家也知道了,過年期間疫情爆發了,后期導致遲遲不能回學校。在此期間也知道了 C++ 跟網絡編程聯系很大,決定去看看網絡編程與 C++ 結合的一些案例。
持續充電
經過查閱資料,最終三本書走進了我的視線:《TCP/IP 網絡編程》、《Linux 高性能服務端編程》、《Linux 多線程服務端編程:使用 muduo C++ 網絡庫》,最先看的是游雙老師的那本《Linux 高性能服務端編程》,看了幾天只有一個感覺:我去,這什么啊,這種書居然有那么多人推薦。
后來證明,還是我自己太菜了,水平不到看不懂而已,233~
轉而去看《TCP/IP 網絡編程》,確實不錯,是本很好的書,我還去 github 上找了別人做好的筆記,一邊看別人的筆記一邊看書,最后又在別人的筆記基礎上刪刪改改形成了自己的筆記,把書中的例子也敲了個遍。

然后再把丟開的那本《Linux 高性能服務端編程》拿過來看,感覺真的完全不一樣了,游雙老師在書里說的也能理解了,一邊看書一邊照著書中敲代碼,加深理解。
阿秀也確實感謝這兩本書,后來在這兩本書的基礎上寫了一個爛大街的 Web 服務器作為自己的項目寫在簡歷上了,其中也參考了 tinyhttpd
兜兜轉轉終于可以回校了,在 2020.5 月份回的學校,回校后就把《STL 源碼剖析》這本書撿起來看,越看越覺得跟視頻中講的一模一樣,我看的很快,不到十天就看完了。然后手中就只剩下最后一本 C++ 經典書籍:《深入探索C++ 對象模型》了,我依然是先查閱了別人總結好的筆記資料,然后在別人的基礎上修修改改,形成自己的筆記的。

至此, C++ 算是正式入門了,看了這么多書,你特么告訴我才入門?哈哈,聽起來也許這是個悲傷的故事,但是,是真的。
后來就忙于秋招也沒有繼續看別的 C++ 書籍,只是把以前看的書進行二輪甚至是三輪回顧了,因為有以前的基礎,所以在回顧的時候速度也是很快的,《C++Primer 5th》大概花了 15 天就二刷完了,兩本 《Effective C++》 也是的。
后期上升
上述那些 C++ 書籍基本上足夠應付校招了,后面在看書過程中發現自己在 C++ 并發上欠缺不少東西,又去買了《C++ 并發編程實戰》,沒事就翻著看看。與此同時也在看 muduo 那本書,B 站真的是寶藏網站,阿秀只是抱著嘗試的心態搜索了一下,居然真的發現 B 站上有作者陳碩的講解視頻:《C++高性能服務器網絡編程(陳碩)》,針不戳。
以上就是我過去一年里學習 C++ 的大致歷程,其實真正發力的時間是在 2019.8 - 2020.1 月期間,并沒有多少時間,其余時候都是偷奸耍滑去了~~
其實學完了這些還是不足以應對比較大型的 C++ 項目開發,你可能還需要接著看《C++ 沉思錄》與《C++ 模版元編程》以及其他的優秀書籍接著進階。
好的 C++ 開發者從來不怕找不到工作,就是因為想要學好它不容易,換一種思路就是好好學好它對于你以后的裨益可能是你無法想象的,即使你日后從事 Java/Go 的工作,因為語言的原理都是相通的。
種一棵樹的最好時間是十年前,其次就是現在,加油!
結語
在不知不覺間,才發現自己居然看過不少書了。有時候功夫到了自然結果就出來了,沒有什么其他特別的方法和訣竅的,有時候你會覺得困惑、迷茫、不明白,可能只是時間還沒到。沖就完了,哈哈。
PS:上述文中涉及到的書籍、讀書筆記以及代碼等已經打包分享出來了,去阿秀公眾號后臺回復【001】即可領取。

References
[1]
C++ 入門視頻: https://www.bilibili.com/video/BV1Tb411j7uM[2]
C++ STL 體系結構與內核分析--從平地到萬丈高樓: https://www.bilibili.com/video/BV1db411q7B8[3]
侯捷C++手把手教學(上),適合新手: https://www.bilibili.com/video/BV1aW411H7Xa[4]
侯捷手把手教學C++(下)已補充完畢: https://www.bilibili.com/video/BV1sW411J7JQ[5]
C++內存管理-從平地到萬丈高樓: https://www.bilibili.com/video/BV1Kb411B7N8[6]
C++程序的生前死后--解密 CRT Startup code: https://www.bilibili.com/video/BV1Ab411B73D[7]
C++高性能服務器網絡編程(陳碩): https://www.bilibili.com/video/BV1Ht411p7wx
往期推薦


