AI时代的软件工程重构:我们要不要阅读智能体生成的每一行代码? Best Partners TV 2026-07-31

大家好,这里是最佳拍档,我是大飞。当人工智能(Artificial Intelligence)与软件工程深度融合,AI 能够极其高效地帮我们编写代码时,作为人类开发者,我们到底还要不要逐行去阅读和审查它所写出来的每一行代码呢?这个问题在过去的一个月里,彻底把整个全球开发者社区吵翻了天。两位堪称世界级的顶尖程序员,针对这个议题给出了两个截然相反的确定性答案,而且每一个答案背后都迅速站稳了一大批态度坚定的支持者。你可能会下意识地觉得,这不过是程序员圈子内部一次普通的学术争论或习惯分歧,但事实上,这场争论的结果和共识,很可能会决定未来三到五年内,每一个和技术相关的从业者、管理者、设计者到底该如何与人工智能进行深度的协作,甚至它会彻底重新定义“程序员”这三个字在未来科技时代中到底意味着什么。

这起备受瞩目的技术争论的导火索发生在2026年的7月3日。当时,著名的基础设施管理软件公司 HashiCorp 的联合创始人,同时也是下一代终端模拟器 Ghostty 的作者米切尔·桥本(Mitchell Hashimoto: 著名基础设施与系统工程专家)在社交平台 X 上发表了一条非常简短的推文。这条推文仅仅只有一句话:“I read the code”(我阅读代码)。就是这样一句简单到甚至有些普通的话,在极短的时间内便获得了将近83万次的浏览和海量的转发与讨论。可能很多非基础设施领域的听众对米切尔·桥本这位大佬并不是特别熟悉,但是他所一手创办的 HashiCorp 公司,在整个云原生和软件基础设施领域可以说得上是无人不知、无人不晓。他们旗下研发的Terraform(Terraform: 开源基础设施即代码工具)、Vault(Vault: 密钥管理与数据保护软件)等开源工具,早已成为了现代软件工程 and 运维体系的行业标准。因此,当桥本这样一位在技术前沿探索、有着极高声誉的实践者说“我阅读代码”时,其分量是不言而喻的。他虽然表达的是个人的工作习惯与技术原则,但这句话放在当时特定的历史语境下,迅速被业界解读为了一种鲜明的技术立场和态度宣言。

当时正好赶上人工智能技术蓬勃发展,Anthropic的 Fable 系列模型以及 OpenAI的 GPT 系列新模型刚刚发布,智能体(AI Agent: 能自主感知环境、进行决策并执行任务的 AI 实体)的编程能力又上了一个全新的台阶。在这种背景下,氛围编程/感觉编程(Vibe Coding: 依靠直觉和 AI 生成代码,而不关注具体细节的编程方式)的拥护者们气势正盛,他们认为这条完全依靠 AI 生成、人类只负责宏观把控的开发路径已经得到了新一轮技术迭代的充分验证。所谓感觉编程,核心逻辑就是开发者不需要过多地死磕代码底层的实现细节,而是直接向 AI 描述需求,让 AI 代为编写,最后开发者只需要看一眼觉得整体效果差不多、跑起来能用就可以了。因此,桥本在这个节骨眼上发出“我阅读代码”的表态,在很多人看来,就是对这种逐渐盛行的“氛围编程”趋势进行的一次非常公开且有力的反击,从而拉开了这场全球开发者大论战的序幕。

掌控感丧失与防御性阅读的底线

在桥本发出那条引起广泛关注的推文之后,全球众多的技术专家和开发者纷纷站了出来,表达了高度一致的赞同与类似的立场。这一派支持者的核心逻辑实际上非常铺素且不可动摇:代码审查(Code Review: 对源代码进行系统性检查以发现错误并提高质量的过程)和阅读代码,是每一位专业开发者绝对不可妥协和放弃的职业底线。他们认为,只要这一段代码最终是由你提交到代码库中、由你负责部署到生产环境中、并且在后续的生命周期中由你来维护的,那么你就必须百分之百地理解它在底层究竟做了些什么。你必须拥有完整的能力,在它出现非预期错误或者遭遇系统崩溃的时候,能够立刻接手并进行高效率的调试。这一说法听起来确实是天经地义的,毕竟在软件工程的实际场景里,如果代码出了问题,最后承担责任、去线上“救火”背锅的人是你自己,而你却连这段代码究竟是怎么工作的都不知道,那对于整个系统来说无异于一场巨大的灾难。

