The books which are worth reading for me

来源:互联网 发布:圣安德鲁斯大学知乎 编辑:程序博客网 时间:2024/06/07 05:38

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/yan_zhennan@126/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++语言圣经,并不为过。

Bjarne Stroustrup,《C++程序设计语言》影印版、中文版、题解

迄今为止,TCPL是除了C++标准文献之外最权威的C++参考手册。和大多数人的看法不大一样,我认为Bjarne的文字语言并不逊色于他所创建的程序语言,至少我喜欢这种学院气息浓厚的作品。本书对C++语言的描述轮廓鲜明、直截了当。它从C++语言创建者的角度来观察C++,这是任何别的作者和书籍做不到的——没有任何人比Bjarne自己更清楚该怎么来使用C++。

这是一本严肃的著作,以中、高级C++开发人员为目标读者。如果你是一名有经验的C++程序员,需要了解更加本质的C++知识,本书正是为你而写。它不是那种让你看了会不断窃喜的小书,需要用心体会,反复咀嚼。在阅读过程中,请特别留心Bjarne先生强调了什么,又对什么一语带过。我个人比较喜欢这本书的第四部分“使用C++做设计”,这样的内容在类似的程序设计语言书籍中很难看到——我甚至认为Bjarne应该将这部分独立出来单独写一本书。

Bjarne Stroustrup,《C++语言的设计和演化》影印版、中文版

D& E是一本关于C++语言设计原理、设计决策和设计哲学的专著。它清晰地回答了C++为什么会成为今天这个样子而没有变成另外一种语言。作为C++语言的创建者,Bjarne淋漓尽致地展示了他独到而深刻的见解。除了广受赞誉的语言特性外,Bjarne没有回避那些引起争议的甚至被拒绝的 C++特性,他一一给出了逻辑严密、令人信服的解释。内容涵盖C++的史前时代、带类的C、C++的设计规则、标准化、库、内存管理、多重继承、模板等,对包括异常机制、运行时类型信息和名字空间在内的重要的新特性都分别进行了深入探讨。每一名C++程序员都应该可以从Bjarne的阐释中加深对手中这门语言的认识。

需要再次提醒的是,这两本书知识浓缩,信息量极大,请不要错过Bjarne每一句看似漫不经意的话。

入门教程

学习任何一门语言都需要一个从入门到精通、从新手到高手循序渐进的过程。不过,对于一个所谓的新手而言,究竟是一个完完全全的新手,还是一个熟悉某种别的语言的“新手”,甚至是在某种语言程序设计领域已经颇有建树的高手,很难一概而论?不同的C++新手需要不同的入门书籍。

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

和市面上大多数C++教程不同,本书不是从“C++中的C”开始讲解,而是始于地道的C++特性。从一开始就使用标准库来写程序,随着讲述的逐渐深入,又一一解释这些标准库组件所依赖的基础概念。另外,和其他C++教材不同的是,这本书以实例拉动语言和标准库的讲解,对后两者的讲解是为了给实例程序提供支持,而不是像绝大多数C++教材那样,例子只是用作演示语言特性和标准库用法的辅助工具。

作者在C++领域的编程实践、教育培训以及技术写作方面都是世界一流水准。我喜欢这种大量使用标准库和C++语言原生特性的清新的写作风格。在这本教材面前,几乎迄今为止的所有C++教材都黯然失色或显得过时。尽管这本教材也许对于国内的高校教育来说有些前卫,不过我仍然极力向我的同行们推荐。顺带一提,在Bjarne和我最近的一封通信里,他这样评价本书:对于有经验的程序员学习C++而言,这本书可能是世界上最好的一本。

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

这本书的名字多少有点让人误解。尽管作者声称这本书是为C++新手而写,但无论是它的厚度还是讲解的深度都暴露了似乎并非如此。也许说它是一本“从入门到精通”的C++教程会更合适一些。我个人认为它并不适合完全不懂C++的初学者——在阅读这本书之前,你至少应该先有那么一点C或C++的背景知识,或者至少要具有一些其他语言的编程经验。

