天天看點

The books which are worth reading for me

How to talk so kids will listen & listen so kids will talk.

如何說孩子才會聽,怎麼聽孩子才肯說.

Authors: Adele Faber, Elaine Mazlish

人月神話

人間

從優秀到卓越

基業長青

think in java

C primer plus

C++ primer

C++ Standard Library

STL源碼剖析

Agile.And.Iterative.Development.A.Managers.Guide

C/C++/網絡程式設計書籍

Copy from http://blog.163.com/[email protected]/blog/static/10934475020098264227226/

書單中列舉的都是相關領域的經典書籍,必讀之作。此書單的編輯參考了很多網站,包括一些名家的推薦,例如侯捷,孟岩,榮耀,潘愛民等等,在此也向這些前輩表示感謝。^_^

1、C++ Language

------------------------------

Bjarne Stroustrup. The C++ Programming Language (Special 3rd Edition)

《C++程式設計語言(特别版)》

Bjarne Stroustrup. The Design and Evolution of C++

《C++語言的設計和演化》

Stanley B.Lippman, Josée LaJoie, Barbara E.Moo. C++ Primer (4th Edition)

《C++ Primer中文版(第4版)》

Scott Meyers, Effective C++ (3rd Edition)

《Effective C++中文版(第三版)》

Scott Meyers, More Effective C++

《More Effective C++中文版》

Herb Sutter, Exceptional C++

《Exceptional C++中文版》

Herb Sutter, More Exceptional C++

《More Exceptional C++中文版》

Nicolai M. Josuttis, The C++ Standard Library: A Tutorial and Reference

《C++标準程式庫:自修教程與參考手冊》

Scott Meyers, Effective STL

Brian W.Kernighan, The Prictice of Programming

《程式設計實踐》

Steve McConnell, Code Complete , 2nd Edition

《代碼大全(第二版)》

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented software

《設計模式:可複用面向對象軟體的基礎》

John Lakos, Large-Scale C++ Software Design

《大規模C++程式設計》

2、網絡程式設計

------------------------------

Richard Stevens, TCP/IP Illustrated, Vol.1 / Vol.2 / Vol.3

《TCP/IP詳解》(三卷)

Richard Stevens, Bill Fenner, Andrew M. Rudoff.

Unix Network Programming, Vol. 1: The Sockets Networking API, Third Edition

《UNIX網絡程式設計》

Jon C. Snader, Effective TCP/IP Programming

《進階TCP/IP程式設計》

Douglas Schmidt, Steven Huston,C++ Network Programming, Vol.1 / Vol.2

《C++網絡程式設計 卷1:運用ACE和模式消除複雜性》

《C++網絡程式設計,卷2:基于ACE和架構的系統化複用》

Anthony Jones, Jim Ohlund. Network Programming for Microsoft Windows

《Windows網絡程式設計(第2版)》

非常詳盡的TCP/IP資源介紹:

Uri's TCP/IP Resources List: http://www.private.org.il/tcpip_rl.html

3、Windows

------------------------------

Mark E. Russinovich, David A. Solomon.

Microsoft Windows Internals, Fourth Edition

Charles Petzold, Programming Windows (Fifth Edition)

《WINDOWS程式設計(第5版)》

Jeffrey Richter, Programming Applications for Microsoft Windows Fourth Edition

《WINDOWS核心程式設計》

Jim Beveridge, Robert Wiener. Multithreading Applications in Win32

《WIN32多線程程式設計》

侯捷, 《深入淺出MFC》

George Shepherd, David Kruglinski. Programming with Microsoft Visual C++ .NET, Sixth Edition

《Visual C++ .NET技術内幕(第6版)》

Jeff Prosise, Programming Windows with MFC Second Edition

《MFC Windows程式設計(第2版)》

Jeffrey Richter, Applied Microsoft .NET Framework Programming

《Microsoft .NET架構程式設計(修訂版)》

John Robbins, Debugging Applications for Microsoft .NET and Microsoft Windows

《Microsoft .NET和Windows應用程式調試》

Chris Cant, Writing Windows WDM Device Drivers

《Windows WDM裝置驅動程式開發指南》

4、Linux

------------------------------

Richard Stevens, Advanced Programming in the UNIX Environment

《UNIX環境進階程式設計》

Richard Stevens, Bill Fenner, Andrew M. Rudoff.

Unix Network Programming, Vol. 1: The Sockets Networking API, Third Edition

《UNIX網絡程式設計》

John Lions, Lion'Cornmentary on UNIX 6th Edition With Source Code

《萊昂氏UNIX源代碼分析》

Robert Love, Linux Kernel Development, 2nd Edition

《Linux核心設計與實作(第2版)》

Daniel Pierre Bovet, Marco Cesati. Understanding the Linux Kernel, 3rd Edition

《深入了解Linux核心(第三版)》

Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman. Linux Device Drivers, 3rd Edition

《LINUX裝置驅動程式(第三版)》

Marshall Kirk McKusick, Keith Bostic, Michael J. Karels and John S. Quarterman.

The Design and Implementation of the 4.4 BSD Operating System

《4.4BSD作業系統設計與實作》

毛德操, 胡希明. 《Linux核心源代碼情景分析》

5、Others

------------------------------

Donald E.Knuth, Art of Computer Programming, Volume 1-3

《計算機程式設計藝術》(三卷)

Thomas H.Cormen Charles E.Leiserson Ronald L.Rivest Clifford Stein.

Introduction to Algorithms, Second Edition

《算法導論(第二版)》

Bruce Schneier, Applied Cryptography

《應用密碼學》

Copy from http://www.yesky.com/496/1810496.shtml

VC++學習方法及書籍推薦

2004-06-09 13:37作者:harrymeng出處:論壇責任編輯:方舟

現在的計算機圖書發展的可真快,很久沒去書店,昨日去了一下,真是感歎萬千,很多陌生的出版社,很多陌生的作者,很多陌生的譯者,書名也是越來越誇張,什麼××天精通××,精通××程式設計, ××寶典等等,書的印刷品質真的很好,紙張的品質也是今非昔比啊,但書的内容好象卻是越來越讓人失望,也許是我老了,我的思想我的觀念已脫離現實社會,也許是外面的世界變化得太快,我程式設計數月,出去一走,路已不是原來的路……回家看着書架上的舊書發呆,聽着李克勤的舊歡如夢,才發現自已原來太喜歡懷舊.

筆者從事軟體開發多年,其中有兩年多的時間一直是與Windows底層打交道,涉及到驅動程式,嵌入式OS,Windows應用程式(如GUI,圖形圖像技術,多線程,元件技術等等)等方面的開發,寫了很多很的源代碼……也許我的閱讀面過于狹小,書架裡基本上都是Jeffrey Richter,Charles Petzold,侯捷老師以及潘愛民老師的書,這些書一直陪伴着我,并給我的程式設計工作帶來了很大的幫助,希望我的推薦對你也有幫助。

Windows程式設計類

Windows 程式設計(第5版)(上、下冊)

原書名: Programming Windows (Fifth Edition)

原出版社:Microsoft Press

作者:(美)Charles Petzold

譯者:北京博彥科技發展有限責任公司

出版社:北京大學出版社

出版日期:2001-03

頁碼:1376

定價:160:00RMB

此書被認為是Windows程式設計最好的導論性讀本。在1994年5月,此書的作者Charles Petzold被《Window Magazine》和Microsoft公司授予”Windows Pioneer”獎,以表彰他對Microsoft Windows的成功作出的貢獻,可見該書的權威性,以至于“如果對Windows開發有什麼問題的話,請翻閱PetZold的著作吧”幾乎成了一句至理名言。

本書覆寫了WINDOWS程式設計的方方面面,将windows程式設計的每一個元素(如輸入,輸出及對話框,圖形,多媒體,線程,文檔與視圖,Internet等等)講解得很清晰、簡明,采用的大多是具有代表性的示例,代碼風格好并且很有實用價值。筆者認為這本書是學習WINDOWS 程式設計的經典入門好書,每一次的細心閱讀都會對WINDOWS程式設計有更深刻的了解, 不過筆者認為書中講的内容都較為基礎,更深層的東西可以去看《WINDOWS核心程式設計》。

筆者建議有條件的讀者,最好閱讀英文原版。

Windows核心程式設計

原書名: Programming Applications for Microsoft Windows Fourth Editio

原出版社:Microsoft Press

作者:(美)Jeffrey Richter

譯者:王建華等

出版社:機械工業出版社

出版日期:2000-05

頁碼:689

定價:86:00RMB

Jeffrey Richter 是 Windows System 程式設計的頭頭,他的每一本書都對 Windows 核心有很精彩的剖析,筆者從《Windows 95 程式設計指南》,《Windows進階程式設計指南》,《Windows核心程式設計》到《Applied Microsoft .NET Framework Programming(影印版)》一直閱讀他寫的書,可以說本本經典,阿蒙是他的崇拜者,死心踏地地追随Jeffrey Richter。

本書是講解Windows 作業系統内部機制的專著,作者從基本概念入手,全面系統地介紹了Windows的各種基本構件,如程序、線程、DLL和記憶體管理等,并列舉了大量應用程式,精辟地分析了構件的使用方法,為掌握Windows 程式設計技巧提供了一條有效的捷徑。筆者寫過兩年的windows驅動程式, 本書的記憶體管理章節給我提供了很大的幫助,可見本書對記憶體管理講得非常地透徹。另外本書對程序和線程的講解也十分地經典,先說明其來龍去脈,然後描述其中的工作機制,并詳細說明windows提供了哪些API函數來進行多程序與多線程的程式設計,如果能結合侯捷老師的《Win32多線程程式設計》一起研究的話,那你對程序與線程的了解将更有深度。

Win32 多線程程式設計

作者:侯俊傑(侯捷)

出版社:華中科技大學出版社

出版日期:2002-01

頁碼:480

定價:59 .80RMB

使用線程,你可以産生高效率的伺服器,建立Internet伺服器擴充軟體,獲得多CPU系統的好處,建立精巧的COM/OLE對象,并改善程式的反應度。

本書的第一篇“上路吧,線程”,為你建立必要的基礎,包括線程的啟動和結束、核心對象、激發和未激發狀态的意義、同步機制及其用途。第二篇“多線程程式設計的工具與政策”,介紹C runtime函數庫和MFC對線程的支援、如何在USER和GDI的限制之下施行多線程、如何産生一個DLL、如何對多線程程式調試。第三篇“真實世界中的多線程應用程式”,談論如何組織一個程式,使它有效支援多線程。本篇示範兩個真實世界中的應用軟體,第一個是個freethreaded OLE automation server,第二個是 ISAPI程式,是個IIS(Internet Information Server)擴充軟體,示範如何和JET資料庫交談。

本書從理論到實際應用講得很全面及易懂,範例程式也很豐富并且具體生動,而且書裡不時地在一些需要注意的地方給出一些總結性的建議,這不僅讓讀者倍感親切,而且也加深了對所學内容的了解。

MFC程式設計類

MFC Windows程式設計(第2版)

原書名: Programming Windows with MFC Second Edition

原出版社:Microsoft Press

作者:(美)Jeff Prosise

譯者:北京博彥科技發展有限公司

出版社:清華大學出版社

出版日期:2001-09

頁碼:1166

定價:128:00RMB

本書不僅擴充了已被認為是權威的關于Microsoft 用于windows API的功能強大的C++類庫的闡述,還新增了有關COM,OLE和ActiveX等内容。本書的作者,Jeff Prosise,用其無與倫比的技巧向讀者講述了MFC程式設計中的基本概念和主要技術-再次闡釋了在32位windows平台上進行快速的面向對象開發的完美方法。

筆者認為本書講解細緻而且全面,比較适合初學者,

深入淺出MFC(第二版)

作者:侯俊傑(侯捷)

出版社:華中科技大學出版社

出版日期:2001-01

頁碼:736

定價:80:00RMB

有關這本書及其作者,不用我多說,大家已非常清楚,網上也是衆說紛壇。

本書分為四大篇。第一篇講SDK程式設計,簡單明了的概括了SDK程式設計的主要原理,提供進入MFC核心技術以及應用技術之前的所有技術基礎,特别是 Windows的消息機制,講得很清楚。第二篇介紹Visual C++整合環境開發工具,對整個軟體開發環境有全盤以及概觀性的介紹,可以讓初學者迅速了解手上掌握的工具,以及它們的主要功能。第三篇介紹 application framework的觀念,以及MFC骨幹程式,所謂骨幹程式,是指Visual C++的工具AppWizard所産生出來的程式碼。根據我的了解,太多人使用 MFC 是編寫程式隻是知其然而不知其是以然,本篇詳細解釋 MFC 程式之來龍去脈,為初入 MFC 領域的讀者奠定紮實的基礎。第四篇以微軟公司附于Visual C++光碟片上的一個範例程式Scribble為主軸,一步一步加上新的功能。并在其間深入介紹Runtime Type Information(RTTI)、Dynamic Creation、Persistence(Serialization)、Message Mapping、Command Routing等核心技術。這些技術正是其他書籍最缺乏的部分。

“初學者隻需掌握它的精髓,而不需深究它的全部内容,否則很有可能你會看不懂,等你在不斷學習過程中,返過來重複學習,你将會發現此書的奧秘所在”。

COM程式設計類

COM原理與應用

作者:潘愛民

出版社:清華大學出版社

出版日期:2001-03

頁碼:472

定價:39:00RMB

本書不僅介紹了COM的基本原理及其擴充知識,還講述了MTS及COM+的一些知識。全書分為三部分,第一部分為COM基礎,作者在寫這部分内容時,參閱了“Inside COM”一書,但對内容結構進行了重新調整,并增加了一些關于WINDOWS程式設計和MFC方面的知識;第二部分為COM擴充,第三部分為COM應用與發展,介紹了元件化程式設計思想以及多層軟體結構模型。讀者在學習了COM的基本原理之後,結合MTS和COM+所倡導的一些概念,就可以從更高的層次來了解和使用COM及COM+了。

對于COM初學者來說這是一本經典的書, 它由淺到深的論述使你對COM的概念及架構有較深的了解。

COM本質論

原書名:Essential COM

作者:(美)Box,D.

譯者:潘愛民

出版社:中國電力出版社

出版日期:2001-08

頁碼:358

定價:49:00RMB

本書由具有鬼才之稱的Don Box撰寫,在計算機界,“沒有人能把COM闡釋得比Don Box更清楚”。

本書無疑是COM領域中最負有盛名的一本書。在亞馬遜的排行榜上曾盤踞數月之久,很多專家給其以極高的評價。讀完這本書之後,COM對于您會“變得再明白不過了”(這是“Inside OLE”的作者Kraig Brockschmidt和本書的作者DonBox在頓悟了COM和OLE之後的境界)。期望您會有這樣的感受。

本書揭示了 COM(元件對象模型)的本質,旨在幫助開發人員真正了解COM的為什麼,而不僅限于怎麼使用。書中還提供了一個完整的分布式COM應用,示範了各種程式設計技術。此外,本書還涉及到許多COM進階特性,例如線程模型(或者套間模型)、名字對象、連接配接點等,是以,要想從本書獲得最大受益,您也需要有COM的知識作基礎,建議讀者先閱讀《COM原理與應用》之後再閱讀本書。

“ 這不是一本供新手學習的書,也不是一本教您如何開發COM元件的書,而是一本在一定的基礎上繼續提高對COM的了解的書。如果用它來學習COM,您可能會失望,因為許多内容需要有一定的經驗基礎才能看得明白;但是如果用它來加深自己對COM的了解,那麼這本書再合适不過了。”

差書點評

《MFC開發人員參考手冊 》

本書是一本詳細介紹MFC類庫的工具書,它對MFC類庫4.2版本中所有的類及其成員都做了比較詳細的說明.筆者認為MSDN就是最好的工具,沒有必要花這個冤枉錢.

學習心得

看了不少的書,也寫了不少的代碼,簡單總結一下我的學習方法,筆者是按以下的順序來學習的:C/C++ ――> SDK ――> MFC ――>COM/DCOM/ATL/COM+,當然這個順序的前提是你已經具備了一定的數學,資料結構及算法,作業系統等基礎知識,學好C++是很關鍵的,尤其要了解清楚OOP思想,養成以面向對象方法去思考問題解決問題的習慣;學習SDK的目的主要是了解Windows OS的内部機制比如記憶體管理,多任務及多線程等,特别要透徹地了解Windows的消息機制;有了前面的知識,學起MFC就容易了,有些網友經常與我聊,說他看了一年多的書,也寫一些程式,但對MFC還是一頭霧水,我想主要的原因還是學習不夠系統性,很多知識及經驗是循序漸進的,千萬不要幻想一步登天,要有持之以恒的學習及實踐精神。