为了进一步论证这一观点,分布式系统工程师、《分布式系统可观测性》这本书的作者辛迪·斯利达兰(Cindy Sridharan)给出了一个态度极其强硬且鲜明的立场。她毫不客气地指出,每当她在日常工作或社区里听到有开发者说“这段代码全都是 Claude(Claude: 由 Anthropic 开发的先进大语言模型)帮我写的,我其实也不太清楚它具体是怎么工作的”时,她就会在心里立刻判定,这个开发者根本没有能力去调试这些代码。她强调这件事情在工程逻辑上没有任何争论的余地:如果你根本无法独立调试它,你就绝对没有资格宣称自己拥有它、掌控它。而如果一套系统的核心代码连开发者自己都无法掌控,那么任何真正看重系统可靠性、稳定性和安全性的企业或客户,都不可能信任你这样敷衍的供应商。

这番言辞犀利的警告虽然听上去有些严苛,但如果我们静下心来仔细审视软件开发日常的重构与排障过程,就会发现它确实切中了当前技术环境下的痛点。在实际研发流程中,这种现象正变得越来越普遍:许多开发者在遇到 Bug 和报错时,不再去仔细分析堆栈信息或阅读上下文,而是机械地把报错日志直接复制粘贴扔给 AI,然后将 AI 吐出来的修复方案原封不动地贴回代码库中。他们不屑于、也不愿意花时间去审视这几行代码的具体修改逻辑,只要本地运行一跑,发现绿灯亮了或者能跑通,就觉得万事大吉。然而,这种依靠走捷径建立起来的效率假象在面对稍微棘手、复杂或者罕见的分布式 Bug 时会瞬间崩塌。一旦遇到了不是那么常见的边界情况,这些开发者往往需要和 AI 交互反复尝试很多轮,甚至完全卡死在那里。其根本原因就在于,他们从始至终就没能真正理解这段代码在计算机底层究竟是以怎样的内存模型和逻辑拓扑跑起来的,AI 喂给他们什么,他们就吃什么,虽然在开发初期看起来速度极快,但其地基是完全中空的。

针对这种在不知不觉中放松警惕的行为,开源软件工程师克里斯汀·莱默-韦伯(Christine Lemmer-Webber)提出了一个非常精准的学术性概念,她将其命名为“氛围滑坡”(Vibe Slope)。这个词用以形容开发者在 AI 辅助编程下责任心和标准逐步退化的心理学过程。在最开始的时候,人们可能还保持着极高的专业警惕,只是非常谨慎地借助大模型来编写一些辅助性的代码,并且在编写完毕后也会极为认真地做一次人工的代码审查。但是,随着大模型的生成速度越来越快,反馈越来越及时,人类的大脑就会本能地开始寻找省力的路径,从而产生懈怠。于是,审查的严格程度会像滚雪球一样一点点被放松。今天可能觉得这个简单的小函数不需要看,跳过去也无妨;明天觉得这个工具类模块的逻辑差不多能对上,直接通过也行。久而久之,开发者就会一路滑向完全凭借直觉和朦胧美感来写代码的氛围编程深渊。莱默-韦伯特别强调,这个责任退化的过程在很多时候根本就不是开发者主动做出的选择,它更像是一种物理上的顺水推舟,人类顺着效率的惯性越滑越快。当你某一天突然反应过来,意识到自己已经对系统的细节一无所知时,整个项目的复杂度已经膨胀到你根本停不下来的地步。人类对于这段技术旅程的绝对掌控力,其实远没有他们自己在脑海里认为的那样强大。

更深层次的挑战在于人类生理局限与 AI 生成速度之间的巨大不对称。即使是行业内极其资深、经验极其丰富的顶尖程序员,想要在日常工作中彻底找出一段仅有 100 行的手写小程序里隐藏的所有潜在缺陷和逻辑漏洞,都是一件非常吃力且需要高度专注的事情。而今天的大语言模型,其上下文窗口和输出限制被极大地解放,往往只需要几秒钟的时间,就能够一次性生成成千上万行逻辑交错的代码。在这样呈指数级膨胀的信息输出面前,人类想要依靠肉眼去完整、细致地审查和验证每一行代码的准确性,在客观的物理和心理维度上,都已经变得越来越困难,甚至逐渐成为了一项不可能完成的任务。

