代码整洁之道

代码整洁之道
Robert C. Martin
类别: 编程
出版年份: 2010
阅读年份: 2020
我的评分:
阅读次数: 2
总页数: 466
摘要(页): 0
原始出版语言: 英语
其他语言的翻译: 俄语, 西班牙语, 葡萄牙语, 中文

一般信息

本书由编程普及者和经验丰富的开发者罗伯特·马丁(Robert Martin)编写。这是一本关于如何更好、更正确地编写更加清晰和整洁代码的书。让我们简要浏览一下这本书。

章节概述

第一章完全是理论性的,稍显枯燥。它讲述了编写好代码的重要性,以及随着时间的推移,维护糟糕代码的成本如何逐月增加——无论是从金钱还是时间的角度来看。

接下来讲述了如何更好地命名变量:即变量应传达程序员的意图,并且在读取变量时应清楚地知道它存储了什么类型的数据。书中指出,应该避免使用诸如List、Data等抽象名称。同时,方法和类的命名也略有涉及——尽管这更多属于其他章节的主题,作者将在后面更详细地讨论。给出的建议很多,总体来说,大部分都是合理和实用的。从一方面来看,这是一个非常基础和显而易见的章节,但另一方面,对于初学者来说,可能非常有用。

接下来是函数的部分。这是一个最具争议的主题——关于函数应该有多少行,参数应该有多少。当然,答案显而易见:函数越小,越简单越好。然而,实际上这并不总是如此。书中还提到一个非常合理且明智的观点,即函数应只执行一个特定的操作。例如,一个函数不应同时计算平均值和将结果打印到屏幕上。这就像SOLID原则一样。此外,作者还在这一章中讨论了如何处理条件语句(if、else、switch)、循环、以及try/catch结构。当然,他也涉及了函数命名和DRY原则(尽可能避免重复代码)。

接下来是关于注释的章节:如何以及在哪里添加注释,哪些地方注释反而多余。法律性、期刊性和其他一些类型的注释被作者分析,并展示了它们什么时候真正适用。

如果你觉得注释是一个有争议的话题,那么对于格式化,你又会怎么想呢?这正是紧随注释之后的一个小章节。如果你以为这只是关于制表符和空格的问题,那就错了。这一章的信息量大得多。作者甚至附上了不同的图表。

“对象与数据结构”——这是下一章的标题。抽象、数据不对称、德梅特法则、DTO、活动记录等主题都在这一小章中有所涉及。它分析得相对较浅,重点是程序员已经对这些概念有所了解。

接下来的章节是错误处理。书中的许多示例是用Java写的,因此你不会看到Go语言风格的错误处理(通过if语句),主要关注的是try/catch。几章之前讨论了格式化,现在则讲解了何时、何地以及如何使用异常处理。

下一章是“边界”——它不再讨论代码本身,而是更多地讨论架构,特别是模块的组合与使用。这个部分较短,所以对于那些对罗伯特·马丁关于清洁架构的看法感兴趣的人,建议参考他关于该主题的专门书籍。

接下来的章节是“测试”。简要介绍了TDD(测试驱动开发),接着讲解了测试的具体形式。这一章较短且信息量不大。如果你对测试主题感兴趣,我可以推荐一本很棒的书,可能会很快做一个详细分析。

接下来的章节是“类”。如果将类视为改善代码的一部分(就像叔叔Bob所做的那样),那么这一部分的内容可能已经足够。但前提是开发者已经了解面向对象编程(OOP)。如果你希望更深入地学习面向对象编程,这一部分可能会显得信息量不足,甚至有些困难。

接下来的几章再次涉及架构。不是传统意义上的分层架构,马丁在他另一部书中推荐过这种架构。这里更多的是一些基本内容。第一章更像是讲解各种流程图而非代码。提到了几种设计模式——抽象工厂、依赖注入、代理等。整体来看,这些章节不错且具有信息量。

接下来是关于多线程的章节。更多的是理论而非实践:代码不多,主要是理论性内容,而且讨论得相对浅显。

接下来的章节讲解了代码重构,作者以他自己的例子进行说明。与前面的几章不同,这一章的代码比较多。首先,作者讨论了命令行工具的重构,接着分析了几个Java库/类的重构,都是来自经验丰富的开发者。即便是这些专家,马丁也能找到值得批评的地方——我个人认为这些更多是挑剔而非真正的重构。毕竟,甚至这些代码也能够正常工作,且测试覆盖率很高。这一章的核心观点是:写出可工作的代码远远不够——代码还必须易于维护,否则,随着时间推移,这将变成一项极其困难的任务。

最后一章是总结,由之前所有内容的建议组成:从注释中的标记到函数和测试的处理。

结论

书籍优点

  1. 本书结构良好,共有17章,每一章在前一章的基础上稍加复杂化。换句话说,学习任何编程语言时,人们从基础内容(变量、注释)开始,逐渐过渡到函数、类、异步编程等更复杂的内容。本书采用了类似的方法,既方便又习惯。
  2. 大多数建议非常有用且合乎逻辑。有些人会发现许多新的知识,而另一些人则几乎没有新收获。这取决于个人的经验。
  3. 书中包含插图,虽然不多,但即便是现有的插图也保持了统一的风格,这已经很让人愉悦。

书籍缺点

  1. 不应盲目遵循所有建议。至少有几个,甚至可能有不少“建议”,我并不完全同意,或者根本不同意。
  2. 本书本身不小——超过450页。对于很多人来说,阅读这么大的书籍并不容易。
  3. 代码重构的示例(删除和添加行)本可以做得更好。目前的变化只是通过粗体(新增)和删除线(删除)标示出来,或许采用类似Git客户端的标注方式会更为直观。
  4. 书中的示例使用了Java。我没有什么异议,也没有理解上的困难,但对于不熟悉这个语言的人来说,这可能是一个缺点。
  5. 我读到的是2010年的版本。可能有更新的版本。我读的这本书有些过时。它应该不仅仅是更新,还应该进行补充。

总体评价

这本书在代码开发领域确实是一部畅销书。至少应该快速浏览一下,最好是认真研读。如果没有时间或兴趣阅读整本书,建议至少看一看每章末尾的总结,以及最后一章中的通用建议。在阅读结束后,与同事讨论这些方法和建议也是非常有益的——因为盲目遵循罗伯特·马丁的建议不仅可能不合适,甚至可能是错误的。

Вверх