过去这一年,AI 编程的话题几乎把每个技术社区都刷屏了。自动补全越来越强,“一句话生成一个函数”甚至“一句话生成一个页面”都成了常规操作。可越是这个时候,我身边程序员朋友的焦虑反而越重:代码都快不用人写了,我们还能干什么?
有段时间我也被这个问题困住,直到持续追更一位在 TypeScript 教育领域深耕多年的导师的内容。他在 AI 编程这个话题上拆出过五个关键问题,每个问题的回答都让我有一种“脑子被理清”的感觉。这篇文章就是把这五个问题、他的解法框架,加上我自己在实际项目里的验证心得,完整整理出来。如果你正在用 AI 工具,却又隐隐觉得哪里不对劲,这篇应该对你有用。
1. 关于“程序员会不会被 AI 替代”:先把焦虑拆成具体问题
1.1 编程工作的真正不可替代部分
这位导师的第一个观点我印象很深:大多数关于“AI 替代程序员”的讨论,都把“写代码”和“做编程”混为一谈了。写代码只是编程工作最表层的一部分,真正值钱的是另外几件事——把模糊的业务需求转换成明确的技术约束,在多个方案之间做取舍,理解运行时的真实行为而不是只理解语法,以及为长期维护负责任。
我拿自己最近的一个需求举例。产品提了一个“导出报表并支持历史版本对比”的功能,听起来很小,但真正做的时候要决定的事情非常多:数据量大了走什么导出方案、版本快照存哪里、对比的粒度是字段级还是文件级、失败重试怎么做。AI 可以帮我写出某一版实现,但“到底该做这些决策”这件事,AI 帮不了。它连需求都没法替我澄清。
1.2 为什么说这是“乘法”而不是“加法”
他还打过一个比方:把 AI 当成一个初出茅庐但阅读量极大的实习生。实习生的价值,取决于坐在他旁边的人能不能给出清晰的指令、能不能看出他交付的东西哪里有问题。一个能写复杂正则、能徒手实现算法的人,配上 AI 以后是乘法效果;一个本来就不知道自己想要什么的人,配上 AI 只是把产出错误的速度放快了几倍。
这段话对我的心态影响特别大。以前我总觉得 AI 是来“分走工作”的,现在我会想:我作为那个“旁边的人”,自己够不够格。这个视角一换,焦虑就少了一大半。它让我重新把注意力放回那些 AI 无法替我完成的部分:理解业务、定义问题、做决策、扛责任。
| AI 可以加速的部分 | AI 基本替代不了的部分 |
|---|---|
| 已知方案的编码实现 | 需求澄清与业务建模 |
| 样板代码与重复逻辑 | 技术选型与方案取舍 |
| 单元测试的初步生成 | 边界条件与异常路径识别 |
| 代码风格统一与重构辅助 | 线上故障判断与责任兜底 |
1.3 我的心态转变实操
具体做法上,我开始在日常工作中给自己立了一个规矩:每让 AI 生成一段代码,我要求自己能说出每一行在干什么,说不出来就改成小段生成。这很笨,但坚持两个月以后,我对“AI 会不会取代我”这个问题基本就不纠结了。因为你会发现,AI 越强,你脑子里那张“全局地图”就越值钱。
后来我又加了一步:每周挑一段 AI 生成的核心代码,用笔在纸上把它的调用链画一遍。画不出来,说明我其实还没真正理解这个系统,那就继续拆。这个习惯看起来很原始,但它帮我建立了一个判断基准——AI 是工具,我才是对这个系统负责的人。
2. 关于“AI 生成的代码能不能信”:信心越大,越要警惕
2.1 AI 的“自信出错”是怎么回事
AI 编程助手有一个特别迷惑人的特点:它出错的时候不会像新手那样唯唯诺诺,而是会给你一段语法完整、注释齐全、看起来非常专业的代码。这位导师给的建议是:永远假设 AI 是在“一本正经地胡说八道”,直到你验证过为止。
这不是偏见,而是机制决定的。生成模型的目标是“产出看起来合理的文本”,而不是“产出逻辑上正确的程序”。两者大部分时候重合,但一旦不重合,问题就会非常隐蔽,尤其是边界条件、并发、状态同步这类场景。普通语法检查根本发现不了,只有带着怀疑去看才能看出来。
2.2 建立自己的审查防线
他说,跟 AI 协作的正确姿势不是“信任”,而是“审查”。我后来给自己定了一套流程,实测下来很有效:
- 让 AI 生成代码时,明确要求它同时列出“这段代码的假设条件”
- 拿到代码后,先看假设条件,再看边界分支,最后才看主体逻辑
- 凡是涉及网络请求、文件读写、时间处理的代码,一律默认有问题,逐行过
- 把 AI 生成的代码拆成小函数提交,方便出问题时定位
这套流程的核心思路,是把“AI 有没有错”这个笼统的问题,转化成“AI 在什么前提下是对的”这个问题。一旦把前提列出来,你就能对照自己的场景逐条打勾。前提成立的用,前提不成立的一律不迁就,宁可自己改。
2.3 我踩过的一个真实案例
有一次我需要一个批量重命名文件的脚本,AI 一次性给我生成了一版看着很完美的代码,还贴心地处理了文件名冲突。我差点直接跑。后来多看了一眼,发现它处理冲突的方式是“如果目标文件名已存在,就自动加后缀”,但加后缀之后没有检查新名字是否又冲突了。这个 bug 在大多数情况下不会触发,偏偏我的场景里有一堆相似命名的文件,真跑起来绝对会出乱子。
那次之后我就把这条铁律记住了:AI 给你代码的时候,越顺畅、越完整、越“不用动脑”,你越要把它当成需要重点验证的对象。我甚至有点怀疑那些“一键生成整个项目”的炫酷 Demo——Demo 能跑不代表边界正确,项目能上线才叫真的可靠。
3. 关于“还要不要学基础知识”:基础知识的角色变了,但没消失
3.1 类型系统为什么反而成了 AI 的助推器
这是我觉得这位导师最有说服力的观点。他说,很多人觉得有了 AI 就可以不学类型系统、不学算法、不学计算机网络,但实际上,AI 的知识边界是模糊的,如果开发者自己没有判断力,就很容易被 AI 带着走进一个看似合理、实则错误的方案里。
反过来,扎实的基础知识会给 AI 装上“护栏”。他的例子是类型系统:当你把接口定义和类型约束写清楚,AI 补全代码时的准确率会显著提高。因为类型本身就是一种约束,约束越多,AI 的搜索空间越小,产出越稳定。他说了一句我到现在都在用的话:“你喂给 AI 的约束越精确,AI 还给你的自由度就越安全。”
3.2 不懂原理的人会被 AI 带偏
举个很简单的例子。你让 AI“优化这个接口的响应速度”,如果不懂数据库索引、不懂 N+1 查询、不懂缓存一致性,你根本分辨不出 AI 给出的方案是治标还是治本。AI 可能会建议你加一层缓存,你加了,快了一点,但缓存失效逻辑写得不对,数据错乱,反而更糟。
这种情况我见得太多了。不是 AI 故意坑你,而是它只能基于你给出的信息做推理。你给的信息越浅,它给出的方案就越表面。问题不出在 AI 的智力,出在提问的人有没有能力问出“这个方案治标还是治本”这种问题。而这个能力,恰恰来自基础知识。
3.3 我建议的学习顺序
他的建议是:AI 时代的学习,聚焦三层。
第一层是“能读懂”:至少能完全读懂 AI 生成的主流代码,理解它调用了什么、为什么这样调用。读不懂的地方,就是你的知识盲区,也是 AI 最能蒙混过关的地方。
第二层是“能评价”:对于一个需求,能判断 AI 给的技术方案是不是合适的,复杂度有没有过度设计。能看出“这里不需要引入消息队列”“这里用定时轮询就够了”,这种判断力靠的是长期积累。
第三层是“能纠偏”:当 AI 的方案在你的场景里不成立,你能指出问题在哪里,并能给出修正方向。到了这一层,你才算真正的主导者。
我按这个顺序补了一段时间后,最大的感受是:学习的目的从“为了证明我会写代码”变成了“为了让我能驾驭 AI”。背书式的学习确实没那么重要了,但理解因果、理解取舍、理解边界,这些从来没有像现在这么重要过。
4. 关于“怎么把 AI 用得更好”:拆解任务比写提示词更重要
4.1 把 AI 当实习生,任务粒度决定产出质量
很多人用 AI 编程效率不高,是因为直接把一个巨大任务丢给它:“帮我写一个完整的电商后台”。这位导师反复强调:AI 最适合的是粒度适中、边界清楚的任务。你要做的不是“写提示词”,而是“拆任务”。
我现在的习惯是,把功能拆成一条条小任务:
- 先让 AI 生成数据模型和接口定义
- 再让它根据接口定义生成模拟数据
- 然后让它实现单个模块的页面骨架
- 最后才让它补充交互细节
每一步之间都有人工确认,出错时能立刻知道是哪一步的问题。这个习惯帮我避免了一种常见的失控:AI 写了一堆代码,你看着觉得都行,合到一起却跑不通,然后你根本不知道问题出在哪一段。任务拆得越细,定位就越快。
4.2 上下文比提示词技巧重要得多
他还讲过一个原则:把上下文交代清楚,比堆砌提示词技巧更有效。所谓上下文包括:项目技术栈、现有代码风格、相关模块的入口文件、你希望沿用哪个已有函数、你踩过的已知约束。
我实践下来,最有效的一个做法是:把相关文件路径和文件里关键函数的签名直接贴给 AI,告诉它“参照这段代码的风格,新增一个类似的模块”。这样生成出来的代码,和手写的融合度非常高,返工量少很多。这也是为什么我始终觉得,那些把 AI 当搜索引擎用的人,和把 AI 当结对同事用的人,产出差距会越拉越大。
4.3 验证循环:小步提交,边做边查
最后是节奏问题。他推荐的节奏是“小步跑”:每次让 AI 只改一个点,改完立刻人工过一遍,跑测试,再进入下一个点。不要攒着一大堆 AI 生成的代码到最后统一验证,那样出了问题根本没办法定位。
我曾经试过一次让 AI 连续生成三个功能模块,再一起联调,结果一个数据流问题查了很久。后来改成小步提交,虽然看起来“慢”了,但每个模块都在五分钟内确认过,整体效率反而高了一截。这个对比让我彻底接受了拆小步的做法。说到底,AI 把“写代码”的边际成本打到了接近零,那么真正的瓶颈就变成了“确认代码正确”的成本。谁能把这个确认成本降下来,谁才是高手。
5. 关于“团队、面试、协作会怎么变”:技能的定价正在重新洗牌
5.1 表达需求的能力变得空前值钱
他提到一个我原来没想透的角度:AI 时代的程序员,核心技能正在从“实现”转向“定义”。你能不能把一个模糊想法,变成一套清晰、完整、可验证的需求,直接决定了 AI 能帮你多大的忙。表达能力、逻辑梳理能力、边界意识,这些以前在程序员身上被低估的能力,现在全部被重新定价了。
我身边一个很明显的例子:同组两个同事,写代码的水平差不多,但一个特别擅长把需求讲清楚,一个问题拆成几个子问题,他配 AI 的效率是另一个人的好几倍。差别不在技术,在于“定义问题”的能力。这件事给我的触动很大,因为它意味着 AI 并没有让技术能力贬值,而是让另外一批能力升值了。
5.2 代码审查流程需要重新设计
以前代码评审主要靠人肉看逻辑,现在这个流程要加一层:审查“AI 生成代码的边界假设”。他建议团队里建立一个“AI 辅助代码登记”的机制,凡是由 AI 生成且改动较大的代码,必须标注生成来源和验证方式,评审的人优先查边界处理。
我们团队已经这样做了几个月,效果很明显。以前评审最常发现的问题是命名和风格,现在最常发现的是边界条件漏判、隐式状态没有清理。这两类问题靠 AI 自己是发现不了的,必须靠人的审查意识。如果团队还停留在“谁写的代码谁自己负责”的旧模式,AI 带来的隐患会慢慢积累成事故。
5.3 给想转型的程序员的建议
最后他对招聘的看法是:会考 AI 的公司其实不会问“你用没用过 AI 工具”,而会问“AI 给你代码之后你怎么验证”。能不能回答好这个问题,基本就能暴露你是被 AI 带着走,还是你在驾驭 AI。
我准备面试时也开始按这个思路准备:多讲“AI 给出方案后我如何判断、如何调整、如何补测试”的过程,而不是讲“我用 AI 做了什么功能”。事实证明,这类回答确实更能展示真实的工程能力。毕竟工具谁都能用,差别在于使用工具时的判断力和责任感。
把这五个问题过完一遍,我最大的体会是:AI 编程真正改变的不是代码的生产方式,而是程序员的思考方式。以前我关心的是“怎么写出来”,现在我关心的是“这个需求到底在解决什么问题、方案有哪些取舍、边界在哪里、我怎么验证”。后面这几个问题,恰恰是 AI 时代最稀缺的能力。
如果你现在也在焦虑 AI 会不会让程序员贬值,我建议你别急着学各种提示词技巧,先回去把你最熟悉的一个项目里,每一行代码的“为什么”想清楚。等你想明白了,你会回来感谢那位导师的那句话:“约束越精确,AI 才越安全。”我每次让 AI 干活之前,都会先问自己一句:我给的约束,够精确了吗?