当写代码不再稀缺:AI 时代工程师真正需要的四种能力

2026-07-28 27 预计阅读时间: 1 分钟
来源: infoq.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:10 分钟

AI 正在快速降低代码生成的成本,但软件工程并没有因此变成“描述需求,然后等待答案”。真正困难的部分仍然存在:判断应该解决什么、识别系统中的关键风险、理解生成代码的行为,以及确认最终结果是否改善了客户体验。

Ben Greene 结合创业经历提出了一组适应这种变化的工程思维:从简单方案开始、保持对代码的理解、优先攻击困难问题,并用客户影响衡量工作。在代码越来越容易获得的环境里,这些能力反而更有区分度。

代码产量不再是核心指标

过去,工程师经常把“完成了多少功能”当作进度。AI 编码工具进一步放大了这种倾向:几分钟内生成接口、测试和数据模型,很容易制造一种项目正在高速推进的感觉。

但生成速度无法回答几个关键问题:

  • 这个功能解决的是客户的真实阻塞,还是团队内部的想象?
  • 代码失败时,团队是否理解它的状态变化和数据边界?
  • 当前设计是否把一个简单问题包装成了复杂平台?
  • 最难、最不确定的部分是否被推迟到了项目末尾?

因此,AI 时代更值得追踪的不是提交数量,而是被消除的不确定性。例如,一次小型实验确认第三方接口无法满足延迟要求,可能比生成十个业务模块更有价值。

从简单方案开始,但不要停止理解

“从简单开始”不是忽略质量,而是用最小成本验证最重要的假设。面对新需求,可以先实现一条完整但狭窄的业务路径:一个输入、一个核心决策、一个可观察的结果。只有当真实流量或业务规则证明有必要时,再引入队列、缓存、插件系统或复杂抽象。

AI 可以帮助快速搭建这条路径,但工程师仍应能够解释:

  • 输入如何被验证;
  • 数据在哪些位置发生变化;
  • 失败如何暴露和恢复;
  • 哪些假设没有被测试;
  • 删除某个模块会产生什么影响。

一个实用做法是把“能够生成代码”与“能够接管代码”分开。合并 AI 生成的改动前,请提交者用自己的语言说明控制流、失败模式和回滚办法。如果这三件事说不清楚,代码就还没有真正成为团队可以维护的资产。

先攻击最困难、最不确定的问题

项目最危险的部分通常不是页面布局或常规 CRUD,而是团队最不愿意触碰的假设:模型准确率是否足够、外部服务能否承受峰值、迁移能否保持数据一致,或者客户是否愿意改变现有工作流。

可以把待办事项按“客户影响”和“不确定性”排序,而不是只按实现成本排序。下面是一个可直接运行的简化工具。它不是演讲中提供的 API,而是一种可以这样实践的任务筛选方法。

将以下内容保存为 prioritize.py,然后运行 python prioritize.py

from dataclasses import dataclass


@dataclass
class Task:
    name: str
    customer_impact: int   # 1-5,越高越影响客户结果
    uncertainty: int       # 1-5,越高越需要尽早验证
    effort: int            # 1-5,越高越昂贵

    @property
    def learning_priority(self) -> float:
        # 奖励客户影响和风险消除;成本只作为温和的约束。
        return (2 * self.customer_impact + 2 * self.uncertainty) / self.effort


tasks = [
    Task('验证支付服务的峰值延迟', 5, 5, 2),
    Task('重构后台筛选组件', 2, 2, 3),
    Task('访谈流失客户并验证工作流', 5, 4, 1),
    Task('生成完整插件框架', 2, 4, 5),
]

for task in sorted(tasks, key=lambda item: item.learning_priority, reverse=True):
    print(f'{task.learning_priority:4.1f}  {task.name}')

这里的公式不是通用标准。团队应根据业务调整权重,例如把合规风险、收入影响或恢复难度纳入评分。它的价值在于迫使团队公开讨论:“我们现在是在减少关键风险,还是只是在完成容易展示的工作?”

对排名靠前且不确定性高的任务,可以设计一个时间受限的探针:

mkdir -p experiments/payment-latency
printf '%s\n' '# Payment latency spike' '' '- Timebox: 4 hours' '- Success: p95 < 300 ms at expected peak load' '- Stop: archive results; do not turn the spike into production code' > experiments/payment-latency/README.md

探针的目标是获取证据,不是偷偷建立第二套生产系统。实验结束后,应记录结果、决策和仍未解决的问题,再决定扩展、替换还是停止。

同理心、主动性和实际问题解决仍不可替代

客户通常不会用完整的技术规格描述问题。他们可能说“系统很慢”,实际原因却是状态反馈不清晰;他们可能要求导出按钮,真正需要的是在审计前证明数据完整。识别这种差异需要观察工作流程、追问约束,并理解错误对人的实际影响。

这也是人的同理心仍然重要的原因。AI 可以提出实现选项,却不能代替团队承担产品判断。工程师需要主动走出任务描述:查看支持记录、复现客户路径、测量生产行为,并在发现目标错误时提出异议。

可以在每个重要改动的评审说明中加入四个问题:

  1. 哪类客户行为触发了这项工作?
  2. 最困难的假设是什么,我们如何验证它?
  3. 如果 AI 生成的实现出错,团队能否定位并回滚?
  4. 上线后用什么信号判断客户结果得到改善?

这些问题把代码评审从语法和风格检查,提升为对系统行为与产品结果的共同审查。

采用时的工程清单

AI 编码工具适合生成样板代码、探索备选实现、补充测试和缩短反馈周期,但不应成为跳过理解的理由。团队可以从以下约束开始:

  • 先定义客户结果,再生成实现。
  • 先验证高影响、高不确定性的假设。
  • 保持首个方案足够小,避免过早的平台化设计。
  • 要求代码所有者解释控制流、数据边界和失败模式。
  • 用生产信号和客户行为验证结果,而不是用提交量证明进度。
  • 对不可逆、涉及安全或高成本的决策保留人工审批。

当代码本身越来越便宜,工程价值会更多地来自选择、理解和负责。能把模糊问题变成可验证假设,再把证据转化为客户结果的工程师,不会因为自动化而失去作用;他们会成为决定自动化是否真正有用的人。


相关推荐