Code Is Written for Humans First

复制链接
约 4 分钟阅读

程序必须为人们阅读而编写,而机器执行只是附带的。——哈罗德·阿贝尔森

读完这句,什么在心中回响?

名言的核心:可读性高于一切

哈罗德·阿贝尔森这句话把编程的优先级倒了过来:程序首先是一种“给人看的文字”,其次才是给机器执行的指令。机器只需要语法正确、逻辑可运行;但人需要理解意图、推断边界、评估风险,才能维护与演进系统。因而,把代码写得像清晰的说明书一样,往往比追求短小或炫技更能提高整体效率。 进一步说,这种观点并非否认性能或正确性,而是强调在真实的软件生命周期里,“读代码”的时间远超过“写代码”的时间。你今天写下的每一行,都可能在未来被他人、甚至被数月后的自己重新阅读与改动。

为什么“人读”比“机跑”更重要

软件不是一次性作品,而是长期维护的资产。随着需求变化、人员流动、依赖升级,代码会不断被修改;此时可读性决定了变更的成本与安全性。即便机器执行结果正确,若人类无法快速理解,团队就会用更保守的方式迭代:不敢重构、不敢优化、只敢打补丁,最终技术债滚雪球。 因此,阿贝尔森的提醒实际上指向一个工程事实:程序的价值不仅在“能跑”,更在“可持续地跑”。当代码像一段结构清晰的论述,维护者才能在最短时间内确认设计意图,并在不破坏系统的前提下继续前进。

可读性的组成:命名、结构与意图

要让程序“为人们阅读”,最直观的是命名:变量、函数、类名应传达业务含义而非实现细节。紧接着是结构:合理的模块边界、单一职责、清晰的依赖方向,会让读者像阅读章节一样逐层深入,而不是陷入到处跳转的迷宫。 再往前一步,可读性还包括“意图的可见性”。当你用小函数封装一段规则、用类型或断言表达约束、用注释解释“为什么这样做而不是那样做”,你就是在帮未来读者节省推理成本。代码不只是步骤,更是设计决策的记录。

注释与文档:解释“为什么”,不是复述“是什么”

既然目标是让人读懂,那么注释和文档就该承担人类最难从代码中直接推断的部分:动机、权衡与背景。仅仅复述代码做了什么(例如“i 加一”)常常无助,因为读者一眼就能看出来;真正有价值的是解释为何必须这样做、相关约束来自哪里、哪些输入被刻意排除。 同时,文档与代码应相互校验:核心规则最好能在测试中固定下来,让文档承诺与实际行为一致。这样一来,阅读者不仅“理解”,还能够“验证理解”,从而把沟通成本降到最低。

可维护性的回报:重构、协作与测试

当代码以读者为中心时,团队协作会显著顺畅:代码评审更聚焦于设计而非猜测意图,新成员也更容易上手。更重要的是,可读性会直接提高可测试性——清晰的边界与纯粹的函数更易编写单元测试,测试又反过来成为“可执行的说明书”。 由此,可读性与工程质量形成正循环:更易读的代码更易重构,更易重构就更敢持续改进;持续改进又让架构保持健康。阿贝尔森这句话最终落脚在“让系统能被人类持续掌控”,而不是被机器表面的正确性所迷惑。

把原则落地:写给未来读者的代码

把“为人阅读”变成习惯,可以从小处开始:使用一致的风格与格式、避免过度聪明的写法、把复杂逻辑拆成可命名的步骤,并在关键处写下决策依据。与此同时,用自动化工具(格式化、静态检查、测试)把低层次的正确性托管给机器,让人类注意力留给抽象与设计。 最终,你写的不只是能运行的程序,而是一段可被理解、可被讨论、可被改写的技术文本。机器执行只是结尾的一瞬间;而在漫长的生命周期里,真正决定成败的是有多少人能够顺畅地阅读它、信任它、并在其上继续构建。

推荐阅读

作为亚马逊合作伙伴,我们从符合条件的购买中获得佣金。

一分钟思考

这个想法在你现在的生活中体现在哪里?

相关名言

已选4条

程序必须写给人读,而机器执行只是顺带的。 - 哈罗德·阿贝尔森

哈罗德·阿贝尔森

哈罗德·阿贝尔森这句“程序必须写给人读,而机器执行只是顺带的”,首先把编程的重心从“让计算机跑起来”挪回到“让人能理解”。机器只需要精确的指令,而人需要意图、结构与边界:为什么这么写、假设是什么、如何扩展、哪里可能出错。正因为软件会被反复修改、交接和复用,代码的第一读者往往不是编译器,而是未来的同事、审阅者以及几个月后的自己。 因此,这句话并非轻视执行效率,而是提醒我们:真正昂贵的成本常常在维护阶段。写得可读,本质上是在降低团队沟通成本...

阅读完整解读 →

代码能运行还不够。它必须优雅。它必须精心打造。解决方案之美与结果同样重要。——林纳斯·托瓦兹

林纳斯·托瓦兹

林纳斯·托瓦兹这句话首先划出了一条清晰界线:软件开发的目标,不只是让程序勉强运行,而是让它以一种经得起推敲的方式运行。换句话说,“能用”只是起点,“优雅”才体现了工程上的成熟。一个解决方案若只是堆砌补丁、绕过问题,即便暂时有效,也往往在后续维护中暴露脆弱性。 进一步看,这种观点实际上是在提醒开发者,代码既是机器执行的指令,也是人与人沟通的媒介。正因如此,结果固然重要,但通往结果的结构、思路与表达,同样构成了作品的价值。

阅读完整解读 →

首先,解决问题。然后,编写代码。—— 约翰·约翰逊

约翰·约翰逊

这句话强调了编程不仅仅是写代码,而是首先要理解并处理问题。代码的作用是实现问题的解决方案,而不是目的本身。

阅读完整解读 →

先设想一个解决方案,然后一行一行地写代码去实现它。——艾达·洛夫莱斯

艾达·洛夫莱斯

这句箴言勾勒出编程的基本轨迹:先在心中完成解法,再以代码逐步显形。它提醒我们,代码并非起点,而是验证设想的工具与轨迹记录。由此,我们自然转向历史,探看这一思路如何在计算的源头被提出并实践。

阅读完整解读 →

探索相关主题