编者按:
在“AI 会不会取代程序员”的讨论声中,这篇文章提供了一个更有历史纵深的视角:AI Coding 本质上可能是计算机发展历史中又一次抽象层的升级,而我们正处在新的概念体系尚未成型、旧的抽象层已经松动的“真空期”。文章从下一代人才培养的路径断裂这一痛点切入,逐步展开对 AI 时代程序员所需素养以及未来软件工程的思考。
最近跟不少公司的研发 leader 聊 AI 时代下面人才的培养。然后大家都比较悲观,一个越来越常见的判断是:
年轻程序员可能最危险。
理由很直接。过去一个工程师通常从修 Bug、写 CRUD、补测试、做简单模块开始,慢慢建立工程经验。但今天,这些最适合 Junior Engineer 的工作,恰恰也是 AI 最容易完成的。
于是问题变成了:
如果这些入门工作都被 AI 做掉了,下一代程序员到底怎么成长?
但我越来越觉得,这并不是“AI 抢走初级岗位”这么简单。
从计算机发展史来看,这其实更像是又一次巨大的抽象层升级 。
真正特殊的是:这一次,能力已经跃迁了,但新的抽象层还没有稳定下来。
一、计算机发展的历史,本来就是不断跳过底层的历史
我们这一代程序员其实已经跳过了很多东西。
写 C、C++ 的时候,大多数人不会每天写汇编;写 Java、Go 的时候,也不会自己管理寄存器;写 Web 应用,不需要自己实现 TCP;用数据库,也不会自己实现 B+ Tree、WAL 或 Raft。
这并不意味着程序员越来越不懂计算机。
恰恰相反,这正是计算机工业进步的方式:
把已经解决的问题封装成新的抽象,让下一代从更高的位置开始。
机器码之上出现汇编,汇编之上出现 C,高级语言之上出现 Framework,服务器之上出现 VM、Cloud、Container 和 Serverless。
每一次抽象升级,都有人担心“基本功是不是没了”。但基本功其实没有消失,只是换了位置。
你不需要每天写汇编,但遇到性能问题时仍然要理解 CPU 和内存。你不需要自己实现数据库,但遇到一致性问题时仍然需要理解事务和复制。
所以真正重要的不是“是否亲手实现底层”,而是:
当抽象失效时,你能不能穿透它,理解下面发生了什么。
二、AI Coding 也是一次抽象升级
如果沿着这个逻辑看 AI Coding,它可能并不仅仅是一个更聪明的代码补全工具。
过去的编程关系更像:
人 → Programming Language → Computer
未来越来越可能变成:
人 → Intent → Agent → Programming Language → Computer
以前程序员直接操纵代码。未来越来越多的时候,我们操纵的是一个能够生成、修改、运行、测试代码的智能系统。
代码依然存在,就像汇编今天依然存在。但它可能逐渐从 the interface we operate 变成 the artifact the system generates 。
于是软件工程最重要的问题,也会从:
How do I write this code?
逐渐变成:
How do I make the system reliably produce the right software?
这其实已经不是同一种工程学。
三、今天最大的麻烦,是“AI 时代的 C 语言”还没出现
过去每一次抽象升级,最终都会形成稳定的概念体系。
Unix 有 Process、File、Pipe。数据库有 Table、Transaction、SQL。Cloud 有 VM、Object Storage、Function。Kubernetes 有 Pod、Service、Deployment。
一旦这些抽象稳定下来,围绕它们就会形成课程、工具、最佳实践和工程训练体系。
但 AI 时代目前还不是这样。
我们有 Prompt、Context、Memory、Tool、Skill、MCP、Sandbox、Workflow、Sub-agent、Harness、Agent SDK。
但到底哪些会成为未来真正稳定的一等抽象,现在没人知道。
甚至连一个最基本的问题都没有统一答案:
什么叫一个 Agent?
它是一个长期运行的 Process?一个按需启动的 Runtime?一个 Workflow?一个有 Memory 和 Tools 的 LLM?还是一个拥有 Identity、Memory、Files、Tools、Runtime 的新型计算实体?
今天整个行业都还在跑马圈地。
所以我们看到一个很特别的现象:
模型能力已经进入下一代,软件工程方法却还没有跟上。
模型可以生成几千行代码,但我们还没有很好地解决如何精确表达意图、如何管理长期 Context、如何定义权限边界、如何 Debug 非确定性系统,以及如何做 Agent 的测试、Eval 和 Observability。
所以今天程序员真正的不安,不只是 AI 太强。而是:
我们突然站到了一个还没有被定义的新抽象层上。
四、Junior Engineer 真正的问题,是旧的训练梯子断了
过去的软件行业其实存在一套非常成熟的隐性学徒制。
新人先写简单功能、修 Bug、做测试,再逐渐维护模块、处理线上问题、理解数据库和分布式系统,最后形成系统设计能力。
这些工作表面上是在创造产出,实际上也在训练工程直觉。
写很多 CRUD 的价值,不只是 CRUD 本身。在这个过程中,一个新人会逐渐理解边界条件、错误处理、接口设计、测试、线上环境,以及为什么一个看起来正确的改动也可能造成事故。
而 AI 最先自动化掉的,恰恰就是这些训练任务。
因此真正的问题不是:
Junior Engineer 还有没有工作。
而是:
如果他们不再通过这些工作积累经验,新的训练机制是什么?
这也是 AI 带来的一个悖论:
AI 降低了生产代码的门槛,却可能提高了成为优秀工程师的门槛。
五、AI 时代的“基本功”,可能会重新定义
我并不认为未来的小朋友还应该完全按照我们的路径,从底层一路重新走一遍。我们当年也没有先写几年汇编,才开始学 C。
抽象存在的意义,本来就是让下一代从更高的位置开始。但新的基本功可能会发生变化。
「Specification」
过去最大的困难是“我知道要什么,但不知道怎么写出来”。未来更大的困难可能是:你到底知不知道自己要什么。
当 Coding 越来越便宜,准确描述目标、约束、接口、不变量和验收条件,反而越来越重要。某种意义上, Spec 可能正在成为新的代码。
「Decomposition」
过去程序员主要把需求拆成函数和模块。未来还需要决定什么交给人、什么交给 Agent、什么可以并行、什么必须 deterministic、哪里设置 checkpoint、哪里必须人工审核。
过去我们设计代码的 control flow。未来可能更多是在设计 intelligence 的 control flow 。
「Verification」
AI 最大的问题不是不会生成,而是会高速生成“看起来正确”的东西。因此软件工程的瓶颈很可能会从 How to generate 转向 How to verify 。
测试、Invariant、Eval、Failure Injection、Security Boundary,这些能力反而会越来越重要。
「Context Engineering」
真正决定 Agent 表现的,不只是 Prompt,而是它在某个时刻到底看到了什么、记住了什么、拥有哪些工具和权限。
所以未来可能出现一种新的工程能力:为智能系统设计正确的 Context。
最后,底层知识仍然重要,但学习方式会变化。未来未必要求每个人都从零实现一个数据库,但你至少应该能够回答:
AI 生成的这个系统,在并发、Crash、Network Partition 下为什么会出错?
所以核心会逐渐从亲手实现所有东西 ,转向拥有足够强的 Mental Model,判断 AI 什么时候错了。
六、我们可能正处在 AI Programming 的“汇编时代”
如果一定要给今天找一个历史坐标,我觉得我们可能还处在:
AI Programming 的 Assembly Era。
今天大家疯狂研究 Prompt、Memory、Agent Loop、Tool、MCP、Sub-agent、Harness。
这些都很重要。但其中相当一部分,未来可能会被更高层的 Runtime、Framework 和 Protocol 吃掉,就像今天的大多数程序员不再关心寄存器如何分配一样。
所以真正值得关注的问题,也许不是:
哪一个 Coding Agent 最终会赢?
而是:
AI 时代的那个“C 语言”到底是什么?
它很可能不是一门传统 Programming Language。它也许是一组新的抽象:
Intent + Specification + Context + Tools + Memory + Policy + Runtime + Eval
它描述的不再只是“计算机应该执行哪些指令”,而是:
一个智能系统应该在什么约束下完成什么目标,以及我们如何知道它真的完成了。
如果这个判断成立,那么今天大家看起来是在竞争 Coding Agent、IDE、Agent Framework 和 Harness。
但更深一层看:
大家其实是在争夺下一代计算机的抽象定义权。
结语
所以,当我们说:
“AI 时代年轻程序员没有培养路径了。”
更准确的说法也许是:
旧的培养路径正在失效,而新的培养路径还没有被发明出来。
这并不是软件工程第一次经历抽象升级。从机器码到汇编,从汇编到 C,从 Server 到 Cloud,计算机历史本来就是一部不断向上抽象的历史。
AI 只是又把我们往上推了一层。
真正不同的是,这一次速度太快。快到新的抽象还没有形成,旧的抽象就已经开始松动。
所以我们第一次如此清楚地看到了:
一个新抽象层形成之前的混乱。
但这也意味着一个非常大的机会。
下一代程序员应该学什么,AI-native Software Engineering 应该长什么样,人与 Agent 应该如何分工,新的 Runtime、Context、Memory、Eval 应该如何组织,这些问题都还没有标准答案。
而最终定义这些抽象的人,很可能也会定义未来十年甚至二十年的软件工程。