跳到主要内容

如何在不破坏学习路径的前提下,让工程师快速上手 AI 生成的代码库

· 阅读需 10 分钟
Tian Pan
Software Engineer

新员工在入职第三天就上线了一个新功能。团队里的每个人都印象深刻。三周后,她引入了一个 Bug,一位资深工程师只用了五个字就解释了原因:“我们不那样做。”她对此一无所知,写出那段代码的 AI 也是如此。

AI 编程助手极大地缩短了新工程师完成“首次提交”的时间。但这种速度掩盖了一个大多数团队都没有察觉到的权衡:过去那种让初级工程师速度慢下来的“代码阅读”过程,恰恰是教会他们系统如何实际运作的关键。剥离了这个过程,你得到的就是那些能够将自己不理解的功能发布到尚未内化的架构中的工程师。

问题不在于工具。而在于我们没有更新入职流程,以适应 AI 现在所做的工作 —— 以及它不再要求工程师亲自去做的事情。

AI 造成的阅读断层

传统的入职流程有一个公认的成长曲线。新工程师会花几周时间阅读代码库 —— 不是因为被要求这样做,而是因为编写任何内容都需要理解周围的上下文。他们会追踪一个从端点到数据库的请求,被命名规范搞糊涂,询问资深员工为什么要采用某种模式,并一层一层地构建起心理模型。这个过程很慢,但这也是他们学习的方式。

AI 缩短了这一曲线。当一名新工程师可以用自然语言描述一个功能并在几秒钟内获得可运行的代码时,就没有了强制阅读的机制。他们粘贴输出,运行测试,然后继续下一步。代码在“局部”是连贯的 —— 它可以编译,测试通过,逻辑在隔离状态下是合理的。但在“全局”是不一致的:命名不符合团队规范,错误处理模式与周围代码不同,抽象层次对这一层架构来说是错误的。

研究证实这并非理论。一项 2026 年的研究发现,使用 AI 生成代码的开发人员在代码理解测试中的得分比手动编码的开发人员低 17% —— 其中在调试问题上的差距最大。当开发人员完全委托 AI 生成代码时,影响最大;而当他们在使用 AI 进行概念咨询的同时亲自编写代码时,影响最小。工具本身并没有造成这种差距,过度委托才是原因。

代码质量数据进一步印证了这一局面。AI 生成的代码产生的 Issue 平均比人类编写的代码多 1.7 倍。自 AI 助手成为主流以来,代码库中的代码克隆比例从 8.3% 上升到了 12.3%。重构活动 —— 这种表明工程师对所处理的代码有足够理解并能对其进行改进的代码变动 —— 在同期从所有代码变更的 25% 下降到了 10%。

“局部连贯,全局不一致”在实践中的含义

让通过 AI 入职的工程师翻车的故障模式并不是语法错误或测试失败。而是当隔离运行正确的代码与它所处的系统不匹配时,所产生的更微妙的问题。

具体表现如下:

缺失的制度化模式。 每个成熟的代码库都有一些不会出现在文档中的惯例:错误如何呈现给用户、哪些日志级别用在什么地方、在哪个层级进行验证。AI 不知道这些,因为它们不在训练数据中 —— 它们存在于团队的内隐知识中。只写代码而不读代码的初级工程师永远无法吸收这些惯例。

衔接处的架构漂移。 AI 生成的代码只符合它被给定的局部上下文。它没有整体架构的模型。在第一周通过 AI 协助编写的模块可能会违反在代码库其他地方都遵循的关注点分离原则 —— 这不是因为工程师做出了错误的决定,而是因为他们没有足够的上下文来意识到边界的存在。

缺乏深度的调试。 当出现问题时(迟早会发生),生成代码而不是编写代码的工程师就没有调试的切入点。他们没有思考过实现逻辑,因此无法从失败中反向推导。他们只是生成了代码;而调试代码是另一项技能,生成过程并没有教会他们。结果就是,工程师们会迅速将本应在他们能力范围内的难题上报给资深员工。

不一致性的叠加。 当多个初级工程师各自独立使用 AI,每个人都产生局部连贯但全局不一致的代码时,代码库就会积累一种风格熵,这使得下一位工程师生成的 AI 代码变得更糟 —— 因为他们提供给 AI 的上下文本身就是不一致的。

在不降低交付速度的前提下恢复学习的实践

目标不是禁止 AI 工具或放慢发布速度。而是要有意识地重建被 AI 取代的学习过程,且不退回到旧有的节奏。