http://blog.csdn.net/lotomer/archive/2007/04/12/1562099.aspx

C++程式設計之四書五經(上篇)

榮耀/文

C++是一門廣泛用于工業軟體研發的大型語言。它自身的複雜性和解決現實問題的能力,使其極具學術研究價值和工業價值。和C語言一樣,C++已經在許多重要的領域大獲成功。

然而,一個不可否認的現實是,在低階程式設計領域,C++擠壓着C同時也在承受着C的強烈反彈,而在高階程式設計領域,Java和C#正在不斷蠶食着C++ 的地盤。也許C++與C合為一體永遠都是一個夢想,也許Java和C#的狂潮終将迫使C++回歸本位——回到它有着根本性優勢的開發領域:低級系統程式設計、進階大規模高性能應用設計、嵌入式程式設計以及數值科學計算等。果真如此,我認為這未嘗不是一件好事。

C++吸引如此之多的智力投入,以至于這個領域的優秀作品,包括重量級的軟體産品、程式庫以及書籍等,數不勝數。文題“C++程式設計之四書五經” 一個不太嚴格的含義是:C++程式設計之四書×五經。是的,在本文(及其下篇)中,我将分門别類推薦20多本C++好書,你可以根據自己的需要選讀。

TCPL和D&E

TCPL 和D&E分别是《The C++ Programming Language》和《The Design and Evolution of C++》的簡稱,均出自Bjarne Stroustrup之手。我将它們單列出來,首先是因為Bjarne是C++語言的建立者,然後是因為比“首先”那個原因更重要的原因:這兩本書是C+ +領域毋庸置疑的傑作。說它們是C++語言聖經,并不為過。

The books which are worth reading for me
The books which are worth reading for me

Bjarne Stroustrup,《C++程式設計語言》影印版、中文版、題解

迄今為止,TCPL是除了C++标準文獻之外最權威的C++參考手冊。和大多數人的看法不大一樣,我認為Bjarne的文字語言并不遜色于他所建立的程式語言,至少我喜歡這種學院氣息濃厚的作品。本書對C++語言的描述輪廓鮮明、直截了當。它從C++語言建立者的角度來觀察C++,這是任何别的作者和書籍做不到的——沒有任何人比Bjarne自己更清楚該怎麼來使用C++。

這是一本嚴肅的著作,以中、進階C++開發人員為目标讀者。如果你是一名有經驗的C++程式員,需要了解更加本質的C++知識,本書正是為你而寫。它不是那種讓你看了會不斷竊喜的小書,需要用心體會,反複咀嚼。在閱讀過程中,請特别留心Bjarne先生強調了什麼,又對什麼一語帶過。我個人比較喜歡這本書的第四部分“使用C++做設計”,這樣的内容在類似的程式設計語言書籍中很難看到——我甚至認為Bjarne應該将這部分獨立出來單獨寫一本書。

The books which are worth reading for me
The books which are worth reading for me

Bjarne Stroustrup,《C++語言的設計和演化》影印版、中文版

D& E是一本關于C++語言設計原理、設計決策和設計哲學的專著。它清晰地回答了C++為什麼會成為今天這個樣子而沒有變成另外一種語言。作為C++語言的建立者,Bjarne淋漓盡緻地展示了他獨到而深刻的見解。除了廣受贊譽的語言特性外,Bjarne沒有回避那些引起争議的甚至被拒絕的 C++特性,他一一給出了邏輯嚴密、令人信服的解釋。内容涵蓋C++的史前時代、帶類的C、C++的設計規則、标準化、庫、記憶體管理、多重繼承、模闆等,對包括異常機制、運作時類型資訊和名字空間在内的重要的新特性都分别進行了深入探讨。每一名C++程式員都應該可以從Bjarne的闡釋中加深對手中這門語言的認識。

需要再次提醒的是,這兩本書知識濃縮,資訊量極大,請不要錯過Bjarne每一句看似漫不經意的話。

入門教程

學習任何一門語言都需要一個從入門到精通、從新手到高手循序漸進的過程。不過,對于一個所謂的新手而言,究竟是一個完完全全的新手,還是一個熟悉某種别的語言的“新手”,甚至是在某種語言程式設計領域已經頗有建樹的高手,很難一概而論?不同的C++新手需要不同的入門書籍。

The books which are worth reading for me
The books which are worth reading for me

Andrew Koenig, Barbara E. Moo,《Accelerated C++》影印版、中文版

和市面上大多數C++教程不同,本書不是從“C++中的C”開始講解,而是始于道地的C++特性。從一開始就使用标準庫來寫程式,随着講述的逐漸深入,又一一解釋這些标準庫元件所依賴的基礎概念。另外,和其他C++教材不同的是,這本書以執行個體拉動語言和标準庫的講解,對後兩者的講解是為了給執行個體程式提供支援,而不是像絕大多數C++教材那樣,例子隻是用作示範語言特性和标準庫用法的輔助工具。

作者在C++領域的程式設計實踐、教育教育訓練以及技術寫作方面都是世界一流水準。我喜歡這種大量使用标準庫和C++語言原生特性的清新的寫作風格。在這本教材面前,幾乎迄今為止的所有C++教材都黯然失色或顯得過時。盡管這本教材也許對于國内的高校教育來說有些前衛,不過我仍然極力向我的同行們推薦。順帶一提,在Bjarne和我最近的一封通信裡,他這樣評價本書:對于有經驗的程式員學習C++而言,這本書可能是世界上最好的一本。

The books which are worth reading for me
The books which are worth reading for me

Stanley B.Lippman, Josee Lajoie,《C++ Primer》影印第三版、中文第四版

這本書的名字多少有點讓人誤解。盡管作者聲稱這本書是為C++新手而寫,但無論是它的厚度還是講解的深度都暴露了似乎并非如此。也許說它是一本“從入門到精通”的C++教程會更合适一些。我個人認為它并不适合完全不懂C++的初學者——在閱讀這本書之前,你至少應該先有那麼一點C或C++的背景知識,或者至少要具有一些其他語言的程式設計經驗。

盡管這本書省略了一些進階C++特性的讨論,但仍然可以稱得上是迄今為止最全面的C++學習教程。事實上,如果一名C++初學者能夠紮紮實實地讀完本書并對照《C++ Primer Answer Book》完成全部習題的話,他的水準肯定可以進入職業C++程式員的行列。我個人認為,即使你已經擁有了TCPL,這本書依然有擁有的價值,因為在許多方面它比TCPL來得更詳細、更易懂。

The books which are worth reading for me
The books which are worth reading for me

Stanley B. Lippman,《Essential C++》影印版、候捷譯文版

可以不太嚴格地認為這本書是《C++ Primer》的精簡版。本書一一講述了C++中最具代表性的主題,包括過程式程式設計、泛型程式設計、基于對象程式設計、面向對象程式設計、模闆程式設計以及異常處理等。 Stanley将門檻調低到“具有其他語言程式設計經驗”的C++新手所能接受的最基本的層次,使他們能夠迅速開始使用C++程式設計而又免于閱讀《C++ Primer》那樣的大部頭。它以執行個體引導學習,力圖使讀者在最短的時間内把握C++的精粹。

也許換一個人來概述C++程式設計範型(paradigm)的方方面面需要好幾百頁才能說清楚,但這本小書不可思議地做到了這一點。我個人非常喜歡這種滿是技術、簡明扼要并且“有話好好說”的書。這本書同樣具有一個明顯的風格:所有程式例子全部采用标準庫元件,讓人耳目一新。

以上三本書都不是為了完完全全的程式設計新手而寫。完全的C++程式設計新手可以閱讀Francis Glassborow的新書(尚未出版):《A Beginners Introduction to Computer Programming: You Can Do It!》。這也是Bjarne的推薦。Francis Glassborow是ACCU主席,多年來他對幾乎每一本C++經典名著評頭論足,他自己的這一本自然會引起C++社群的極大興趣。

高效、健壯程式設計

兩年前我在負責一個省級電力排程系統項目時編寫了一個網關程式,它從SCADA系統擷取電力實時資訊。通訊接口采用了不常用的資料庫直連方式(這個網關程式一端連接配接SQL Server 6.5,另一端連接配接Oralce 8.1.6)。由于實時測點近萬,每次将全部取樣更新或插入一遍顯然是低效的。我在網關程式裡建了一個記憶體庫,擷取到的資料首先在其中進行比較,然後決定是否更新實體資料庫(同時還做了别的更複雜的事情……),進而在效率和資源占用兩方面達到了預期效果。

