C++历史上最重要的图书
文/Scott Meyers
《The C++ Programming Language》作者:Bjarne Stroustrup,
出版社:Addison-Wesley
1986 年首版,1991年再版,1997年第三版,2000 年特别版。对于C++老人们来说,此书的首版是打开知识大门的钥匙。目前的版本已经膨胀到千页以上,增加了很多那时候还不存在的特性,如模板、异常、多继承等,不过未提及标准模板库;显然首版——也是我逐页阅读过的唯一版本——更易驯服,只有328页。身处80年代后半叶的C++程序员,对这本书的全面阅读是必不可少的,它对早期的C++从业者和追梦人的重要影响,怎么评价都不过分。即使介绍C++的图书满天飞的现在,我仍然推荐专业开发人员阅读这本书(当前版本),因为我认为无论就C++本身,还是如何用好C++来说,它都是最全面的参考书。Stroustrup 因为吝于词句的写作风格而遭诟病,如果阅读TC++PL(译者注:即The C++ Programming Language的简称。)时,你无意忽略了哪怕一个句子,就有可能丢掉了很重要的东西(再想想目前版本千页以上的篇幅,你就能明白我为什么说它是最全面的参考书了)。然而,精炼恰是这本书无与伦比的魅力之一。比如,首版中对自赋值处理方法的说明,就很好地证明了这一点:
if (this == &a) return;
// beware of s=s;
首版《Effective C++》里,我在同样问题上花费了了五页半的篇幅。你不得不为这样一本半行注释就解决问题的图书倾倒。
《Effective C++》作者:Scott Meyers
出版社:Addison-Wesley
1992 年首版,1998年再版,2005年第三版。它是超级天才的杰作!我和此书都很幸运,它生逢其时。1991年前后,大部分程序员已经掌握了语言基础,能做到根据需求编写C++程序,但同时总觉得自己无法避免看似可以避免的诸多问题。这是业界第一本专注于如何深入使用C++,全力帮助开发者解决常见问题,最好地使用非C 特性(如构造器、析构器、继承、虚函数和类内存分配器等)的图书。在这本书里,一反常态,不像当时大多数人将重点放在讨论C++的灵活性上,我采用了一种很特别的指导式思路来写作。以我的经验判断,我认为程序员渴望找到强有力的办法来控制C++的灵活多变,因此我要告诉他们究竟该做什么。这本书做到了。
“一定要这么做”,“千万不要那样干”。一代程序员将这些原则熟记于心,也催生了不少协助性工具。比如GNU C++编译器,甚至设置了《Effective C++》指导原则的检测警告选项。此书的一个重要特点(直到写作我的第二本书《More Effective C++》难以为继时,我才深入领会到)是其条款内容短小精悍,这样,读者坐公交车、火车,等待会议开始,甚至坐在马桶上时都可以阅读这本书。
《Design Patterns》作者:Erich Gamma、Richard Helm、
Ralph Johnson和John Vlissides
出版社:Addison-Wesley,
1995 年它本身不是一本针对C++的书,但它对使用C++以及其他任何面向对象编程语言进行良好设计都产生了深远影响。此书在专业软件开发人员中发起了模式启蒙运动,而且提出了一系列至今仍居常用模式词汇表核心地位的设计模式。
如果你熟悉命令(Command )、访问者(Visitor)、装饰(Decorator)或单例(单态,Singleton)等模式——甚至已经深入掌握了设计模式,那么基本上可以肯定你读过这本书,我们应该感谢它。
此书中提到的模式,至今仍是C++技术界的热门话题。例如Herb Sutter于2003 年9 月,在其C/C++ Users Journal专栏提出了观察者(Observer)模式新的实现方法,Andrei Alexandrescu 也分别于2005年4 月和6 月,在其C/C++ UsersJournal 专栏对这个模式做过讨论。
《International Standard for C++》ISO/IEC
1998 年首版,2003 年第二版。标准类资料读起来枯燥乏味,但必须有这样的东西去定义什么是C++,什么不是C++,这本书就担此重任。在这以前,若想知道C++的正确实现,最好要读MargaretEllis 和Bjarne Stroustrup 合著的《TheAnnotated C++ Reference Manual》(即著名的ARM,Addison-Wesley1990 年版),并用不同的编译器检查代码,得想方设法理解Bjarne Stroustrup的意思(如通过读他的书)。1998年版的C++标准不能回答所有问题(任何资料都做不到),比如,vector的内存布局必须与C数组兼容吗?但它仍不失为一本C++权威参考书,无论是为编程实现还是语言使用者,都在标准化上做出了巨大努力。2003 年出的第二版,实际上是一个Bug 修复更新版,更像是1.1而不是2.0版本,但它也是一个语言官方规范修订本。
《Modern C++ Design》作者:Andrei Alexandrescu
Addison-Wesley2001年版。设计模板的初衷是实现类型的容器(“containers ofT”),但它能做的远不仅仅这点。实际上,在Alexandrescu 的书出现之前,1998 版C++标准的STL 部分要求的模板实现就远远超出“类型的容器”。但《Modern C++ Design》的出现,才真正为C++技术界打破了模板的牢笼。此书影响深远,堪称新旧两代C++程序设计的分水岭;此后,“modern C++”一般都被用来专指采用了因此书而普及的模板技术的代码。通过Google 搜索包含“modern C++”的新闻组帖子,1985到2000年共有662个结果,而从2001 年到现在,则有3200 个。尽管无关于这本书在C++历史上的重要性,但我想有一点仍然值得提及,那就是在Alexandrescu 写这本书的时候,他还找不到一个支持这本书的代码包含的所有C++标准的编译器!
阅读(398) | 评论(0) | 转发(0) |