验证体系替代人工审查的革命

就在大家围绕着工程责任、人肉审查以及“氛围滑坡”的系统性风险讨论得不可开交、甚至逐渐陷入僵局的时候,软件工程界的泰斗级人物罗伯特·C·马丁(Robert C. Martin,也就是全球程序员耳熟能详的 Uncle Bob,名著**《代码整洁之道》**(Clean Code: 传统软件工程中阐述如何编写高质量、易维护代码的经典著作)的作者)站了出来。他那句极其震撼的“我完全不去读智能体写出来的任何代码”,直接将这场争论从简单的“做不做”拉升到了软件工程范式重构的全新维度。

回溯这一戏剧性场面的起因,其实是另一位名叫奥里·波梅兰茨(Ori Pomerantz)的开发者在社交平台 X 上发表的一段充满困惑的倾诉。波梅兰茨提到,自己当时正试着用 Claude 来帮他开发一些模块,但他在心理上总是感到一种强烈的抗拒与不安——他觉得让一个 AI 智能体直接编辑、改写自己的本地文件是一件很不舒服的事情。他向社区询问是否有人有着相同的感受,并坦言,如果自己必须对最终上线的代码质量和运行结果负责,那么他就必须在脑海里彻底理解它的运行逻辑,哪怕这只是为了满足他心理上的安全感。最后,他自嘲地补了一句,说自己是从 1983 年就入行开始编程的老兵,不知道是不是因为自己年纪太大、思维方式太保守老派,才会产生这种跟不上时代的执念。

令人意想不到的是,这位写了六十年代码、教了全世界无数程序员怎么去写整洁代码的老前辈 Uncle Bob 亲自回复了这条推文。他用一种极其温和却极其笃定的语气说,自己开始编写代码的年份比波梅兰茨还要早得多,从 20 世纪 60 年代末就已经从事编程,至今已经超过六十年了。然而面对 AI 时代的冲击,他现在在日常开发中所采取的工程策略,恰恰就是完全不去读智能体写出来的任何一行具体代码。

这番发言在整个开发者圈子里的杀伤力无疑是核弹级别的。一个一辈子都在布道如何精细化打磨代码、强调每一行命名、每一个函数结构的软件设计宗师,居然宣称自己“不读 AI 写的代码”。这条推文迅速在全网疯传,获得了超过 480 万次的曝光。但紧接着,业界的理智派开始思考:Uncle Bob 难道真的成了一个不负责任、任由 AI 随意拼凑逻辑的“甩手架子”,闭着眼睛将不可控的生成代码直接合并进生产环境吗?

答案显然是否定的。如果我们深入剖析 Uncle Bob 的协作模式,就会发现他并非放弃了对质量的掌控,而是将掌控的支点从“微观的代码行阅读”转移到了“宏观的约束体系设计”上。在他的开发流中,智能体被置于一个由单元测试(Unit Testing: 针对程序模块最小单位的正确性检验)、Gherkin 测试(Gherkin Testing: 行为驱动开发中使用的自然语言业务逻辑测试)、质量指标(Quality Metrics: 衡量代码复杂度、重复率等维度的量化标准)、变异测试(Mutation Testing: 通过故意修改代码来评估测试套件有效性的软件测试方法)、测试覆盖率(Code Coverage: 测试用例覆盖代码行数或分支的比例)以及大量高度自动化的自动化构建/持续集成(Continuous Integration: 频繁将代码集成到主干的软件开发实践)工具链所构成的严密网格中。

Uncle Bob 的核心论点在于,他选择不去信任 AI 编写的具体代码行,但他选择信任自己所设计的一整套数学上和逻辑上可闭环的验证体系。当智能体生成的代码能够完完整整地闯过这重重铁网,通过所有的约束和测试,他便能拥有极其充足的工程信心,确信最终输出的结果在功能上是无懈可击的。他并没有放弃责任,而是重新定义了责任的承担形式——在 AI 时代,架构师和高级开发者的职责,不再是去逐行检查工人们砌的砖头是否平整,而是去设计出最严密的质检流水线,让不合格的产品在出厂前被自动筛除。这种将质量关口前移至“约束设计”的做法,在根本上颠覆了传统以人工审查为主的交付流程。