這個程式一直運作得很好,但在離開現場之後的某一天,系統管理者打來電話,說大概因為網絡故障等原因,有時這個網關程式會崩潰掉——它自己崩掉也就罷了,問題是它還會把Windows 2000 Advanced Server搞成“藍屏”!(坦白地說,我還從來沒看過哪個非蓄意的程式有這個“能耐”)由于當時正忙于另外一個大項目,無法去現場調試,最後隻有憑經驗對記憶體庫代碼小心翼翼地封裝以異常處理代碼(同時也做了一些别的修改。這個程式本來不乏異常處理,可惜在開發調試期,很難模拟出真實的“異常”狀況,以便驗證那些異常處理代碼真的可以工作)。這樣,雖然沒有徹底解決問題,但程式終究不再死得那麼難看了。

在這兒講這麼一段花絮有什麼意思呢(當初為那個可怕的bug朝思暮想時我可不認為這是一個“花絮”)?我想說的是,對于任何軟體而言,離開強健,效率也就無從談起。而對于C++程式員來說,也許編寫一個高效的程式并不難,但要編寫一個需要7×24小時持續運作的服務端軟體就不是那麼容易了(實際上,隻要應用伺服器不當機,即使發生網絡故障,即使資料庫伺服器當掉,那個網關程式也應該有能力持續運作下去),需要考慮許多因素,有時這些因素甚至遠遠超出 C++語言和開發工具的本身。作為一名開發實際項目軟體的程式員,并非非得自己碰釘子才能積累經驗,隻要我們足夠虛心,别人的經驗往往都是我們很好的借鑒。鑒于此,我推薦以下幾本書供你選讀,它們可以讓你從強健和效率兩方面受益(當然了,它們涵蓋的内容遠不限于異常處理)。

The books which are worth reading for me
The books which are worth reading for me

Scott Meyers,《Effective C++》英文原版(二版、三版),候捷中文版(二版、三版)

The books which are worth reading for me
The books which are worth reading for me

Scott Meyers,《More Effective C++》英文原版、候捷中文版

如果說《Effective C++》主要讨論C++中一些相對基礎的概念和技巧的話,那麼《More Effective C++》則着重探讨了包括異常處理在内的一系列進階技術。與前者相比,後者具有兩大主要差別:其一,它包含很多時新的标準C++的内容;第二,它讨論的主題傾向于“戰略化”而非“戰術化”,并且讨論得更深入、更徹底。尤其是對虛析構函數、智能指針、引用計數以及代理類(proxy classe)等技術和模式論述的深入程度,讓人很難想象是出現于這樣的一本小書之中。

遊刃有餘的技術,高超的寫作技巧,Scott無疑是世界上最優秀的C++技術作家之一。在簡潔、清晰、易讀等方面,這兩本書都卓爾不群。總之, Scott提供的這85個可以改善程式設計技術和設計思維的方法,都是中、進階C++程式員必備的技能。我強烈推薦這兩本書(實際上還有一本,稍後就會看到)。

The books which are worth reading for me
The books which are worth reading for me

Herb Sutter,《Exceptional C++》英文版、中文版

The books which are worth reading for me
The books which are worth reading for me

Herb Sutter,《More Exceptional C++中文版》英文版、中文版

你自認為是一名C++語言專家嗎?讀一讀ISO C++标準委員會秘書長的這兩本書再回答。在這兩本書中,Herb采用了“問答”的方式指導你學習C++語言特性。對于每一個專題,Herb首先合理地設想出你的疑問和困惑,接着又猜測出你十有八九是錯誤的解答,然後給你以指點并提出最佳解決方案,最後還歸納出解決類似問題的普适性原則。

這兩本書是典型的深究C++語言細節的著作,很薄,但内容密集,遠遠超過Scott的那兩本書,讀起來很費腦筋 — 我個人認為它們要比Scott的書難懂得多。若要研習這薄薄的兩本書所包含的知識,至少需要花費數月的時間!(在Scott的薦序中,他坦陳不止一次陷入 GotW問題的陷阱,你應該知道這意味着什麼)對于語言細節的深究有什麼好處呢?盡管在大多數情況下,我們不必關心C++代碼幕後的動作,然而當我們不得不關心時,這兩本書可以為我們提供很好的線索,因為它們揭示了C++語言中微妙而又至關重要的東西。

The books which are worth reading for me

Stephen C. Dewhurst,《C++程式設計陷阱》,中國青年出版社

Stephen 的理論素養和實踐經驗注定這是一本值得一讀的好書。Stephen曾經是貝爾實驗室中第一批C++使用者。他已經使用C++成功解決了包括編譯器、證券交易、電子商務以及嵌入式系統等領域中的問題。本書彙集了作者來自開發一線的99條程式設計真知灼見,洞悉它們,你可以避免幾乎所有常見的 C++設計和程式設計問題。

我甚至認為,對于C++程式設計菜鳥而言,閱讀這本書會比閱讀Scott和Herb的書更能輕松而立竿見影地獲得更大的提高。我個人很喜歡這本書的寫作風格——Stephen的許多觀點看似極端卻無可辯駁。當然了,這種自信(以及冷幽默)來自于作者深厚的技術素養,而非自大的偏執。

除了上面推薦的書籍外,Dov Bulka和 David Mayhew合著的《Efficient C++: Performance Programming Techniques》(《提高C++性能的程式設計技術》,清華大學出版社)也值得一看。這本超薄小書聚焦于高性能C++應用程式開發。兩位作者都是IBM 軟體專家,都工作于對性能要求極高的系統建構領域,本書是他們的經驗之談。也有人不喜歡這本書,因為它花了不少的篇幅講述和C++無關的東西,我卻恰恰因為這一點而對這本書産生好感,正是這些東西讓我開闊了眼界。

模闆和泛型程式設計

模闆和基于模闆的泛型程式設計無疑是當今發展最活躍的C++程式設計技術。模闆的第一個革命性的應用是STL,它将模闆技術在泛型容器和算法領域的運用展現得淋漓盡緻,而Boost、Loki等現代程式庫則将模闆技術的潛能不斷發揮到極緻。在模闆和泛型程式設計領域,我推薦以下兩本重量級著作。

The books which are worth reading for me
The books which are worth reading for me

David Vandevoorde, Nicolai M. Josuttis,《C++ Templates》影印版、中文版

有一種老套的贊美一本書的手法,大緻是“沒有看過這本書,你就怎麼怎麼地”,這裡面往往誇張的成分居多。不過,倘若說“沒有看過《C++ Templates: The Complete Guide》,你就不可能精通C++模闆程式設計”,那麼這個論斷對于世界上絕大多數C++程式員來說是成立的。

這本書填補了C++模闆書籍領域由來已久的空白。此前,上有《Modern C++ Design》這樣的專注于模闆進階程式設計技術和泛型模式的著作,下有《The C++ Standard Library》這樣的針對特定模闆架構群組件的使用指南。然而,假如對模闆機制缺乏深入的了解,你就很難“上下”自如。鑒于此,我向每一位渴望透徹了解 C++模闆技術的朋友推薦這本書。

這本書在大陸、台灣各有一個譯本,但出自不同的譯者之手。當你看到這篇文章時,兩個譯本應該都已經上市,對于讀者來說當然也就多了一種選擇。侯捷先生個人網站上開放了繁體譯本大部分章節,不妨先睹為快。

The books which are worth reading for me
The books which are worth reading for me

Andrei Alexandrescu,《C++設計新思維:泛型程式設計與設計模式之應用》影印版、中文版

你自認為是C++模闆程式設計高手嗎?請看過這本書再回答。這是一本出自天才之手令人敬畏的傑作。泛型模式,無限延伸你的視野,足以挑戰任何一名C++程式員的思維極限。

這本書共分為兩大部分,第一部分讨論了 Loki程式庫采用的基礎技術以及一些進階語言特性,包括基于政策的類設計、模闆局部特化、編譯期斷言、Typelist以及小型對象配置設定技術等。第二部分則着重介紹了Loki中的重要元件和泛型模式技術,包括泛化仿函數(Generalization Functor)、單件(Singleton)、智能指針、對象工廠(Object Factory)、抽象工廠(Abstract Factory)、通路者(Visitor)以及多方法(Multimethods)等。每一種技術都讓人大開眼界,歎為觀止。

