C++藏書閣

來源:互聯網
上載者:User
綜合/巨著

《C++程式設計語言(特別版)》
Bjarne Stroustrup
中文版:裘宗燕 譯
機械工業出版社
影印版:高等教育出版社

   程式設計語言的書,有一個很有趣的現象,就是語言發明者幾乎都要寫書,而語言開發年代越新的,書的品質似乎越差。C和C++以及Perl的夫子自道均成 為不可動搖的經典,相比之下C的口碑最好,20年後仍然首屈一指;Java(人民郵電出版社即將出版)處於中點,雖然也堪稱經典,但是因為競爭激烈,不如 前面幾部著作那樣不可替代;PHP(O’Reilly出版)又次之;C#更次之,幾乎等同於文檔;到了Ruby作者的那本Nutshell (O’Reilly出版),甚至罵聲都不少了。

  本書不適合初學者,內容較深,而且許多地方在你有了一定經驗之後再去體會,才會發現 其高妙之處。但是對於中進階讀者,本書完全當得字字珠璣的評價。從某種意義上說,許多其他中級C++圖書中的條款、經驗之談,讀起來似乎新鮮,但是仔細翻 看本書,其實Bjarne早已經談到。無怪乎有傳說Bjarne對Scott Meyer並不感冒,曾表示後者無非是收集了一些自己四處流露的思想成書,卻鑄就大名(小道訊息,切勿外傳)。稍微遺憾的是,裘教授的翻譯雖然已屬難得, 但是不夠平易,有些地方增加了閱讀的門檻,書中的索引錯誤較多,而且按中文排序,反而不方便尋找。

  Stroustrup的另一本著作《C++語言的設計和演化》,也值得推薦,要想成為真正的C++高手,就需要瞭解各種特性的來龍去脈,此書絕對不應錯過。當然,對於語言本身學習並非必需。

《C++Primer中文版》(第四版)(新書!)
Stanley B.Lippman, Josee Lajoie, Barbara E.Moo
中文版:蔣愛軍等譯
人民郵電出版社
第三版影印版:人民郵電出版社

   本書經常被人與Stroustrup的著作相提並論,甚至有“倚天屠龍”之稱。當然,Stroustrup書中那種深不可測的感覺,不是本書作者追求的 目標,C++最佳教本是本書最好的定義。不過,本書又不僅僅是教本而已,其中也處處體現著大師級作者的豐富經驗和真知灼見。

  與一般 修訂不同,第四版中作者幾乎完全重寫,我們甚至找不到什麼完全相同的話,其決心之大,可見一斑。在標準並無更新的情況下,這樣大的改動,原因何在呢?在我 看來,這體現了C++界在面對Java、C#等更加“簡單的”語言的挑戰下達成的一種共識。其核心,就是擺脫曆史負擔,將C++當作一門新語言教學,通過 標準庫、最佳實務的強調,降低C++學習和使用的難度。

  從我自己的閱讀體驗來說,本書第三版抱負太大,過於求全,按照面向過程、基 於對象、物件導向和泛型四種編程風格組織內容,對於初學者來說是存在負作用的。第四版一開始就使用標準庫,而且素材的組織更加流暢,可讀性大大提高,學習 曲線大大縮短。而現代編程風格的融入,又使本書仍然顯得卓然不群。如果說第三版推薦給初學者閱讀我還心存疑慮的話,第四版就沒有任何障礙了。值得一提的 是,本書的翻譯非常優秀,不輸於任何已知的名家。

  附:《C++編程思想》(第二版)卷1:標準C++導引,卷2:實用編程技術
Bruce Eckel
中文版、影印版:機械工業出版社

  本書的名氣之大,幾乎不在以上兩種巨著之下,尤其是卷2出版之後。其優點在於融入了最新的業界實踐,比如防禦性編程、測試驅動開發、設計模式等等。當然,對物件導向思想的闡釋也是Bruce Eckel的成名招牌。之所以只能獲得一個列席的資格,原因出在翻譯上。

  入門