然而,这种极其理想化的“约束主义”思路一经抛出,立刻在社区中引发了一连串极其致命的追问。最直接的一个挑战就是:既然你认为真正保障系统质量的是那一层又一层的约束条件,那么,谁来保证你所设计的约束和测试本身是绝对正确、没有漏洞的呢?如果在整个研发流程中,单元测试本身就写错了,或者质量指标定得不切实际,那么后面所有的自动化验证不就彻底沦为了掩耳盗铃的走过场吗?

面对这个尖锐的问题,Uncle Bob 给出了一个颇具前瞻性的答复。他表示,他同样会让智能体去编写那些用于检查、约束和测试代码的辅助工具。他解释道,相比于业务逻辑,这些校验工具和测试用例在性质上通常是高度确定性的,且它们的单体规模相对较小,更容易定义边界。开发者可以使用它们来快速评估代码质量、统计测试覆盖率,或者利用这些工具故意对代码进行微小的修改(即注入故障),然后观察既有的测试套件是否能够敏锐地捕捉并暴露这些人为制造的错误。

紧接着,社区抛出了第二层更加严酷的追问:既然测试和校验工具也是由 AI 智能体生成的,那你会去逐行审查这些测试工具的代码吗?如果工具本身在你看不到的地方出了 Bug 怎么办?

Uncle Bob 的回答依然干净利落:“我不会审查。”他解释说,这些测试工具自身也会被更外层的单元测试和验收测试所包围。对他而言,评判一个工具或者一段代码是否值得信任的客观依据,从来都不是依靠人类疲惫的双眼去逐行阅读它的每一行实现,而是看它在长时间的运行中,能否持续通过定义良好的逻辑闭环,稳定且重复地完成预设的任务。

这种思路在旁人听起来,显然带有一种近乎疯狂的“无限递归”色彩:AI 生成代码,AI 生成测试,AI 再生成工具来检查这些测试和代码的有效性。这种高度自治的“AI 自检”模式真的靠谱吗?它不会在某个无法察觉的漏洞里达成自我欺骗的共鸣吗?

Uncle Bob 自然深知这种逻辑套圈的软肋所在。因此,他所设计的防御机制绝不是单一维度的。他通过引入变异测试和 Gherkin 验收测试等多元验证手段,将整个测试网的拓扑结构织得极为坚韧。这意味着,如果智能体试图通过篡改某些测试用例来掩盖代码中的缺陷并强行“蒙混过关”,它就不能只是简单修改某一个独立的脚本,而是必须同时、一致地修改一整套在逻辑上相互交织、互相咬合的复杂测试网络。在计算复杂度上,这种多点作弊的难度是呈指数级上升的,智能体极难做到天衣无缝。更重要的是,Bob 本人也并非完全充当“甩手柜”,他会把自己的核心精力聚焦在最顶层的 Gherkin 业务验收用例和全局 QA 流程的制定上,根据当前任务的关键程度进行高强度的抽查与审核,并始终坚持在最末端保留人工的最终验证。

这种以验证代替阅读的高效工程流很快就得到了行业的落地响应。一位名叫 AmazingAng 的开发者迅速基于 Uncle Bob 的核心理念,在开源社区推出了一个名为 old-coder 的 Skill 工具。该工具的核心逻辑就是让开发者彻底摆脱逐行阅读 AI 生成代码的繁重体力劳动,转而利用一整套全自动化的代码审查和测试管道来对其进行全方位的拦截与围剿。这证明,Uncle Bob 的构想早已脱离了纯粹的哲学讨论,而在产业界逐步固化为了可以实操的先进工作流。

代码价值光谱与廉价代码的溢出

随着讨论的进一步深入,开发者们开始将目光投向了另一个同样关键的问题:测试或许能够保证系统在业务功能上符合预期的输出,但代码本身的内部设计质量——也就是代码是否足够整洁、结构是否足够优雅——在今天这个时代还像过去那样重要吗?既然现在修改代码和重写代码的成本已经因为 AI 的出现而变得极其低廉,如果一段代码结构混乱、面目可憎,但它确实能够百分之百跑通所有的测试,我们还有必要去纠结它的优雅性吗?