在C++的學習方面,過猶不及往往成了不求甚解的借口。然而,面向對象并非C++的全部,模闆和泛型程式設計亦占半壁江山。對于“嚴肅”的C++程式員而言,及時跟進這項早經例證的成功技術,不失為明智之舉。

結語

這些著作是如此大名鼎鼎,也許根本不缺我一個推薦。然而,縱然C++程式員隊伍的發展壯大速度不像其他更時髦的語言那樣迅速,新人進總是多于舊人出。除了熱忱地歡迎新人,我個人認為到了對C++書籍進行“盤點”的時候了,并且希望這樣的“盤點”有益于感興趣的讀者。請保持耐心和寬厚。在下篇中,我将繼續介紹标準庫、網絡程式設計以及其他方面的C++好書。有好書相伴,這個冬天不會冷。

C++程式設計之四書五經(下篇)

榮耀/文

我在上篇中“盤點”了TCPL和D&E以及入門教程、高效和健壯程式設計、模闆和泛型程式設計等方面共十幾本C++好書。冬去春來,讓我們繼續C++書籍精彩之旅。

标準庫

當我還在研究院工作時,與同院另外兩家研究所合作開發過一個大型水利樞紐排程內建項目。我們三家軟體系統之間都要互相通信。在調試通訊子產品時,細心的客戶(一名好學的系統管理者)發現對于同一通信規約的解釋代碼,我的不超過30行,而對方的則超過了150行且很難看懂。這位系統管理者很納悶,我說大家程式設計風格和習慣不一樣,我使用了标準庫,而他使用了傳統C程式設計風格以及他所習慣的另外一些技術。

别誤會!我絕無貶低這位合作夥伴的意思。事實上,我對那些真正有着深厚的C程式設計功力的程式員常常懷有欽佩之心。畢竟,C++能有今天的成功在很大程度上緣于它深深地植根于C。作為一名C++程式員,倘若不熟悉C++中的C,我往往會認為他的基本功是不紮實的,他的技術底氣是不足的。

不過話又說回來,C++是一種多範型(paradigm)程式設計語言,具體采用哪種程式設計風格,專業程式員應該知道視具體情況而定。作為一名經常需要在現場做即興開發的項目負責人,為了短平快地解決當務之急,我習慣盡量采用現有的庫(群組件)。效率(以及強健性)久經驗證的C++标準庫已經擺在那兒了,何樂而不用呢?

The books which are worth reading for me
The books which are worth reading for me

Nicolai M. Josuttis,《The C++ Standard Library: A Tutorial and Reference》原文版、中文版:《C++标準程式庫:自修教程與參考手冊》

這是一本百科全書式的C++标準庫著作,是一本需要一再查閱的參考大全。它在完備性、細緻性以及精确性方面都是無與倫比的。本書詳細介紹了每一标準庫元件的規格和用法,内容涵蓋包括流和本地化在内的整個标準庫而不僅僅是STL。正如本書副标題所示,它首先适合作為教程閱讀,爾後又可用作參考手冊。

淺顯易懂的寫作風格使得這本書非常易讀。如果你希望學習标準庫的用法并盡可能地發揮其潛能,那你必須擁有這本書。正如網絡上所言,這本書不僅僅應該擺在你的書櫥中,更應該放到你的電腦桌上。我向每一位職業C++程式員強烈推薦。

The books which are worth reading for me
The books which are worth reading for me

Angelika Langer, Klaus Kreft,,《Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference》原文版、中文版《标準C++輸入輸出流與本地化》

C++标準庫由STL、流和本地化三部分構成。關于STL的書市面上已經有不少,但罕見流和本地化方面的專著。本書是這兩個領域中最優秀的一本,迄今為止沒有任何一本書比這一本更全面詳盡地讨論了流和本地化。如果你不滿足于停留在“會用”流庫的層面,千萬不要錯過它。

2001年夏天,我草草翻閱過這本書的中文版,從内容到包裝都給我留下了比較深刻的印象——不過負面的居多一些。2003年秋天,無意中得知某網絡書店正以超低價格甩賣這本書的中譯本,情不自禁,一陣唏噓。

The books which are worth reading for me
The books which are worth reading for me

Scott Meyers,《Effective STL》影印版、中文版

讀完Scott 的《Effective C++》和《More Effective C++》的中譯本之後,我一直期待這本書的中文版。我從潘愛民先生的個人首頁上了解到,他和他的合作夥伴似乎早已完成了這本書的翻譯工作,可惜至今市面上仍不得見。幸運的是,我們可以看到它的原版。

本書是使用STL的程式員必讀之作。在這本書中,Scott向我們講述STL容器和算法的工作機制以及如何以最佳方式使用它們。和Scott的其他作品一樣,這本書的寫作風格清晰、精确,具有極佳的可讀性。看過這本書以後,我想你也許會和我以及其他C++程式員一樣産生這樣的想法:Scott什麼時候會寫出一本“More Effective STL”?

The books which are worth reading for me
The books which are worth reading for me

Matthew H. Austern,《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》影印版、中文版《泛型程式設計與STL》

關于STL,我還提醒你留心Matthew H. Austern的《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》(《泛型程式設計與STL》,中國電力出版社)。這本書散發着濃厚的學院氣息。Andrew Koenig和Barbara Moo在《Accelerated C++: Practical Programming by Example》一書末尾鄭重推薦另外兩本進階好書(除了他們自己的《Ruminations on C++》外),其中一本是TCPL,另外一本就是本書!

網絡程式設計

在網絡程式設計時代,C++應該扮演着怎樣的角色,讓ACE(Adaptive Communications Environment)來告訴你。

The books which are worth reading for me
The books which are worth reading for me

Douglas C. Schmidt, Stephen D. Huston,《C++ Network Programming》Volume 1: Mastering Complexity with ACE and Patterns、Volume 2: Systematic Reuse with ACE and Frameworks

The books which are worth reading for me
The books which are worth reading for me

中文版:,《C++網絡程式設計》卷1:運用ACE和模式消除複雜性、卷2:基于 ACE 和架構的系統化複用

采用C++進行企業級網絡程式設計,目前ACE(以及這兩本書)是一個值得考慮的選擇。ACE是一個面向對象、跨平台、開放源碼的網絡程式設計架構,目标在于建構高性能網絡應用和中間件。Douglas是ACE的創始人,Stephen則已為ACE提供了數年的技術支援和顧問服務,兩位都是ACE社群(是的,ACE 的影響和實際應用的程度已經形成了一個社群)的專家。

ACE并不單單被大學和研究所追捧,它已經被成功地應用于世界上成千上萬個商業應用中。在電信、宇航、醫藥和财經領域的網絡系統中,ACE已經并繼續發揮着重要的作用。如果你準備開發高性能通訊系統,你應該考慮考慮這一彙集世界頂尖專家智慧的成果。

除了使用C++面向對象設計技術和模闆等進階語言特性外,ACE還運用了大量的模式。《C++網絡程式設計》卷1和卷2并不僅僅教你關于ACE的方方面面,它還會教給你模式和通用架構設計等進階技術等。是以,作為一名中、進階C++程式員,即使你很少進行正兒八經的C++網絡程式設計,閱讀這兩本書同樣可以從中受益。

是的,并非所有網絡應用都要使用Web伺服器(以及其他應用伺服器)和重量級元件模型,換個思路,它們或許也可以從輕量級的ACE元件中獲益。

雜項

以下幾本書是以被列入“雜項”單元,是因為我沒有考慮到合适的歸類方法,它們和上面的書籍一樣,值得一讀。

The books which are worth reading for me
The books which are worth reading for me

Bruce Eckel,《Thinking in C++》影印版二版、三版(又名卷二)

The books which are worth reading for me
The books which are worth reading for me
The books which are worth reading for me

中文《C++程式設計思想》二版、卷一:标準C++導引 卷二:實用程式設計技術

《Thinking in C++》的第1版于1996年榮獲“軟體研發”雜志評選的圖書震撼大獎。最新推出的第2版對内容進行了大幅改寫和調整,以反映C++标準化帶來的影響以及近幾年面向對象領域最新研究和實踐成果。“輸入輸入流”、“多重繼承”、“異常處理”和“運作時類型識别”等進階主題連同C++标準化以後增加的一些内容則被放入第二卷中。Bruce是一名經驗豐富的C++講師和顧問,其教育訓練和寫作經驗都是世界一流水準,他的作品比那些“玩票”的技術人員寫的東西更能吸引讀者。事實上,在同類圖書中,對于大多數讀者而言,這本書的可讀性要超過TCPL和《C++ Primer》。順帶一提,通路作者的站點,你可以先睹第二卷的風采。

