这两年,AI 编程工具确实越来越强了。

Codex、Cursor、Trae、通义灵码这些工具,已经不只是简单补全几行代码。你给它一个需求,它可以帮你生成 Controller、Model、接口、SQL、页面,甚至还能顺手写测试、改 Bug、解释老代码。

以前一个后台 CRUD 模块可能要写半天,现在你描述清楚字段、筛选条件、权限规则,AI 很快就能给出一套看起来能跑的代码。

所以很多人开始说:

程序员是不是快被 AI 替代了?

这个问题我觉得不能简单回答“会”或者“不会”。

如果只是机械地写代码,尤其是重复 CRUD、复制粘贴、改字段、套模板,这部分工作的价值确实在下降。AI 写得快,而且越来越快。

但如果把“会写代码”等同于“能造软件”,那就有点太轻看软件工程了。

AI 能写代码,但它造不出真正的软件。

至少现在,它还造不出一个能长期稳定运行、能扛住真实业务、能处理异常、能上线维护、能对结果负责的软件系统。

代码只是软件的材料,不是软件本身。


一、AI 写代码真的很强,这一点不用否认

先说结论:AI 编程工具很强,而且会越来越强。

在日常开发里,它已经能帮我们做很多事情。

比如 PHP 后台开发中,AI 可以快速生成:

  • Laravel / ThinkPHP 的 Controller
  • Model 查询逻辑
  • 表单验证规则
  • layui 表格页面
  • 后台列表筛选
  • Excel 导出代码
  • MySQL 查询语句
  • API 接口文档
  • 简单单元测试
  • 老代码解释和重构建议

如果你让 AI 写一个“订单列表接口”,它可能几秒钟就能给你生成类似这样的逻辑:

// 伪代码示例
public function order_list()
{
    $keyword = request()->get('keyword');

    $query = Order::query();

    if (!empty($keyword)) {
        $query->where('order_no', 'like', "%{$keyword}%");
    }

    return $query->orderBy('id', 'desc')->paginate(20);
}

这类代码,AI 生成得又快又稳。

如果只是从“写代码”这个角度看,它确实已经能替代不少重复劳动。

但问题是,真实项目不是只写一个查询接口就结束了。


二、代码和软件,不是一回事

很多人讨论 AI 编程时,容易把“代码”和“软件”混在一起。

但真正做过项目上线、维护过后台系统、处理过线上故障的人都知道:

代码跑起来只是开始,能稳定跑下去才叫软件。

代码是什么?

代码可能只是:

  • 一个函数
  • 一个接口
  • 一个页面
  • 一条 SQL
  • 一个后台按钮
  • 一个定时任务
  • 一个导出功能

但软件是什么?

软件是一个长期运行的系统。它需要考虑:

  • 业务规则是否完整
  • 权限边界是否清晰
  • 数据是否一致
  • 异常是否能回滚
  • 日志是否能追踪
  • 性能是否撑得住
  • 部署是否可控
  • 故障是否能恢复
  • 后续是否容易维护

AI 可以快速生成代码片段,但软件工程师要交付的是一个系统。

这两者之间,差的不是几行代码,而是一整套工程能力。


三、AI 可以生成订单模块,但它不会主动替你兜底

举一个 PHP 后台项目里最常见的例子:订单管理模块。

你告诉 AI:

帮我生成一个订单管理后台,支持订单列表、订单详情、状态筛选、导出 Excel。

AI 很可能很快就能生成:

  • 订单列表页面
  • 订单详情接口
  • 按状态筛选
  • 按手机号搜索
  • 导出 Excel
  • 修改订单状态

看起来功能完整,页面也能跑。

但真正上线前,你要问的问题远不止这些。

1. 订单状态能不能随便改?

后台管理员点一下“已完成”,订单是不是就真的完成了?

如果订单还没支付呢?

如果订单已经退款了呢?

如果订单正在售后呢?

如果用户投诉中呢?

订单状态不是一个简单字段,它背后可能是一套状态机。

待支付 -> 已支付 -> 待发货 -> 已发货 -> 已完成
                 -> 退款中 -> 已退款
                 -> 售后中 -> 售后完成

AI 可以生成一个“修改状态”的接口,但它未必知道你的业务里哪些状态可以流转,哪些状态绝对不能跳。

这就是业务边界。

2. 支付回调会不会重复通知?

支付接口是后台系统里非常典型的坑。

AI 可以帮你写一个支付回调接口:

public function notify()
{
    // 接收支付平台回调
    // 校验签名
    // 修改订单状态
}

但真实环境里,支付平台回调可能会重复通知。

如果你的代码没有做幂等处理,同一个订单可能被重复入账、重复发货、重复发优惠券。

生产环境里这种问题不是“代码有点瑕疵”,而是实打实的资损风险。

支付回调至少要考虑:

  • 签名校验
  • 金额校验
  • 商户订单号校验
  • 订单状态校验
  • 幂等处理
  • 事务控制
  • 回调日志
  • 异常补偿

