《Clean Code》一书回顾

《Clean Code》一书从翻开至今,已经差不多两个月的时间了,尽管刨去其中的假期,算下来实在是读得有点慢。阅读期间,断断续续的做了不少笔记。之前,每每在读完了一本技术书籍之后,其中的诸多细节会很快的淡忘,最终留下的往往是在阅读时候与自己之前的印象产生极大共鸣的部分,或者在之后实践当中碰巧运用到的一些知识点。所以,根据已往的经验来说,对于一本技术书籍的学习,个人更愿意依照如下两个基本原则来学习:

  • 撷取个人当前认同最深的少数几个知识点,反复进行实践,并在理解之后再扩张到其他的知识点
  • 择期再次阅读,并记录之前理解不对的或者总结自己收获的新的认知

也因为做如是认为,对于这本书的阅读笔记,当前也只对一些印象深刻的三个观点进行记述。

价值认同

决定去学习一件事情,首要的是认同其跟从的价值。所以作者在第17章《 Smells and Heuristics》总结部分提到提到:

这份启发与味道的清单很难说已完备无缺。我不能确定这样一份清单会不会完备无缺。但或许完整性不该是目标,因为该清单确实给出了一套价值体系。这套价值体系才该是目标。

我很赞同作者的这种说法,CleanCode首先必须要程序员本身非常在乎自己的代码,并且有心一点一滴的去提升自己的代码质量。有了这样相同的价值认知,剩下的就是不断的编写代码、改进代码,按照一些建议或者过程当中自己收获的心得,一步一步螺旋式的去改善代码的质量。

方法学

其实,大多人都是想学好的,但是往往是有向学之心,但无恒久之力。古今皆有之,比如《论语》当中便有一段冉求与夫子的对话:“冉求曰:「非不說子之道,力不足也。」子曰:「力不足者,中道而廢。今女畫。」”

对于此,作者在书里面的多个地方结合自己的经验做了说明,读了可真是使人倍受鼓舞啊,且看。在第3章《Functions》当中有:

写代码和写别的东西很像。在写论文或文章时,你先想写什么就写什么,然后再打磨它。初稿也许粗陋无序,你就斟酌推敲,直至达到你心目中的样子。

我写函数时,一开始都冗长而复杂。有太多缩进和嵌套循环。有过长的参数列表。名称是随意取的,也会有重复的代码。不过我会配上一套单元测试,覆盖每行丑陋的代码。

然后我打磨这些代码,分解函数、修改名称、消除重复。我缩短和重新安置方法。有时我还拆散类。同时保持测试通过。

最后,遵循本章列出的规则,我组装好这些函数。

我并不从一开始就按照规则写函数。我想没人做得到。

作者非常坦白的告诉他自己的写作过程,尽管无法证实,但是如此inspiration的表达,也是像我这样自认愚笨、难以雕琢的程序员所喜闻乐见的,算算自己多多坚持似乎也还有成为好程序员的机会:) 另外,从作者的这一段叙述里面,起码可以知道两件事:

  • 好的代码的写成并非一蹴而就,而需要反复、耐心细致的调试
  • 单元测试的重要,帮助确保优化前后功能的一致

在第14章《Successive Refinement》里面也有:

这段程序并非从一开始就写成现在的样子。更重要的是,我也没指望你能一次写出整洁、漂亮的程序。如果说我们从过去几十年里面学到什么东西的话,那就是编程是一种技艺甚于科学的东西。要编写整洁代码,必须先写肮脏代码,然后再清理它。

作者在这里也突出了高质量的代码伴随了一个逐步改进的过程。不过现实当中往往是生产了非常多的“能工作”的程序,然后就没有然后了。

综合本书归结下来,写好代码的建议并未只是一味的谈论理论,相反的,作者反复的强调动手实践的重要性,并且在书中花了100+页来示范代码的重构。所以,自己总结了Clean Code的方法学为四个字:“反复,改进”。

四原则

