小白 C++ 入门到大神发疯学习路线
?
這篇文章實際上是我自己入門過程的總結,一個盡量少廢話的C++入門指南。總結完忽然發現像個讀書清單😄。
具體總結前,想先回答一個問題——要不要先學C,再學C++?
我作為小白時疑惑過這個問題,在此給后來的小白和當年的自己一個答案。
個人看法是,單就學習C++而言,直接學習C++就可以了,不用先學C。在知乎看到輪子哥在微軟維護STL的Stephen Thomas Lavavej都說他當年學C++之前學C語言浪費了大量的時間,早知道就直接從C++開始。
很多老的項目是C語言寫的,之后的編程生涯多半還是繞不開學C語言,不過那時候你已有C++功底,構不成啥大問題。
因此,這篇文章基本不提C的學習,直接硬剛C++。不贊同的看客勿噴,右上叉叉就是了。贊同的同學可以往下看。
入門
《Accelerated C++》,《Essential C++》二選一精讀。《A Tour of C++》選讀。
- 《Accelerated C++》很適合新手,因為她只有短短不到300頁,在普遍磚一樣的入門書籍里面是一股清流。容易通讀完,減少挫敗感。就這樣的篇幅,還能涉及一些標準庫的使用,真的很適合入門。
- 《Essential C++》比較適合有其他編程經驗的中手迅速學習C++。內容會比《Accelerated C++》深一些。
- 《A Tour of C++》,C++ creator扛鼎之作,適合剛學完、還有學完很長時間以后看,快速復習 C++知識。
我當初主看的是 Accelerated C++,在上下班通勤等零碎時間就在手機上看輔助部分的資料,看看跟讀書的理解一不一樣。甚至有時能意識到資料中某些概念的表述不太準確,此刻會發覺自己真的理解了。
這種交叉印證的閱讀法,有人問我有什么必要?(看了幾個內容可能重疊的資料)。好處有兩個,一是能使自己入門時對基礎理解的自信更足些;二是,我沒見過哪本書或哪篇文章,可以從頭到尾完全清晰、毫無歧義的。交叉著看可以讓很多理解盡早明晰無誤。
完成這一步后,就可以開始上GitHub看點別人的代碼,嘗試寫點代碼。
入門這一步是最關鍵的,你初步了解了各種基本概念,并成功書寫和運行起了代碼,感覺真棒吧。
接著下面介紹的,就是順利入門以后的廣闊大海,慢慢慢慢慢慢慢慢、好好好好游吧。留心,不要急,千萬不要抱有直接把后面的內容一口氣學完,再開始干活的想法。因為那樣要耗費巨量時間且效果不好,況且C++是學不完的,也沒有人敢說精通。請一邊投入實作,一邊保持學習。
系統化
入門后有時間就要閱讀些更系統的書。 具體就是《C++ Programming Language》(現在已經有第四版了)和《C++ Primer》二選一精讀。之后有時間可以翻翻另一本。
(強調提示 !!!《C++ Primer》和《C++ Primer Plus》不是同一本書的不同版本,作者也不一樣。【不建議】看《C++ Primer Plus》)
函數庫
到這里你應該跨過了語法障礙了,要開始了解函數庫。可以按順序看看《C++標準庫》、《深入理解C++對象模型》和侯捷老師的《STL源碼剖析》。
追逐性能與優雅
現在應該對C++算有小小成,可能會對如何寫出更好性能、更優雅的C++代碼感興趣,可以繼續看《Effective C++》和《More Effective C++》,《Exceptional C++》。這幾本書,能讓你了解優秀工程實踐,認真看完能說有自信較有質量地參與工程項目了。
哲學
能堅持到最后這步,你可能快瘋了,瘋子喜歡問哲學問題,比如C++是誰、從哪來、要到哪去。
嘗試讀讀《C++沉思錄》、《The Design and Evolution of C++/C++語言的設計和演化》。
另外 C++(C語言) 在一眾高級語言里面卻算是比較貼近計算機底層的語言。多了解計算機結構、存儲、運算原理方面的知識,會對C++ 的來龍去脈理解得更透徹,可以讀讀《計算機科學導論》、軟件工程的《代碼大全》、操作系統的《現代操作系統》、程序員入門的《深入理解計算機系統》。
就對于Android開發者而言學習C/C++有沒有必要呢,怎么結合起來呢? ——夜幕降流星雨 android開發 @ android
個人覺得必要性要看所在公司的業務領域和你的個人興趣。比如直播公司涉及的音視頻業務,必然是要涉及c/c++的(ffmpeg啥的哪有java代碼);類似的需要c/c++的業務一般是些重性能、偏底層的東西。如果你判斷自己公司中短期都沒這個需要,那就輪到看自己有沒有興趣了。前景的話說句題外話,大前端慢慢侵蝕原生開發,慢慢單純的Android開發會被替代的,雖然過程應該很很很緩慢。一方面你也可以轉大前端,這樣比較快速;另一方面就是可以深入做這些偏底層的東西,沒那么容易替代,但未來的事情誰又說得清楚呢,哈哈。
Android和C/C++怎么結合起來?
可以搜索ndk、jni等關鍵字了解,網上鋪天蓋地的基本教程。這個學會基本使用應該大家都沒啥問題,但是如果是更深入一點,比如具有明確功能的代碼中,c代碼是怎么結構的,生命周期,怎么跟android(java)配合等等,說實話,需要一個項目的實踐。這方面我有很好的思考之后會從小白0基礎的角度寫點文章。
總結
以上是生活随笔為你收集整理的小白 C++ 入门到大神发疯学习路线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++设计模式之Adapter
- 下一篇: [案例分享]科大云炬工作室开发的安卓AP