《Accelerated C++中文版》
Andrew Koenig, Barbara E.Moo
中文版:中國電力出版社
影印版:機械工業出版社

   C++入門圖書極多,《C++ Primer》其實也可以算作入門書,尤其是第四版。但是,更多地被人(包括Bjarne Stroustrup)推薦的入門書卻非本書莫屬。當然,與競爭者相比,本書定價和篇幅上的優勢非常明顯。作者夫婦都是最早在貝爾實驗室與 Stroustrup並肩作戰的先驅,Moo女士甚至擔任過cfront編譯器的專案經理,是Stroustrup等人的領導。他們在斯坦福大學採用標準 庫優先的方法,使學生一上來就能編寫有用的“大”程式,取得了很好的效果。如今這種方法已經成為一種共識。需要注意的是,中文版的翻譯問題較多。

   與此類似的是Lippman根據Primer縮編的《Essential C++》,因為結構是第三版的,對初學者來說難度比較大,所以不再推薦。

《C++ PRIMERPLUS》(第5版)中文版
Prata 孫建春 韋強譯
人民郵電出版社
《C++入門經典》(第3版)(新書!)
Ivor Horton 李予敏譯
清華大學出版社

   這兩本書以及Deitel父子的C++屬於同一檔次的圖書,作者經驗均非常豐富,圖書涵蓋較全,選材中規中矩,曆經多版修訂,各方面都比較成熟,作為入 門都是不錯的。相比之下,Prata的篇幅更加合適,而且我感覺他的敘事風格更符合大部分初學者的學習習慣。說明一點,以上的評價是根據原版做出,中譯本 我們並未見到,歡迎購買了這三本書的讀者評價比較翻譯品質。

  中級

   中級圖書基本上是經驗之談,講述如何實際編程、哪些地方容易出錯以及各種場合下的do和don’t的問題。有篇Amazon書評用一個妙喻很好地說明了 中級和教程圖書的區別,教程是駕駛員手冊,而中級圖書是陪練。在真正開始駕駛時,誰都希望有一位專家在副駕駛座位上隨時提醒糾正。

   C++專家的實力在中級圖書層次得到了充分體現。Java和C#等等在此層次就遜色得多。Java只有Effective Java、PracticalJava以及人民郵電出版社新近出版的《Java解惑》三種,C#更只有Effective C#和Framework Design Guidelines(均將由人民郵電出版社出版)兩本,也許是語言本身使然?

《C++必知必會》(新書!)
Stephen Dewhurst 榮耀譯
人民郵電出版社

   本書的原名是C++ Common Knowledge,也就是常識之義。出版社的宣傳語是“最好的第二本C++圖書”。的確,掌握語言並有一定實踐經驗後,這本書可以作為一個知識點的複查 單,看看自己的C++知識和技能與一名合格的專業程式員還有哪些差距。Dewhurst的文字非常平易,很容易讀進去。這本書對於C++高手也是有用的: 可以在周圍的同事詢問一些常識問題時,代為解答。本書得到榮耀這樣優秀的譯者,更加增色不少。

Scott Meyers系列
《Effective C++中文版》
第二版:侯捷譯
華中科技大學出版社
第三版影印:電子工業出版社
《More Effective C++中文版》
侯捷譯 中國電力出版社
《Effective STL》(新書!)
潘愛民譯 清華大學出版社

   長期以來,因為這個系列Scott Meyers在C++界的地位幾乎是一人之下,其影響之大,可想而知。Meyers的確是難得的優秀技術作家,不僅在於他開創的Effective的寫作 方式,更在於他精湛技術和透徹敘述的完美結合。這一方面Stroustrup其實是需要向他學習的。三本書各有偏重:EC是語言基礎和技術,MEC是進階 特性和設計,STL專講標準庫。值得注意的是,Effective C++一書已經有了新版本,加入了模板、資源管理、多線程等內容,而且素材非常新,涵蓋了Boost和TR1。對各種語言的比較相信很多讀者也會興趣盎 然。Herb Sutter系列《Exceptional C++中文版》卓小濤譯中國電力出版社《More Exceptional C++中文版》於春景譯華中科技大學出版社《Exceptional C++ Style》(新書!)劉未鵬譯人民郵電出版社《C++編程規範》(新書!)劉基誠譯人民郵電出版社

   近年來,Meyers在業界的二號地位已經漸漸被Herb Sutter所取代。Sutter身兼C++標準委員會主席和微軟C++/CLI架構師兩個角色,而且長期在CUJ上撰稿,包括生動有趣的“對話”專欄, 還堅持主持新聞群組中Guru of the Week,對社區的貢獻確實很大。當然,Exceptional三部曲,加上與Andrei Alexandrescu合著的Bible級的《C++編程規範》一書,無疑也是他得以確立今日地位的重要砝碼。

   Exceptional系列也是由條款組成,但是採用提問、解答的形式。準確地說,這個系列完全可以劃歸進階,因為連Scott Meyers都說自己經常掉入其中題目的陷阱中。書中涉及的語言細節之深,其他地方很難看到。當然,最直接的作用,是進行自測或者測試別人。

   我們認為,《C++編程規範》一書是近年來最重要的一本C++新書。之所以這樣說,並非因為書中有什麼別處沒有的新內容,而是因為它的全面性(這本書其 實是Sutter和Alexandrescu對博大精深的C++知識以及浩如煙海的C++文獻的一次總結和梳理,因此比其他中級圖書都要全面)和必要性 ——本書可以作為遊歷C++世界的地圖,無論你處於什麼層次,都可以通過它找到自己的位置,確定前進的方向。書中的文字極為凝練,許多文字都需要閱讀各條 之後的文獻才能透徹瞭解。這是與其他類似圖書另一個不同之處。正因為此,我在翻譯過程中,曾經發願要像清儒注經那樣做一個注釋極豐富的譯本,而且已經為此 收集了大部分相關的文獻。但是時間顯然成了無法逾越的障礙。盼望著還有實現的機會,也希望讀者能夠助我一臂之力。

