代码简洁之道
《软件基础》现已免费
大约一年前,一位Twitter用户在一个帖子中提到了我和其他一些编程书籍的作者,描述了在他们国家获取计算机编程书籍所面临的障碍。我过去曾间接了解到这些问题——世界上有很多国家,一本书的美元价格可能相当于一个人一整周的工资。
我写书不是为了赚钱——我写书是为了传达信息并帮助人们。我通常认为,如果人们为一本书付了钱,他们更有可能真正去阅读它,而我的目的就是让人们去读这本书,因为这是我让软件行业变得更好的唯一途径。这本书至今仍有销量(这对一本计算机书籍来说很不寻常,因为它已经出版十年了),但对我来说,它赚的钱并不重要——重要的是让人们读到这本书。
当我意识到,在这个星球上,有大量人群如果必须付费就完全无法合法阅读这本书时,我便与我在O’Reilly的编辑们合作,看看我们是否能将这本书完全免费提供。
事实证明,由于一些他们无法控制的复杂原因,他们无法在亚马逊或O’Reilly商店将这本书免费提供。但他们可以授予我该书的发行权,去掉封面,让我免费分发!
所以,给你,《代码简洁之道:软件基础》现在可以免费下载了!我希望这能让更多的人阅读并理解软件设计的基本法则,并有助于使软件开发的世界变得更美好。
读者的讨论
- sergey: 太棒了,现在许多编程书籍中最好的主要一本是免费的了。谢谢!
- STEVEN GORDON: 你书中实际上把测试当作事后才考虑的事情,这让我看到了你对软件开发理解的漏洞。自动化测试需要放在首位,而不是最后。它是表达和验证代码意图的关键(而不是那些随时间推移变得越来越不真实的妄想式注释),能够通过安全重构来提高简洁性,并在其整个生命周期中维护代码。
- 作者回应: 我认为你可能误解了这本书的意图或其中关于测试的内容。关于这个话题有很多要说的,但我写过的最好总结在这里:https://www.codesimplicity.com/post/the-philosophy-of-testing/。
- Yubraj Lama: 《代码简洁之道》中关于软件设计的基本法则非常棒。谢谢你,Max。
关于AI辅助编码与代码复杂度的思考
作者在后续的分享中也探讨了与软件工程相关的技术话题:
最近有很多关于如今有多少代码是“由”AI“编写”的讨论。然而,随着时间的推移,我认为这些指标变得比最初更无用处。当我使用Claude Code编写代码时,我写的代码中接近100%是“由”Claude“编写”的。然而,这仅仅是在我和这个智能体之间进行大量来回交流之后才发生的。是的,理论上Claude“写”了代码,但绝不是它独自完成的。我认为我们混淆了“AI独自完成了某项不需要人类努力的事情”和“AI帮助人类完成任务”这两个概念。
此外,如果你只看“有多少代码是由AI编写的”,那么Claude在任何给定任务上对我的生产力是净增加还是净减少是完全看不出来的。我花了三个小时与Claude来回交流,生成了50行我自己本可以在45分钟内写完的代码。但另一次,我花了十分钟与Claude交互,完全解决了一个问题,而这个问题原本需要我花三个小时研究才能仅仅理解如何解决。Claude在这两种情况下都“编写”了100%的代码。
我相信,今天的AI助手正在为软件工程师提供巨大价值,并且它们正在改变我们的工作方式。但它们并非在所有情况下对所有人都提供同等的价值——有时它们甚至是净负收益。仅仅追踪“有多少代码是AI编写的”并不能帮助任何人看到这一点,也无法弄清楚如何真正帮助他们的开发人员更高效、更有效、更快乐。
关于代码复杂度的主观性:
在Google代码健康组的定期会议中,几乎每周都会有人问同一个问题:“我如何客观地衡量代码复杂性?”我们周复一周地给出同样的答案:“没有办法做到,请不要尝试。”
这个小组的领导者代表了世界上在代码质量和重构领域经验最丰富的工程师,我们随着时间的推移都得出了相同的结论:代码复杂性度量行不通。所有试图制定量化指标(圈复杂度、计算静态分析失败次数、确定内聚力和耦合度的算法)的尝试都失败了——它们引导团队走向错误的道路,并没有解决真正阻碍开发人员的重要问题。
最终,我明白了为什么这些指标行不通,而且永远也不会行得通。这是因为代码“简单”的定义是:易于阅读、理解和正确修改。这里的“阅读”和“理解”本质上都是主观的。只有人类才能告诉你某样东西是否容易阅读。
有些人寄希望于现代大语言模型能在这方面有所帮助。在我亲眼看到之前我愿意相信,但眼下这实际上是所有模型都一致不擅长的领域:告诉你是否产出了高质量的成果。它们在发现具体问题并以代码审查的形式提供具体指导方面还行。但它们完全缺乏经验丰富的软件工程师在构建真正简单的软件系统时所具备的判断力。无论你如何告诉它们“要简洁”或“编写好的代码”,它们就是做不到。
所以,这仍然是事实:代码质量本质上是主观的,如果你想理解它,你需要关于它的主观数据。那是我所见过唯一有效的方法。