怎麼用好《C++ Primer》(英文版)?


  • 這本書是好書,而且適合作為第一本入門書籍

請見 c++ faq - The Definitive C++ Book Guide and List 這個經典的書單上面的第一本。我一直不明白人家外國人可以把這個作為第一本書入門,為什麼中國人就不建議初學者把它作為第一本書看呢,英文不好?有中文版啊。覺得翻譯的不好?天天在知乎上受 @Milo Yip、@vczh 等大神的熏陶,而這本書就是他們審校的啊。為啥不先去看看呢。

另外,據我所知, @script Newil 提到的那個repo的作者也是通過此書入門的(嚴格意義上講,我也是)。為啥總有人非要挑三揀四的呢。非常好奇。

  • 怎麼用好這本書

我沒啥資格說怎麼用好,但有些教訓倒是可以分享下:

  1. 你買的英文版,挺好。我以前總是通過各種中文版的書學C++,很多名詞之間的區別都是含含糊糊的,譬如變數對象,管某對象也叫變數行不行呢?管匿名對象也叫匿名變數行不行呢?從中文的角度來看好像也無可厚非,反正意思差不多嘛。這種例子很多,但其實很妨礙你在Stackoverflow上問問題,名不正則言不順,試試提問說個anonymous variable?保管一大堆老外給你挑刺。而更關鍵的是,你會很容易放棄深入思考這些名詞之間的差別。一上來就從英文版學起,就天然避免這些問題。有種根正苗紅的感覺。(上述內容在2.2. Variables就有說明)
  2. 別當成案頭書,花功夫完整的看完一遍。我以前就把各種大磚頭作為案頭書,用到的時候在看唄,一直這麼想。結果呢?就是解決問題總是要比別人花更多的時間。究其原因,是我總需要去一遍又一遍的複習基礎知識,總想著多看幾遍就記住了。結果呢,還是反覆在看。要知道,學編程語言不是背語法,記住語法有用嗎?c++11又多了好多語法,c++14也出來了,又去記?真的是一輩子「學C++」嗎?這種辦法學編程,換種語言就嗝屁。完整的看一遍書的意義在於理解這個語言的思路,為什麼要有這種語法,為什麼c++11要引入新的語法機制?為什麼引入類,為什麼引入模板,范型?看完書,就能夠理清楚這個思路,把握一個脈絡。遇到問題,就能夠迅速抓到關鍵,不去糾結那些語法細節。
  3. 做習題,別以為看懂了就萬事大吉了。我以前從來不看習題,或者就是掃一眼,覺得應該會,就放過去。其實這是大忌,習題是檢驗你是否掌握核心知識最好的工具。看完一小節,把書扔一邊,認真寫出每一道題的答案,你就會發現你到底是不是真的掌握。別笑,我經常看到某些概念分辨題,不知所措,覺得很顯然,但就是說不清。這就是沒掌握。習題的另一個功效就是,可以幫助你擺脫牛角尖。我曾經看書看的過細,好像一本書就能把整個C++的諸般神技都能講到似的,這樣的後果就是:停滯不前,看不下去。典型的:「想的太多,看的太少」,其實很多面對初學者的疑問,看到後面就引刃而解了(如新手如何閱讀《C++ Primer》?裡面,這哥們讀了幾頁就開始糾結this指針了)。如何讓自己別想太多呢?習題。只要習題沒涉及的知識點,完全可以跳過去。
  4. 善於利用stackoverflow,請看習題答案 及 StackOverflow上的討論 ,這個技巧被很多人忽視(包括我)。首先你能提出問題,而在SO上不被vote down,表示你深入思考了;其次SO上的各位大牛,面對基礎題,幾乎都是搶答,你只需狂按F5,然後慢慢消化他們的評論及答案就好了,他們的隻言片語,能夠讓你學到本書以外的很多東西,如編碼習慣,一些術語(jargon)等等。而且討論本身就會很自然的讓你記憶的更加深刻,實在是有諸多好處。

我說的啰嗦,但都是我的血淚史,人蠢真是沒辦法。。。你盡量少走些彎路吧。

最後說可能有的疑問:

  1. 看不下去?你也看到了,最上面那個書單里,這本書是第一本,如果都看不下去,請直接放棄C++。
  2. 看完我會很牛逼嗎?請見這個答案:認真學完 C++ Primer 後,C++ 語言到了什麼水平?恭喜你,已經入門了,但僅僅是入門而已。

======

更新:

  1. 評論里有人不知道中文版的審校都有誰,封面右下方就有嘛。其實還有一位非常有名但不怎麼上知乎的: @劉未鵬
  2. 有人提到第四版,第四版和第五版區別還是蠻大的,連章節都有點對應不上了。第五版著重介紹 C++11 的理念,長遠來看,這些很值得了解的。從我個人來講,四、五版都有,曾看完第四版,但再看第五版的時候,還是感覺在看一本新書。如何選擇,自己權衡,反正開卷有益。


那你還問。。

你要立下決心,看不完這本書以後會諸事不順,還能堅持做啥事?人生一片灰暗,找不到女朋友只能孤獨終老


其實只要:

1. 從頭到尾看一遍

2. 習題做一遍

就這麼簡單


按你最後一句話去做就好了。

實際上計算機類的知識體系很難做到循序漸進,看一本書時很可能當前不具備足夠的基礎知識。但這並不妨礙深入學習這本書。有些東西一遍不懂,在網上搜索相關關鍵字,之後第二遍第三遍,自然就會懂了。

感覺讀計算機書籍的兩個要點是:

1. 看的懂的細看、看不懂的硬看。

2. 多動手實驗。

可惜我輸在了懶字上了。。。


都買了,直接看。書怎麼樣看了才知道。別人說的都是小馬過河


  • 看書,英文版的
  • 同步做習題,答案參考:pezy/CppPrimer: C++ Primer 5 exercise answers.
  • 看完主幹章節以後,練習
  • 練習中遇到困難再回看書


推薦閱讀:

C++11 移動構造函數問題?
常量字元串是右值,為什麼沒有調用相應的右值重載函數?
你有什麼關於Linux下C++並行編程的好書和經驗跟大家分享?
為什麼 C++ 中,基類指針可以指向派生類對象?
在取消同步的情況下,為什麼cin的速度比scanf快?

TAG:書籍 | C | CPrimer | CPrimer書籍 |