AI 可以写出回调代码,但它不会替你承担支付事故。

AI 生成的是答案,工程师负责的是后果。

3. 后台权限是不是越权了?

后台管理系统不是页面能打开就行。

比如订单管理里,不同角色可能有不同权限:

  • 客服只能查看订单
  • 财务可以查看支付金额
  • 仓库只能处理发货
  • 超级管理员可以修改状态
  • 普通运营不能导出手机号

AI 生成后台页面时,可能会帮你生成按钮、接口、路由。

但它经常忽略一个问题:

这个人有没有资格操作这条数据?

很多系统的漏洞,不是 SQL 写错了,而是权限边界没守住。

前端隐藏按钮不等于权限控制。

真正的权限必须在后端接口里校验:

  • 当前用户是谁
  • 属于哪个角色
  • 是否拥有当前操作权限
  • 是否能访问当前数据范围
  • 敏感字段是否需要脱敏

后台系统里,权限不是装饰,是底线。

4. 用户导出 50 万条数据会不会拖垮系统?

AI 很容易生成一个导出 Excel 的功能。

小数据量时没问题,几十条、几百条都很顺。

但如果运营一次导出 50 万条订单呢?

可能出现:

  • PHP 内存爆掉
  • 请求超时
  • MySQL 被慢查询拖住
  • Nginx 返回 504
  • 服务器 CPU 飙升
  • 用户反复点击导出造成重复任务

真实项目里,导出不是简单的 select * 然后写 Excel。

更稳妥的做法可能是:

  • 限制导出条件
  • 限制最大导出条数
  • 大数据走队列
  • 分批查询
  • 生成临时文件
  • 导出完成后通知用户
  • 记录导出日志
  • 敏感字段脱敏

AI 能写出“导出功能”,但未必会主动判断这个导出在生产环境下是否安全。


四、Demo 到生产环境,中间隔着软件工程

很多 AI 演示都停在最舒服的位置:

输入一句需求,生成一堆代码,页面跑起来,功能完成。

但真实项目不是这样。

真实项目往往从第一个异常用户、第一个脏数据、第一个慢 SQL、第一个线上告警开始变复杂。

Demo 追求的是“看起来能用”。

生产环境追求的是“长期稳定可用”。

这中间至少差了这些东西。


五、异常处理:不是报错了再说

很多 AI 生成的代码,主流程通常没问题。

但软件真正麻烦的地方,往往在异常流程。

比如:

  • 数据库写入失败怎么办?
  • 第三方接口超时怎么办?
  • 支付成功但订单更新失败怎么办?
  • 队列消费失败是否重试?
  • 重试多次失败是否告警?
  • 用户重复提交怎么办?
  • 文件上传一半失败怎么办?

如果没有异常处理,代码在本地看起来很正常。

但一上线,就会暴露各种问题。

真正的软件工程不是只写成功路径,而是要处理失败路径。

因为生产环境里,失败一定会发生。


六、数据一致性:系统最怕“半成功”

后台系统里,最怕的不是直接失败,而是半成功。

比如订单支付流程:

  1. 用户支付成功
  2. 支付平台回调成功
  3. 系统更新订单状态
  4. 系统增加用户积分
  5. 系统发送优惠券
  6. 系统通知仓库发货

如果执行到第 3 步成功,第 4 步失败,怎么办?

如果订单状态改了,但积分没加,算成功还是失败?

如果优惠券发了,但订单后来回滚了,怎么办?

这就不是简单代码生成能解决的问题,而是事务、幂等、补偿、状态机的问题。

AI 可以帮你写代码,但系统一致性需要工程师设计。


七、安全问题:AI 写得快,漏洞也可能来得快

AI 生成代码时,经常会写出看起来很自然的逻辑。

但安全问题往往藏在细节里。

PHP 项目里常见的问题包括:

  • SQL 注入
  • XSS
  • CSRF
  • 文件上传漏洞
  • 越权访问
  • 敏感信息明文返回
  • 日志里打印手机号、身份证、token
  • 后台接口缺少权限校验
  • 支付回调缺少签名验证
  • API 没有限流

AI 不一定知道你的系统安全等级,也不知道哪些字段是敏感字段。

它生成代码很快,但如果工程师不审查,漏洞也会被很快生成出来。

所以 AI 写代码越快,代码审查越重要。


八、性能问题:能查出来,不代表查得动

AI 很擅长写 SQL。

但能查出来,不代表查得动。

比如一个订单列表:

select * from orders
where mobile like '%138%'
order by id desc
limit 20;

在几千条数据时,没什么问题。

到了几百万、几千万数据时,可能就是慢查询。

实际项目中还要考虑:

  • where 条件是否能走索引
  • order by 是否命中索引
  • like 前置百分号是否导致全表扫描
  • 大表分页是否越来越慢
  • 是否存在 N+1 查询
  • 是否需要冗余字段
  • 是否需要分表或归档
  • 是否应该走搜索引擎