四原则出自第12章《Emergence》,中文版对该章名称的翻译为“跌进”。这一章相对来说,是更为详细的方法论。Kent Beck认为遵守简单设计的四条规则,对于创建具有良好设计的软件有着莫大的帮助,它们是:

  • 运行所有测试
  • 不可重复
  • 表达了程序员的意图
  • 尽可能减少类和方法的数量

上面的四条规则按照重要程度排列。对于“设计规则之一:运行所有测试”,作者提到的一句话:“测试编写得越多,就越能持续走向编写较易测试的代码。”这一话多少是一种鼓励,对于当前大部分开发人员而言,都是极其讨厌测试代码的编写,并且通常是在事后为了覆盖率而去“有针对性”的编写测试用例。当然,这一种原因时因为开发人员本身没有编写多少代码,所以不知道测试的好处;另外一种是不知道测试代码的重要性,其带来的质量和效率上面的提升功能。

测试固然很重要,但是作者同时也提到编写高质量的测试代码更重要,因为糟糕的测试代码可能会带来适得其反的效果。对于单元测试的说法,王垠在他的一篇文章《谈“测试驱动的开发”》也专门谈到过他对测试的认识,其中透露的比如“不能在心理上完全依赖测试”,“架构并未成型的时候对于测试可以延迟编写”也是可以用来作为参考的。

其他的三条设计规则,也就是属于“重构”的范围了。其实不管是测试,还是重构,里面都包含了相当多的内容,显然三言两语并不能说出过大概,但是这对于Clean Code整体干支的梳理上清晰了不少。有了测试,便可以消除对清理代码就会破坏代码的恐惧。

尽管有着诸多的指导原则和参考规范,文中的一些内容也会有自相矛盾的地方:为了保持类和函数短小会造出太多细小类和方法,而四条规则的最后一条则是尽可能少的类和方法。作者对此做了一个说明:

我们的目标是在保持函数和类短小的同时,保持整个系统短小精悍。不过要记住,这在关于简单设计的四条规则里面是优先级最低的一条。所以,尽管使类和函数的数量尽量少是很重要的,但更重要的却是测试、消除重复和表达力。
所以,坚守一些规范是好的,但是同时也需要保持一定的灵活性。

总的来说,上面的“价值认同”、“方法学”与“四原则”是自己偷懒总结的当前欣赏或者说觉得有指导意义的三个方法的知识点,对于书中其他的各种参考当然也是有价值的,因为知道自己一次性记不了那么多的详细条目所以也就并未一一将笔记全副进行摘录了。对于各方面尚未登堂的自己来说,Coding Now!

其他

