[声明]:本文由kingofark创作。本文中的所有内容仅代表kingofark个人的观点,与任何其他个人或团体无关。任何人或团体都可以复制、传播本文,但需附上完整的本声明。kingofark对于不同意上述各点或不履行上述各要求的人或团体的言行不负任何责任。特此声明。
kingofark的第1个“五评计划”——五评C++(1)
[kingofark的话]:
在这个领域内,恐怕是没有人不知道C++的了。C++的流行使得出版商长期处于亢奋的狂喜之中——这也就是为什么我觉得实在有必要推荐几本C++的书,为大家的择书助上一臂之力。
[一]:《C++编程思想》,Bruce Eckel 著,译,机械工业出版社
[推荐度]:-1
[推荐理由]:
原则上来说,我还不算是容易浮躁的人,但是当我慕名拿到了这本机械工业的《C++编程思想》的时候,我看到了:
“通过强迫在调用之前必须声明,……”P32
“按位和与按成员const”P138
“7.5 可变的(volatile)”P140 [关键字也要翻译吗?难道”double a;”应该翻译成“双 字母表的第一个字母分号”?]
“因为大多数编译器使用‘helper’函数而不是设置所有功能性内置。”P180 [helper?内痔?外痔?]
“因为有一个使用单一int参数的构造函数,int自动转换为number,但这要在正确的条件下。”P229 [这是中文的句式吗?我真孤陋寡闻。]
“new表达式的反面是delete表达式”P236 [哦,原来表达式还有“反面”。我真孤陋寡闻。]
“所以我们几乎不会看到在这些类中存在虚函数,它们的重用是以模板方式而非继承方式。”P331
“oldmem必须指向零(以分配新存储区)”P334
“所以在用free()释放存储区时,getmem()必须将指针向后退由cntr占用的存储空间数目。”P334
“其中有一些重要的其他类”P340
“2)我们需要向上映射到两个基类上吗?(当然,在我们有两个以上的基类被应用。)”P354
“要终止相距较远的异常处理器,但是由于异常可能由很多地点产生,所以对于一个大型系统,从异常处跳转到异常处理器再跳转返回,这在概念上是十分困难的。”P363
“利用这种方法,每个分配就变成了原子的,像一个对象,并且如果失败,那么已分配资源的对象也被正确的清除。”P372-373
“但是,在这种情况下,被迫增加的代码必须是最小限度的。”P377 [代码是最小限度的?我孤陋寡闻。]
“异常处理系统会关注所有的存储。”P379
“无论什么时候用类型映射,都是在打破类型系统”P398
…… …… …… ……
……我终于经不住诱惑浮躁了一回,将书狠狠的置向地面……从那以后,每当我用输入法输入“C++编程思想”的时候,输入法程序总是顽固的给出“C++变成死相”几个文字,给我平添几分揪心的诡异(但似乎这比“死一家家变成死相”还稍微吉利一些)……听闻这本书卖得好的消息,我却很莫名其妙的忆起鲁迅先生在《狂人日记》里的那句“救救孩子”。
[二]:《C++面向对象高效编程》,Kayshav Dattatri著,潇湘工作室 译,人民邮电出版社
[推荐度]:4.9
[推荐理由]:
英文原版书名:《C++ Effective Object-Oriented Software Construction》。
这是一本在国内被忽视了的优秀的C++/OOP书籍。作者kayshav Dattatri用通俗易懂的语言,以由浅入深的组织方式,将C++语言的OOP方法和运用C++编写高效代码的方法娓娓道来。
本书的一大特色就是擅用横向比较的方法来说明问题。对于一个操作、算法,甚至是语言机制,作者或以不同的C++实现方法来比较其功用,或以不同的语言实现来比较其在效率上的优劣,处处无不体现“高效”二字。比如,光是在讲到“参数传递模式”一节,作者就给出了
void X::f(T arg),
void X::f(const T object),
void X::f(T& arg),
void X::f(const T& arg),
void X::f(T* argp)
五种方式,对其逐个分析,交叉比较孰优孰劣,并说明各个方式的用途;再比如,在讨论异常模型的时候,作者将EIFFEL中的异常模型与C++中的异常模型进行比较,并且专门用了一个小节的篇幅(第10.5节“EIFFEL和C++异常模型的优缺点”)来讨论这个问题;等等。作者在文中处处考虑性能、效率,却又不失清晰的组织结构,其雄厚的实力和在领域内积累了多年的经验流露于字里行间。
本书的另一大特色,就是作者精心为读者提炼的要点。在全书的叙述中,一旦讲完了一个重要的知识,作者就会用一两句话总结成一到两个要点,核心的知识和多年积累的经验一目了然、清清楚楚。不但如此,在每一章的末尾,作者又再次给出本章内容的所有要点,以便于读者查阅。
全书在OOP的精神指引下,以“高效”二字当头,令人信服的阐述了使用C++进行高效编程的方法。
在这里,笔者也不再多说了。就让我们一起看看Erich Gamma博士(大名鼎鼎的《设计模式》的作者之一)在此书的序言中是怎么说的吧:
“Kayshav Dattatri在这方面(指在程序性能、效率方面)具有极其丰富的经验。”
“本书所有的内容都是经验之谈。……Kayshav不仅仅满足于大体上解释面向对象的概念以及理论介绍C++语言功能部件;他还讲述了继承、混合类、模板类和异常这些方面的实践经验,探讨了模板实例化、共享库、线程安全性和许多其他问题。”
“本书从零开始介绍C++和面向对象编程。然而,我确信,有经验的C++编程人员将和新手一样,能够从本书中得到新的知识。”
最后谈谈本书的翻译。本书由潇湘工作室翻译。笔者认为,在译作水平参差不齐的书籍市场中,本书的翻译可算是中等偏上。虽然我们可以从书中发现一些译意不当的地方,但我们也完全可以感受到译者们为了译文的顺畅所作的许多努力。另一方面,本书扎实、丰厚的内容也确实反过来使译者少有败坏之机。倒是书中存在的一些明显的印刷、排版方面的错误使得本书最终没能得到5分。这不能不说是一个小小的遗憾。
[三]:《Essential C++中文版》,Stanley B.Lippman 著,侯捷 译,华中科技大学出版社
[推荐度]:5
[推荐理由]:
光凭作者、译者的大名,本书就毫无疑问是一本世界级的C++上乘之作。本书作者Stanley B. Lippman,现在微软工作。他曾是梦工厂电影动画公司的核心技术小组成员。加入梦工厂之前,Stan 是华德迪士尼电影动画公司的主要工程师。更早之前他在贝尔实验室领导过 cfront 3.0, 2.1 的编译器开发小组。他是 Bjarne Stroustrup 所领导的贝尔实验室基础项目中的一员。Stan 是C++ Primer(三个版次)及Inside the C++ Object Model 的作者,这些极为成功的书籍由 Addison-Wesley 出版。他也是C++ Gems 的编辑(此书由 Cambridge University Press 出版)。他的工作应用在多部电影上头,包括 Hunchback of Notre Dame 和Fantasia 2000;译者侯捷,是信息教育工作者,写译书籍,主笔专栏,培训业界人员,并于元智大学开课。进入教育领域前,他曾分别担任工研院机械所和电通所副研究员,分别研发 CAD/CAM 软件和 Windows多媒体系统。侯捷是《深入浅出MFC 》和《多型与虚拟》两本书的作者,也是C++ Primer 3/e、Essential C++和Inside the C++ Object Model 繁体中文版译者。他的计算机相关书籍和散文,甚获好评。
在这里,我就转引侯捷先生精彩的译序来说明问题:
“Stanley B. Lippman 所着的 C++ Primer 雄踞书坛历久不衰,堪称 C++ 最佳教本。但是走过 10 个年头之後,继 1237 页的 C++ Primer 第三版,Lippman 又返朴归真地写了这本 276 页的Essential C++。有了满汉全席,为何还眷顾清粥小菜?完成了伟大的巨着,何必回头再写这麽一本轻薄短小的初学者用书呢?
所有知道 Lippman 和 C++ Primer 的人,脸上都浮现相同的问号。
轻薄短小并不是判断适合初学与否的依据。Lippman 写过Inside the C++ Object Model,280 页小开本,崩掉多少C++ 老手的牙齿。本书之所以号称适合初学者,不在於轻薄短小,在於素材的选择与组织的安排。
关於 Lippman 重作冯妇的故事,他自己在前言(p.ix)中有详细的介绍。他的转折,他的选择,他的职责,乃至於这本书的纲要和组织,前言中都有详细的交待。这方面我不必再置一词。
身为C++ Primer (3/e) 的译者,以及多本进阶书籍的作者,我必须努力说服自己,才能心甘情愿地将精力与时间用来重复过去的足迹。然而,如果连 Lippman 都愿意为初学者再铺一条红地毯,我也愿意为初学者停留一下我的脚步。
我是一名资讯教育工作者,写译书籍,培训业界人员,主持网站回应读者与学员,并於大学开课。我真正第一线面对大量学习者。藉此机会我要表达的是,所谓「初学者」实在是个过於笼统的名词与分类(呃,谈得上分类吗)。一般所谓「初学者」,多半想像是大一或专一新生程度。其实 C++ 语言存在各种「初学者」,有 13 岁的,有 31 岁的(当然也有 41 岁的)。只要是第一次接触这个语言,就是这个语言的初学者,他可能才初次接触电脑,可能浸淫Pascal/C 语言 10 年之久,或可能已有 Smalltalk/Java 三年经验。有人连电脑基本概念都没有,有人已经是经验丰富的软体工程师。这些人面对 C++,学习速度、教材需求、各人领悟,相同吗?
大不同矣!
每个人都以自己的方式来诠释「初学者」这个字眼,并不经意地反映出自己的足迹。初学者有很多很多种,「初学者」一词却无法反映他们的真实状态。
固然,轻薄短小的书籍乍见之下让所有读者心情轻松,但如果舍弃太多应该深入的地方不谈,也难免令人行止失据,进退两难。这本小书可以是你的起点,但绝不能够是你的终站。
做为一本优秀教本,轻薄短小不是重点,素材的选择与组织的安排,表达的精准与阅读的顺畅,才是重点。
做为一个好的学习者,背景不是重点,重要的是,你是否具备正确的学习态度。起步固然可从轻松小品开始,但如果碰上大部头巨着就退避三舍逃之 ,面对任何技术只求速食速成,学语言却从来不写程式,那就绝对没有成为高手乃至专家的一天。
有些人的学习,自练一身铜筋铁骨,可以在热带丛林中披荆斩棘,在莽莽草原中追奔逐北。有些人的学习,既未习惯大部头书,也未习惯严谨格调,更未习惯自修勤学,是温室里的一朵花,没有自立自强的本钱。
章节的安排,篇幅的份量,索引的保留,习题和解答,网上的服务,都使这本小书成为自修妙品,或C++ 专业课程的适当教材。我诚挚希望《Essential C++ 中文版》的完成,帮助更多人从中获得 C++ 的学习乐趣 - 噢,是的,物件导向程式语言可以带给你很多乐趣,我不骗你。”
[四]:《The C++ Programming Language SE》,Bjarne Stroupstrup 著,高等教育出版社
[推荐度]:5
[推荐理由]:
其实理由只有一个就够了:本书的作者Bjarne Stroupstrup是C++的设计者和实现者。
作者用学究式的文笔,以一个研究者的眼光,系统、严谨的描述了C++语言的方方面面。本书与Stanley B.Lippman的《C++ Primer》并称为C++语言的两大权威参考书。
因为是影印版,所以也全没有翻译带来的任何形式上的损耗,原汁原味。
我想这就够了,足够了。
[五]:《Effective C++中文版》Scott Meyers 著,侯捷 译,华中科技大学出版社
[推荐度]:5
[推荐理由]:
转载:孟岩《引介:一本绝妙好书》
“您手上这本书,是世界顶级C++大师Scott Meyers成名之作的第二版。其第一版诞生于1991年。在国际上,本书所引起的反响之大,波及整个计算机技术出版领域,余音至今未绝。几乎在所有C++书籍的推荐名单上,本书都会位於前三名。作者高超的技术把握力,独特的视角 诙谐轻松的写作风格 独具匠心的内容组织,都受到极大的推崇和仿效。甚至连本书简洁明快的命名风格,也有着一种特殊的号召力,我可以轻易列举出一大堆类似名字,比如Meyers本人的More Effective C++和Effective STL,Don Box的Effective COM,Stan Lippman主编的Efficient C++系列,Herb Sutter的Exceptional C++等等。要知道,这可不是出版社的有意安排,而且上面这些作者,同样是各自领域里的绝顶大师,决非人云亦云 欺世盗名之辈。这种奇特的现象,只能解释为人们对这本书衷心的赞美和推崇。
然而这样一本掷地有声的C++世界名着,不仅迟迟未能出版简体中文版,而且在国内其声誉似乎也并不显赫。可以说在一年之前,甚至很少有C++的学习者听说过这本书,这实在是一种遗憾。今天,在很多人的辛勤努力之下,这本书终於能够展现在我们的面前,对於真正的C++程序员来说,这确实是一件值得弹冠相庆的事。
我是一名普通的C++爱好者,因为机缘巧合,有幸叁与了这本书的繁简转译工作,这使我能够比较早地看到本书的原版和繁体中文版。在这里我必须表达对本书中文译者 台湾着名技术作家侯捷先生的敬意和感谢,因为在我看来,这本书的中文版在质量上较其英文版兄长分毫不差,任何人都知道,达到这一点是多麽的困难。侯先生以其深厚的技术功底 卓越的语言能力和严谨细致的治学态度,为我们跨越了语言隔阂所带来的理解障碍,完整而生动地将原书的内容与精神表达无遗,更令人钦佩的是,中文版的行文风格与原文也达到了高度的统一,可谓神形兼备,实在令人赞叹 因此我非常乐意向大家推荐这本书,相信它会在带给您带给你技术享受的同时,也带给您阅读的享受。”
我想我也没办法再多说什么了,我无法找到比“完美”更好的词来形容这本书。这里大家又一次看到了一个事实:优秀原作+优秀译者=优秀中文书籍。这勿用我多说,闭嘴。