Effective C++: 55 Specific Ways to Improve Your Programs and Designs
More Effective C++: 35 New Ways to Improve Your Programs and Designs
如想成为一名合格的C++程序员,有许多经典的书籍可以推荐;然而,若想成为一名高效的C++程序员,就绝对不能错过Scott Meyers的这两本名著。Meyer几乎掀起了Effective编程的热潮,例如之后的Effective STL,以及继承了同样风格的Bill Wagner之Effective C#,都是这一系列的佼佼者。人们津津乐道于书中的条款,运用在编程实践中,并深深为Meyer的技术涵养所折服。现实正是如此,运用C++语言开发项目,就好似要穿过一片雷区,战战兢兢,带着撞大运的思想硬着头皮冲锋陷阵,一不小心,就会出师未捷身先死。Meyer的这两本著作,是帮助我们穿越雷区的探测器,可以提醒我们避开危险的地雷,甚至帮助我们撤除地雷,使得我们可以安然通过,到达胜利的目的地。
我在编写C++代码时,常常会翻阅这两本著作。我无法将它们束之高阁。每当我遇到C++的陷阱而无法自拔时,都需要从书中找到解决问题的利器。这是C++程序员案头必备之书,即使对于Java和.NET程序员来说,阅读这两本著作,仍有裨益。虽然GC可以帮助我们规避许多内存陷阱,不至于因为内存泄漏而导致系统崩溃;然而从高效的角度来看,无论何种语言,都有其相通之处,书中的议题可以说是放之语言的四海而皆准。例如在Effective C++中,对设计、实现、面向对象等诸多概念的深入剖析;在More Effective C++一书中,对于多态、异常、效率以及其他的杂项讨论,完全可以脱离具体的C++语言,从通用的编程角度获得收益。
所谓“经典”,意味着经久不衰,不因时间的流逝而失去其存在的价值。语言的变迁在这数十年内,让人应接不暇,但C++的魅力仍然不减。我想,即使在将来C++走向了末路,这两本书仍然不会过时,它会继续爆发出强大的生命力,因为,它抓住了软件设计与开发的本质。
Pragmatic Programmer: From Journeyman to Master
Ward Cunningham说:“如果我在管理一个项目,这本书的作者就是我想要的人……如果办不到,我就会要读过他们的书的人。”这样的赞誉初看似乎有些夸张,仔细思考,却又恰如其分,因为本书反复要证明的其实仅有一个论调,那就是注重实效的哲学。我们这个行业,正需要注重实效的程序员。
我并非为了得到Cunningham的雇佣而阅读本书,更不是奔着从小工到专家的噱头宣传来吹捧本书。我阅读它,是因为它值得阅读;我推荐它,是因为它值得推荐。本书得到的赞誉实在太多了。Kent Beck、Martin Fowler、Kevin Ruland……他们都是这个行业的大师级人物。有他们的推荐难道还不够吗?站在他们的面前,我不过是一个小工而已。但不要忘了,本书面对的读者,不是专家,不是大师,就是普普通通的程序员小工。
记得石头汤吗?记得破窗户理论吗?源代码被猫吃了吗?这就是Andrew Hunt与David Thomas二人书籍的特点。生动、活泼、浅明、扼要,可是仔细沉思,这些比喻无不包含隽永的意味,印象深刻,可以作为编程的箴言或者座右铭。
本书不只有精巧的比喻,Hunt与Thomas兜售的不是文学理论,也不是华丽哲学,而是编程之道。如果说Martin Fowler的《重构》是与代码的坏味道做斗争,那么本书就是向编码旧习与陋习的宣战。它既有战略层面的思想与决策,又有战术层面的技巧与招式。整体而言,它提供了程序员修炼的法则,努力遵循这些法则,你将有机会成为专家。本书涵盖了编程与项目管理的方方面面——如何锤炼经得起时间考验的代码,如何开始卓有成效的开发,如何解决丑陋的重复与僵化,如何克服合作的傲慢与偏见,如何提高算法的效率与质量,如何构建易于测试的代码……
成为专家的梦想在远方漂浮不定,本书会成为你的瞄准器。好的,瞄准,开枪,中靶,红心!
Art of UNIX Programming
Unix是Geek们肆意徜徉的欢场,这里面有老牌的黑客,也有新锐的斗士;有资深的科学家,也有怪诞的不合群者。他们在这里纵横着才气,并以此度过黄金的青春。本书是Eric S. Raymond在这欢场中浪荡的行吟诗,如荷马史诗一般的沧桑、不朽与荡气回肠。之所以给我这样的印象,因为本书第二章的内容,正是以史诗的风格回顾了Unix的起源与历史变迁。
许多读者很容易被本书的书名所迷惑,以为这又是一本大部头的讲述Unix内核与开发的百科全书。若这样想,你或许会失去一位重要的良师益友。尤其对于Windows操作系统下的开发人员,不要因为Unix而排斥它,或者敬而远之,编程艺术是没有操作系统界限的。
好罢,让我们首先来看看本书给出的Unix哲学。诸如:使用简洁的接口拼合简单的部件,清晰胜于机巧,策略同机制分离,设计追求简洁,健壮源于透明与简洁……这是在谈论Unix吗?Raymond貌似醉翁之意不在酒啊!
让我们再来看看本书的第二部分与第三部分。封装和最佳模块大小,紧凑性和正交性,Unix接口设计模式,谈谈复杂度,重用:论不要重新发明轮子……好了,我们可以得出结论——Radmond不过是假Unix之名向受众传播设计之艺术,他是Unix文化的布道者,优雅设计的先驱与导师。我对Unix一窍不通,可我却宁愿花去我闲暇时间的二分之一阅读本书,直到自己深深烙上Unix文化的符号。我收获的经验是,完成本书的阅读,实则是走向耶路撒冷的一次朝圣。我的景仰并非献给Art of UNIX Programming,献给Eric S. Raymond,而是二十世纪最伟大作品之一的Unix。