天天看點

計算機經典書籍--推薦想學好C++的人看看

 C++ 相關書籍之多,車載鬥量;如天上繁星,如過江之鲫。廣博如四庫全書者有之(The C++ Programming Language、C++ Primer),深奧如重山複水者有之(The Annotated C++ Reference Manual, Inside the C++ Object Model),細說曆史者有之(The Design and Evolution of C++, Ruminations on C++),獨沽一味者有之(Polymorphism in C++, Genericity in C++),獨樹一幟者有之(Design Patterns,Large Scale C++ Software Design, C++ FAQs),程式庫大全有之(The C++ Standard Library),另辟蹊徑者有之(Generic Programming and the STL),工程經驗之累積亦有之(Effective C++, More Effective C++, Exceptional C++)。

這幾本讓讀者和我在期待的C/C++巨著就是這期我要推薦的——《Essential C++中文版》、《Effective C++中文版》、《The C++ Programming Language》和《C++ Primer》。

  Essential C++(Addison Wesley Pub Co.,1999年10月第一版)的作者Stanley B.Lippman更是C++領域一流的大師級人物,他從1984年開始就與C++結下了不解之緣:參與了第一個C++編譯器C Front的開發,曾經和C++之父Bjarne Stroustrup(詳見下)一起在貝爾實驗室的項目組工作、負責研究C++程式開發環境中的對象模型,後來又擔任著名的C++Report雜志編輯,此後他到迪斯尼旗下的夢工廠出任軟體技術總監(Software Technology Director),主要著述有Essential C++、C++Primer、C++Gems、Inside the C++ Object Model、C#Primer等,關于作者的更詳細資訊可以到其個人網站(http://www.objectwrite.com,該網址筆者已驗證無誤)查詢。Lippman目前在業界的影響力可以從最近發生的一件事情看出:不久前微軟已經邀請了C++程式設計語言的先驅Stanley B.Lippman加盟它的Visual C++.Net開發小組,以打消廣大的C++程式設計人員的疑慮。Essential C++是Lippman在C++ Primer之後的著作,可以說是厚積薄發的精髓之作。不要想當然地覺得這本書隻有276頁就是烹小鮮的入門向導——其實,我到覺得如果想通過一本書入門,1237頁的C++ Primer或1109頁的The C++ Programming Language更加适合。Essential C++分為7個章節,分别是C++基礎、面向過程的程式設計風格、泛型程式設計風格、基于對象的程式設計風格、面向對象的程式設計風格、運用模闆程式設計和異常處理。從結構的安排上我們可以看出作者的深意所在:并不是要手把手地教你鍵入和編譯調試一個類似“Hello World”的程式,而是要一步一步地教會讀者通過函數、指針、模闆、類等構件形成一套完整的程式設計思想,在不同的需求情況下能夠自如地使用面向過程或面向對象的方法進行程式設計,正如Bjarne Stroustrup在The C++ Programming Language一書中引用Kristen Nygaard(Simula語言的兩位創造者之一)所說的“Programming is understanding”。如果你是一個新手,在閱讀本書的時候不要忘了找一本更詳細一些的參考教材——作者隻用了30頁的篇幅講C++程式設計的基礎知識,這裡面還包括了數組、向量和指針等内容,《Essential C++中文版》(華中科技大學出版社,2001年8月第一版)已經出版,是侯捷的譯著——恐怕業内很少有人不知道這位台灣大名鼎鼎電腦教育作家,建立在深刻了解基礎上的翻譯品質幾乎可以說是無可挑剔了,但對于一些詞彙的翻譯方法和大陸翻譯習慣的差異還有待磨合和改進(雖然譯者堅持保留其繁體版譯法)。