在首次提交前进行结构化代码考古。 在新工程师编写任何代码之前,分配给他们一个特定的系统去追踪 —— 不是随机阅读,而是带着问题去追踪。“追踪功能 X 的 API 请求,从网络边界到数据库再返回。记下每一个让你感到惊讶的决定。”这个问题迫使他们进行主动阅读而非被动扫描。资深工程师会评审他们的记录,不是为了纠正错误,而是为了增加上下文:“这个模式的存在是因为 2024 年发生的事故 Y。”这种交接编码了任何文档都无法捕捉、任何 AI 都无法生成的制度化知识。

将架构决策记录(ADR)作为入职材料。 ADR —— 记录架构决策及其背后推导过程的简短文档 —— 通常是为未来的架构师编写的。但对于初级工程师来说,它们作为入职材料同样有价值。如果一个工程师阅读了关于团队为什么在库存系统中选择最终一致性及其权衡的 ADR,他会比只阅读代码本身更能理解系统。那些投资于叙事性架构文档(解释系统的形态和逻辑,而不仅仅是结构)的团队,一致反映入职速度更快且理解更深。

有意识的代码阅读仪式。 将代码阅读融入团队节奏,不要把它当成苦差事,而是一种实践。每周进行一次 30 分钟的会议,团队一起阅读代码库的一个片段 —— 最好是编写良好的部分,而不是最糟糕的陈旧角落 —— 并讨论它的功能和设计原因。这构建了共同的心理模型,并让初级工程师结构化地接触团队的惯用模式。这等同于过去初级工程师在上线速度较慢时,自然发生的非正式问答。

配对考古环节。 当新工程师需要接触他们不熟悉的代码部分时,在探索阶段(而不是实现阶段)安排一名资深工程师与之配对。该环节的目标是理解,而不是上线。资深工程师进行讲解:“这就是为什么抽象在这个层级。这是我们之前尝试过的方案。这是塑造这个接口的限制因素。”初级工程师做笔记。只有在探索环节结束后,初级工程师才使用 AI 进行实现。这保留了 AI 的生产力优势,同时恢复了通常在较慢的无辅助实现过程中发生的知识传递。

约束 AI 输出的可执行标准。 那些在利用 AI 价值的同时避免一致性问题的工程团队,是那些直接将标准编码进工具中的团队。这意味着使用自定义指令来指定团队的命名规范、首选库、错误处理模式和架构约束。当 AI 在这些约束开启的情况下生成代码时,局部连贯和全局不一致就会趋于统一。这并不是学习问题的终极解决方案 —— 工程师仍然需要理解他们所执行的规范 —— 但它减少了“我们不那样做”的情况,并让团队的模式在工具本身中变得可见。

招聘与导师制度的重构

一些工程领导者针对这一问题的对策是减少初级工程师(junior)的招聘——这种本能反应虽然解决了短期的代码一致性问题,却制造了长期的组织架构难题。如今能担任导师的工程师也曾是初级开发者,在摸爬滚打中成长。如果通过实践学习的初级人才管道枯竭,那么了解底层逻辑的高级工程师(senior)人才库也将随之枯竭。

更好的重构思路是更新对初级工程师的职责定义以及第一年的考核方式。标准不再是“你能否快速编写语法正确的代码”,那个问题已经被解决了。新的标准是:

  • 你能否验证并推敲那些非你亲手编写的代码?
  • 当 AI 的输出错误时,你能在不依赖生成工具这种“拐杖”的情况下进行调试吗?
  • 你能否阅读代码库并建立起准确的架构心理模型?
  • 你能否向 AI、文档或高级工程师提出正确的问题——因为你对该领域有足够的了解,知道自己不知道什么?

这些技能在面试中更难评估,但正是它们区分了那些能成长为资深贡献者的工程师,以及那些永远依赖 AI 去完成自己并不完全理解的工作的人。

未来两年的景象

如果团队将 AI 辅助的入职流程视为没有任何权衡的纯生产力提升,那么在接下来的两年里,他们将不得不面对代码库中不断堆积的不一致性,其速度将远超任何工程师理解或清理的能力。而那些将其视为需要刻意学习投入的生产力提升的团队,将培养出既能流畅使用 AI,又能理解 AI 行为逻辑的工程师。

工具将持续进步。随着模型在理解架构约束方面能力的提升,AI 生成的代码将变得更加一致。但局部连贯性与全局理解之间的鸿沟并非模型质量问题,而是组织内部的知识传递问题。任何模型的改进都无法弥合这一鸿沟,唯有刻意练习才能。

那个在入职第三天就能交付代码,并在第三十天理解了自己交付内容的人,才值得你围绕其组建团队。

References:Let's stay in touch and Follow me for more thoughts and updates