跳到主要内容

断裂的学徒制:当 AI 吞噬琐事时,如何重建工程师技能阶梯

· 阅读需 10 分钟
Tian Pan
Software Engineer

几十年来,从初级工程师到高级工程师的晋升之路都要经过一堆枯燥乏味的工作。你修正了错误信息中的拼写错误。你为别人编写的函数编写了单元测试。你在凌晨 2 点追踪一个贯穿四层调用栈的空指针,并从切肤之痛中学会了防御性检查存在的意义。没有人专门设计这种课程。它的出现是因为廉价、低风险的任务恰好是培养判断力所必需的任务。

这套课程正在被删除。过去用来培训初级工程师的工作——样板代码、初稿、琐碎的 Bug 修复、测试脚手架——现在成了我们交给智能体(Agent)的工作,因为它们廉价且高效。我们在优化掉繁杂工作的同时,却没有意识到它也是课堂。结果是技能阶梯缺失了底部的横木:我们顶部依然有高级工程师,底部有 AI,而中间原本形成中级判断力的鸿沟却在不断扩大。

这不是一个通过发布更多入门级职位需求就能解决的招聘问题。这是一个学习问题。那些曾经起到教学作用的任务消失了,而剩下的任务——审查智能体的输出、分解模棱两可的问题、决定 构建什么——都是我们过去认为人们必须赢得资格才能去做的难题。如果你想在 2032 年拥有高级工程师,你就必须刻意去制造那些过去纯属偶然产生的经验。

学徒制曾隐藏在琐事之中

关于脚手架的一点是,直到你拆除它,你才会意识到它是承重的。一个写第十个 CRUD 接口的初级工程师学习的并不是如何写 CRUD 接口——他们在写第二个的时候就学会了。他们正在吸收周围的语境:这个团队如何命名,为什么重试逻辑看起来疑神疑鬼,当迁移脚本针对生产数据量而非种子数据运行会发生什么。接口只是借口。学习才是留下的残余。

