书评:简洁代码──敏捷软件工艺指南

转载 2009年06月27日 19:31:00

书评:简洁代码──敏捷软件工艺指南

作者 Ryan Cooper 译者 王瑜珩 发布于 2009年6月15日 上午11时58分

 

作为开发人员,我们的首要任务是写出能够工作的代码。但是,仅仅“能够工作”还不足矣,为了能够持续提供真正的价值,代码一定要简洁。在《简洁代码:敏捷软件工艺指南》 一书中,Robert C. Martin提供了大量示例来帮助我们识别代码中可以改进的地方,并提供了相应的办法来逐步改进这些代码。

什么是简洁代码?

在第一章,Martin以极富说服力的方式表明,简洁代码不仅仅是人们所希望的,并且是必须的。如果代码不简洁,开发的速度就会越来越慢。直到有一 天,修改代码所引发的不确定性、痛苦感和挫败感会使团队宁愿重写所有代码。但是,如果重写的代码不能比原来的代码更简洁,那么同样的问题还会存在,几年后 整个团队依然会在开始的地方打转。

每个人对简洁代码的理解会有些许不同。Martin总结了诸多知名开发人员对简洁代码的描述,如Bjarne Stroustrup、Grady Booch、"Big" Dave Thomas、Michael Feathers、Ron Jeffries以及Ward Cunningham。虽然他们定义简洁代码的侧重点不尽相同,但其中仍有共通之处:简单、无重复、易读、优雅。具有这些特征的代码易于维护,可以打破开 发速度下降然后重写的怪圈,并能够持续提供真正的价值。

细枝末节

第二章至第六章涵盖了代码级别的考虑:选择有意义的命名、函数要优雅并有良好的可读性、要写有用的(并避免差劲的)注释、格式化代码以增加可读性,以及选择何时使用聪明的对象,何时使用简单的数据集。

Martin将理论、说明与代码进行了有效地结合。这几章包含了太多的大师智慧,无法在此一一列举。其中散布的许多闪亮的语言,简明但含义深远(截取自第二章至第六章):

“问题不在于代码是否简单,而在于代码能够在多大程度上脱离上下文仍能表达意图。”

“作为代码的作者,我们的目的是让代码尽可能的易于理解。我们希望读者能够快速阅读我们的代码,而不是细细地研究。我们希望读者能够通过代码直接理解我们的想法,而不是辛苦的挖掘代码背后的含义。”

“编写函数的第一个原则是,函数要短小;第二个原则是函数要更短小。”

“不要害怕使用较长的命名,有意义的长命名要好于莫名其妙的短命名,同时也好于冗长的注释。”

“好名字的价值如何估计都不为过,记住Ward原则:当每一个子程序都只做它应该做的,你就拥有了简洁代码。编写简洁代码过程中,有一半的任务是为短小的函数选择正确的命名,函数越短小、越内聚,就越容易给它起一个有意义的好名字。”

“副作用其实就是说谎,你的函数本来要做一件事,但是却偷偷做了其他的事”

“编程的艺术一直就是语言设计的艺术,编程大师将系统看成是故事而不是程序,他们使用他们选择的编程语言来创建一个更复杂更具有表达性的语言,来讲述这个故事。”

这几章将简洁代码的哲学以集中一致的方式串联在一起,并提供了实用的建议,以便在现实中应用这些哲学。

高层决定

第七章和第八章涵盖了错误处理和第三方代码接口。我认为第七章(由Micheal Feathers撰写)特别有用。错误处理是系统中很难做好的地方之一,而且通常在软件设计相关的文档中也仅仅是作为陪衬出现。Feathers引入了一 种实用的方式,将错误处理与主流程代码相隔离的同时,保证两部分代码的清晰和可读性。

第九章涵盖了单元测试。说明了为什么保持测试代码简洁与保持生产代码简洁一样重要,以及如何保持测试代码的简洁。(“记住三件事:可读性、可读性、可读性”)这一章非常短,但是包含了很多正反两面的例子。

第十章至第十二章涵盖了高层设计:类、系统和演化式设计。第十章主要讲述了单一职责原则(SRP),这个原则在Martin的另一本书《敏捷软件开 发:原则,模式与实践》中也曾讨论过。这里没有讲的那么深,但却是个学习的好起点。第十一章在系统级别讨论了简洁代码,如依赖注入和面向方面编程技术。第 十二章提醒我们要利用测试和重构,来驱动高层设计与底层决定。

第十三章涵盖了并发。这一章并没有太深入的讨论并发,只是一些表面的东西,但是仍然有很多好的建议。

案例分析

第十四至十六章,Martin将前几章的内容联系起来,每一章开始先介绍一个真实世界的代码范例,这些代码既不精妙绝伦也没那么糟糕透顶,然后教我们用重构一点一点的将代码变得更简洁。

这些代码示例既不会简单的不真实,也没有超出问题本身的复杂度,你不会认为它们只是例子代码,而且经过认真阅读很容易弄懂。它们可以帮助你更深入的理解如何应用本书中的原理。

在书里读到重构应该以“小步骤”完成是一回事,在一个具体的例子中体验敏捷开发人员是如何选择那些微小的步骤是另一回事。这几章给本书增加了很多价 值,它将书中的理论与实践联系起来。这些案例使我感到我是在与一个真实的、聪明并富有经验的开发人员一起结对编程,这是Martin清晰写作风格的体现。