拿这本书每一章的内容的组织来说,带给我的感觉与之前读到的一些书籍有所不同,当然,这主要是我看的技术书籍少得可怜的缘故 :( 之前阅读的一些技术书一章篇幅较长,实话说,自己当前对于技术不是痴迷的那一类,所以读起来真是有些痛苦,这也间接的造成了一些书读了一半或者一部分。而该书每一章的组织因为比较短小,所以读起来会觉得比较轻松,却在不经意间读完了。同时,这也带给了我在写作笔记时的一点启发:之前自己很欣赏多位技术博主的长篇笔记,觉得异常丰满,在自己学着去写作的过程当中总是也向其看齐,但是因为自身水平不够,所以总是常常半途而废。其实想想将一片笔记写成恰到的长度,说明了该说明的,就很不错。

注:文中的中文引用来自翻译版《代码整洁之道》

时间: 2024-11-06 09:37:50

《Clean Code》一书回顾的相关文章

说说怎么写clean code

前两天参加了公司组织的一个培训,主题是“如何写出好的代码” ,刚看到这个主题,第一反应是又不知道是哪个培训机构来忽悠钱的!老大安排了,就去听听呗. 说实在的,课程内容没有什么新鲜的东西,就是讲讲如何发现代码的坏味道,如何重构函数,如何修改遗留系统的代码.这些东西从本科到研究生到实习到正式工作,也不知道看过多少听过多少了,话说本科的课程设计也和代码重构相关,私底下重构和设计模式方面的书也没少看,感觉应该没啥好培训的,不过两天的课程听完,打心眼里觉得来对了,意犹未尽! 课程结束了,感觉需要把这两天课

《Clean Code》读书笔记——第二周

本周我阅读了<Clean Code>. "神在细节中!",建筑家范德罗如是说.他当然专注于基于宏伟构架之上的永恒建筑形式,他也同样为自己设计的建筑挑选门把手.同样软件开发也是这样,小处见大.在宏伟的建筑作品中,我们也要关注细节的回响.重点便是整理,从而达成Clean.一个很好的例子是对于变量命名,认真对待每个变量名.书中作者说,我们就像一群代码猴子,无视混乱无序,失去代码的真谛.整洁的代码正是迈向编程之美的基础,重要性毋庸置疑. 作者断言,我们永远需要代码.我们可以创造各种

《clean code》讲述代码中的道,而不是术

Clean code 看<clean code>一书,学习高手写出的代码,简单高效的代 1.目标 Bjarne Stroustrup:优雅且高效:直截了当:减少依赖:只做好一件事 Grady booch:简单直接 Dave thomas:可读,可维护,单元测试 Ron Jeffries:不要重复.单一职责,表达力(Expressiveness) 代码的书写,一定程度上体现了编程的思想,编码者的功力,标识出红色的部分我觉得体现了函数式编程,面向对象的思想,需要细细体会 2 命名 2.1 前期统一

Writing Clean Code 读后感

最近花了一些时间看了这本书,书名是 <Writing Clean Code ── Microsoft Techniques for Developing Bug-free C Programs> 这里主要总结了一些里面的编程思想. 为空语句加上NULL 当需要使用空语句的时候,最好写上NULL, 比如: if (music_on()) NULL; else turn_it_on(); 参数类型相同的问题 如果函数中两个参数的类型相同,如果用户调用这个函数时错误替换了参数的顺序,就会出现问题.

Clean Code 读书笔记三

clean code 之方法(函数) - 短小 ,再短小,更短小 20行最佳 只做一件事 准确说来每个方法应该是只做抽象概念上的的一件事 只做一件事的方法是无法把逻辑分段的 自顶向下的代码 To say this differently, we want to be able to read the program as though it were a set of TO paragraphs, each of which is describing the current level of

Building Maintainable Software-java篇之 Write Clean Code

Building Maintainable Software-java篇之 Write Clean Code Writing clean code is what you must do in order to call yourself a professional. -Robert C. Martin Guideline: ? Write clean code. ? Do this by not leaving code smells behind after development wor

clean code 读书笔记一

什么是 clean code ? 大神对优雅代码的定义: I like my code to be elegant and efficient. The logic should be straightforward to make it hard for bugs to hide, the dependencies minimal to ease maintenance, error handling complete according to an articulated strategy,

[转]Clean Code Principles: Be a Better Programmer

原文:https://www.webcodegeeks.com/web-development/clean-code-principles-better-programmer/ ----------------------------------------------------------------- "My code is working well, the website I built is looking great, and my client is happy. So why

读《Clean Code 代码整洁之道》之感悟

盲目自信,自认为已经敲了几年代码,还看什么整洁之道啊.我那可爱的书架读懂了我的心思,很明事理的保护起来这本小可爱,未曾让它与我牵手 最近项目中的 bug 有点多,改动代码十分吃力,每看一行代码都带一句"这是什么XX代码啊,真XX难改",这样持续了好几天,有天晚上坐在书房回想这几天发生的一切,仰头定睛思考,我终于和它重新确认了眼神 股票见涨你知道买了, 汽车撞墙知道拐了, 孩子死了你来奶了, 大鼻涕到嘴你知道甩了, bug难改知道愤慨了 马上翻开书,前言章节,映入眼帘的就是下面这一张图