《C++進階編程》(新書!)
Nicholas A.Solter,Scott J.Kleper
劉鑫 楊健康 等譯
機械工業出版社

   與前面介紹的Effective式圖書不同,本書是一本非常優秀的中級教程,有些部分很像《C++編程思想》,比如對軟體工程的強調。但是本書不側重語 言特性的介紹,而是涵蓋更加全面,而且更加貼近實戰。書的組織形式比較特別,主體是執行個體和知識點的總結梳理,但是總的架構又與一般教程相同。如果說其他中 級圖書都是通過上課來傳授駕駛知識的教練的話,本書就是一位陪你上路的真正的陪練。

  對於初學者,應該從《C++ Primer中文版》第四版、Prata、《C++編程思想》或者《Accelerated C++》開始,當然Horton或者Deitel也可以考慮,在書店裡翻看,根據自己的閱讀和學習習慣進行選擇好了。唯一的忠告是:不要選擇國內自編的入 門教程。在學習的同時,可以將《C++編程規範》和一本巨著放在一旁,閱讀對應的相關段落和章節,如果有時間,做對應的習題。掌握基本特性後,可以對照 《C++必知必會》和《C++編程規範》,並試著做一做Exceptional系列中難度較小的題目,檢查自己的學習效果。編程實踐時可以閱讀《C++高 級編程》或者《C++編程思想》中的一些段落,當然,其他比較實用的軟體工程書也可以。這期間應該閱讀Effective系列,並挑選難度合適的 Exceptional題自測。經過這樣的錘鍊,你應該已經基礎非常紮實,可以步入C++的殿堂了。

 

C++沉思錄

Ruminations on C++

Andrew Koenig,Barbara E.Moo 著

黃曉春 譯

人民郵電出版社

  本書是兩位大師級作者從各種雜誌上發表的文章中去蕪存菁,重新整理更新,彙集而成的一部經典著作。雖然原版出版於1996年,但是作者根據當時的標準草案進行了修改,基本上是符合C++98標準的,沒有過時的問題。與前面我們推薦的其他中級圖書都不同,本書並不旨在討論語言本身的具體細節,而是把重點放在如何用C++解決問題上。由於出自雜誌文章,Koenig和Moo夫婦娓娓道來的平易風格顯露無遺,可讀性很強。在有了一些基礎知識之後,閱讀本書,可以在輕鬆的氛圍中對許多C++特性和功能有更加深刻的領悟。

  本書得到了BjarneStroustrup本人的推薦,而且幾乎所有C++推薦列表中都不可或缺,可見其重要性。中文譯本品質不錯,有些令人奇怪的是,此書現在已經很難買到了。

設計模式

Design Patterns

Erich Gamma 等著

李英軍 等譯

