读书笔记 · 约 14,558 字 · 预计推送 2 部分

《编写可读代码的艺术》(The Art of Readable Code)精读:落成一份个人代码可读性检查清单 未开始

目录

题记与说明


一、书与主题概述

《编写可读代码的艺术》回答的问题朴素而根本:怎么写让别人一读就懂的代码。它的关键一步是把"可读性"这个含糊的审美概念变成一个可度量的工程目标——

"Code should be written to minimize the time it would take for someone else to understand it."(作者总结,转引自来源 1;Gist 版补全了定义:这里的"理解"指 *able to modify the code and spot bugs*,即能改得动、能看出 bug)

中文版表述:"代码的写法应当使别人理解它所需的时间最小化"——可读性基本定理。(来源 3、4)

全书围绕这把尺子展开四部分:表面层次的改进(命名、注释、审美)→ 简化循环和逻辑(控制流、拆分超长表达式、变量)→ 重新组织代码(抽取子问题、一次只做一件事、把想法变成代码、少写代码)→ 精选话题(测试与可读性、设计改进)。每章末尾附 "Summarizing" 检查清单,这为本文落成"个人检查清单"提供了原装骨架。

两位作者均有 Google 工程背景(本书源自作者在 Google 内部讲授的"代码可读性"课程材料,此点为来源 4 语境与多方书评公认背景;确切表述以原书为准)。本书常与《Clean Code》并列推荐,但取向不同:*Clean Code* 谈原则与品味,本书谈每次落键时都能用的具体技术——这在 5 个来源中被反复确认。


二、七维提取

1. 核心问题

2. 主要主张

  1. 可读性基本定理:以"别人理解所需的时间最小化"为唯一北极星度量;"理解"的标准是能修改代码、能发现 bug。(来源 1、3、4、5)
  2. 可读性优先于其他目标:即使需要高度优化的代码也能兼顾可读性,且可读性好的代码往往架构更好、更易测试。(来源 3、4)
  3. 好代码 > 坏代码 + 好注释:"good code is always more readable than bad code plus comments"——注释救不了坏名字,先改名。(来源 2)
  4. 注释的目的是信息传递:"The purpose of commenting is to help the reader know as much as the writer did"(p.46)——写"导演评论"(为什么选这条路、放弃了哪些替代方案),而不是复述代码。(来源 2、4)
  5. 行数不是美德:"Instead of minimizing the number of lines, a better metric is to minimize the time needed for someone to understand it."(p.73)——三目运算符、密集的一行流只有在更易理解时才用。(来源 2、4)
  6. 最好的代码是没有代码:"最好读的代码就是没有代码。"——砍需求、删死代码、拒绝过度设计。(来源 4)
  7. 测试名即注释:"Don't be afraid of having a long or clunky name here… The test function name is effectively acting like a comment."(来源 1)
  8. 一致性比"正确"重要:"it's more important to be consistent than to follow the 'right' style"——团队风格指南优先于个人偏好。(来源 4、5)

3. 方法

本书的方法论形态(区别于实证研究):

4. 数据与证据

5. 结论

可读性是一门有度量、有技术栈、有自审清单的手艺:北极星是"最小化别人的理解时间";手段按成本递增排序是命名 → 审美 → 注释 → 控制流 → 表达式 → 变量 → 函数组织 → 少写代码 → 测试。落地形态就是一份随身检查清单(第四节),在写完、提交前、评审时逐项过。

6. 局限

7. 对我的启发


三、全书四部分精读要点(逐层展开)

第一部分:表面层次的改进(命名 / 注释 / 审美)

命名——把信息装进名字里(来源 3、4、5):

不误解的名字(来源 3、4、5)——审查式提问:"这个名字会被别人解读成其他的含义吗?"

审美(来源 4、5)——三原则:一致布局让读者习惯风格;相似代码看上去相似("similar silhouettes",来源 5);相关代码分组成块。手段:换行节奏一致、列对齐、按有意义顺序声明并处处保持、块间空行、"代码分段+注释分节标题"。底线:"一致性比'正确'风格更重要"。

注释(来源 2、4)——

第二部分:简化循环和逻辑

控制流(来源 2、3、4、5)——目标:"读者不用停下来重读"(来源 3:"把条件、循环以及其他控制流改变做得越自然越好")。

