初级、高级程序员和AI处理同一需求,结果差异大,谁的表现最让人意外?

摘要:上个月,我们有个新功能要做:实现一个订单退款接口。 需求不复杂,但涉及金额变更、库存回滚、状态流转,刚好是个能拉开差距的典型场景。 当时团队有点忙,我临时把这个需求分别交给了三个"人":
上个月,我们有个新功能要做:实现一个订单退款接口。 需求不复杂,但涉及金额变更、库存回滚、状态流转,刚好是个能拉开差距的典型场景。 当时团队有点忙,我临时把这个需求分别交给了三个"人": 小王,工作1年半的初级开发 老陈,工作6年的高级开发 Cursor(我给它写了一个详细的Prompt) 三份代码我都仔细看过了。 看完之后,我沉默了很久。 第一个:小王(工作1年半) 我把需求文档发给他,他没有追问,当天下午就说:"做完了,测试通过了。" 速度确实快。打开代码一看: @PostMapping("/refund") @Transactional public Result<Boolean> refund(@RequestBody RefundRequest request) { Order order = orderMapper.selectById(request.getOrderId()); if (order == null) { throw new BusinessException("订单不存在"); } if (order.getStatus() != OrderStatus.PAID) { throw new BusinessException("订单状态不支持退款"); } // 退款金额写回 order.setStatus(OrderStatus.REFUNDED); order.setRefundAmount(request.getRefundAmount()); orderMapper.updateById(order); // 调用支付退款接口 payService.refund(order.getPaymentNo(), request.getRefundAmount()); // 库存回滚 inventoryService.rollback(order.getProductId(), order.getQuantity()); return Result.success(true); } 功能逻辑是对的,基本流程都有,单元测试也过了。 但我看了两分钟,发现了几个问题: 问题1:没有幂等控制。 如果这个接口被重复调用两次(网络超时重试是很常见的),订单会被退款两次,库存回滚两次。这是生产事故级别的bug。 问题2:退款金额没有校验上限。 request.getRefundAmount() 没有和订单实际支付金额做比对,理论上可以传一个比实际支付金额更大的数字。 问题3:payService.refund 失败后没有补偿机制。 调用第三方支付退款失败了怎么办?状态已经改了,但钱没退出去,这个烂摊子谁来收拾? 我去找小王聊。 他说:"我以为测试通过了就行。" 这就是问题所在。他交付的是一个"能跑的功能",不是一个"可以上生产的方案"。 他想到了正常流程,但没有想过任何一个异常流程。 第二个:老陈(工作6年) 老陈拿到需求之后,没有立刻动手。 他先发了一条消息给我,问了3个问题: 退款是全额退款还是支持部分退款? 退款金额打回原路还是可以退到其他账户? 退款后库存需要实时回滚,还是等退款成功回调之后再回滚? 我当时看到这3个问题,愣了一下。 这3个问题,需求文档里都没写清楚。 我去问了产品,产品想了半天,说:"支持部分退款,退回原路,库存等退款成功回调之后再回滚。" 这3个答案,直接影响了整个接口的设计。如果不提前搞清楚,后面改起来成本极高。
阅读全文