The books which are worth reading for me
The books which are worth reading for me

Andrew Koenig, Barbara E. Moo,,《Ruminations on C++: A Decade of Programming Insight and Experience》原版、中文版《C++沉思錄》

Andrew 是世界上屈指可數的C++專家。這是一本關于C++程式設計思想和程式設計技術而非語言細節的著作。如果你已經具有一定的基礎,這本書将教你在進行C++程式設計時應該怎樣思考,應該如何表達解決方案。整本書技術表達透徹,文字通俗易懂。Bjarne這樣評價這本書:本書遍布“C++是什麼、C ++能夠做什麼”的真知灼見。

The books which are worth reading for me
The books which are worth reading for me

Stanley B. Lippman,《Inside The C++ Object Model》影印版、中文版《深度探索C++對象模型》

從編譯器的角度觀察C++可以使你知其然并知其是以然。本書探讨了大量的C++面向對象程式設計的底層運作機制,包括構造函數、函數、臨時對象、繼承、虛拟、模闆的執行個體化、異常處理、運作期類型識别等,另外還介紹了一些在實作C++對象模型過程中做出的權衡折衷。喜歡刨根問底的C++程式員不要錯過這本書。

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented software

The books which are worth reading for me
The books which are worth reading for me

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides,《Design Patterns: Elements of Reusable Object-Oriented software》影印版、中文版《設計模式:可複用面向對象軟體的基礎》

設計可複用的面向對象的軟體,你需要掌握設計模式。本書并非專為C++程式員而寫,但它采用了C++(以及Smalltalk)作為主要示例語言, C++程式員尤其易于從中受益。四位作者都是國際公認的面向對象軟體領域專家,他們将面向對象軟體的設計經驗作為設計模式詳細記錄下來。這本書影響是如此深遠,以至于四位作者以及本書都被昵稱為GoF(Gang of Four)。本書學院氣息濃厚,行文風格嚴謹簡潔,雖然它不如某些講解模式的書籍易讀,但真正要精準地了解設計模式,本書是終極權威。學習設計模式,這本書需要一而再、再而三的咀嚼。順帶一句:請将設計模式化作開拓思維的鑰匙,切莫成為封閉思維的枷鎖。

The books which are worth reading for me
The books which are worth reading for me

John Lakos,《Large-Scale C++ Software Design》中文版《大規模C++程式設計》、候捷:《STL 源碼剖析》

還有一些C++好書值得一讀,恕此處無法一一列出。例如John Lakos的著作《Large-Scale C++ Software Design》(《大規模C++程式設計》,中國電力出版社)和侯捷先生的《STL 源碼剖析》(華中科技大學出版社)等。

《STL 源碼剖析》是一本很有特色的書,但我認為它還可以更好。我個人期待侯捷先生自第一版發行以來經過對模闆技術的沉澱和再思考之後,再寫一本剖析得更深入、更透徹并且更全面的“第二版”。遺憾的是,侯捷先生在完成《C++ Templates: The Complete Guide》一書的翻譯後似乎決定暫時告别模闆、泛型程式設計和STL領域。

使用C++成功開發大規模軟體系統,不僅需要很好地了解大多數C++書籍中講述的邏輯設計問題,更需要掌握《大規模C++程式設計》中講述的實體設計技術。當然,這本書的确有點過時了,不過,如果你的精力和金錢都比較寬綽,買一本看看并無壞處。

至此,我想有必要聲明一下,有一些(好)書沒有得到推薦,主要原因如下:

  • 以上這些書已經足夠多、足夠好了。
  • 我不會推薦通過正常管道很難購買到的書籍 ——不管是中文版還是英文版。
  • 作(譯)者名氣大小不影響我的推薦。我們是在看書,不是看人。
  • 我不會推薦我從來沒有看過的書。我至少要看過其中的某個版本(包括電子檔)。這個“看”,一般指“認真閱讀”,不過有一些也隻能算是“浏覽”。

結語

作為一名普通技術寫譯者,我深知技術創作和翻譯的艱辛(和快樂),并多多少少了解一些有關技術書籍創作、翻譯、制作、出版以及市場推介背後的細節。今天,我不會再對一本看上去差強人意的圖書信口開河。羅列同一本書的各種版本的用意隻在于為你多提供一些資訊,讓你多一種選擇。

在本文成文的後期,我給Bjarne寫了一封信,請教如果他來寫這篇文章會怎麼寫。他給了我簡明扼要的建議。在肯定以上列出的絕大部分圖書都是世界頂尖水準的C++著作的同時,Bjarne提醒我别忘了向專家級程式員推薦《The C++ Standard : Incorporating Technical Corrigendum No. 1》

The books which are worth reading for me

《The C++ Standard : Incorporating Technical Corrigendum No. 1》

Bjarne 還友好地提醒我,在我的推薦清單中沒有哪一本有助于C++程式員進行Windows程式設計——這正是我的本意。在這篇文章中,我隻推薦、點評平台中立的C+ +著作(網絡程式設計除外)——和作業系統無關,和內建開發環境無關,我甚至幻想它們和編譯器也無關。你可以根據業務開發需要,選讀自己喜愛的領域相關的C+ +書籍。

說到“系統無關、平台中立”,我不由得想起了“抽象層”的概念。開發實際應用的C++程式員通常工作于特定作業系統、特定開發環境和特定業務領域之中,而對标準C++和C++标準庫紮實而深刻的把握,無疑是你得以在不同的作業系統、不同的開發環境以及不同的業務領域之間縱橫馳騁的 “抽象”本錢。

推薦的C++書籍以及閱讀順序

當讀者有一定c/c++基礎

推薦的閱讀順序:

level 1

從<<essential c++>>開始,短小精悍,可以對c++能進一步了解其特性

以<<c++ primer>>作字典和課外讀物,因為太厚不可能一口氣看完

level 2

然後從<<effective c++>>開始轉職,這是聖經,請遵守10誡,要經常看,沒事就拿來翻翻

接着是<<exceptional c++>>,個人認為Herb Sutter主席大人的語言表達能力不及Scott Meyers總是在教育第一線的好

順下來就是<<more effective c++>>和<<more exceptional c++>>,請熟讀并牢記各條款

當你讀到這裡,應該會有一股更新的沖動了

level 3

<<insied the c++ object model>>看過後如一縷清風掃去一直以來你對語言的疑惑,你終于能明白compiler到底都背着你做了些什麼了,這本書要細細回味,比較難啃,最好反複看幾遍,加深印象

看完上一本之後,這本<<The design and evolution of c++>>會重演一次當年C++他爹在設計整個語言過程中的曆程

level 4

<<the c++ standard library>>是stl的字典,要什麼都可以查得到

學c++不能不學stl,那麼首先是<<effective stl>>,它和聖經一樣是你日常行為的規範

<<generic programming and the stl>>讓你從oo向gp轉變

光用不行,我們還有必要了解stl的工作原理,那麼<<stl源碼剖[來源:GameRes.com]析>>會解決你所有的困惑

level 5

對于c++無非是oo和gp,想進一步提升oo,<<exeptional c++ style>>是一本主席這麼多年的經驗之談,是很長esp的

一位stl高手是不能不去了解template的,<<c++ template>>是一本百科全書,足夠你看完後對于gp遊刃有餘

<<modern c++ design>>是太過聰明的人寫給明眼人看的

好書有很多,不能一一列舉

以上我的讀書經曆,供各位參考。接下來的無非就是打怪練級,多聽多寫多看;boost、stl、loki這些都是利器,斬妖除魔,奉勸各位别再土法練鋼了。

at last,無他,唯手熟爾。

忘了一本《thinking in C++》

也是經典系列之一

<<effective c++>>這本聖經的作者Scott Meyesr在給<<modern c++ design>>序言的時候高度的贊賞了Andrei同志的工作:C++社群對template的了解即将經曆一次巨大的變化,我對它所說的任何事情,也許很快就會被認為是陳舊的、膚淺的、甚至是完全錯的。

就我所知,template的世界還在變化,速度之快就像我1995年回避寫它的時候一樣。從發展的速度來看,我可能永遠不會寫有關template的技術書籍。幸運的是一些人比我勇敢,Andrei就是這樣一位先鋒。我想你會從此書得到很多收獲。我自己就得到了很多——Scott Meyers September2000。