Effective C++(Addison Wesley Pub Co.,1997年9月第二版)沒有教你C++文法或函數、對象、模闆之類的東西,這是一本風格獨到的經典技巧集,曾經獲得過1992年度Jolt Award and Productivity Awards,作者教給你的是50個“改善程式技術與設計思維”的特别途徑。Scott Meyers是C++業界公認的權威,主要從事軟體開發咨詢工作,活躍在全球各技術研讨會上,同時是C++ Report的重要專欄作家,知名著述出了Effective C++之外還有More Effective C++和Effective STL等,關于作者的更詳細資訊可以到其個人網站(http://www.aristeia.com)查詢。《Effective C++中文版》(華中科技大學出版社,2001年9月第一版)也已經在國内翻譯出版,譯者還是侯捷。當你初步了解C++的全貌之後,Effective C++能夠在短時間内大幅度地提高你C++程式設計的水準,此書的獨特之處在于每一個你遇到的C++問題,Meyers都好像未蔔先知地放在了書裡,所有讓你困惑的問題你幾乎都可以在這本書中找到精辟的論述——如果能加Meyers的另一本巨著More Effective C++(Addison Wesley Pub Co.,1995年12月第一版)将更會錦上添花。本書在結構上分為改變舊有的C習慣、記憶體管理、構造析構函數與作業運算符、類與函數的設計和聲明、類與函數的實作、繼承關系與面向對象設計以及雜項讨論7個部分。很多人都認為你越熟悉C語言或其他面向過程的語言,在學習面向對象的語言的時候就會面臨更大的困難,的确,如果你已經習慣了面向過程,在面向對象的時候你還是無法忘記過程,為此,Meyers在第一部分就提出了改變舊有的C習慣,通過幾個小技巧讓你能夠盡量不受原有知識對新知識學習的幹擾。在接下來的3個部分中,作者又針對讓人頭疼的記憶體管理問題(Java就宣稱采用自動記憶體管理減少了程式設計複雜程度和出錯幾率是比C++的一大進步),随後,作者針對函數與類的構造析構、設計、實作等問題進行了詳實的讨論,沒有枯燥的長篇大論,都是結合執行個體的分析講解——如果你剛學C++不久但已經可以獨立編寫一些簡單的程式,你會發現所有被批判的問題程式中都可以找到自己的影子,這真是一件奇妙的事情!在“繼承關系與面向對象設計”部分裡作者沒有喋喋不休地去讨論尚有争議的問題,而是把精力放在最基礎的理念上,澄清了C++中類的繼承體系設計與實作,并結合繼承問題闡釋了OOP。“雜項讨論”中作者主要讨論了編譯、标準庫等問題。打一個粗俗些的比方:Effective C++和More Effectiv e C++就像是C++學習者的手撓,每一下都抓在你的癢處。

The C++ Programming Language(Addison Wesley Pub Co.,2000年2月第三版,高等教育出版社,2001年8月影印版)是無論哪一個C++學習者絕對、絕對不能錯過的頭号經典。Rogue Wave公司(Boland C++ Builder中STL方案的提供商)的Nathan Myers說:“15年之後,此書仍然是唯一一本無可替代的C++書籍。”隻要有人推薦C++書籍,此書必在其中。正如侯捷先生1999年C++Primer繁體版前言中評價所說:“C++/OOP的領域極廣……,不同的切入角度,都存在不同的經典好書。但如果考量的是語言全貌性(百科型)書籍,從來我隻推薦兩本,一是Bjarne Stroustrup的The C++ Programming Language,另一是Stanley B.Lippman的C++ Primer。這麼說難免遺珠之憾,但是泰山北鬥已現,又何必案牍勞形于墨瀚書海之中!這兩本書都從C++盤古開天以來,一路改版,斬将搴旗,追奔逐北,成就一身榮光”。作者Bjarne Stroustrup是貝爾實驗室大規模程式設計研究部門(Large-Scale Programming Research Department)負責人,AT&T、ACM成員,主要著述有The C++ Programm ing Language、The Design and Evolution of C++、The Annotated C++ Reference Manual、C++ In-Depth Box Set(與别人合著)等。1979年Stroustrup開始開發一種語言,當時稱為“C with Class”,後來演化為C++,并于1995年在貝爾實驗室研制成功并投入使用的,Stroustrup也被稱為“C++之父”,關于作者的更詳細資訊可以到其個人網站(http://www.research.att.com/~bs/homepage.html)查詢。1998年,ANSI/ISOC++标準建立,同年,Strousturp推出了其經典著作The C++Programming Language的第三版。The C++Programming Language可是說非常全面、權威,充滿了技術性極強的材料,很多地方值得反複回味與思索。Stroustrup說,他所接觸和開發的軟體無論是在大小、複雜性和難度來說,根本不是外界一般軟體所能比拟的。本書雖然是一本計算機程式設計語言教程,但是處處展現出他對于軟體開發和程式設計的看法。是以他在書中的很多觀點雖然看上去不覺得有什麼了不起的地方,但是當你面臨到真正挑戰的時候,就會深刻體會到其真知灼見非同一般。即便我們不考慮語言的障礙,這本書仍然比較難懂,作者很多地方點到即止,其中深意不是初學者能夠真正領會的。這本書有個綽号——C++專家自學指南,也就是你必須先是專家,然後再來讀此書自學提高。

  C++ Primer是Lippman的成名大作——不要看到這個名字就真認為這是“C++的初級讀本”,實際上它是一本标準的“從入門到精通”教材,目前該書的簡體中文版還沒有上市,我到處尋找其英文版也沒能如願,一個偶然的機會在朋友那裡看到了侯捷(見上關于此書的評價)繁體中文版的C++Primer,大體翻看了一下,感覺此書在執行個體方面非常詳盡,内容可謂是全面、權威,通俗易懂。初學者隻要能夠認真學通這本書,足以能自由使用C++編寫程式,成為C++的高手。C++ Primer對标準C++提供了廣泛的介紹,提供了一個思考性的C++學習方案,C++中的重要該概念諸如異常處理、容器類型、面向對象的程式設計等等都展現在字裡行間,對語言規則也進行了深入地探讨,是一本非常好的入門也是提高的教程和參考。全書共分為20章,從C++最基本的元素、資料類型到面向過程的程式設計到泛型算法到基于對象與面向對象的程式設計等等,洋洋灑灑,蔚為大觀。此書将由中國電力出版社近期推出簡體中文版,由潘愛民(《COM原理與應用》的作者,《Visual C++技術内幕(第四版)》、《深入了解COM+》、《COM本質論》、《深入解析ATL》的譯者)主譯。

  在國内,ISO/ANSIC/C++長期被忽視,很多軟體公司的招聘廣告上寫的都是要求熟悉Visual C++或C++Builder——它們簡直就成了C/C++的代名詞!但ISO/ANSIC/C++有其不可替代的重要性,特别是在軟體移植方面,記得我藍格軟體公司的董事長林燕峰先生(KCOM Space的作者)曾經和我說過要保證軟體開發的可移植性和開發的可協作管理就必須遵從業界标準。值得慶幸的是今年出版界對标準C/C++書籍的渴求終于重視起來,紛紛出版經典C/C++書籍。關于C/C++的“不學C,無以言”到此已經結束,但并不是說已經囊括了C/C++的全部經典書籍,像Exceptional C++(Herb Sutter著,Addison Wesley Pub Co.,1999年12月第一版)、《實用C語言程式設計》(Steve Oualli著,O Reilly & Associates,1997年9月第三版,中國電力出版社,2000年5月中文第三版)、《C/C++嵌入式系統程式設計》(Michael Barr著,O Reilly & Associates,1999年2月第一版,中國電力出版社,2001年3月中文第一版)等等,或因不得見其書、或因技術領域太過專細,皆成明代

繼續閱讀