昨天结束了我的暑期实习,刚好今天得空,就想总结一下这两个月以来的感想。
实习期间,我主要从事后端开发。除了修复一些 bug,最值得一提的工作,是完成了一个 Agent 的功能模块。最终落地的代码大约有一两千行,但如果诚实地追溯这些代码的来源,其中真正由我独立写下的,可能只有百分之二十。即使是这百分之二十,与其说是「编写」,不如说是在 AI 生成的基础上不断修改、删减、重组和校正。
换句话说,这个模块的大部分代码都是 AI 完成的。
真正让我震惊的,是 AI 已经如此深入地嵌入企业的软件开发流程。过去需要开发者花费数日查阅文档、编写样板代码、寻找 API 和反复调试的工作,现在往往只需要几轮对话。至少就我个人的体验而言,许多过去需要花费数小时完成的任务,现在只要向 Codex 交代几句,它就能自行完成。至于单纯比较写代码的能力,人更没有多少优势。AI 掌握的编程语言、开发框架和软件库远多于任何一个普通人,也不会疲倦,不会厌烦重复劳动,更不会因为深夜注意力下降而漏掉一个括号。
AI 的迅速发展固然令人兴奋,但也让人不安。现在开发时,我仍然会习惯性地 review 一下 AI 生成的代码。不过实习期间,我的 mentor 和同事闲聊时也会笑称:「现在都是纯 AI 开发,感觉古法编程已经落后了。」
事实确实如此:代码已经失去了它的稀缺性。
从 Vibe Coding 到真正的工程
2025 年,Andrej Karpathy 提出了一个迅速流行起来的说法:Vibe Coding。按照他最初带有自嘲意味的描述,开发者几乎不再阅读代码改动,而是不断向大语言模型描述需求、复制报错信息,再接受它给出的修改,直到程序看起来可以运行。
这个词之所以流行,不只是因为它幽默,更因为许多人确实第一次体验到:一个人可以不再逐行书写程序,而是通过自然语言与机器协商,最终「说出」一个软件。
但 Simon Willison 很快提醒人们,Vibe Coding 不应该被用来指代所有由 AI 辅助的编程。严格来说,只有当开发者放弃理解代码,接受自己并不知道程序为何能够运行时,才是在 Vibe Coding。一个工程师完全可以大量使用 AI,同时坚持阅读关键代码、运行测试、验证行为,并为最终结果负责。
两者的区别不在于使用了多少 AI,而在于人是否仍然理解并控制着系统。
Fred Brooks 在《No Silver Bullet》中将软件开发的困难区分为偶然复杂性(accidental complexity)与本质复杂性(essential complexity)。语言烦琐、工具难用、重复编写样板代码,属于能够被更好的工具逐渐消除的偶然复杂性;理解真实需求、组织复杂系统、协调彼此冲突的约束,则属于软件本身的本质复杂性。
AI 正在以前所未有的速度压缩前者,却没有让后者随之消失。它只是让我们更快地抵达了真正困难的部分。
甚至「AI 必然提高生产效率」也没有想象中那么容易证明。METR 在 2025 年的一项随机对照实验中发现,熟悉大型开源代码库的资深开发者使用 AI 后,完成任务反而慢了约 19%。不过到了 2026 年,METR 使用新一代 Coding Agent 进行的后续实验已经显示出加速趋势:原有开发者的点估计约为 18%,新招募开发者约为 4%。只是由于大量依赖 AI 的开发者和任务退出了实验,样本出现了严重的 selection bias,METR 认为这些数据还不足以可靠估计 AI 当前带来的效率提升。
这两轮结果放在一起,至少说明了一件事:AI 的进步速度极快,但软件开发的生产效率远比「生成了多少代码」更难衡量。阅读实现、验证行为、修复隐蔽的 bug,以及同时管理多个 Agent,都不会简单地反映在代码行数或单项任务耗时里。
在 Hacker News 上,人们也反复表达一种担忧:代码的生成速度已经开始超过人类的审查速度。如果一个团队的每位工程师都能制造原来五倍的代码,那么团队也同时获得了五倍需要理解、测试和长期维护的对象。
代码本身并不天然是一项资产。真正创造价值的是它实现的功能,而代码还意味着维护、安全、迁移、可观测性和技术债务。AI 降低了代码的生产成本,却没有按同样的比例降低理解和维护代码的成本。
过去我们担心写不出足够多的代码;以后我们更需要担心,生产了太多没有人真正理解的代码。
程序员真正生产的不是代码
1985 年,Peter Naur 在《Programming as Theory Building》中提出,编程的核心并不是生产源代码,而是在开发者头脑中建立一套关于系统的「理论」。
所谓理论,并不是一份文档,也不是一张架构图,而是开发者对整个系统的理解:为什么系统要这样划分,某个约束从何而来,哪些不变量不能破坏,当需求发生变化时应该修改哪里,以及为什么一种看似自然的实现过去曾被放弃。
代码只是这种理论不完整的外在记录。
Peter Naur 指出,即使把完整的源代码和文档交给另一支团队,新的团队也未必能够顺利维护系统,因为真正关键的知识并没有全部存在于文字中。它还存在于设计时的争论、失败过的方案、代码审查中的解释,以及开发者长期形成的隐性知识之中。
这也解释了 AI 编程今天面临的核心问题。
AI 可以读取代码库,却未必拥有代码库背后的完整理论。它看到某个函数应该如何修改,却不知道为什么过去的开发者宁愿接受一处重复,也不愿建立某种抽象;它可以按照任务描述完成功能,却未必知道任务本身遗漏了什么。至于系统半年以后是否仍然容易维护,也不在它需要承担的后果之中。
因此,工程师的价值从来不只是把需求翻译成语法。真正困难的是理解系统,再依据这种理解作出判断。
这种理解并不只体现在复杂的架构设计中,也体现在许多最基础的问题里。我并不认同网上所说的「CS 已经没有必要学了」。一个对计算机基础知识几乎一无所知、完全依赖 Vibe Coding 的人,确实可以做出一个能够运行的程序,但也很容易遇到各种问题:不知道什么是 Git,不明白为什么 localhost:8080 别人无法访问,也不知道为什么程序在本地运行正常,部署到服务器后却会出错。
归根结底,代码只是实现目的的一种方式。真正重要的是如何设计系统,如何判断哪些功能值得实现,以及如何在性能、安全、成本和 robustness 之间作出 trade-off。这些问题通常没有标准答案,也很难完全交给 AI。它们既需要基础知识,也需要在实践中逐渐形成的经验和直觉。
也正是在这里,我开始重新思考大学教育。如果 AI 时代真正重要的是基础知识、系统理解和判断力,那么大学本应是培养这些能力的地方。
然而实习之后,我越来越强烈地感到,大学在我的成长中所发挥的作用近乎为零。
大学失效了
这并不是因为大学教授的知识不重要。恰恰相反,AI 越强大,理解基础知识越重要。真正令我失望的是,大学占用了学生大量时间,却没有真正把这些知识教会学生。
许多课程仍然依赖多年不变的课件、与实际问题脱节的作业,以及以记忆为主的考试。学生在考前背下一组定义,考完以后迅速忘记;教师讲完了教材,却很少解释这些概念为何产生、解决了什么问题,又付出了怎样的取舍。最后,课程完成了,学分拿到了,但学生并没有真正理解这门学科。
Alfred North Whitehead 在《The Aims of Education》中将这种从未被使用、检验或重新组合的知识称为「惰性知识」(inert ideas)。他认为,充斥惰性知识的教育不只是无用,而且有害,因为它让人把记住结论误认为理解知识。
一百多年过去,许多大学仍在大规模生产这种惰性知识。
这并非只有个人感受。2014 年发表于 Proceedings of the National Academy of Sciences 的一项 元分析 汇总了 225 项 STEM 教学研究。结果显示,相比传统讲授,active learning 能显著提高考试成绩;接受传统讲授的学生,课程不及格的概率约为前者的 1.5 倍。
我们早已知道,单向灌输并不是更有效的教学方式。但许多大学仍然选择它,因为它最容易复制,也最节省成本。
AI 的出现,只是让这种教育更加难以自我辩护。如果课堂的作用只是传递事实、解释概念和提供标准答案,那么 AI 显然可以完成得更快、更全面,也更有耐心。它可以随时回答问题,根据学生的程度调整解释,还可以在几秒钟内生成例子、练习和反馈。相比之下,照着课件念完一学期,几乎没有多少不可替代的价值。
今天,不少大学对 AI 的主要反应仍然是检测、禁止和处分,却很少追问一个更根本的问题:如果一份作业可以被 AI 在几分钟内完成,那么它原本究竟在考察什么?
如果论文只要求复述教材,它当然可以由 AI 代写。如果编程作业只是模仿课堂上的模板,它当然可以由 Coding Agent 完成。如果考试只奖励对固定步骤的复现,学生自然会寻找成本最低的方式获得答案。
AI 不是大学教育危机的原因,而是一场压力测试。它最先淘汰的不是优秀的教育,而是那些原本就可以被机械完成的部分。
真正有价值的教育,需要教师重新设计课程,需要小规模讨论和持续反馈,也需要教师真正阅读学生的工作。但这种教育很昂贵。相比之下,重复使用往年的课件、布置模板化作业,再组织一次标准考试,显然更加便宜。
所以问题或许不在于大学不知道什么是好的教育,而在于它是否真的愿意为本科教育支付成本。
大学还剩下什么
John Henry Newman 在《The Idea of a University》中为通识教育辩护时认为,大学的目的并不只是训练一种职业技能,而是培养一种能够从整体上理解不同知识的思维习惯。
这种说法在 AI 时代反而比过去更有意义。
当信息稀缺时,大学的重要权力来自保存和传递知识。现在,获得信息已经不再困难,大学存在的正当性只能来自另外一些东西:系统性的思维训练、严肃的学术共同体、来自教师和同伴的反馈,以及一段不完全受即时功利支配、允许年轻人形成自身判断的时间。
然而现实中的许多大学,既没有守住 Newman 所说的心智培养,也没有做好最基本的职业训练。教育最终被压缩为学分、绩点、评奖、保研和一张文凭。学生被要求不断证明自己「完成过学习」,却很少有机会真正完成一次学习。
甚至在最基本的学习环境上,大学也未必比公司做得更好。实习期间,公司提供的工位、网络、会议空间和协作设施,往往比学校的自习室更加完善。公司至少清楚,良好的环境能够提高生产效率;而一些大学一面要求学生成才,一面却把本科教学和学生空间视为可以不断压缩成本的部分。
这当然不是因为公司比大学更加高尚。公司的目标很明确:它需要员工创造价值,所以愿意为生产条件投资。大学的问题恰恰在于,它常常已经说不清自己希望学生最终成为什么样的人。
如果大学只能教授很快过时的工具知识,它自然会被 AI 和在线课程不断削弱;如果大学最终只能提供一张文凭,人们迟早也会追问:这张文凭是否值得四年时间和如此高昂的成本?
但如果大学能够训练一个人提出问题、判断证据、理解复杂系统,并在不确定中作出负责任的选择,那么它仍然具有 AI 无法轻易取代的价值。
问题只在于,今天还有多少大学在认真做这件事?
这次实习并没有让我得出「程序员即将消失」这样简单的结论。它只是让我看到,许多过去需要耗费大量时间的工作,正在因 AI 而迅速贬值。当代码和答案都可以被近乎无限地生成时,真正重要的便不再是能否给出答案,而是能否判断答案是否正确、问题是否值得解决,以及谁来承担最终的后果。
因此,我仍然会学习如何写代码,也仍然会学习操作系统、计算机网络、数据库和算法。不是因为我相信人类可以永远比 AI 写得更快,而是因为只有理解这些知识,我才有能力判断 AI 给出的答案,并为自己的选择负责。
大学面对的其实是同一个问题。当知识和标准答案不再稀缺,教育的价值便不能继续停留在知识传递上。它更应该帮助一个人形成判断世界的尺度,理解自己对他人和社会负有怎样的责任,并最终确立愿意为之生活的价值。