在这一点上,Uncle Bob 的态度却展现出了出人意料的强硬。他明确指出,代码本身的整洁度非但没有因为 AI 的到来而降低重要性,反而变得比过去任何一个时期都要关键得多。而这背后的原因,直指智能体的认知天花板:糟糕、混乱的代码不仅会极大地拖慢人类开发者的理解速度,同样也会给大语言模型带来灾难性的“认知过载”。Bob 坦言,他曾在日常开发中多次亲眼目睹,智能体由于面对自己前几次交互中拼凑出来的烂代码,被其混乱的结构、模糊的上下文和冗长的方法体彻底困住,在原地反复修改、折腾了数个小时也无法解决一个简单的 Bug。最终,还是必须由他本人亲自介入,用人类的抽象思维把这一团乱麻重新理顺重构,AI 才能继续往下推进。这表明,AI 同样不具备处理“屎山代码”的神奇能力。因此,他在脚手架配置中,会对函数长度、圈复杂度以及测试覆盖率等指标设置极其严苛的硬性限制,在源头上掐断智能体生产劣质结构的可能性,确保智能体在后续的协作中能够保持长期的丝滑和敏捷。

将两派的观点拼凑起来,我们不难发现这其实是软件工程在面对生产力大爆发时产生的分化。要读代码的米切尔·桥本一派,捍卫的是传统工程学对于实体掌控的责任与专业精神,警惕的是效率诱惑下的责任退化;而不读代码的 Uncle Bob 一派,则倡导用先进的质量保障体系去适配生产力的飞跃,解放人类在机械重复性劳动中的精力。

这场论战之所以能够掀起如此狂澜,是因为它戳破了软件工程长久以来的一个终极谜题:你手里正在编写的这些代码,对你来说究竟有多重要?

长久以来,我们都习惯性地高估了自己写出来的每一行代码的绝对价值。但在实际的商业世界中,代码的重要性其实分布在一条极长的工作光谱上。光谱的最高端,是那些一次性的实验性代码,比如为了整理一下本地杂乱的文件而顺手写的一个脚本,或是为了验证某个技术细节是否可行而临时拼凑的 Demo,它们在跑过一次、得出结论之后就会被立刻丢进垃圾桶。而光谱的最底端,则是那些运行在心脏起搏器、民航客机飞行控制系统、或是国家级金融清算中心里的核心代码,这些代码一旦出现哪怕一个比特的错误,都可能直接导致人员伤亡或灾难性的经济崩溃。

我们绝大多数开发者在日常工作中所编写的代码,实际上都分布在这两个极端之间的模糊地带。我们一方面在主观上赋予了它们极高的崇高感,另一方面却忽视了一个冷酷的现实:在 AI 时代,我们已经拥有了生产海量“廉价代码”的能力。

网络知名开发者、t3.gg 的创始人 Theo 提出了一个极其敏锐的视角。他指出,当前绝大多数软件工程师在实际工作中,阅读和审查代码的时间比例实际上是严重过载的,而他们所生成的代码量却远远没有达到 AI 时代应有的饱和状态。我们应该做的是学会从 AI 极速生成的代码中榨取尽可能高的商业和技术价值,而不是顽固地把宝贵的时间消耗在逐行对齐缩进和拼写检查上。

Theo 提出了一个极具颠覆性的思路:如果你的项目真的非常重要,重要到不容许出任何差错,那么你反而更应该让 AI 去生成成千上万行一次性的、临时的验证代码,去全方位、高强度地测试那些真正核心的业务逻辑。

这个思路和 Uncle Bob 的约束理论在底层逻辑上完成了合流。在过去的经典软件工程时代,编写代码的成本非常昂贵,这导致编写测试用例的成本同样居高不下。为了验证 10 行核心业务代码的正确性,如果需要开发人员手写 1000 行测试用例去覆盖各种边缘情况,这在商业公司的人力成本核算上通常是完全无法接受的。因此,在那个“代码昂贵”的旧世界里,依靠人眼去逐行阅读和审查,是性价比最高、最经济的质量防御手段。

