`
hzbook
  • 浏览: 252372 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编码的艺术

 
阅读更多

《编写可读代码的艺术》是一本关注编码细节的书。或许你会认为本书所讲皆为小道,诸如方法命名、变量定义、语句组织、任务分解等内容,俱是细枝末节,微不足道。然而,对于一个整体的软件系统而言,既需要宏观的架构决策、设计与指导原则,也必须重视微观的代码细节。正如作文,提纲主旨是文章的根与枝,但一词一句,也需精雕细作,才能立起文章的精气神。

所谓“细节决定成败”,在软件历史中,有许多影响深远的重大失败,其根由往往是编码细节出现了疏漏。

我一直坚持“代码即架构”的观点,正如小说需要角色来说话一般,软件系统的质量好坏,归根结底还是需要代码来告知。代码的优劣不仅直接决定了软件的质量,还将直接影响软件成本。Yourdon和Constantine在其著作《Structured Design》中写道:软件成本由开发成本与维护成本组成,而往往维护成本要远高于开发成本。这其中耗费的主要成本就是由于理解代码和修改代码造成的。正如本书的书名所表示的含义,好的代码常常是可阅读的,要做到这一点,则近似于一种艺术之美了。

与本书相似的一本书是Robert C. Martin的《Clean Code》。该书在业界已经得到了广泛赞誉。如果你还在为写出“丑陋”的代码而烦恼,必须阅读该书。它带给你的冲击,好似《阿凡达》那无与伦比的3D电影带给你感官上的震撼。在某种程度上,本书几乎可以与《Clean Code》比肩。或许本书在深度上与《Clean Code》相比还有所不及,但在内容广度上,却远远超过了《Clean Code》。因为它关注编码本身,所以并不局限于某一种语言,而是列举了大量C++、Python、JavaScript和Java代码,涵盖了主流的静态语言和动态语言。这就使得本书的内容具有更强的普适性。

本书给出了许多改善编码质量的技巧,尤其它结合了大量真实案例,给出了具体的代码片段,并从正反两面对案例进行分析,这就使得作者的讲解不再流于空洞,既让人信服,又有助于读者理解。例如,在讲解命名如何表达意图时,作者给出了Google代码中的一个反面教材。在Google的一段代码中定义了一个宏,用于禁止“邪恶”的构造函数:

class ClassName {
private:
DISALLOW_EVIL_CONSTRUCTORS(ClassName);
public:

};

宏的定义如下:

#define DISALLOW_EVIL_CONSTRUCTORS(ClassName) \
ClassName(const ClassName&); \
void operator=(const ClassName&);

这个宏禁止了构造函数和Copy构造函数(即“=”操作)。然而从宏的名称来看,这个含义是不明确的,会让读者认为仅仅禁用了构造函数。只需要改个名字,意图就可以变得更
加清晰:

#define DISALLOW_COPY_AND_ASSIGN(ClassName) [...]

书中各章的案例非常翔实,并且总是先给出糟糕的版本,逐步分析推导,最后给出好的实现,作为直观鲜明的对照。为避免读者陷入相对独立而散乱的小案例中,作者又另辟一章内容, 讲解了一个完整的案例Minute/Hour Counter。首先从问题域的提出开始,分析了接口的设计与实现,深入剖析了实现方法的命名乃至注释,抽丝剥茧,条分缕析。作者的分析显得好整以暇,有条不紊,先后给出了3个解决方案,渐进地对编码实现进行了改善,使之在性能、灵活性上都有了很好的改观,类的职责更为清晰,代码结构简洁而又易于理解。最后,作者还给出了3个解决方案的比较,从代码行数、时间复杂度、内存消耗和准确率4个因素出发,全面权衡了各个解决方案的优劣,以此来印证作者在本书中一直推崇的编码技巧。

本书作者并不满足于通过文字和代码来彰显这些技巧的力量,书中附带的漫画插图起到了很好的辅助作用。如果将本书比作一盘精美的佳肴,这些漫画就起到了调料的作用。对于技术书籍来说,这种图文并茂的方式实不多见,它为全书增添了亮色。我们赏阅漫画时的会意一笑,心底其实充满了如遇知音的喜悦。

阅读本书时,那种代码从丑陋到美丽的蜕变总是让人振奋;但是,我们不能满足于结果的获得,而应该享受这个过程。我的建议是,在阅读时,多思考作者给出的反面教材,不要急于了解结果,而应掩卷遐思,分析这段代码的问题,并结合自身经验与能力给出自己的方案。然后再比较作者的方案,两相印证,辨别两个方案各自的优劣之处。最后再仔细阅读作者的分析过程,如此才能更好地理解本书,提升自己的编码技能。

全书200页左右,与那些瀚如烟海的高文大册相比,本书显得轻而薄,但它胜在精专。作者没有囊括所有编码技巧的野心,更没有卖弄地展现自己的设计技巧和博识广学。它的专注可能会因此失去一大部分读者群,但这样的书才是我们程序员真正需要的。希望你能喜欢它!


张逸

ThoughtWorks高级咨询师

-----------------------------

本文为《编写可读代码的艺术》(The Art of Readable Code)推荐序,原文网址:http://www.infoq.com/cn/articles/art-of-readable-code

【关于本书】


【关于作者】

Dustin Boswell毕业于加州理工大学,资深软件工程师,在Google就职多年,负责Web爬虫和程序设计相关的工作。他专注于前端、后端,服务器架构、机器学习、大数据、系统和网站等技术领域的研究和实践,经验十分丰富。他现在是MyLikes的软件工程师。

Trevor Foucher资深软件工程师和技术经理,先后在Microsoft和Google工作了数十年,在Microsoft担任软件工程师、技术经理以及安全产品技术主管,在Google从事广告应用开发和搜索基础结构研发相关的工作。

【样章下载】http://download.csdn.net/detail/hzbooks/4375270

【豆瓣收藏】http://book.douban.com/subject/10797189/


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics