在個人看來,45天C++入個門ok沒問題,學會?抱歉,就不太可能。
C++難學是互聯網 IT 界公認的,不信看看往下看。
45天學會它,抱歉,真的不太可能。
雖然現在出了個 rust 語言也挺難學的,不過還是比不了 C++ 難學。
那么,C++既然這么難學,難學在哪里?為什么大家還要學它呢?
來看看那些C++大佬們的回答吧~
░ 為什么C++讓人覺得這么難學?
C++的設計理念本身想通過各種規則克服C語言里面由於語法規則不清晰導致在運行過程中出現的一些錯誤,這下讓初學者倒霉了,很多初學者在學到泛型編程會覺得編譯過去太費勁了,好多條條框框卡的死死的,必須要按照語法規則走才能進行下去,而且就語法細節來講,零散的需要掌握的細節多如牛毛,有的程序員已經做了好多年對於有些C++語法規則還是覺得陌生的很。
C++語言的更新速度也是相當驚人,其語言本身還在進化,其實大家還在學着一門還在不停升級到編程語言,而且還會出現這種情況,等你費了九牛二虎之力掌握了一些語法細節之后,發現新的更新完的時候,已經把之前的都丟棄了。
C++也是可以操作指針,本身指針已經很具有復雜性,再加上泛型編程,整個更加熱鬧了,既追求性能的極致化,還想編程模式靈活性,背的擔子異常沉重,以至於很多人在學完C++之后,再去學習C語言會感覺異常的輕松自如。其實很多C++語法學習不是讓你如何去使用,更多的是告誡你不能怎么用,這是最難受的,學了一堆語法發現不能立即用上,還需要在特殊的場景才能使用上,對於絕大部分對於這門編程語言還沒熟悉之前,算是一種精神的折磨。
░ 為什么大家還要學習C++?
1、C++是很多架構師的最愛,也是很多編程大咖的最愛。
記得十年前在某著名編程網站的論壇里面,特別是C++論壇里面經常見很多C++大咖在里面指導江山,很多小白忙活了半天的代碼,讓大咖幾句話搞掉,在真正掌握這門編程語言,並且深深的掌握其內在規則之后,使用起來會感覺特別舒暢,仿佛把之前所有的陰霾一掃而空。
2、現在很多有名的軟件框架都能看到C++的影子。
其實很簡單,在進行面向對象的框架設計還能不影響效率首選只能是C++,現在大家使用的安卓手機的框架層很多代碼都是C++,還有大家天天使用的瀏覽器內核代碼幾乎全是C++,在很多領域C++有着不可比擬的優勢,學會了會明白為啥這門語言屬於編程語言的王者,為什么有這么多人學不會還要硬着頭皮繼續學,可以說C++是一門啃着最有滋味的編程語言,痛苦並快樂着。
你會發現等你把C++用熟練了,再去學習別的語言,那感覺爽呆了。
它難在你因為很懂她,最后還不知道為啥莫名其妙的生氣。 C++最大的缺點是讓你花費大量時間學習這門語言的語法上,而不是解決問題本身上。
這個世界本來就是殘酷的,所以你不能怪C++向你展示了世界的本質 大家都覺得很難等你攀登到高峰的時候發現,原來前面還有比這更高的山峰,等着你去繼續攀登。
不扯淡了,回歸正題,
如果您想盡快學好C++,不妨接着看下去,我給你推薦一條比較靠譜的 C++ 學習之路,相對大部分人而言稍微快一點的速度。
1、小白入門(從視頻入手)
人是一種很典型的視覺動物,更喜歡被動接收知識。
相比較於書本上的一板一眼的文字,人更喜歡視頻以及圖像(要不你以為為什么某寶上的商品都是用很精美的圖片來介紹的,就是吸引你的眼球)。
所以,如果你是一個小白,我建議你先從看視頻做起,去找一門比較好的C++入門視頻教程看着先。
還有一點就是千萬記得要自己動手敲,自己動手做而不是只看不動手寫,一定要自己動手慢慢開始實踐。
光說不做假把式,眼睛看會了不代表你真的會了。
總是有人問我該怎么開始寫代碼?
其實最開始不是叫做寫代碼,而應該是抄代碼才是。
看完視頻,你可能對C++有一個初步的認識了,對於下面這些概念有大概的了解了:
變量類型、變量作用域 、常量 、修飾符類型 、存儲類 、運算符、循環、判斷、函數、數組、字符串、指針、引用、基本的輸入輸出、數據結構、類 & 對象、繼承、重載運算符和重載函數、多態、數據抽象、數據封裝、接口(抽象類)
2、正式入門(開始看書消化)
C++問世以來,優秀書籍數不勝數,其中一本堪稱“C++聖經”的就是《C++ Primer》,現在已經出到了第五版,諾,就是下面這版。
我強烈推薦這本書,這本書共分為三個部分(共19 章):
其中1 - 8 章為變量、循環等基本知識;
第 9-12 章為標准庫的知識比如容器算法等;
第 13-19 章設計拷貝重載等知識。
我個人在看這本書的時候,課后題也沒有放過,基本都做了,這讓我打牢了自己的C++基礎。
我還畫了一個C/C++的導向圖,這本書認真看完是可以對這個導向圖上的知識有基本了解的。
學了語言也要記得去做相應的練習,最好的方法就是與數據結構結合在一起去實踐,那么問題來了。
數據結構與算法,怎么學?
你如果是個純小白,一點基礎也沒有。那么我建議你跟C++的學習方法一樣,先去看看視頻,再來刷刷題。
我畫了一副數據結構與算法的知識點導向圖,希望可以幫到你,其中基本都是校招會考察和涉及到的點。
要記得學會站在別人的肩膀上,利用好前人的總結和經驗。
就好像現在我在跟你們說學習的方法一樣,這也是我的結晶,希望你們都能好好學到東西。
貌似有點扯遠了,接着說回C++吧。
3、持續進步
即使你看完了《C++ Primer 5th》之后也不要覺得自己學會C++了,真的,C++比你要想象中的難學一點的。
接着推薦你幾本必看的書,是必看的!
書名:STL源碼剖析
理由:C++大師侯捷老師的經典之作,源碼方面的好書!雖然里面的很多知識已經不再適用如今的C++11 甚至C++17了,但是我們所要學習的是設計思想,對於其中的兩級空間分配器,vector擴容,map/set底層等都是面試時常問的知識點,筆者看過兩遍,現在還偶爾會翻翻,建議放在C++Primer這本書之后,有過一些coding經驗后再去看。
書名:Effective C++
理由:C++是一門很嚴謹的語言,這也導致了如果出錯bug也是不好找的,當初看這本書的時候,筆者一遍一遍的刷新對於C++的認識:這居然可以?這居然不可以??這居然會報錯??有不少內容與C++ Primer 5th那本書是相同的,可以在看完C++Primer后再看這本書。
書名:深度探索C++對象模型
理由:這本書會幫助你對虛函數有一個全新的認識,雖然網絡上有不少類似的講解虛函數的博客,但還是建議同學們自己看一下其中的虛函數那章,看完可能會忘,得多看幾遍。面試過程中問的也基本只有虛函數,其余章節可略看。
至於那本《More Effective C++》,你看不看,倒還真沒太大關系。
頭發還好不?hhh
4、再度進階
這里不多BB,C++一般都會用來做后台開發或者是服務端開發,這就要求你要具備一些Linux上的基本知識。
同樣的,我推薦自己看過的基本網絡編程的書籍。
書名:TCP/IP網絡編程
理由:書中例子超級多,堪稱一小節一個例子,比如很知名的簡易版回聲服務器、優雅斷開TCP鏈接等,從客戶端和服務端兩個方面分別展開敘述,手把手帶你初窺網絡通信的點點滴滴。在看這本書的時候,注意總結筆記,因為例子太多了筆者經常出現看了后面一節就忘記前面一節的內容的情況,后來記了筆記就好多了。而且在github上也有很多別人做好的讀書筆記,牛友們可以自行檢索。在獲得同樣知識的前提下,當然用的時間越少越好了。
書名:Linux高性能服務端編程
理由:游雙老師的經典之作,筆者第一次看的時候,內心os:這什么垃圾,那么多人推薦??第二遍看的時候,不好意思,是我垃圾….這本書需要一定的門檻,但真的是一本很好的書,網絡通信相關基本全都涉及到了,比上面那本《TCP/IP網絡編程》要詳細的多。其中第1-5章高度涵蓋了計算機網絡的知識,高度概括,所以看這本書的前提就是要對計算機網絡有基本了解和認識,后面的章節講的是網絡通信的前世今生。
書名:Linux多線程服務端編程:使用muduo C++網絡庫
理由:前排提醒,這本書有一定的門檻。北師大陳碩大神的經典著作,從事服務端編程方向的從業人員必看的一本書,能夠從書中借鑒到很多比如關於定時器的設計。筆者也只是看了一小半,建議后期再看,需要不少基本功才能看明白。
總結
你可以舍棄4、中的三本書,但是1、2、3中涉及到的書籍和視頻,真心建議你去好好學好好看。
所以,如果要學好C++,至少要走完1、2、3吧。
最后,C++天下第一!有不同意見的,當場打死!
咋們下回再見~
最后,不管你是轉行也好,初學也罷,進階也可,如果你想學編程~
【值得關注】我的 C/C++編程學習交流俱樂部!【點擊進入】
問題答疑,學習交流,技術探討,還有超多編程資源大全,零基礎的視頻也超棒~