尽管这本书省略了一些高级C++特性的讨论,但仍然可以称得上是迄今为止最全面的C++学习教程。事实上,如果一名C++初学者能够扎扎实实地读完本书并对照《C++ Primer Answer Book》完成全部习题的话,他的水平肯定可以进入职业C++程序员的行列。我个人认为,即使你已经拥有了TCPL,这本书依然有拥有的价值,因为在许多方面它比TCPL来得更详细、更易懂。

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++语言和开发工具的本身。作为一名开发实际项目软件的程序员,并非非得自己碰钉子才能积累经验,只要我们足够虚心,别人的经验往往都是我们很好的借鉴。鉴于此,我推荐以下几本书供你选读,它们可以让你从强健和效率两方面受益(当然了,它们涵盖的内容远不限于异常处理)。

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

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

如果说《Effective C++》主要讨论C++中一些相对基础的概念和技巧的话,那么《More Effective C++》则着重探讨了包括异常处理在内的一系列高级技术。与前者相比,后者具有两大主要区别:其一,它包含很多时新的标准C++的内容;第二,它讨论的主题倾向于“战略化”而非“战术化”,并且讨论得更深入、更彻底。尤其是对虚析构函数、智能指针、引用计数以及代理类(proxy classe)等技术和模式论述的深入程度,让人很难想象是出现于这样的一本小书之中。

游刃有余的技术,高超的写作技巧,Scott无疑是世界上最优秀的C++技术作家之一。在简洁、清晰、易读等方面,这两本书都卓尔不群。总之, Scott提供的这85个可以改善编程技术和设计思维的方法,都是中、高级C++程序员必备的技能。我强烈推荐这两本书(实际上还有一本,稍后就会看到)。

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

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

你自认为是一名C++语言专家吗?读一读ISO C++标准委员会秘书长的这两本书再回答。在这两本书中,Herb采用了“问答”的方式指导你学习C++语言特性。对于每一个专题,Herb首先合理地设想出你的疑问和困惑,接着又猜测出你十有八九是错误的解答,然后给你以指点并提出最佳解决方案,最后还归纳出解决类似问题的普适性原则。

这两本书是典型的深究C++语言细节的著作,很薄,但内容密集,远远超过Scott的那两本书,读起来很费脑筋 — 我个人认为它们要比Scott的书难懂得多。若要研习这薄薄的两本书所包含的知识,至少需要花费数月的时间!(在Scott的荐序中,他坦陈不止一次陷入 GotW问题的陷阱,你应该知道这意味着什么)对于语言细节的深究有什么好处呢?尽管在大多数情况下,我们不必关心C++代码幕后的动作,然而当我们不得不关心时,这两本书可以为我们提供很好的线索,因为它们揭示了C++语言中微妙而又至关重要的东西。

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等现代程序库则将模板技术的潜能不断发挥到极致。在模板和泛型编程领域,我推荐以下两本重量级著作。

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

有一种老套的赞美一本书的手法,大致是“没有看过这本书,你就怎么怎么地”,这里面往往夸张的成分居多。不过,倘若说“没有看过《C++ Templates: The Complete Guide》,你就不可能精通C++模板编程”,那么这个论断对于世界上绝大多数C++程序员来说是成立的。

这本书填补了C++模板书籍领域由来已久的空白。此前,上有《Modern C++ Design》这样的专注于模板高级编程技术和泛型模式的著作,下有《The C++ Standard Library》这样的针对特定模板框架和组件的使用指南。然而,假如对模板机制缺乏深入的理解,你就很难“上下”自如。鉴于此,我向每一位渴望透彻理解 C++模板技术的朋友推荐这本书。

这本书在大陆、台湾各有一个译本,但出自不同的译者之手。当你看到这篇文章时,两个译本应该都已经上市,对于读者来说当然也就多了一种选择。侯捷先生个人网站上开放了繁体译本大部分章节,不妨先睹为快。

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++标准库已经摆在那儿了,何乐而不用呢?

Nicolai M. Josuttis,《The C++ Standard Library: A Tutorial and Reference》原文版、中文版:《C++标准程序库:自修教程与参考手册》

这是一本百科全书式的C++标准库著作,是一本需要一再查阅的参考大全。它在完备性、细致性以及精确性方面都是无与伦比的。本书详细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本地化在内的整个标准库而不仅仅是STL。正如本书副标题所示,它首先适合作为教程阅读,尔后又可用作参考手册。

