看孟巖對C PRIMER第四版所寫的書評

2021-04-07 08:19:21 字數 2550 閱讀 2152

很多人可能還記得2023年c++ primer第三版在國內計算機圖書市場上創造的輝煌成績,當時這本書在**相對較高的情況下仍然受到了廣大c++學習者的熱烈歡迎。幾年過去,相信已經有不少讀者通過這本書掌握了c++基礎語言。在日常的程式設計實踐中,該書也是相當出色的參考手冊。關於c++語言本身的各種問題,幾乎都可以在這本書裡找到答案。全面,被認為是c++ primer的特色。但事實上,第三版不是一般的全面,其全面和詳盡的程度不僅大大超過了一本名為「primer(入門)」的圖書所應該達到的程度,也遠遠超過前兩版的水平。之所以會如此,實際上有深層的原因。

c++ primer第三版寫作時,c++語言iso標準已經落定。人們在等待了很長時間之後,似乎終於可以喘口氣了。但是當時在c++社群裡發生的很多事情表明,這部厚厚的語言標準裡蘊藏著某些東西,使得整個社群不但不可能在其基礎之上稍事休憩,反而還有可能邁入乙個新的,或者激動人心,或者是兵荒馬亂的變革時代。當時很多人已經認識到,標準c++的出現將帶來c++程式設計風格的一次激烈變化,但是究竟會發生哪些變化?會對c++的其他方面產生怎樣的影響?這些影響中哪些是經得起考驗的?那些不過是那浮雲?特別是,新的c++風格將給c++教育和c++圖書的編寫方式帶來怎樣的衝擊?這些在當時都是無法預計的。傳統的思路依然行之有效,新的變革卻已經呼之欲出。那些必須講解,那些可以拋棄,當時還不清楚。為了維繫c++ primer的「光榮傳統」,只能是兼收幷蓄,言無不盡。因此,stan lippman不得不把c++ primer的第三版寫成一本真正的「巨著」。他必須要在這本書裡包含當時處於變革過渡狀態下的c++的全部基本內容,必須既按照傳統的思路來講解c++基礎知識、底層細節,又充分突出標準c++的新元件、新特色。這種做法的結果,c++ primer 3/e的篇幅空前巨大,內容覆蓋非常全面,然而其教學思路卻體現出一種過渡時期不得以的猶豫不決。這種猶豫不決,直接表現為整本書在技術層次上全面而缺乏重點,高層技術與低階細節交織在一起,在風格上缺乏鮮明的傾向性。從正面看,stan lippman的這種保守做法保證了該書書的全面性傳統,使得第三版成為極佳的使用手冊。而從負面看,作為一本教程,這本書就遠不是無可挑剔的了,至少其內容遠非精煉,教學思路遠非清晰。因此,這本書出版以來,在國外c++社群中的形象並不是一本教程,而是不折不扣的案頭參考書。其結果,雖然無論是在語言使用上相對求穩的douglas c. schmidt,還是比較激進的bjarne stroustrup、francis glassborrow和andrew koenig,在向初學者推薦c++教程的時候,都沒有把c++ primer 3/e列入其中。相反,andrew koenig和francis glassborrow分別寫了accelerated c++和you can do it!,以表達自己對於新時代下c++教學思路和風格的觀點。就連stan lippman本人也意識到這個問題,並寫了一本essential c++來彌補。

c++ primer第四版就是stan lippman在這樣一種務實的氣氛中,與合作者josee lajoie,barbara moo共同推出的。而且這次新加入創作團隊的barbara moo,是c++大師andy koenig的夫人,accelerated c++和ruminations in c++的合作者,對於新風格c++的講授有著充分的經驗。本書整體思路的一些變化,顯然受到了barbara moo的強烈影響,篇幅相對於第三版,已經大為精簡。這主要是因為作者已經清楚地知道c++發展的必然方向,從而也就明白哪些內容不再必要,敢於大規模地精簡。隨著內容的精簡,該書所倡導的c++風格也變得明晰起來。細心的讀者會發現,第四版中把標準庫中的string和vector放在陣列和指標之前講授,在第一部分的隨後章節中,標準庫的應用滲透其中,其意圖在於讓初學者首先建立標準庫元件的概念,培養他們「以標準c++為母語」的自覺,這種做法對於年輕的c++初學者,應該能夠產生巨大的示範意義,讓他們能夠在直覺之下寫出更為安全和清晰的**。

更值得注意的是本書中對於「類」概念的講述線索,可謂匠心獨具。類作為c++表達概念的主要手段,在第二章中就開始講授,隨後才介紹各種語言要素和控制結構,這是為了使讀者建立以類為中心的概念。然而有趣的是,本書並不像一般c++教程,在介紹類的基本概念之後急迫地介紹作為抽象資料結構的類,進而介紹物件導向程式設計,而是在基本語言元素講述完畢之後,就進入標註庫元件的全面介紹,這種體系可謂是前所未見,相當大膽。在介紹標註庫之後,才回到基於物件級別上的類,接下來才是物件導向和泛型程式設計。我認為這種次序正是體現了幾年來對於c++應用方式的反思結果,即:以類為中心,以標準庫為基本設施,強調基於物件層次上的務實技術,而將物件導向和高階泛型程式設計作為提高內容。而全書收尾的第五部分,其主題已經涉及到c++語言中最為晦澀和容易出錯的部分,絕對是「拔高篇」。這樣一來,全書在技術上的層次感就非常分分明,與第三版形成了鮮明的對比。

正因為c++ primer第四版的這些變化,使得這本c++的經典著作重新恢復了教程的面貌,並且成為新時代c++程式設計風格的乙個出色的注釋。我相信,新一代的程式設計師,通過這本書來學習c++,可以形成更清晰的概念,建立更正確的直覺,形成更務實的風格,少走一些彎路和極端。而對於老手來說,這本書跟以前一樣,還是出色的手冊,而且在內容組織上條理更清晰。

這幾年來,c++的應用領域有所縮小,而相比之下,c++開發者的數量下降就更為迅速。事實上,而國際上高水平c++開發者相當緊缺,很多關鍵領域對於c++開發者的需求還是非常大的,這種語言的獨特優勢使它仍然具有良好的發展前景。希望c++ primer第四版能夠幫助更多的初學者迅速成為合格的c++程式設計師。

看孟巖對C PRIMER第四版所寫的書評

很多人可能還記得2002年c primer第三版在國內計算機圖書市場上創造的輝煌成績,當時這本書在 相對較高的情況下仍然受到了廣大c 學習者的熱烈歡迎。幾年過去,相信已經有不少讀者通過這本書掌握了c 基礎語言。在日常的程式設計實踐中,該書也是相當出色的參考手冊。關於c 語言本身的各種問題,幾乎都可以...

c primer大綱(第四版)

第1章 快速入門 第一部分 基本語言 第2章 變數和基本型別 第3章 標準庫型別 第4章 陣列和指標 第5章 表示式 第6章 語句 第7章 函式 第8章 標準io庫 第二部分 容器和演算法 第9章 順序容器 第10章 關聯容器 第11章 泛型演算法 第三部分 類和資料抽象 第12章 類 第13章 複...

c primer 第四版 學習札記 9 24

1 ex4 22 const char cp hello int cnt while cp while cp 解釋兩個迴圈的不同 我的理解是第乙個迴圈是判斷cp指標是否為空作為迴圈條件的,而 cp的操作並不會讓cp為空,所以迴圈會持續進行,直到出錯 也許會是個大錯誤,因為都不知道會訪問到記憶體的何處...