读《代码大全》笔记(一)

2026-06-28 · 技术

← 返回 技术 · ← 返回首页

最近在读《代码大全》第二版,虽然书名听起来像是在开玩笑,但它在软件工程领域的经典地位是实打实的。和很多讲具体编程语言或框架的书籍不同,这本书讨论的是更底层也更持久的话题——如何写出高质量的代码。

作者 Steve McConnell 在书的一开始就提出一个核心观点:软件开发中最主要的成本不是初期的编码,而是后续的维护。我们花在读代码上的时间远远多于写代码的时间,因此代码的可读性比编写速度重要得多。这个观点对于我这种以前经常为了赶进度写出「只要能跑就行」的代码的人来说,是一个很重要的提醒。现在写代码的时候我会多花一些时间去想变量名是不是足够清晰、函数的职责是不是单一、注释是不是解释了不该注释的东西(好的代码应该是自解释的,注释应该解释「为什么」而不是「是什么」)。

书中关于变量的部分内容对我影响也很大。变量命名是最基础但也是最容易被忽略的编程活动之一。一个好的变量名应该精确地描述它所代表的数据,而不是模糊的暗示。McConnell 举了一个很好的例子——如果你有一个变量叫 x,你完全不知道它是干什么的;但如果你把它命名为 totalSalesAmount,所有读到这段代码的人就立刻知道它是什么意思。他还提到了变量名的长短应该和它的作用域成正比——在一个三行的循环里用 i 是可以的,但作为全局变量就绝对不行。

还有一个关于代码组织的观点是每个类或者函数应该只做一件事,并且把它做好。如果一个函数的名字是「计算总金额」,那它里面就不应该还有发送邮件和更新数据库的操作。这个原则现在叫做「单一职责原则」,但在《代码大全》写成的年代还只是作为一种好的工程实践来讨论的。按照这个原则组织代码之后,我发现代码的单元测试写起来也容易了很多——因为每个函数做的事情单一,测试的边界就非常清晰。

目前这本书大概读到一半,我觉得它最大的价值不是告诉你具体怎么写出某一种代码,而是帮你建立一套判断代码质量的标准和思维方式。这本书我会继续往下读,后面还有关于调试、重构和代码优化策略的章节,到时候再写下一篇笔记。