English

C++藏书阁(下)

2006-07-19 来源:中华读书报 作者:■刘基诚 刘江 我有话说

首先我们需要更正上次专栏中的两处错误。一是表二Sourceforge.net项目语言统计中两列的时间弄反了,当然不会项目越来越少。二是除了原来所规划的四部分中的“综合/巨著”、“入门”两部分之外,我们还讲到了一些中级图书,这与文中开始所说的“本月是前两部分”不符。感谢于征和马鸿飞两位读者来信指出。

本月将继续C++图书的推荐,除了继续中级图书之外,再推荐一些专题类的图书,根据读者建议,我们将一些高级图书并入专题部分。

另外要告诉大家,上次推荐的Scott Meyers《Effective 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++类图书非常有限,看来希望要寄托在国内的作者身上了。

附记:在撰写本文过程中,ACCU上的书评和Comeau Computing的书单(http://www.comeaucomputing.com/booklist/),以及荣耀先生和孟岩先生以前发表过的推荐书目对我们帮助很大,在此表示感谢。

手机光明网

光明网版权所有

光明日报社概况 | 关于光明网 | 报网动态 | 联系我们 | 法律声明 | 光明网邮箱 | 网站地图

光明网版权所有