標籤:

應該以什麼心態和標準來學《 c++primer 》和 c++ ?

學過一部分c,oc還有swift,現在很想很想學c++,想以c++為主要語言。就買了c++primer,但不知道為什麼,讀起來很艱難啊,這倒不是我讀不懂作者要表達的意思,而是我感覺心理慌慌的,好像沒掌握什麼一樣。我是一個從心理上就要求「知其然更要知其所然」的人,看了前一百多頁的c++primer,比較基礎的涉及到底層的我都能夠理解,因為我起碼能夠在大腦內想像它們是如何實現的(當然,是指抽象的實現不是物理實現),而在學C++的時候,對於許許多多的語法特性這些,一方面我不知道它們的適用場合(因為我還在痛苦地學前面,沒有機會感受實際項目對它們的需求),一方面又不知道它們是如何實現的(李普曼老爺子沒有說啊),所以學了它們的一些用法定義規範外,總覺得好像沒有學會一樣,完全不像學C那樣,學習一個知識,可以在大腦里聯想它們是如何運作實現的(有時也會聯想一下它們的作用場合),讓我很有掌控感啊。可是學習c++,總覺得好像沒有學會一樣,不太敢往後面看,真正看到後面了,看到不會了,又有點懷疑是不是我前面根本沒有理解,但是,想要理解好前面,我感覺又很可能需要遇上那個運用的場合與情況才能真正理解,所以,我覺得我好像進入了死循環一樣。要是讀作者要表達的,我是完全沒有問題的,但真的好想弄懂他說的東西啊。個人覺得c++封裝好多東西,直接給用,不讓看實現,強迫症表示很難受啊。想問一下各位前輩們,我到底應該以什麼樣的心態去學習c++primer(或者說應該以什麼心態學C++)啊?是要放棄「知其所然」那種心理嗎?有什麼書,是講c++那些語法特性是怎麼實現的嗎?C++那麼多的語法特性的細節,到底是怎麼實現的啊,還有,它們為什麼要這樣實現有什麼用啊!感覺真是好奇心害死人了,看了好久的c++primer,還是只停留在前面一百多頁而言,哭~


初學者學C++第一大忌:【想要立刻就】「知其然更要知其所然」。

計算機技術發展到現在那麼複雜,哪有你說理解就理解的。


C++ Primer這本書,裡面講的都是基礎

——這樣的態度


你說的情況和我當初剛開始學的時候差不多。看到這個問題也有點感觸就來答一下。其實大概也就是vczh說的那句,不應當【想要立刻就】「知其然更要知其所然」。

事實上,我認為你這種追求「知其然而知其所以然」的思考方式,非常常見於彙編或C(oc我看的不多,其實應該也比較貼合C系)入門的新手,因為這兩者其實是高度貼合硬體的,基本上寫完以後機器的行為都可以比較直觀的想像出來。然而很多高級語言特性是不容易映射到相應的機器行為,因而顯得比較晦澀一些。

我當初是學C入門的,情況可能比你更極端。我記得當時看python已經難得不行(python是一種純OO的語言),看C++更難(主要是模板部分有GP和FP的思想),再到後來學資料庫SQL就沒法學了(SQL是基於集合論的,距離硬體層相去甚遠)。當時我還在知乎上提了個問題問python太難了沒辦法理解怎麼辦,還收穫了不少冷嘲熱諷,這些黑歷史在此不表。

實際上隨著你學習的深入,會發現很多語言提供了更高的抽象層級,或者採用了完全不同的編程範式,這時候應該換用一種全新的方式去學習,而不是用以往的經驗去生搬硬套。至於編譯器實現,很多時候大大超出你現在的知識體系,(現階段)花時間研究這些往往是得不償失的。

此外,還有一種可能,是因為你不明白這個語言特性是為了解決什麼問題而引入的。這時候去硬磕書本並且嘗試記下來其實是邊際效益很低的學習方法。正確的方法是邊學邊寫,踩幾次坑就明白這個設計是怎麼來的了。

我本人在大一和大二的時候用假期時間各試著學過一次CPP,但經歷十分慘痛,一度也懷疑自己的智商。但是機緣巧合,在後來試著做過幾個玩具工程(用的C#)以後,時常遇到「我需要這個功能然而不知道怎麼實現」,或者「我踩到了一個坑然而不知道怎麼修改它」。這時候我初步建立了軟體工程的概念,感覺C++primer的OO部分已經不是那麼難了。大三的時候寫了一些計算代碼(python與C++),去看了一些cpp庫的設計,以及閱讀了其中新舊代碼的兼容層,漸漸對STL的設計也了解一些了,然後順便把模板和類型系統以及FP的地方也看了。最後在大三假期的時候完整的回顧了一遍C++primer,前後差不多兩個星期,之前那種望而生畏的痛苦感一掃而空。

如今大四,在編程學習的路上走了不少彎路,現在的水平還是剛剛上道,願與題主共勉。


找本簡單的先入門C++,然後一邊寫點東西一邊看《C++ Primer》

《C++ Primer》適合當手冊,不適合當初學者教程


剛學完《C++ Primer》的來答一下。

這書真的很厚,但是前面是很基礎的,我是自學的,之前學過一點Python和C,但是前面也能看懂,我相信你也可以。至於後面的確實有些難度,很多細節要記,但是我是這樣認為的,現在可以不記得細節,但是你到了不會的時候去翻翻這本書,起碼得知道在哪裡和大概是如何的。

至於習題,前面的還是相對容易,後面如果覺得難,就跳過吧,先看完再說,但是簡單的習題還是要做的,不會的建議你上github看看別人的答案。GitHub - Mooophy/Cpp-Primer: C++ Primer 5ed answers 這個是我看的答案,希望可以幫到你。

另外,我不太清楚你慌什麼呢,覺得自己掌握不了什麼?那我想問你,你都基礎都沒看完,能學多少呢?學完基礎,起碼你還知道語法。然後如果看完基礎,想知道源碼,還可以去看呢,但是基礎都沒學完,語法都看不懂,怎麼辦呢?

所以靜下心來,就如輪子哥 @vczh所說看大部頭的書或者有難度的書,要有計劃(印象中記得是輪子哥說的),每天看30頁就好啦,然後其他時間可以學其他嘛。一個月就把書看完了,但是看完了能收穫多少,我個人覺得除了收穫語法之外的東西,基本是沒什麼了。當然,如果你有做技術博客,有記得關於裡面的提示的話,另說。

最後,學完基礎之後,如果數據結構和演算法不太了解,可以看關於這方面的書,然後用C++練手就好。這樣一來,既可以熟悉C++,還可以學到數據結構和演算法。就如我現在正開始看《演算法導論》。今天寫排序,會想到能不能不把函數學成只能傳int類型的形參,就寫個函數模版,然後想了想,能不能不單是從小到大的排序,就還想加多個comparison的可調用對象。然後也回憶了好多細節,所以看完後記得找個東西練手。

沉下心來,努力學習,共勉!


先看c++primer plus 再看primer就簡單了。雖然我至今也沒看完。。。


李普曼老爺子又寫了一本書,叫做Essential C艹,可以作為學習C艹的索引。


直接開干啊。計算機理論大部分都是從實踐中來的。


老實說,我覺得c++ primer 書寫得挺易懂的,語法細節多是事實,但是多實踐,就會越來越掌握。至少你知道c++有這些規則,實際開發時拿來當工具書也是可以的。


推薦閱讀:

我在cpp里寫一段中文字元串常量,它是什麼編碼的?

TAG:C | CPrimer | C入門 |