`
hzbook
  • 浏览: 259659 次
  • 性别: 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/


分享到:
评论

相关推荐

    创意编码艺术:用Java绘就你的二维码艺术王国(附源代码)!

    "创意编码艺术:用Java绘就你的二维码艺术王国"就是一个极好的例子,它展示了如何将实用的技术与艺术创新相结合。本资源包含了使用Java语言创建二维码艺术的源代码,帮助开发者了解并实践这一独特技能。 首先,我们...

    swing编码艺术

    Swing编码艺术是Java开发领域中的一个重要分支,它主要涉及如何使用Java Swing库来构建美观、功能丰富的图形用户界面(GUI)。Swing是Java Foundation Classes (JFC)的一部分,提供了丰富的组件集,允许开发者创建...

    编码艺术的典范:深入PEP 8 Python编码规范

    Python是一种广泛使用的高级编程语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python的设计哲学强调代码的可读性,其语法允许程序员用比其他语言更少的代码行来表达概念。...

    掌握C++的RAII:资源安全的编码艺术

    C++是一种通用的、面向对象的编程语言,它是由Bjarne Stroustrup在20世纪80年代初作为C语言的扩展而创建的。C++是C语言的一个超集,这意味着它包含了C语言的所有特性,并增加了面向对象编程的特性,如类和继承。...

    程序员编程艺术pdf可编辑

    程序员编程艺术pdf可编辑,教你如何将编程作为一门艺术

    CFTA_Spring2021:编码艺术大学

    CFTA_Spring2021 编码艺术大学欢迎来到UH艺术学院的“艺术编码”课程。 在此存储库中,您将找到课程提纲,日历和课程模块。 请将此页面添加为书签,并返回查看更新。我们的会议将在Microsoft团队中进行您应该在...

    编码 隐匿在计算机软硬件背后的语言 美 佩措尔德(完整版)

    《编码:隐匿在计算机软硬件背后的语言》是由美国作者佩措尔德撰写的一本深入浅出介绍计算机编码原理和技术的著作。...书中丰富的实例和详尽的解释,将帮助读者揭开计算机世界的神秘面纱,领略编码艺术的魅力。

    poetry-art-quines:以代码(任何语言)以及其他编码艺术或奎因写成的诗歌的集合

    诗歌艺术奎因用代码和其他编码艺术或奎因写的诗集。 我不知道怎么回事。 我已经坚持了一段时间,最后决定开始探索。 这个想法是用语法正确的编程语言写诗(任何人都会做)。 语法上允许诗意的许可。 即该代码不必...

    《纠错编码的艺术》书的源代码

    《纠错编码的艺术》一书是IT领域中关于信息理论与通信技术的一本经典读物,尤其适合初学者作为入门教材。纠错编码是计算机科学和通信工程中的重要分支,它的主要目的是在数据传输或存储过程中,通过添加冗余信息来...

    编码的奥秘

    《编码的奥秘》——揭示软件工程中的编码艺术 在当今信息化社会,软件工程作为信息技术的核心,其重要性不言而喻。编码,作为软件工程中的基础环节,是连接计算机与人类思维的桥梁,它承载着实现功能、优化性能、...

    Visual Basic编码风范

    在编程世界中,编码风格和规范对于任何编程语言来说都是至关重要的,Visual Basic(VB)也不例外。"Visual Basic编码风范"着重强调了如何编写整洁、可读且易于...在实践中不断积累和改进,才能真正掌握VB的编码艺术。

    Python_llm建立在进化、指令、巫师、编码、巫师、数学基础上.zip

    Python_llm是一个基于进化算法、计算机指令、编程技巧、神秘的“巫师”元素、编码艺术和数学原理的项目。这个项目可能是一个用于解决复杂问题或优化任务的框架,利用了多种学科的知识来构建智能解决方案。让我们逐一...

    The art of error correcting codes

    ### 差错编码艺术 #### 一、概述 《差错编码艺术》(The Art of Error Correcting Coding)是一本由Robert H. Morelos-Zaragoza编写的关于差错控制编码领域的专业书籍,该书于2002年由John Wiley & Sons出版社出版。...

    Python-创意编码生成艺术交互设计资源收集

    在IT行业中,Python语言因其简洁明了的语法和强大的库支持而被广泛应用于各种领域,包括数据科学、机器学习、网络编程以及我们今天关注的主题——创意编码、生成艺术和交互设计。"Python-创意编码生成艺术交互设计...

    DEMO作品 DEMO大赛上的排名作品

    7. **编码艺术**:DEMO编程是一种艺术,开发者在有限的代码空间内创造出无限可能,这需要深厚的技术功底和对编程语言的精通。 通过研究这些DEMO作品,不仅可以了解当前图形和音频技术的前沿,还可以激发对编程艺术...

    hap gup加速视频编码器

    4. **实时渲染**:对于需要实时反馈的创意工作,如视觉艺术和现场表演,hap codec可以提供流畅的无延迟播放体验。 标签“编码器”明确了我们讨论的是视频编码工具,这关乎到将原始视频数据转换成可存储、传输或播放...

    JPEG_jpeg编码解码_jpeg图像压缩编码_

    JPEG 压缩算法主要基于离散余弦变换(DCT)和哈弗曼编码,同时涉及到量化、熵编码等步骤。以下是关于JPEG编码解码和图像压缩编码的详细知识: 1. **JPEG编码流程**: - **颜色空间转换**:JPEG通常将RGB图像转换为...

Global site tag (gtag.js) - Google Analytics