并且,Scott Meyers 在最近的Top5系列文章中,評價C++曆史裡面最重要5本書中、把Modern C++ Design列入其中,另外四本是它自己的effective c++、以及C++ Programming Language、甚至包括《設計模式》和《C++标準文檔》。

顯然,Scott Meyers已經作為一個頂尖大師的角度承認了<<modern c++ design>>的價值。

并且調侃地說,可以把是否使用其中模闆方法定義為,現代C++使用者和非現代C++使用者,并且檢讨了自己在早期版本Effective對模闆的忽視,最後重申在新版本Effective第七章節加入大量對模闆程式設計的段落,作為對這次失誤的補償。

并且,在這裡要明确的是<<modern c++ design>>并不是一本泛型編成的書,也不是一本模闆手冊。其中提出了基于政策的設計方法,有計劃和目的的使用了模闆、面向對象和設計模式。雖然Andrei本人對模闆的研究世界無人能敵,但對其他領域的作為也令人贊歎。

任何做遊戲的人都不能忽視OpenAL把,你在開發者的名單裡能看到Loki的名字:)

最近很忙,無時間寫文章,小奉獻一下書籍下載下傳位址。雖然經過驗證,但是不感肯定各位一定能下:

<effective C++> 中文

http://www.itepub.net/html/ebookcn/2006/0523/40146.html

英文

http://dl.njfiw.gov.cn/books/C/Essential%20C++.chm

<c++ primer> 英文

http://www.vipbook.net/soft/2114.htm

<<effective c++>>英文

http://soft.studa.com/downinfo/19350.html

<exceptional c++> 英文

http://soft.studa.com/downinfo/19380.html

<more exceptional c++> 英文

http://soft.studa.com/downinfo/19377.html

<inside the C++ object Model>

http://dl.njfiw.gov.cn/books/C/Inside%20the%20C++%20Object%20Model.chm

< the design and evolution of c++ >

http://ebook.manboo.info/2006/11/19/the-design-and-evolution-of-c.html

< effective STL>

http://dl.njfiw.gov.cn/books/C/Effective%20STL.pdf

< the standard STL>

http://dl.njfiw.gov.cn/books/C/The%20C++%20Standard%20Library.chm

< moden C++ design>

http://dl.njfiw.gov.cn/books/C/Modern%20C++%20Design.chm

<exceptional c++ style>

http://cpp.ga-la.com/html/8/10/0510/71.htm

< c++ template >

http://www.itepub.net/html/ebookcn/2006/0429/7320.html

< generic programming and the STL >

http://www.jjhou.com/jjtbooks-generic-programming-and-the-stl.htm

以下摘自 [Meyers98]:

條款1:盡量以 const 和 inline 取代 #define

條款2:盡量以 <iostream> 取代 <stdio.h>

條款3:盡量以 new 和 delete 取代 malloc() 和 free()

條款5:使用相同型式的 new 和 delete

條款6:記得在 destructors 中以 delete 對付 pointer member

條款7:為記憶體不足的狀況預做準備

條款8:撰寫 operator new 和 operator delete 時,應奉行慣常行為

條款9:避免遮掩了 new 的正規型式

條款10:如果你寫了 operator new,請對應寫一個 operator delete

條款11:classes 内如果動态配置記憶體,請為它宣告一個 copy constructor 和一個 assignment 運算子

條款12:在 constructor 中盡量以 initialization 動作取代 assignment 動作

條款13:initialization list 中的 members 初始化排列次序應該和其在 class 内的宣告次序相同

條款14:總是讓 base class 擁有 virtual destructor

條款15:令 operator= 傳回 *this 的 reference

條款16:在 operator= 中為所有的 data members 指派。

條款17:在 operator= 中檢查是否「自己指派給自己」

條款19:區分 member functions, non-member functions 和 friend functions 三者

條款20:避免将 data members 放在公開介面中

條款21:盡可能使用 const

條款22:盡量使用 pass-by-reference(傳址),少用 pass-by-value(傳值)

條款23:當你必須傳回一個 object 時,不要嘗試傳回一個 reference

條款29:避免傳回内部資料的 handles

條款30:避免寫出「傳回 non-const pointers 或 references 并以之指向較低存取層級之 members」的 member functions

條款31:千萬不要傳回「函式内的 local 物件的 reference」,或是「函式中以 new 獲得的名額的所指物件」。

條款32:盡可能延緩變數定義式的出現

條款33:明智地運用 inlining

條款34:将檔案之間的編譯相依關系(compilation dependencies)降至最低

條款35:确定你的 public inheritance 模塑出 "isa" 的關系

條款36:區分「介面繼承(interface inheritance)」和「實作繼承(implementation inheritance)」

條款37:絕對不要重新定義一個繼承而來的非虛拟函式

條款38:絕對不要重新定義一個繼承而來的預設叁數值

條款39:避免在繼承體系中做 cast down(向下轉型)動作

條款40:透過 layering(分層技術)來模塑 has-a 或 is-implemented-in-terms-of 的關系

條款41:區分 inheritance 和 templates

條款42:明智地運用 private inheritance(私有繼承)

條款43:明智地運用多重繼承(multiple inheritance,MI)

條款45:知道 C++(編譯器)默默為我們完成和呼叫哪些函式

條款47:使用 non-local static objects 之前,确定它已有初值

條款49:盡量讓自己熟悉 C++ 标準程式庫

⊙以下摘自 [Meyers96]:

條款1:仔細差別 pointers 和 references

條款2:最好使用 C++ 轉型運算子

條款3:絕對不要以 polymorphically(多型)方式來處理陣列

條款4:非必要不使用 default constructor

條款5:對自定的型别轉換函式保持警覺

條款6:差別 increment/decrement 運算子的前序(prefix)和後序(postfix)型式

條款7:千萬不要多載化 &&, ||, 和 , 運算子

條款8:了解各種不同意義的 new 和 delete

條款9:利用 destructors 避免遺失資源

條款10:在 constructors 内阻止資源遺失(resource leaks)

條款11:禁止異常訊息(exceptions)流出 destructors 之外

條款12:了解「丢出一個 exception」與「傳遞一個叁數」或「呼叫一個虛拟函式」之間的差異

條款13:以 by reference 方式捕捉 exceptions

條款15:了解異常處理(exception handling)的成本

條款17:考慮使用 lazy evaluation

條款18:分期攤還預期的計算成本

條款19:了解暫時物件的來源

條款20:協助完成「傳回值最佳化(RVO)」

條款21:利用多載化技術(overload)避免隐式型别轉換

條款22:考慮以運算子的複合型式(op=)取代其獨身型式(op)

條款24:了解 virtual functions、multiple inheritance、virtual base classes、

runtime type identification 所需的成本

條款25:将 constructor 和 non-member functions 虛拟化

條款26:限制某個 class 所能産生的物件數量

條款27:要求(或禁止)物件産生於 heap 之中

條款28:Smart Pointers(精靈名額)

條款29:Reference counting(叁用計數)

條款30:Proxy classes(替身類别、代理人類别)

條款31:讓函式根據一個以上的物件型别來決定如何虛拟化

條款33:将非尾端類别(non-leaf classes)設計為抽象類别(abstract classes)

其中條款

25~31層次甚高,用來解決C++ 軟體開發過程中一再出現的問題,作者把這類問題及其解法稱為 idioms(慣用法)或 patterns(樣式),與着名的23個精典 patterns(見 [Gamma95])相呼應。雖然這裡所談的規模格局部都比較小,但正因為如此,作者得以完成比較具體的實作,反而比 [Gamma95] 容易閱讀。

[Meyers96] 和 [Meyers98] 這兩本書成名已久,獲得極大的聲譽。以下的贊美可以使你更了解這兩本書的性質和價值:

◆在你開始着手第一個真正的 C++ 專案之前,你應該閱讀本書;在你獲得一些實務經驗之後,你應該再讀一遍。-- comp.lang.c++

◆作者不隻提供你撰寫 C++ 碼時應該遵循的明白規則,也提供了深入的解釋與範例。-- Sun Expert

◆每一位 C++ 程式員不隻應該擁有這本書,而且應該确實運用這本書。書中文字極易拿來實際運用,交叉叁考與索引的功夫做得很好。-- Computer Language

◆ 這本絕妙好書提供的招數,幫助我們把 C++ 運用得更好。每一位 C++ 程式員桌上都應該有這本書。在提升 C++ 程式設計的整體品質上, Scott Meyers 這份珍貴的禮物或許比業内任何人士的貢獻都大。-- Jesse Liberty, C++ Report

[Sutter99] 是另一本專家經驗談。作者是 C++ Report 期刊主編,并主持網路上一個名為每周之星(a Guru of the Week,GotW)的 C++ 特别節目。以他的背景和經曆,接觸的疑難雜症自然是又多又猛。這本書整理了 47 個條款,由於條款名稱無法表現某種具體準則,是以我不條列於此。本書主要分為八大項:

1. 泛型程式設計與 C++ 标準程式庫

2. Exception-Safety(異常發生時仍安全)的主題與相關技術

3. Class 的設計與繼承

4. 編譯器防火牆(Firewalls)及 Pimpl 慣用手法

5. 名稱查詢、命名空間、介面原則

6. 記憶體管理

7. 陷阱、易犯錯誤與有害作法

8. 雜項主題

Scott Meyers 為此書所寫的序,點出了這本書的特質:

『從語言的特性到标準程式庫内的元件,再到程式編寫技術,本書在不同的主題之間跳躍,總是使你稍稍失去平衡,總是使你必須付出全然的注意力。...我把 GotW 發音為 "Gotcha"(意思是「這下可逮到你了」),或許很适當。當我把書中測驗的(我的)答案拿來和 Sutter 的答案比較,我掉進他(和 C++)鋪設的陷阱中 ─ 雖然我實在不想承認這點。我幾乎可以看見 Herb 微笑并溫柔地對我所犯的每一個錯誤說 "Gotcha!"。...當你選擇 C++ 做為工具,你必須小心地思考你正在做些什麽。C++ 是一個威力強大的語言,用來協助解決吃力的問題,其重要性使你必須盡可能面對語言本身、程式庫、程式慣用手法來磨煉你的知識。』

就我的英文程度而言,[Sutter99] 讀起來不若 [Meyers96] 和 [Meyers98] 那般平順,原因是其中用了很多厘語、口語、典故。舉個例子,Morphy law 是什麽,大家知道嗎?(莫菲定律說:會出錯的,一定會出錯。)Machiavelli 又代表了什麽意思?(意大利政治家,以詐術聞名。)

http://bbs.fobshanghai.com/thread-3094815-1-1.html

20本終生受益的英語書

1. Your Money or Your Life, by Joe Dominguez and Vicki Robins.

關于理财的書籍,重點推薦這一本,你應該讀一下。它了解大多數人的理财觀念,并用簡單有效的新方法改造你的生活。我的理财經就是從這本書習得的。

2. Slowing Down to the Speed of Life, by Richard Carlson and Joseph Bailey.

這本書的核心思想就是“活在當下”,其實是2500年前佛家就已經提出來的哲學。不過,這本書從心理學的角度探讨了這一哲學觀念,闡釋了我們的思想産生情緒的過程,以及該如何在躁亂之中保持震驚、将壓力降到最低、做好父母角色、改善人際關系等等方面的指導内容。

3. Simplify Your Life, by Elaine St. James.

這本書是影響zenhabits哲學思想的書籍之一。十年前我開始讀這本書起,我就開始了簡化生活的嘗試。雖然十年來經曆起伏跌宕,我仍然對這本書充滿熱愛。好書易讀,有很多值得學習的地方。

4. The Art of Happiness, by the Dalai Lama.

不知道Dalai Lama本人是否真的這樣,但這本書的文字确實能讓人感受到仁慈和幸福的力量。雖然整本書并沒與更深層次的内容,我仍然将這本書視為對我們人生的一種提醒:慈悲地活着,我們的生命會更有意義。

5. Getting Things Done, by David Allen.

這本關于産出率的經典著作适合每個想更加高效有序工作的人去研讀。GTD教會了我很多重要的技能:清空收件箱、在紙上寫下要做的事情、一次隻用心去處理一件事,等等等等。

6. The 4-Hour Workweek, by Timothy Ferriss.

這本書影響了許許多多人的生活,教我們将一切簡化,将重心放在對我們生活和事業最重要的地方。不管你是名總裁,是名員工,還是家庭主婦、部落格寫手,它的理念都能夠應用到你的生活中去。你也許并不能适應每周四小時的工作時間,但是你能學會嘗試用新的、聰明的方法去處理你的事務。

7. The War of Art, by Steven Pressfield.

對任何從事寫作或創意工作的人來說,創作過程如同一場戰鬥。有時,甚至每天,我們都要強迫自己專心工作、想出創意、避免陷入拖沓和分心的深淵。這本書教你怎樣以一個專業工作者的姿态戰勝這些,非常值得一讀。

8. Don’t Sweat the Small Stuff, by Richard Carlson.

Carlson是Slowing Down to the Speed of Life的合著者,不過他更有名的著作是這一本。這本書是“别為小事擔憂”系列的第一本。和副标題連在一起,你能讀出更多意味:《别為小事擔憂——所有的都是小事》。這本書教你透視所有事情,免除焦慮困擾。它也告訴你,要以欣賞的眼光看待周圍事物,尤其是我們身邊的人。

9. Running to Win, by George Sheehan.

這本書并非關于工作哲學,實際上是關于生活哲學的書。這本書探讨了關于将生活充實化的任何方法。Sheehan的文筆優美而激動人心,著有一系列不錯的作品。這本書完成于他得了末期癌症時。

10. Upgrade Your Life, by Gina Trapani.

這本書教你把時常讓你分心、把你俘虜的現代科技轉換為你高效工作的工具。

11. The Essential Gandhi, by Louis Fischer.

不論你是否崇敬甘地本人,他的文字确實是非常深邃而影響廣泛的。每次讀這本書,我都會深受啟發。

12. Manufacturing Consent, by Noam Chomsky and Edward Herman.

如果你還沒有讀過喬姆斯基的書,從這本開始吧。十年前我開始讀的這本書,教給了我很多關于政治與輿論的東西。我也因為讀這本書而對資訊篩選更加嚴格。總之,我大力推薦大家讀一些喬姆斯基的書,它們能使你從一個新的角度去看待事物。他是我們時代最著名的持不同政見者之一。

13. The 7 Habits of Highly Effective People, by Stephen Covey.

對想提高工作效率的人來說,這本是必讀書籍。7個習慣包括操之在我、以終為始、要事第一、利人利己、知彼解己、集思廣益、均衡發展。

14. Tao Te Ching, by Lao Tzu. 《道德經》

1500年前道家經典基礎著作。它将教給你基本的東方哲學思想,以及人生一二。

15. Zen and the Art of Motorcycle Maintenance, Robert Pirsig.

現代經典著作。Pirsig同他的兒子、朋友一起遊走鄉間,探索禅意精要。

16. The Monk Who Sold His Ferrari, by Robin Sharma.

這是本能引發你對人生的思考的寓言故事。關于你的人生、你的目标、你的夢想,以及為了實作夢想你需要培養的日常習慣,這本書都會對你有所啟發。不是說任何問題都能在這本書中找到答案,Sharma探索了很多有趣的主意,我相信每個人都會找到一些值得嘗試的東西。

17. The Elements of Style, by Strunk and White.

英語寫作者不可或缺的經典之作。這本書也不光适用于作家,對部落格寫手以及任何需要寫報告、郵件和其他網絡文章的人都适用。簡而言之,每個人都應該讀它。18年前我剛開始記者生涯的時候第一次讀了這本書,現在我每年都要讀上一遍。它教你精确地運用語言,避免常見錯誤,使你的文字更加清晰有力。

18. Fever Pitch, by Nick Hornby.

與其他清單上的書籍有些不同,但我非常喜歡這本書,是以仍舊加了近來。這本書以自傳的形式描寫了作者對足球一生的狂熱。這些散文各自描寫某一賽事,引人入勝,非常有趣。

19. A People’s History of the United States, by Howard Zinn.

這本書改變了很多人從課本上學來的曆史觀。Zinn講述美國曆史的角度極為特别,他描述的不是美國的富有與強大,而是生活在這片土地上無權無力的那群人。他講述了黑人、女性、中國鐵路勞工、窮人、勞工等一切被權勢壓迫的群體的故事。他們是這個社會的少數力量,默默無言地生活着。

20. The Power of Less, by Leo Babauta.

這本書教你把注意力集中在最重要的事情上,有序、簡潔地處理生活事物,進而提高工作效率。