代码味道与启示

第十七章将“代码的味道”和启示列成一张表。它将本书的精华思想用一种直接的、面向问题的方式表现出来,在短短29页中形成了一个非常好的参考。

总结

每个在乎软件质量和专业技艺的开发人员都应该阅读此书。对于经验较少的开发人员,他们可以从中获益良多,这是一本需要慢慢品尝的书,它包含了许多好的建议。Martin使用了大量示例和清晰简练的语言,即使没有经验的开发人员读得比较慢,但却不会迷惑。

有经验的开发人员也可以一读此书。它可以督促你去做那些已经知道要做(但却不总是去做)的事,提醒你一些已经遗忘的事,并教给你一些还不知道的事。最重要的是,它给出了一个全新的视角,来看待那些每天都要去做成百上千次、看起来平淡无奇的决定。

查看英文原文Book Review: Clean Code: A Handbook of Agile Software Craftsmanship

 

 

转自:http://www.infoq.com/cn/articles/clean-code-book-review

敏捷中的晨会

早晨,我要求大家做晨会,在晨会上,每个人要回答三个问题:1、我昨天做了什么?2、我今天要做什么?3、有什么问题?按照Scrum,这个环节是很重要的。按照我的理解,第二个问题可以将所有人一天的计划开诚布...
  • tj19832
  • tj19832
  • 2007年09月17日 10:49
  • 1185

敏捷软件开发:原则、模式和实践

1,敏捷宣言和原则 1.1 敏捷宣言 敏捷联盟在敏捷大会上发布了他们最主要的主张,称之为敏捷宣言。其主要表述如下: 1,个人和交互胜过过程与工具 2,可以工作的软件胜过面面俱到的文档 3,客...
  • luoxinwu123
  • luoxinwu123
  • 2012年06月13日 18:41
  • 2488

《SCRUM敏捷项目管理》书评

2007年10月10日 06:44:00 来自:Bruce Zhangs Blog双方前锋紧紧地站在一起,裁判哨声响起,球被掷出,双方球员奋力拼搏,反复地冲刺,竭尽全力向自己的目标冲去。这是英...
  • softart
  • softart
  • 2007年10月27日 08:34
  • 382

软件测试干货——敏捷测试流程

千锋教育软件测试:敏捷测试流程 千锋教育的王晓军老师在对敏捷测试做出介绍的时候与现行的瀑布式测试流程做出过对比: 对于一个三个月的项目说,产品把需求分析完了给开发,然后产品就没事儿了;开发开发完成...
  • QF0845
  • QF0845
  • 2017年08月29日 16:40
  • 284

软件工艺

普遍来说,中国人缺乏匠人的气质。“匠人”这个词在中国几乎是一个贬义词。例如说:“xx不过只是一个匠人”。但是其实国内的软件行业正是缺乏一大批对于自己的工作精益求精的软件工匠,这才是国内软件行业的主要问...
  • jaunt__
  • jaunt__
  • 2006年11月17日 00:53
  • 327

敏捷其实很简单(5)一个称职的PO应该做和不应该做的

今天我们先讲一下在scrum运营中非常重要的一个角色---PO。首先我们了解一下PO的概念:(Product Owner)是Scrum中十分重要的一个角色,是连接业务用户及Scrum团队的中间纽带。...
  • superkunkun
  • superkunkun
  • 2016年11月15日 23:01
  • 1129

[置顶]推荐一本书:清华出版的《Modbus软件开发实战指南》

前言: 最近在研究Modbus开发,如果只是简单的了解了一些modbus基础知识,但是不够系统和全面。 其实,modbus虽然比较简单,但是如果不注意有很多坑,特别是寄存器的位数,大小端处理,浮点...
  • SkyFormat99
  • SkyFormat99
  • 2017年04月17日 10:08
  • 828

推荐一本书:清华出版的《Modbus软件开发实战指南》

前言: 最近在研究Modbus开发,如果只是简单的了解了一些modbus基础知识,但是不够系统和全面。 其实,modbus虽然比较简单,但是如果不注意有很多坑, 特别是寄存器的位数,大小端处理,浮...
  • SkyFormat99
  • SkyFormat99
  • 2017年03月14日 22:23
  • 2639

Modbus软件开发实战指南 之 modbus 地址

转载的文章,参考看看就行。 文章说明了modbus地址的一些注意事项,但是不够全面,其实还和大小端、字节序有很大的关系。 初学者往往搞不明白。 Modbus协议最初由Modicon公司开...
  • SkyFormat99
  • SkyFormat99
  • 2017年03月16日 13:55
  • 4433

如何构建一个高效的敏捷团队

1. 确定迭代周期,不至于太短使团队压力过大,也不至于太长使团队松懈。工作首先是热情的一个开始,我们的迭代周期是3周 2. 让大家每个人的工作放在整个团队的面前,例如需求细化、设计、代码、个人进度,这...
  • coloriy
  • coloriy
  • 2015年08月14日 15:45
  • 421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:书评:简洁代码──敏捷软件工艺指南
举报原因:
原因补充:

(最多只允许输入30个字)