这不是一篇贩卖焦虑的文章,也不是一碗“拥抱变化”的鸡汤。我想聊的是一个更本质的问题:在AI重塑软件开发的过程中,我们对自身职业身份的认知,是否从一开始就存在偏差?
一、一个反直觉的观察
2024年到2025年,我身边出现了一个有意思的分化现象。
一部分程序员开始大量使用Copilot、Cursor等AI编程工具,生产力确实提升了——他们写boilerplate的时间少了,查文档的频率低了,甚至一些中等复杂度的功能模块可以在对话中直接生成。他们很兴奋。
另一部分程序员也在用这些工具,但他们的反应截然不同。他们说:“AI写的代码我要花同样的时间去review,有时候改它的bug比自己写还慢。”他们很焦躁。
有趣的是,这两类人的技术水平没有明显差异。真正的差异在于——他们对“编程”这件事的理解不同。
前者把编程视为解决问题的手段,AI是更快的手段,自然欣然接受。后者把编程视为手艺本身,AI的介入像是有人在替木匠握住了刨子——技术上可行,但总觉得哪里不对。
这两种心态都合理。但在讨论“AI能否取代程序员”之前,我们需要先搞清楚:程序员的核心价值到底是什么?是写代码,还是别的什么?
二、一个危险的等式:程序员 = 写代码的人
很多关于“AI取代程序员”的讨论,默认了一个前提:程序员的工作就是把需求翻译成代码。如果这个前提成立,那AI确实在快速逼近甚至超越人类的翻译能力,恐慌就是合理的。
但这个前提本身就有问题。
回忆一下你最近一个月的工作。真正坐下来、心无旁骛地写代码的时间占比多少?我猜大部分人的答案在20%到40%之间。剩下的时间呢?
- 跟产品经理反复确认“这个‘大概’是什么意思”
- 在三种技术方案之间权衡,每种都有说不清道不明的各有所长
- 调查一个只在特定条件下出现的生产环境bug,最后发现是上游服务的某个未文档化的行为
- 说服团队负责人某个技术债务已经到了非还不可的地步
- 在code review中解释“为什么不能这样写”——不是语法错误,而是这种写法会在半年后埋下一颗定时炸弹
这些工作的本质不是“写代码”,而是在不确定性中做决策。
需求是模糊的,约束是隐含的,上下文是动态变化的,利益相关方的诉求是矛盾的。程序员的真正工作,是在这堆混沌中找到一条可行路径,然后——顺便——把它表达成代码。
代码只是最终的输出形式,就像建筑图纸只是建筑师思考的外化。你不会说AutoCAD取代了建筑师,即使它确实取代了制图员。
三、AI真正擅长的,和它假装擅长的
承认AI的能力边界不是保守,而是务实。
AI真正擅长的事情:
- 模式匹配与复现。写过一万遍的CRUD接口、标准化的数据校验逻辑、常规的单元测试——这些高度模式化的工作,AI做得又快又好。
- 知识检索与整合。“Go语言里怎么实现优雅关闭?”“Spring Security的OAuth2配置怎么写?”——AI可以在几秒内给出比你翻半小时文档更完整的答案。
- 局部代码优化。给它一个函数,让它重构、提升可读性、补充边界条件处理,它通常做得不错。
AI假装擅长,但其实很脆弱的事情:
- 系统级设计决策。微服务怎么拆分?这个状态应该放在客户端还是服务端?缓存策略怎么定?这些问题没有标准答案,取决于团队规模、业务阶段、历史包袱、运维能力等一系列AI无法充分感知的上下文。
- 需求的二次消化。产品经理说“我想要一个类似抖音的推荐功能”,这句话背后可能有十种不同的含义。真正的需求往往不在文档里,而在会议室的第三轮争论中才逐渐浮现。
- 跨团队协作中的博弈与共识。“这个接口应该由谁来维护?”“出了问题算谁的?”——这些不是技术问题,但程序员每天都在处理,而且处理得好不好直接影响项目成败。
- 对“足够好”的判断。工程不是学术研究,不追求最优解。什么时候该妥协,什么时候该坚持,什么时候该承认“这个方案不完美但现在够用了”——这种判断力来自经验、直觉和对业务的理解,很难形式化。
简单来说:AI可以生成代码,但它不理解为什么要生成这段代码而不是那段,至少现在——或者短时间内不能。它缺少的不是能力,而是意图。
四、真正会被淘汰的,不是程序员,是“人形编译器”
说句不太好听的话:如果你的日常工作可以被精确地描述为“接收明确指令 → 翻译成代码 → 提交”,那你面临的风险确实是真实的。
但这不是AI的问题,这是分工模式的问题。
在软件行业的某些角落,确实存在一种工作模式:上游把需求拆得极细,细到接近伪代码的程度,然后交给下游“编码”。在这种模式下,程序员本质上是一个高级翻译器——输入是自然语言描述的逻辑,输出是特定语言的实现。
这种岗位在AI出现之前就已经在萎缩了。低代码平台、标准化框架、成熟的脚手架工具,都在压缩纯编码环节的人力需求。AI只是加速了这个已有的趋势。
真正安全的(或者说,真正有价值的)程序员,是那些工作中“不可言说”部分占比很高的人。
什么叫“不可言说”?就是你很难在Jira ticket里写清楚、很难在交接文档里说明白、很难让另一个人(或AI)无缝替代的那些东西:
- 对系统全局的心智模型——“改这个地方会影响哪里”
- 对技术选型的历史背景理解——“当初为什么选了这个方案”
- 对团队节奏和能力边界的把握——“这个需求不是不能做,但现在做风险太高”
- 对代码库中隐性规范的熟悉——“我们这里不这样写,虽然也能跑”
这些东西构成了一个程序员的工程判断力。它不在简历上,不在GitHub上,甚至不在代码里。但它决定了一个项目是顺滑地推进还是反复返工。
五、一个被忽视的悖论:AI越强,对人的要求越高
很多人以为AI工具的进步会降低编程的门槛,让更多人可以“不懂技术也能写软件”。短期看确实如此。但长期看,这里面有一个反直觉的动态:
当AI可以快速生成大量代码时,瓶颈就从“写代码”转移到了“判断代码”。
你让AI生成一个完整的后端服务,它可以在几分钟内给你几百行代码。但是:
- 这段代码的错误处理覆盖了哪些边界情况?遗漏了哪些?
- 它的并发模型在高负载下会不会出问题?
- 它对外部依赖的假设是否成立?
- 它的设计是否与现有系统的架构风格一致?
要回答这些问题,你需要的知识和经验不比自己从零写更少,可能反而更多——因为review别人(包括AI)的代码比写自己的代码更难。你需要理解每一个决策背后的意图,而AI不会主动告诉你“我在这里做了一个妥协,因为……”。
这就导致了一个悖论:AI让代码的生产成本趋近于零,但让代码的审查成本变得更高。能驾驭这种模式的人,必须对技术有更深而非更浅的理解。
所以,AI不是在降低程序员的门槛,而是在重新定义门槛的位置——从“能不能写出来”移到了“能不能判断对不对”。
六、我们真正该担心的事情
比起“AI取代程序员”,我觉得有几件事更值得担心:
1. 初级程序员的成长路径被截断。
过去,新手通过写大量基础代码来积累经验——在犯错中理解为什么要这样设计、为什么那样写会出问题。如果AI接管了这些“练手”的工作,新人要怎么建立基础的工程直觉?这相当于学开车时直接跳过了在空旷停车场练习的阶段,上来就走高速。
这不是杞人忧天。我已经看到一些初级开发者形成了“AI优先”的习惯——遇到任何问题先问AI,得到答案就粘贴过去,能跑就行。他们的代码是“正确”的,但他们不理解代码为什么正确。一旦遇到AI处理不了的问题,他们就陷入了僵局。
2. 技术决策的黑箱化。
当AI生成的代码越来越多地进入生产系统,而review的力度跟不上时,系统中就会出现越来越多“没有人真正理解”的部分。这不是理论风险——在复杂系统中,这类不透明区域是事故的温床。
3. 对“效率”的过度崇拜。
AI工具让我们可以更快地产出代码。但“更快”不等于“更好”。软件开发中很多有价值的活动——深度思考、慎重的设计讨论、对边界情况的反复推敲——本身就是“慢”的。如果组织文化因为AI的存在而进一步压缩这些“慢”的环节,最终产出的软件质量反而可能下降。
七、一些务实的建议
我不喜欢空谈道理而不给行动方向,所以最后说几点个人的想法:
把AI当实习生,不要当导师。 它的输出需要你来把关,而不是反过来。保持对代码的控制感——不是因为AI不行,而是因为你需要对最终结果负责。没有任何AI厂商会替你背生产事故的锅。
刻意练习“AI做不了的事”。 系统设计、技术方案的文字表达、跨团队沟通、对业务逻辑的深入理解——这些能力的稀缺性正在上升。市场供给减少的东西会变得更值钱,这是基本的经济学。
保持对底层原理的好奇心。 你不需要手写红黑树,但你应该理解数据库索引为什么在某些场景下会失效。AI可以帮你快速实现,但只有你理解原理,才能在它犯错时发现问题。
警惕“什么都能做”的错觉。 AI让个体的能力边界看似扩大了——一个人似乎可以同时扮演前端、后端、运维的角色。但“能生成代码”和“能在生产环境中可靠运行”之间的鸿沟,比很多人想象的要大得多。知道自己不知道什么,比知道什么都重要。
写在最后
回到最初的问题:AI能取代程序员吗?
我的回答是:AI会取代一部分编程工作,但不会取代程序员这个角色——前提是你对这个角色的定义不仅仅是“写代码的人”。
程序员的本质是用技术手段在约束条件下解决现实问题的人。代码只是解题过程的副产品。当AI把“写代码”这个环节的成本大幅降低后,剩下的那些——理解问题、定义边界、做出判断、承担责任——反而会成为更核心的能力。
与其焦虑“AI会不会取代我”,不如认真审视一下:在我现在的工作中,有多少比例是只有我能做的?有多少比例是任何一个有基础技能的人(或AI)都能做的?
这个比例,才是你真正的护城河。
如果这篇文章让你有所思考,哪怕只是对自己的工作方式多了一秒钟的反思,那它就没有白写。