豆瓣评分8.6!将近400页的《代码整洁之道》,其实重点就5个点

Bob叔的《代码整洁之道》相信大家都不陌生,2008年出版,一直被亚马逊评为销量最高的5本技术书籍之一,作者也被亲切的成为“Bob叔”,他还是敏捷软件开发宣言(2001)的17位签署者之一。

Bob叔有一句名言:任何一个傻瓜都能写出计算机可以理解的代码,惟有写出人类容易理解的代码,才是优秀的程序员。

看完这本书,我将本书的5个要点提炼出来:

▎1、编程是门手艺

架构知识软件开发中用到的借喻之一,不要创建一个完整的设计,然后从头开始创建,一步步构建成一个完整的软件,相反,我们应该从一个草图开始,不断迭代添加细节,不断修改、改进、扩展——在不同的抽象层次上构建,直到我们需要的软件构造完成。但记住,软件永远不会真正的完成。

这才是《代码整洁之道》的精髓所在,在整本书里,作者始终在传达一个理念:软件是一门艺术,就和画画一样,本质上,他认为编程是一门手艺。

但是,我们如何从简单的编写代码过渡到编写整洁的代码?Martin认为,我们有两大途径持续重构和测试驱动开发(TDD),它们就像硬币的两面,具有相互作用。以下是一些定义:

       ● 重构就是在不改变外部行为的情况下重构现有计算机代码的过程

       ● 测试驱动的开发是一个过程,在这个过程中,需求被转换成特定的测试用例,然后只编写使测试通过的功能代码。

因此,制作软件的过程可能是这样的:

       ● 编写失败测试,以验证所需但未实现的功能

       ● 编写一些(可能不好的)代码,使这些测试通过。

       ● 增多重构代码,测试通过,使得每次开发迭代都变得更加清晰。

Martin提出一个中心思想就是整洁代码,它是在开发过程和实践中产生,而不是一次简单的创建就可以。

 

▎2、保持简短

函数的第一条规则是它们应该很小。函数的第二个规则是它们应该比小更小。

Martin的这句话就两意思:函数体应该很短——几乎不超过20行,大多数不超过10行;函数应该尽可能设置少的参数,最好不要有参数。

函数的简洁性使代码更容易阅读,每个函数一个抽象层级。Martin在“类”上也提出了类似的观点,他建议使用职责来衡量,而不是代码行数,也就是说每个类应该只负责一件事,这就是所谓的单一责任原则(SRP)。

保持简短是使代码更简洁的策略,如果我们有一个大文件,里面有很多冗长、复杂的代码,我们可以把这个文件分成模块,把模块分成函数,把函数分成子函数,知道逻辑和目的变得清晰为止。

 

▎3、代码可读性

带有少量注释的整洁而有表达力的代码,要比带有大量注释的零碎而复杂的代码像样得多。

在关于注释、格式这部分内容中,Martin给出了强有力的例子,你是更愿意看到这段代码:

还是这一段代码:

条件逻辑被封装到一个方法中,因为使用的是方法而不是独立函数,所以可以使用实例变量,从而创建零参数的方法调用,该方法还使用了描述性的名称,使“整洁代码”的职责更加明确。这本书专门设了一章来介绍命名,本质上是对Tim Ottinger规则的详细说明。例如:

       ● 能够清晰表达意图——诸如用int elapsedTimeInDays,而不是in days

       ● 使用读得出来的名称——例如,客户而不是DtaRcrd102

       ● 避免使用编码——不要用前缀m_表示"members",也不要使用匈牙利表标记法

       ● 每个概念对应一个词——不要使用fetch,retrieve,get去给多个类中的同个方法命名。

 

▎4、尊重抽象

根据书中说的,如果我们想要确保我们的函数只做一件事,我们需要确保每个函数中的语句都处于相同的抽象级别。Martin用以下来自FitNesse的例子来说明这一点:

这里至少混合了两个抽象层次。第一个是呈现具有给定大小的hr标记的高级概念,第二个是处理实际构造标记的低级语法细节

为了说明这一点,代码被重构得更干净,如下所示:

按照Martin说的:分离抽象层次是重构最重要的功能之一,也是最难实现的功能之一。这当然也是我们在今后的代码中需要多多考虑的问题。

 

▎5、《代码整洁之道》是关于原则和如何努力工作的一本书

我写这篇文章的目的不仅仅只是为了罗列出《代码整洁之道》里面的重点和名言,总结我们可以应用的规则,以获得整洁的代码,这样做对这本书来说是一种伤害,因为这本书本身还没有达到这种教条主义的地步。

相反,让我印象更为深刻的是,更像在引导我们培养一种强烈的个人原则意识,并不断地说明将代码从“脏”变成“整洁”所需要付出的努力,在书里也称之为“代码感”,这需要“不断的严格运用各种代码技巧,才能达到所谓的整洁感”。

 

☆写在最后☆

《代码整洁之道》书中的每一条规则并非都是由Bob叔提出的,他在书中多次公开承认这一点。如果说有什么不同的话,那就是这是本书如此成功的原因之一——它是对编程社区中各种智慧的提炼,并使用了实际例子让它变得更加充实。

如果本书还有什么不足的话,我觉得有一个,就是关于细节的章节和关于概念的章节配比有点不平衡,比如系统这一章只有13页,几乎只有注释那一章节的一般,我猜他这样做的原因,是想要吧这一部分的内容留给我们讨论。除此之外,我觉得这是最好的编程书籍之一。


对于热爱编程的人来说,有一群一起学习一起解答的小伙伴很重要!笔者有一个C语言/C++编程零基础入门学习交流俱乐部(点击进入,还有编程学习文件(源码,零基础教程,项目实战教学视频),欢迎初学者和正在进阶中的小伙伴们!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章