機械工業出版社

  顯然,任何一份C++推薦書目都不能缺少這部毋庸置疑的經典,雖然除了例子採用C++編寫之外,本書的意義並不局限於C++領域。10多年之後,要想真正精通物件導向技術,本書仍然是必由之路。稍微遺憾的是,隨著作者之一Vlis鄄sides的去世,本書曾經有過的新版計劃已經遙遙無期,很可能會不了了之。即使未來會有新版出現,很可能也不會採用C++代碼作為樣本了。

  初學者閱讀本書可能會感覺困難,因為其中精髓很多是出自Gamma的博士論文或者其他作者的學術論文。某種程度上而言,本書很有《論語》之類經典微言大義的味道,不少看起來不大起眼的語句,實際上飽含深意,需要反覆琢磨和研習。正因為此,後輩專家們又撰寫了許多闡發性的著作,去年底影印出版的《深入淺出設計模式》(東南大學出版社)採用圖文結合的方式,可讀性極佳。如果覺得這種讀圖方式有些“輕浮”,《設計模式精解》(第二版即將由人民郵電出版社出版)則是最佳選擇,書中透徹講述了設計模式背後的各個原則,有人稱之為《設計模式》的最佳闡釋版本。我們認為該書比較有利於初學讀者的,是作者用自己學習設計模式的經驗來教學,很容易接受。此外,還應該向大家推薦的是James Coplien所著的《Advanced C++中文版》,出版於1991年。準確地說,這本書才是真正的C++模式圖書,因為其中講到的都是語言慣用法(idiom)級的模式。書中提出的CVA(共性與變性分析)為《設計模式精解》發揚光大,作為一種關鍵的物件導向分析方法,成為後者的亮點之一。閱讀此書需要比較紮實的C++基礎,因為不少具體的建議已經過時。讀者可以參考Amazon網站對此書的一個評論,論者很好地指出了比較重要的過時內容。

C++經典問答

C++ FAQs

周遠成 譯

中國電力出版社

  本書的問答形式對於某些讀者而言,可能是最佳的一種學習或者複習方式。本書的素材來自comp.lang.c++新聞群組的常見問答,整理成書時,幾位管理員花了很大力氣擴充充實,最後的篇幅是網上版本的5倍,內容非常全面細緻,不僅比較深入地討論了C++文法和語意中比較容易誤解的引用、const正確性、虛函數、建構函式與解構函式、初始化列表、操作符重載等等,還覆蓋了異常、模板、RTTI等進階主題,尤為可喜的是,書中還超越C++本身,討論了物件導向設計問題。

  很遺憾,本書的中文版翻譯比較糟糕,而且似乎已經絕版。讀者可以訪問網上版本,雖然沒有書全面深入,但是基本的問題都已經包括,令人欣慰的是,網上版本還在不斷更新,比如在編程規範一節中就加入了《C++編程規範》的內容和連結。網上版本有兩種中文譯本,都比較可靠。申旻的簡體翻譯版本雖然不是最新,但已經比較完備,葉秉哲的繁體翻譯版本稍舊,但葉本人是Stroustrup C++著作繁體版的譯者,功力不凡,頗具參考價值。

專題/進階

C++標準程式庫:自修教程與參考手冊

The C++ Standard Library:A

Tutorial and Reference

侯捷等譯

Nicolai M.Josuttis

華中科技大學出版社

  正如Stroustrup和Lippman等大師教導的,學習和掌握C++的核心之一,就是用好標準庫。目前許多C++使用者的問題,也正是由於背負C的曆史枷鎖,對標準庫的認識和掌握不好所致。本書是學習STL的首選讀物。此外,Pete Becker所著還未出版的《The C++ Standard Library Extensions:A Tutorial and Reference》是本書的C++0x延續。細心的讀者可以看到兩本書的副標題完全一樣。據說機械工業出版社將出版後一本書。

Imperfect C++中文版

Matthew Wilson 著

榮耀 劉未鵬 譯

