路過的 C++高手就不用看了, 我寫的都是瞎扯淡的,不適合你們 。
小弟我最近迫於科研壓力一個月啃完了《C++ Primer》,純粹屬於狗啃不辨滋味的。我一天看30頁,30天看完一共900多頁。不過裡面很多地方沒仔細去看,一方面是自己心浮氣躁,另外一方面是在是這本書的寫作風格不適合快速閱讀。我原來做了多年的C的開發,C++和Java也都有嘗試,但是由於不是工作需要所以也沒有深入去掌握,但是對於OOD還是有些理解的。所以這次看《C++ Primer》可以算是入門,也可以不算。以上就是我的基本情況,如果各位看客有和我相似的基礎, 那就繼續看下去。
其實這本書的內容涵蓋還是很廣泛的,看完後一段時間裡面自己也覺得無法總結心得,所以我想分為多個子范圍來歸納自己的感受,以免被人砸磚說我以偏概全。大致的內容包括:
寫作風格 適合的讀者層次
實用性 總結
這是目前我能想到的,如果還有其他的我想到再補充把。
繼續昨天很生氣,已經快寫完了,結果筆記本死機了什麼都沒了,今天只能重頭寫了)
寫作風格
個人認為《C++ Primer》的寫作風格是教學筆記。大家回憶一下自己上學時候的情景,是不是在一段時間後再看自己的筆記或者老師上課發的講稿總有那種跟不上趟的感覺。《C++ Primer》給人的也是這有的感覺,這本書總體感覺作者寫的一氣呵成,雖然分各個獨立章節,但是內容和舉例上都有連續性,思路上如行雲流水。這點是特點也是壞處, 壞處在於作為入門而言,讀者很難通過自學把握如此大篇幅的行雲流水。而且要把握關於一個抽象數據結構的描述如List), 讀者必須毫不走神的在連續幾天裡把幾百頁的內容貫穿起來,實在不是容易的事情。如果有個C++的老師拿這本書作為講本,那是很合適的。如果老師完全掌握這本書的思路,那學生肯定能聽的很過瘾當然學生也必須有一定的基礎)。
適應的讀者層次
《C++ Primer》絕對不是一本適合入門的C++教材。這個觀點是很多人的共識。即便是這本書的翻譯者老潘在序言裡面也說了類似的觀點。這點上可以看出作者寫這本書的矛盾心態,即想寫一本C++的入門書從這本書的名字中的Primer可以看出),又希望能寫成一本實用性的書——結果卻寫成了一本教學筆記見上)。
回到正題。為什麼說這本書不適合入門,原因有二:
1. 作者放棄了基礎的C++語言的語法介紹
2. 作者所采用的例子過於抽象和系統性
3. 作者對於語言實用細節的說明多於整體性的描述
在語法介紹方面, Stanley老兄幾乎沒什麼謀篇布局可言,大致的訂了幾個方面包括數據類型,邏輯描述等等。可以看出這位大牛實在不願意對於基礎語法花太多的力氣,相反他對語法中的類型轉換倒是花了大篇章進行介紹,幾乎把各種可能的轉換情況都說了個遍,同時也費了不少筆墨介紹了轉換規則中的設計思想,可以看出他對C++ 語言設計的功力。但是這些往往是最讓初學者頭皮發麻的。思想性的東西往往應該放在整體語法語義介紹的基礎之上,否則直接上來就講這個,我覺得不可取,反而嚇跑大多數人。
其次是書中的例子。整部書基本上是以例子驅動的case-driven)。借助這種方式,能讓人最直接的了解和接受C++語言的設計思想。書中的例子都是個個珠玑,值得把玩。但是給入門者看,估計連看熱鬧的興趣都沒有別說看門道了。 書中的例子基本上以一個單詞統計程序以及抽象數據結構的介紹為中心。我記得開篇是介紹list抽象的。其中涉及了大量關於如何去設計以及如何設計List類型的探討。作為一個經常接觸C++開發的讀者,這些思想性的東西是很可貴的。但是對於初學者而言,對 List抽象數據結構缺乏直觀的認識,要跟著作者的思路深入真的不是容易的事情。我自己是做C開發的,自己要經常寫一些抽象數據結構的實現,所以覺得作者的例子很有幫助,但是到後來也覺得跟的很痛苦了,因為作者走到了對抽象的范型的介紹,已經超出了我以實用性為主的認識,因此對於入門者來說這些例子太難消化。此外,這些例子的規模實在太大, 很難讓讀者自己去編譯和實現,除非碰上特別有學習激情者,反正我不在此例。
最後一方面就是書的討論重點並不適合入門。這本書通篇看下來,作者的重點主要放在C++語言本身的設計思想及其在語言運用中的實際影響兩個方面。說白了就是“我設計C++的原則是什麼”以及“因為我的這些原則,所以在實際中哪些哪些地方要注意,會有哪些潛在錯誤”。這些東西好比武功心法,洗髓經之類的——不談一招一式的具體招式而只談心得和要領。我想這些東西少林方丈是不會作為新和尚的第一課的內容的。
那麼什麼樣的讀者適合看這本書?我覺得適合有一定C++實際經驗積累的讀者,適合想從初學者步入所謂高手行列的讀者。有了一定的語言基礎才能明白書中的一些經驗性和實際性的說明文字,才能理解老stanley的良苦用心。而這些思想性的東西也是C++初學者和真正能掌握這門語言的程序員之間的區別。
實用性
其實上面已經說了很多了。如果你把這本書當作入門自學教材,那這本書沒有實用性;如果是當作案頭工具書,這本書的寫作風格絕對不允許你在幾分鐘內找到你所要的東西,因為所有的東西都被老stanley焊進了他的行雲流水的寫作思路中了——你能在一杯糖水中舀出一塊糖來嗎? 如果你把這本書當作教材,那這本書倒是有點實用價值,如果自身功力足夠的確可能對坐在下面的學生造成極大的殺傷力。如果你把這本書當閒適消遣來看, 那這本書倒是挺合適,讓人讀起來有一種和作者思想交流的感覺。
總結:
總體來看,《C++ Primer》當得起“經典”兩個字。從這本書上能學到很多東西。 不足的一方面在於作者寫書的矛盾性,讓這本書寫的不上不下的,讓人讀起來費勁兒且不親切,需要讀者有一定的耐心。經典的內容,不友好的表述,估計是對這本書比較客觀的評價。
補注,感謝紫光輸入法。我開始的適合用微軟輸入法,敲的我手指都抽筋了,最終不能忍了,還是換回紫光輸入法了,舒服多了。本文出自 “Nathan的技術空間” 博客,請務必保留此出處http://nathanxu.blog.51cto.com/50836/56639