浅显易懂的写作风格使得这本书非常易读。如果你希望学习标准库的用法并尽可能地发挥其潜能,那你必须拥有这本书。正如网络上所言,这本书不仅仅应该摆在你的书橱中,更应该放到你的电脑桌上。我向每一位职业C++程序员强烈推荐。

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

C++标准库由STL、流和本地化三部分构成。关于STL的书市面上已经有不少,但罕见流和本地化方面的专著。本书是这两个领域中最优秀的一本,迄今为止没有任何一本书比这一本更全面详尽地讨论了流和本地化。如果你不满足于停留在“会用”流库的层面,千万不要错过它。

2001年夏天,我草草翻阅过这本书的中文版,从内容到包装都给我留下了比较深刻的印象——不过负面的居多一些。2003年秋天,无意中得知某网络书店正以超低价格甩卖这本书的中译本,情不自禁,一阵唏嘘。

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

读完Scott 的《Effective C++》和《More Effective C++》的中译本之后,我一直期待这本书的中文版。我从潘爱民先生的个人主页上了解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,可惜至今市面上仍不得见。幸运的是,我们可以看到它的原版。

本书是使用STL的程序员必读之作。在这本书中,Scott向我们讲述STL容器和算法的工作机制以及如何以最佳方式使用它们。和Scott的其他作品一样,这本书的写作风格清晰、精确,具有极佳的可读性。看过这本书以后,我想你也许会和我以及其他C++程序员一样产生这样的想法:Scott什么时候会写出一本“More Effective STL”?

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)来告诉你。

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

中文版:,《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组件中获益。

杂项

以下几本书所以被列入“杂项”单元,是因为我没有考虑到合适的归类方法,它们和上面的书籍一样,值得一读。

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

中文《C++编程思想》二版、卷一:标准C++导引 卷二:实用编程技术

《Thinking in C++》的第1版于1996年荣获“软件研发”杂志评选的图书震撼大奖。最新推出的第2版对内容进行了大幅改写和调整,以反映C++标准化带来的影响以及近几年面向对象领域最新研究和实践成果。“输入输入流”、“多重继承”、“异常处理”和“运行时类型识别”等高级主题连同C++标准化以后增加的一些内容则被放入第二卷中。Bruce是一名经验丰富的C++讲师和顾问,其培训和写作经验都是世界一流水准,他的作品比那些“玩票”的技术人员写的东西更能吸引读者。事实上,在同类图书中,对于大多数读者而言,这本书的可读性要超过TCPL和《C++ Primer》。顺带一提,访问作者的站点,你可以先睹第二卷的风采。

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

Andrew 是世界上屈指可数的C++专家。这是一本关于C++编程思想和程序设计技术而非语言细节的著作。如果你已经具有一定的基础,这本书将教你在进行C++编程时应该怎样思考,应该如何表达解决方案。整本书技术表达透彻,文字通俗易懂。Bjarne这样评价这本书:本书遍布“C++是什么、C ++能够做什么”的真知灼见。

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

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides,《Design Patterns: Elements of Reusable Object-Oriented software》影印版、中文版《设计模式:可复用面向对象软件的基础》

设计可复用的面向对象的软件,你需要掌握设计模式。本书并非专为C++程序员而写,但它采用了C++(以及Smalltalk)作为主要示例语言, C++程序员尤其易于从中受益。四位作者都是国际公认的面向对象软件领域专家,他们将面向对象软件的设计经验作为设计模式详细记录下来。这本书影响是如此深远,以至于四位作者以及本书都被昵称为GoF(Gang of Four)。本书学院气息浓厚,行文风格严谨简洁,虽然它不如某些讲解模式的书籍易读,但真正要精准地理解设计模式,本书是终极权威。学习设计模式,这本书需要一而再、再而三的咀嚼。顺带一句:请将设计模式化作开拓思维的钥匙,切莫成为封闭思维的枷锁。

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 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.
这本书教你把注意力集中在最重要的事情上,有序、简洁地处理生活事物,从而提高工作效率。