Anthropic 将忽略这种“残余”带来的后果进行了量化。在一项随机对照试验中,52 名初级工程师学习了一个陌生的异步 Python 库,其中一半手动操作,一半由 AI 辅助。之后,手动编码组在理解力测试中得了 67% 的分数;AI 辅助组得了 50% ——几乎低了两个等级,效应量巨大(Cohen's d=0.738, p=0.01)。最大的差距体现在 调试 问题上,而这正是区分一个能写代码的人与一个值得被托付生产系统的人的核心技能。

这个差距就是破碎学徒制的缩影。两组都交付了可运行的代码。但只有一组理解了它。而在现实世界中,理解力的缺失不会体现在演示(Demo)中——它会在六个月后,当某些东西崩溃而“编写”它的人没有心理模型进行调试时显现出来。我们正在产出能够生成自己无法维护的代码的工程师,并称之为生产力的胜利。

劳动力市场正在放大这种效应。自 2022 年以来,入门级工程职位的发布量大幅下降——估计降幅在 28% 到某些细分领域的 2/3 之间——而 22-25 岁开发者的就业人数较 2022 年底的高峰下降了约 20%。公司里初级员工越少,意味着登上阶梯的人就越少,而那些确实被录用的人所进入的职位,其练习任务也已被自动化。人才管道在入口处变窄,而内部的培训也被掏空了。

“瘢痕组织”不会在没有摩擦的情况下形成

高级工程师拥有一种难以言表的特质:一种对系统何处会崩溃的直觉。他们能在代码审查中嗅出竞态条件(Race Condition),感觉到缓存失效策略会出问题,察觉到 API 契约过于松散。这不是你可以通过文档传递的知识。这是从被“坑”的经历中建立起来的模式识别——一位工程作家恰如其分地将其称为“瘢痕组织”(Scar tissue)。

瘢痕组织需要伤口。你通过上线一个导致计费运行出错的错误,从而对逐一错误(Off-by-one error)产生发自内心的敬畏。你通过在那些出错会产生后果的情况下反复犯错,学会了不盲目乐观地对待边界情况。摩擦 就是 教训。当智能体抹平了摩擦——生成了你本会忘记的边界检查,处理了你没想到的边缘情况——它也移除了解放你、教会你自己去思考这些问题的反馈闭环。

Anthropic 的研究从另一个方向也发现了同样的结果。那些 保留了 学习效果的模式都涉及持续的认知投入:生成代码然后审视它(“先生成后理解”),在获取输出的同时要求解释,或者只问概念性问题并独立解决实际错误。而摧毁学习效果的模式则是那些无摩擦的模式——纯粹的授权委派、迭代式的“直接修好它”式的调试、递进式的依赖。事实证明,努力甚至是挣扎,才是有效成分。舒适则是毒药。

这就是为什么“初级员工会更快学会高级技能”只是一个听起来很美好但大多并非事实的故事。你无法直接跳到架构判断。架构判断是从数以千计关于代码实际行为的微小、具体的经验中 编译 而来的。移除这些具体的经验,你不会得到一条通往高级工程师的捷径——你只会得到一个能流利谈论系统,却完全不知道自己所说的是否正确的人。

有意识地重建阶梯

如果学徒制不再是免费的午餐,你就必须为其制定预算。这意味着要将技能培养视为一个显性的预算项,而不是分配任务单时的副产品。从那些开始认真对待这一问题的团队中,正涌现出几种模式。

将阅读代码定为核心活动。 当 AI 编写了大部分代码时,稀缺的技能就变成了批判性地“阅读”代码——如果你从不练习阅读非本人编写的代码,这种技能就会萎缩。一些团队已将其正式化为“提示词与代码审查”:初级工程师不仅要提交智能体的输出,还要记录他们使用的提示词,并为接受或拒绝返回结果的理由进行辩护。审查的对象从“你写的代码”转变为“你行使的判断”。这样即使智能体编写了语法,工程师仍然是推理过程的作者。

在低风险场景中有意引入阻力。 “先手动,后 AI”的规则——先尝试自己解决问题,然后再与智能体生成的结果进行对比——能将智能体从“拐杖”转变为“陪练”。代价是多花几分钟,回报则是弥合了理解上的鸿沟。将此与解释模式或“学习”模式结合使用,在这些模式下,AI 被配置为教学而非仅仅给出答案。目标不是禁用工具,而是将人类的认知参与度保持在学习发生的阈值之上。

让初级工程师负责完整的问题,而非碎片。 传统的学徒制会分派子任务,因为初级工程师只能处理子任务。既然现在智能体可以处理子任务,那么初级工程师能承担的最高杠杆的事情就是负责一个微小但“完整”的问题——包括模糊的需求规范、设计权衡以及出错的后果。所有权创造了责任感,从而将练习转化为教训。

保护资深工程师的带教时间,并将其纳入统计。 在被掏空的职业阶梯中,最残酷的动态是:被用来证明削减初级员工人数合理的生产力提升,同时也给资深工程师加载了更多的交付任务,让他们没有余力去教学。如果带教是隐形劳动,它会首先被牺牲。让它变得显性:知识共享、设计审查和结构化的结对编程,是经验在拥有它的人离职前得以传递的方式。将 AI 带来的红利的一部分花在教学上,而不是仅仅用于交付更多功能。

这是一个投资决策,而非慈善

对这一切最强烈的反对意见是经济层面的:既然“智能体 + 资深工程师”在“今天”更快、更省钱,为什么还要培养初级工程师?诚实的回答是,只有当你忽略时间维度时,这个等式才成立。你所依赖的每一位资深工程师都是由你未曾付费的学徒制培养出来的——他们是通过前任雇主建立的阶梯成长起来的。如果整个行业同时停止建设阶梯,资深工程师的供应不仅会停滞,还会发生倒挂,因为老一辈会退休,而新人无法补位。

如果框架正确,招聘初级工程师是研发(R&D),而不是开支。你买的不是本季度的交付速度,而是五到七年后资深工程师群体的存在——那些能够监督智能体、发现它们自信的错误、并做出任何模型都无法被信任独立完成的架构决策的人。那些将其视为可以优化掉的成本的公司,在现有的资深工程师达到退休年龄时将会发现,他们已经吃掉了自己的种子粮。

还有一个更隐秘的风险。在 AI 世界里,让资深工程师变得有价值的恰恰是 AI 所缺乏的判断力:知道看似合理的答案何时是错误的,需求规范何时是不连贯的,优雅的解决方案何时会在实际负载下崩溃。这种判断力是历经磨炼的学徒期的产物。一个将学徒期自动化掉的行业,正在自动化掉它声称只有人类才能提供的核心能力。

繁琐的工作已经消失,而且不会再回来——也不应该回来。但是,繁琐工作所承载的“功能”——通过阻力和后果培养判断力——并非可选项。我们可以有意识地重建它:通过批判性的代码阅读、重新引入的磨练、真正的所有权和受保护的带教。或者,我们可以任由底层的梯级腐烂,然后在几年后发现,再也没有人记得该如何攀登。这个选择就在当下,在每一次招聘决策和每一个分配的任务单中。

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