AI 可以给出 SQL,但性能要靠工程经验验证。

尤其是后台管理系统,很多问题不是功能不能用,而是数据量一大就开始崩。


九、日志和追踪:没有日志,就没有真相

线上出问题时,最怕的不是报错。

最怕的是不知道发生了什么。

比如用户说:

我明明支付了,为什么订单还是待支付?

如果系统没有日志,你只能猜。

一个成熟的软件系统,至少应该能追踪:

  • 谁操作了
  • 操作了什么
  • 请求参数是什么
  • 第三方接口返回了什么
  • 数据库更新结果是什么
  • 队列是否执行成功
  • 失败原因是什么
  • 是否重试过

AI 可以生成业务代码,但它经常不会主动帮你设计完整日志链路。

而没有日志的系统,一旦出问题,排查成本会非常高。

AI 不怕线上故障,因为它不用接电话。

但工程师要接。


十、上线运维:代码合并不等于交付完成

很多人觉得代码写完、提交、合并,就算完成了。

但真正的软件交付还包括:

  • 环境配置
  • Nginx 配置
  • PHP-FPM 参数
  • 定时任务
  • 队列进程
  • 文件权限
  • 日志切割
  • 缓存清理
  • 数据库迁移
  • 灰度发布
  • 回滚方案
  • 监控告警

尤其是 PHP 项目,线上环境里一个小配置都可能导致问题。

比如:

  • 上传目录没权限
  • 队列进程没启动
  • 定时任务没配置
  • PHP 扩展缺失
  • Nginx 转发路径不对
  • .env 配置错误
  • 缓存没清导致代码不生效

这些问题,AI 不一定能从代码里看出来。

因为软件不是只存在于编辑器里,它还运行在服务器、数据库、缓存、队列、网络和用户行为里。


十一、工程师的价值正在迁移

我不认为 AI 会让工程师失去价值。

但它确实会改变工程师的价值结构。

以前很多人的价值体现在“我能写很多代码”。

以后这件事会越来越不值钱。

因为 AI 写代码很快,模板代码、重复代码、常规 CRUD 的成本会持续下降。

但工程师真正的价值会迁移到这些地方:

  • 能不能定义清楚问题
  • 能不能拆解复杂需求
  • 能不能设计合理的数据结构
  • 能不能识别业务风险
  • 能不能审查 AI 生成的代码
  • 能不能发现隐藏的安全问题
  • 能不能优化慢 SQL
  • 能不能处理线上故障
  • 能不能让系统长期可维护

换句话说,未来值钱的不是“会写代码的人”,而是“能把复杂业务变成稳定系统的人”。

AI 会让强工程师更强,也会让只会机械写代码的人越来越危险。


十二、AI 是放大器,不是负责人

我现在并不排斥 AI 编程工具。

恰恰相反,我认为开发者应该主动使用 AI。

它能提高效率,减少重复劳动,让我们更快理解旧代码,更快生成初稿,更快验证想法。

但我们也要清楚一件事:

AI 是放大器,不是负责人。

你让它生成一个接口,它可以生成。

但接口该不该这么设计,参数是否合理,权限是否完整,异常是否覆盖,性能是否撑得住,出了问题谁来排查,这些都还是工程师的责任。

AI 可以参与开发,但它不能替你对系统负责。


十三、不要神化 AI,也不要轻视软件工程

AI 能写代码,这是事实。

AI 写代码越来越快,也是事实。

但“写代码”和“造软件”之间,隔着业务、架构、安全、性能、运维、团队协作和长期维护。

一个能跑的 Demo,离一个能上线的软件,中间差的不是几行代码。

差的是:

  • 需求边界
  • 数据模型
  • 权限设计
  • 异常处理
  • 事务一致性
  • 性能优化
  • 安全控制
  • 日志追踪
  • 部署运维
  • 故障兜底

这些东西,才是软件工程的重量。


结尾:软件最后能不能活下来,还是要看工程师

我相信 AI 会继续进步。

以后它会写更多代码,理解更多上下文,调用更多工具,甚至可以通过 MCP、Function Calling、Agent Skills 去连接数据库、浏览器、接口文档和线上日志。

但即便如此,我仍然认为:

AI 能写代码,但它造不出真正的软件。

因为真正的软件,不是生成出来的。

它是一轮轮需求沟通、架构设计、代码审查、测试验证、上线部署、故障修复、性能优化和长期维护熬出来的。

AI 可以帮我们把代码写得更快。

但软件最后能不能稳定运行,能不能扛住真实业务,能不能在出问题时找到原因,能不能让用户放心使用,还是要看工程师。

所以,未来不是“AI 替代工程师”。

更准确地说,是:

会用 AI 的工程师,会淘汰不会用 AI 的工程师;
懂软件工程的人,会淘汰只会机械写代码的人。

代码会越来越便宜。

但能承担复杂度、控制风险、对结果负责的人,会越来越值钱。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