但在今天这个新世界里,规则被彻底改写了。代码的生成成本已经无限逼近于零。让 AI 在几秒钟内吐出 1000 行针对某一接口的压力测试、边缘情况覆盖和变异测试代码,其边际成本可以忽略不计。既然如此,我们为什么不转变思维,用 1 万行廉价的、一次性的、用完即弃的 AI 测试代码,去死死地围剿和保护那 10 行真正由人类设计、绝不能出错的生产环境核心代码呢?这种事情在过去是研发预算的灾难,但在今天,它不过是举手之劳。

在旧时代,一个普通的程序员可能一生都很难去为项目专门定制一套静态分析(Static Analysis: 在不运行程序的情况下进行代码分析的技术)规则,也极少有资源去针对每一次偶发的 Bug 编写专门的运行时分析器,或者去为了探测系统的极限而大费周章地在云端部署一套复杂的分布式压测环境。而在今天,这些曾经奢侈的工程手段都已经成为了随手可得的平价消费。AI 可以瞬间为你当前的任务生成专属的 Lint 工具,也可以在几分钟内写好所有的压测脚本并自动调用云端 API 跑完测试。

当代码本身的生产和废弃成本低廉到这个地步时,它在软件工程中的语意早已发生了本质的变化。代码不再等同于最终必须打包上线、供用户使用的那个神圣不可侵犯的产物。它可以是探测器,可以是沙盘里的假想敌,可以是用来回答你脑海中某个技术疑惑的临时实验工具。这些代码不需要写得多么漂亮,不需要符合任何《代码整洁之道》的审美,用完就可以立刻删掉。它们唯一的历史使命,就是以它们廉价的肉身,去为人类开发者脑海中那一点点高贵的创意和逻辑提供最坚实的验证。

如果我们可以做一个数字化的保守估计:假设一名优秀的工程师,在今天每天仍然坚持只手写并精细化审查 80 行最核心、最具有业务创造力的骨干代码,并对这 80 行代码保持最严苛的人工审查标准;但与此同时,他调用 AI 智能体,生成了 8000 行测试和模拟代码去从各个不可意料的刁钻角度对这 80 行核心代码进行疯狂的“轰炸”与测试。这 8000 行代码永远不会进入主分支,也不会部署给最终用户,但它们却帮助这 80 行核心代码排除了绝大多数隐秘的 Bug。在这个过程中,人类不仅没有因为“不读代码”而丧失责任,反而将系统整体的健壮性提升到了前所未有的高度。

这才是软件工程范式在 AI 时代发生的深刻重构。我们不应该抱着“所有代码都必须由人类逐行阅读”的旧教条,把自己困在效率的底层。学会用大量廉价、自动化的代码去保卫和成就那极少数昂贵、核心的代码,构建起与这个生产力爆发时代相匹配的全新工程方法论,这并非是对品质的妥协,而是生产力跃迁后的必然选择。

所以回到我们最开始提出的那个争议性话题:在AI编写代码已经成为常态的当下,人到底要不要读它所生成的代码?或许,这个问题本身的提问方式就已经过时了。不是所有代码都值得你投入同等宝贵的时间精力去逐行审视,也不是所有场景都适用千篇一律的质量控制模版。真正关键的考量,并不在于你肉眼读过了多少行由 AI 拼接出来的代码段,而是在于你是否建立起了一套与 AI 协同开发时代相适配的、更高级的软件工程方法论。你需要清晰地感知并界定,哪些核心代码需要你倾注百分之百的工匠精神去逐字雕琢与审视,哪些辅助逻辑可以安全地托管给严密的自动化约束流水线进行交叉验证,而又有哪些代码从被生产出来的那一秒起就是为了被无情抛弃的。

这场围绕着“读与不读”的行业大论战,至今也没有一个完美的标准答案,而且可以断言,在未来也绝不会有任何一个放之四海而皆准的统一范式。不同的业务背景、不同的团队成熟度、不同的系统风险等级,原本就应当孕育出各具特色的协同策略。但我们必须向每一位身处这个技术变革漩涡之中的开发者发起叩问:如果当手写代码与生成测试的边际成本都已经无限趋近于零时,你今天所固守的那套研发习惯与工作方式,真的能配得上这个滚滚而来的全新AI工程时代吗?

📌 文中提及的人物和组织