拆分超长表达式(来源 3、4、5)——关键思想:"把你的超长表达式拆分成更容易理解的小块"(来源 3);警告:"要小心'智能'的小代码段——它们往往在以后会让别人读起来感到困惑"(来源 3)。手段:解释变量(把子表达式捕获成有名变量)、摘要变量(如 boolean user_owns_document = request.user.id == document.owner_id,来源 5)、德摩根定律化简("分别取反,转换与或",来源 4)、复杂逻辑尝试从反向目标实现、必要时提取函数。

变量与可读性(来源 4、5)——三招:删掉无价值变量(中间结果变量、纯控制流变量如 done);缩小作用域(成员变量降为局部、传参代替共享、"把大类拆小"、"把方法变静态");偏好"只写一次"的变量——"操作越多的变量越难确定其值"(来源 4)。

第三部分:重新组织代码

抽取不相关的子问题(来源 2、4、5)——操作程序:这段代码的高层次目标是什么?每一行是否直接服务于它?不服务的行数足够多就抽成函数。抽取对象:纯工具代码、通用代码、项目专有代码、简化已有接口、按需重塑接口。收益(来源 5):读者聚焦高层目标不被细节拖累;抽出的函数可复用、可独立测试、易识别边界情况。落点:"把一般代码和专有代码分离"(来源 4)。注意"避免过犹不及"(来源 4)。

一次只做一件事(来源 4)——把代码组织成一次只做一件事;任务可以很小(小到只是"从对象中抽取一个值");并列的任务先列清单再逐个完成。

把想法变成代码(来源 4)——三步:自然语言描述 → 抓关键词 → 写匹配的代码。价值在于描述语言会暴露你尚未想清楚的部分(爱因斯坦祖母引述,来源 4)。

少写代码(来源 4、5)——关键思想:"最好读的代码就是没有代码。"手段:不做不需要的功能(质疑与拆分需求,做"最容易版本");保持小代码库、无情删除无用代码;模块化解耦;熟悉周边库——"每隔一段时间花 15 分钟阅读标准库的名字"(来源 4),避免重造轮子。

第四部分:精选话题(测试与可读性)


四、成品:个人代码可读性检查清单

用法:T0 与 T9 每次提交必过;T1–T8 在写完一个函数/模块后或重构时过;评审他人与 AI 生成代码时全表过。 每项括号内标注来源依据(来源编号见文首)。清单刻意保持"能以是/否回答"的粒度。

T0 · 北极星(一把尺)

T1 · 命名

T2 · 审美

T3 · 注释

T4 · 控制流

T5 · 表达式

T6 · 变量

T7 · 组织

T8 · 测试

T9 · 提交前最后三问


五、原文引述汇编(便于直接引用)

  1. "Code should be written to minimize the time it would take for someone else to understand it." —— 作者总结,转引自 来源 1
  2. "代码的写法应当使别人理解它所需的时间最小化。"(可读性基本定理,中文版表述)—— 来源 3、来源 4
  3. "The purpose of commenting is to help the reader know as much as the writer did."(p.46)—— 来源 2
  4. "good code is always more readable than bad code plus comments." —— 来源 2
  5. "Instead of minimizing the number of lines, a better metric is to minimize the time needed for someone to understand it."(p.73)—— 来源 2
  6. "Don't be afraid of having a long or clunky name here… The test function name is effectively acting like a comment."(第 14 章测试)—— 来源 1
  7. "最好读的代码就是没有代码。"(第 13 章关键思想)—— 来源 4
  8. "清晰和准确比装可爱好。"(命名章)—— 来源 4
  9. "it's more important to be consistent than to follow the 'right' style." —— 来源 5;中文:"一致性比'正确'风格更重要",来源 4
  10. "a really easy read in 14 clean (and short) chapters" / "mostly a review of ideas and patterns I have already come to agree with" —— 来源 1
  11. "will stay relevant at least for the next 10 years"(2022 年书评对 2011 年书的判断)—— 来源 2
  12. "测试应当具有可读性,以便其他程序员可以舒服地改变或者增加测试。"(第 14 章关键思想)—— 来源 3

六、本次精读的检索过程记录(诚实留痕)

← 资料库今日播报 →