人民郵電出版社

  在上次專欄中,我們舉賢不避親地將本文作者之一所翻譯的《C++編程規範》列為近年來最重要的C++新作。有位資曆頗深的朋友對此大不以為然。本書就是他心儀的對象。從某種意義上來說,朋友的理由非常充分,本書的深度和廣度確實遠非編程規範所能比。作者Matthew Wilson是近年來湧現的C++社區新星,除了因為開發STLSoft庫而知名之外,他還是《C/C++ User's Journal》停刊之前最活躍的專欄作家,幾乎每月都有一篇以上的文章,視野開闊,而且頗多創見,看得出技術上的積累不俗。

  Wilson撰寫本書應該說是抱有雄心的(公然宣稱Imperfect C++當然需要胸有成竹),而成書的品質也的確不負眾望,得到了Stroustrup在內的眾口稱讚。雖然總體而言,本書的目標讀者是中進階的C++程式員,但是從一些新手那裡得到的反饋來看,許多內容對初學者也有很大協助(當然,很多內容對於初學者過難)。與Meyers、Sutter和Dewhurst等人講求凝練不同,Wilson為了曆數C++的各種不完美之處,卻寫出了一本非常完備的書,書中許多概念解釋得比大部分教程都好,而且結合了C++最新的發展。比如,我做Mentor時的一個入門級學員曾提到,書中對POD等基本概念的完整講述,其他書中就很難找到。

  當然,書中的深入部分是罕見的深入。但是這種深入又不同於Loki的Alexandrescu和Boost的DavidAbrahams那麼追求極限以至於有些陽春白雪,更多地是面向實際應用的,比如二進位相容、多線程、最佳化等等主題就是目前C++應用中非常重要但是又很少有書論及的。

  如果你自認為是一名專業C++程式員,本書千萬不能錯過。

大規模C++程式設計

John Lakos 著

李師賢 明仲 等譯

中國電力出版社

  是的,本書原版出版於1996年,C++98標準制定之前。所以讀者在閱讀時必鬚根據自己的C++語言知識,鑒別其中在新標準環境下不適用的建議。但是我們認為,它的價值時至今日仍然沒有其他書可以代替。此前,只有Stroustrup在《C++程式設計語言》中用了一個部分來講述類似的主題,雖然非常經典,但並不解渴。

  據朋友告知,國內許多大型軟體企業都將此書作為指定讀物,這與國外C++為主要開發語言的公司情況完全相同。10年前,本文作者之一初次參與工業級的C++項目時,從一位前輩手中借閱了這本書,它對我的職業生涯產生了不可估量的影響。現在回想起來,自己實在是非常幸運,能夠在那麼早就獲得組件、介面、實體設計等等知識。書中反映了作者在著名的電子設計工具公司Mentor Graphics任職期間積累的大型軟體開發經驗,材料曾經用於作者在哥倫比亞大學的課堂(美國的大學生們也的確是很幸運的)。應該說,書中講述的方面是真正一線開發非常需要的,也不知道為何沒有更多著作跟進。有訊息說Lakos本人正在寫一本《ScalableC++》,討論C++組件,真是非常值得期待。

C++設計新思維:泛型程式設計與設計模式之應用

Modern C++ Design

Andrei Alexandrescu 著

侯捷 等譯

  本書出版時曾經引起不小的轟動,作者也因此奠定了炫技派先鋒的地位。可以說,書中以及作者開發的Loki庫將泛型程式設計和模板技術發揮到了極致,對於讀者瞭解這種C++機制的強大很有好處。但是,正如Stroustrup所批評的,過於精巧的設計並不能很好地用於實際。所以我們建議讀者將本書作為開眼界之用,無需死鑽牛角尖。有類似性質的書還有Boost代表David Abrahams所著的《C++ Template Metaprogramming: Concepts, Tools,and Techniques from Boost and Beyond》,但個人以為,Boost代表的方向更為正確,值得關注。模板元編程與目前很多人視為程式設計語言發展方向的DSL(領域專用語言)關係非常密切,很可能成為C++迎接新浪潮的關鍵技術。事實上學院派的C++大作《產生式編程》的作者Krzysztof Czarnecki目前就是在研究如何用C++實現DSL。

C++網路編程,卷1,卷2

Douglas C.Schmidt 等著

本書兩卷分別由華中科技大學出版社和電子工業出版社出版。

  網路編程顯然是C++非常重要的應用領域,由於此前缺乏庫的支援,相關圖書一直非常缺乏,本書的出版一定程度上彌補了這一空白。但是本書一部分內容更接近於ACE文檔,而其他部分總體上又比較學院化。所以第二作者又編寫了《ACE程式員指南》(中國電力出版社)作為補充。此外,與ACE展開競爭的ICE也是一個非常不錯的網路程式庫,沒有相關圖書出版。

  能夠歸入進階的,還有一本好書:Stan Lippman的《深度探索C++物件模型》(華中科技大學出版社)。要想對C++的內部機制瞭解通透,此書是不可缺少的。

  C++其他非常重要的應用領域還包括嵌入式、圖形映像、架構設計等等,但是目前都沒有值得推薦的圖書。在網上一番搜尋之後,我們發現未來一段時間,國外即將出版的C++類圖書非常有限,看來希望要寄託在國內的作者身上了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.