乐于分享
好东西不私藏

后开发时代AI把代码写完了那我干啥

后开发时代AI把代码写完了那我干啥

大家好,我是灵造哥。

这篇不讲内核、不说嵌入式,聊聊最近半年我每天都在打交道的东西——AI Code Agent。

先交代背景,不让大家误会:我目前在 AI Code Agent 上的月开销大概 1000 美金左右。公司提供的大头 token 额度,用来做公司项目——代码 review、产品原型设计、模型测试、算法 POC 验证。我自己也掏了点钱,订阅了 Claude Pro、Opencode 的 coding plan。

不是富哥,也不是在炫技。只是想说明一件事:这 1000 美金不是一次性的 benchmark 跑分,是连续烧了半年、从 100 涨到 1000、每个月真金白银花出去换来的体感

半年下来,我最深的感受不是「AI 真牛逼」,恰恰相反——我想明白了一个问题:

AI 把代码写完了,那我干啥?

第一个月 | 100 美金/月 —— 试水期

一开始我是抗拒的。

去年 Claude Code 刚出的时候,我还在跟同事说:「不就是个能跑命令的 ChatGPT 吗?花这钱干嘛。」

当时公司还没有开放 token 额度,我用的是自己的免费配额。写个小函数、补个注释、格式化一下代码——感觉也就那样。一个月 token 费不到 100 美金,大部分还是浪费的——问了个问题觉得回答不满意,换种问法再来一遍,反复烧钱。

也没觉得有啥离不开的。

转折点是那天 review 了一个 PR。

那个 PR 改动不大,大概 200 行,改了一个消息队列的超时逻辑。我看了两遍,觉得逻辑是对的——超时时间配上了,超时后的清理动作也做了,日志也打了。边界情况想了几个,也觉得没问题。

合之前顺手丢给 Claude Code 过了一遍,当实验。

它花了几十秒,回了一句话:「超时后释放的缓存没有清空引用计数,下游仍有可能访问已释放内存。」

我盯着那句话愣了大概十秒钟。

然后仔细去看代码——还真是。有个引用计数字段在另一个结构体里没有归零。消息体虽然释放了,但在另一个路径上,这个引用计数还会被读取,导致访问已释放内存。正常流程永远不会触发,只有「超时 + 重传 + 异常路径」三连击才会出现。测试覆盖不到,静态分析扫不出来,人 review 了两遍也没发现。

你说巧不巧。

从那之后我的态度变了。

不是因为它有多智能,而是我想明白了一个事:模型在「找漏洞」这件事上,和人脑的思维方式是互补的

人看代码久了会疲劳,会默认「这里应该没问题」。但是模型没有这种惯性——它不会累,不会跳过,会老老实实把每一条路径都扫一遍。我漏掉的不是技术问题,是注意力问题。

第一个月结束的时候,我看了眼账单——不到 100 美金。我心想:还行,这个钱花得不冤。

第二~三个月 | 300 美金/月 —— 上瘾期

人一上瘾,就容易上头。

第二个月开始,我恨不得把所有活都往 Agent 上丢。改 bug——丢给 Agent。搭新项目——让 Agent 出第一版。写设计文档——也让 Agent 来帮忙。

公司的 token 额度也在那时候开放了,比我个人的宽裕不少。我开始把 Agent 嵌入工作流里:

  • • 代码 review:每个 PR 先让 Agent 过一遍,我再看它的意见。不是完全相信——它有时候会给出假阳性,说「这里有问题」但实际上没问题——但作为一个「第二双眼睛」的角色非常称职。
  • • 原型设计:新功能先让 Agent 出第一版代码,我在此基础上改。效率提升很明显——以前搭一个原型要两天,现在半天就差不多了。
  • • 算法 POC 验证:要验证一个思路是否可行,写个脚本跑一下数据。以前得自己写数据生成器、写测试桩、写可视化脚本。现在给 Agent 描述一下需求,它一口气全给你搭好。

效率确实上来了。账单也上来了——从不到 100 涨到了 300 左右。

但也开始踩坑了。而且是连续踩。

第一个坑:任务定义不清晰,Agent 就跑偏

有次我想搭一个简单的配置解析模块,给 Agent 的描述是:「帮我实现一个 YAML 配置解析器,支持嵌套结构。」它花了大概 5 分钟,生成了 800 行代码。我打开一看:

class ConfigParser:
    def __init__(self):
        self.schema = {}
        self.validators = {}
        self.cache = {}
        self.lock = threading.Lock()

    def parse(self, text):
        # 支持嵌套结构、参数校验、schema 推导
        # 支持默认值、类型检查、递归验证
        # 支持并发安全、缓存优化
        ...

等等,我只是需要一个配置解析器啊。

不是我想要 150 行代码,它给我整了 800 行:参数校验、schema 推导、错误码体系、并发安全锁、缓存优化……它甚至还自动生成了一个 DSL 用于定义配置格式的约束。我全部读完就花了 20 分钟。

后来我总结了一个教训:Agent 没有「这个项目需要什么程度的设计」这种判断力

它不知道我们团队的习惯是什么,不知道这个模块的生命周期预期是多久,不知道接手的人是什么样的水平。它只会按照 prompt 的字面意思最大化输出。

你让它「支持嵌套结构」,它就给你递归解析 + schema 校验 + 类型推导。但在我们这个项目里,其实只需要两层嵌套就够了,三层以上的情况不可能出现。

从那之后,我养成了一个习惯:prompt 最后一定会加一句话。

保持简单。参考项目中已有的类似模块风格。不要过度设计。两页代码以内能搞定就行。

第二个坑:Agent 写的代码能跑,但不一定能上线

还是上面那个配置解析器。我偷懒了——觉得它生成的代码测试都过了,就没仔细 review,直接合进去了。

上线第三天,运维找我:有个任务跑到一半挂了,日志显示递归深度超限。

我一看——它用了递归解析嵌套结构,深度超过平台限制的递归层数,直接炸了。而我们的目标平台栈空间有限,这是个嵌入式环境。

能跑的代码 ≠ 能上线的代码。

AI 不知道你的目标平台有什么限制,不知道你的代码要在什么样的资源约束下运行,不知道十年后接手这个项目的人能不能看懂你用了什么花哨的写法。

这些是你需要关心的

账单涨到 300 美金的时候,我一边享受着效率提升带来的快感,一边开始认真想一个问题:我到底是在用它提高生产力,还是在用它给自己挖坑?

第四~五个月 | 600 美金/月 —— 膨胀期

如果你觉得第三个月我就顿悟了,那你太看得起我了。真正的膨胀期在第四个月。

那时候我已经比较熟练了。每天的工作流变成了:

  1. 1. 早上到公司,先看一下 Agent 昨晚跑的任务结果(有些耗时长的丢给它通宵跑)
  2. 2. review Agent 生成的代码,改注释、改命名、调整结构
  3. 3. 把新的需求拆成可以喂给 Agent 的任务粒度
  4. 4. 下午集中处理那些 Agent 做不了的事——跨团队沟通、架构评审、性能调优

看起来很美了对吧?

但膨胀期的问题就是——你觉得自己已经驾驭了工具,于是开始琢磨更复杂的玩法。

然后我就犯了一个典型的工程师错误:过度工程化

当时觉得单 agent 不够酷。一个人指挥一个 agent,这有什么意思?搞个多 agent 系统,架构师 agent + 开发者 agent + 测试者 agent,各司其职,自动流转,那才叫生产力革命。

说干就干。

我花了两周时间搭这套东西。架构设计、prompt 拆分、上下文传递流程、输出校验机制……每一步都认真设计。

结果呢?

问题一:通信上下文碎片化

架构师 agent 输出了一份设计文档,包含了完整的模块划分和接口定义。我把这份设计喂给开发者 agent——它说:「上下文太长,请分段提供。」

分段提供之后,开发者 agent 说:「缺少上下文 B 无法理解上下文 A。」我又得把架构师 agent 的输出摘要一遍再喂过去。

开发者 agent 终于写完了代码,喂给测试者 agent——它说:「缺少架构师的设计文档,无法判断这段代码是否符合作业需求。」

好,那我再改——把所有 agent 的上下文对等复制一份。

然后 token 消耗直接翻三倍。

问题二:互相等待

A agent 等着 B agent 的输出才能继续,但 B agent 因为上下文太长处理超时了。等 B 终于输出完了,A agent 的连接已经超时了。重试之后,B agent 的输出变了——同样的输入,B 在不同时间给出的输出不一样(模型本身就有随机性)。A 拿到新的输出,规划好的下一步不适用了,得重新规划。

这个循环一旦开始,人工介入的频率比直接用单 agent 还要高。

问题三:出了 bug 不知道是谁的锅

终于调通了,跑了几个任务。有个任务出了问题——测试没过。我先看架构师 agent 的设计——设计没问题。再看开发者 agent 的代码——代码好像也没问题,逻辑对得上设计。再看测试者 agent 的测试用例——啊,测试用例写的边界条件和设计文档里定义的不一致。

那是谁的锅?架构师 agent 没把这个边界条件写清楚?开发者 agent 实现的时候忽略了?测试者 agent 自己猜了一个边界?我花了两个小时才定位到根因。

本来是想省事,结果更累了。

两周后我把多 agent 系统拆了,回到单 agent + 人工审查的模式。世界清净了。

账单到了 600 美金。多 agent 那两周的 token 消耗占了 1/3。

能用单 agent 解决的问题,不要上多 agent

不是多 agent 完全没用——如果真的有上下文隔离的需求,比如安全审查 agent 不能看到源码细节,那做隔离是必要的。但大多数项目,一个 agent 加一个人就够了。多 agent 带来的复杂度、成本、调试困难,远大于收益。

不要为了用而用

题外话:模型选择的真相

账单从 300 涨到 600 的那段时间,我开始认真研究一个问题:这些钱到底花在哪了?

一拆账单发现:

  • • 50% 花在御三家(Anthropic Claude、OpenAI GPT-4o、Google Gemini Pro)
  • • 30% 花在国内模型(DeepSeek V4、MiniMax 2.7、GLM 5.1)
  • • 20% 花在 retry 和试错(包括我自己没定义清楚任务导致的重来)

这个比例让我开始思考:不同模型到底适合干什么?

御三家确实是最好的,但得用在刀刃上

它们的强项是什么?复杂推理 + 长上下文理解 + 精准的指令遵循。所以要我用在:

  • • 架构设计——跨模块的调用链分析、依赖关系梳理、方案对比
  • • 任务拆解——一个大需求怎么拆成可执行的小任务,每个任务的边界在哪
  • • 复杂代码 review——跨文件的 refactor、逻辑关联性的判断

举一个具体例子:要让模型分析一个跨 5 个文件的 refactor 方案,御三家能理清楚调用链,能发现「你在 A 文件改了接口,B 文件的调用方也受到影响,C 文件中的某个条件分支可能永远不会被触发了」。国内模型在这个场景下的出错率明显更高——不是说做不到,是你需要花更多时间去验证它的结论。

国内模型呢?在具体任务上完全够用

DeepSeek V4 写一个 utils 函数、写测试桩、生成文档——效果和 GPT-4o 差不了多少,但便宜很多。MiniMax 2.7 写 SQL 查询也很稳。GLM 5.1 做一些数据处理的脚本完全可以。

但关键区别在于:国内模型做复杂任务时,它不会告诉你「我不确定」,它会给你一个看起来正确的答案,但这个答案可能有隐含的问题

所以你花在验证上的时间,可能抵消了省下来的钱。

后来我的策略变成了混合调度:

  • • 架构阶段:用御三家(贵但准,不能省)
  • • 实现阶段:用国内模型填代码(便宜,效率高,错了也好修)
  • • Review 阶段:用回御三家(需要全局判断力)

整体 token 费大概省了 30-40%,而且质量没降。

这个策略不是拍脑袋想出来的,是一个月一个月烧出来的。

第六个月至今 | 1000 美金/月 —— 成熟期

现在每个月差不多稳定在 1000 美金左右。

再说一遍这个构成:公司提供的 token 额度占了大头,用于公司项目——代码 review、原型设计、模型测试、算法 POC。这部分是公司研发效能投入的一部分。我个人花的其实不多,主要是 Claude Pro 和 Opencode 的固定订阅费,加上偶尔跑一些个人项目。

但从 100 到 1000 这个数字曲线,反映的不是预算变多了,而是我知道钱该花在哪了

举一个现在日常的例子你就明白了:

这周有个任务——给一个机器人控制算法做性能分析和优化建议。

以前我怎么做:读代码 → 自己写分析脚本 → 跑 benchmark → 手动定位瓶颈 → 写优化建议。

现在怎么做:

第一步(御三家):把整个代码库喂给 Agent,让它分析模块结构和数据流。「帮我理清这个算法的 pipeline 是什么样的,数据哪个环节流转最频繁。」Agent 花了几分钟,出了一份模块级分析——把主循环、子模块调用频次、数据依赖关系都梳理清楚了。

第二步(国内模型):生成 benchmark 脚本和 profiling 工具。「帮我写一个 benchmark 脚本,测量每个模块的执行时间,输出统计结果。」DeepSeek V4 几分钟就写好了。

第三步(御三家):把 benchmark 结果喂回去做分析。「基于这个 profiling 数据,哪些模块是瓶颈?优化优先级怎么排?」Agent 给出了排序和具体建议。

第四步(人工):我来验证和决策。Agent 建议优化 A 模块,但我看过代码,知道 A 模块的算法复杂度已经是 O(n) 了,真正的问题在 B 模块的 I/O 等待。这就是 Agent 看不出来的东西——它没有业务直觉

整个流程下来,我以前三天的工作量,现在一天半搞定了。而且质量不低于以前——Agent 的分析确实覆盖了我可能漏掉的点,而我的业务判断覆盖了 Agent 看不到的维度。

这是我现在理解的「人机协作」:不是谁替代谁,是互相补位

所以,Code Agent 到底是什么?

说了这么多经历,该说说原理了。

但我不想搞得太学术。用人话讲,就是:

传统聊天模型是:「你问一句,我答一句。」两者之间没有持续的行动能力。

Code Agent 是:「你给一个任务,我有一双手(读写文件)、一双眼睛(跑命令、看结果)、一个脑子(推理和规划),我帮你一步步做完。」

核心流程四步:感知 → 规划 → 行动 → 观察,然后循环

用一段伪代码来表示:

def agent_loop(task):
    context = perceive_environment()  # 看文件结构、读代码
    while not task_complete(context):
        plan = model.reason(context)       # 决定下一步做什么
        result = execute_action(plan)      # 写文件/跑命令
        context = observe(result)          # 看执行结果
        if detect_error(result):
            plan = plan_recovery(context)  # 出错了就修正
    return context

这个机制决定了它的长处和短处:

长处:能做多步推理。 不是一次生成完,是走一步看一步——写了一个文件,跑一下测试,发现有问题,回头改,再验证。

长处:能跨文件操作。 它能看到整个项目的文件结构,可以在不相关的文件之间建立联系。

短处:token 消耗大。 每一步都在调模型,每一步都是钱。

短处:容易跑偏。 每一步的规划都是基于当前上下文做的局部最优决策。走三步之后可能已经偏离了最初的目标。你得像放风筝一样时不时拉一下。

短处:深度有限。 目前 Agent 在「广度」上很强——它能覆盖很多文件、很多路径。但在「深度」上——比如需要深入理解一个算法的时间复杂度、需要权衡不同的架构取舍——它还是不行。

所以理解 Agent 的原理,不是为了写一个 Agent,而是为了知道什么时候用它、什么时候不用它

后开发时代,开发人员该注意什么

前面讲了半年的经历、踩的坑、花的钱、悟的道理。现在说点真正重要的事。

1. vibe coding 是事实,我不说好坏,只说后果

Vibe coding 这个词最近很火——描述一种工作方式:想到什么功能,描述给 AI,复制粘贴,能跑就行。不用想架构,不用管测试,不用关心性能。

我不评价这个方式好不好。我只说我看到的事实。

事实一:代码量上来了,但可维护性下去了

有些同事的项目,一个月代码量翻了三倍,但代码质量肉眼可见地下降。模块职责不清晰——一个函数 300 行,什么逻辑都往里塞。错误处理不一致——有的地方抛异常,有的地方返回错误码,有的地方直接吞掉。命名更是五花八门——同一个概念,三个模块里用了三个不同的名字。

不是 AI 的问题。是没有人对这个代码库负责的问题。

事实二:能跑的代码,不一定能上线

我前面讲的那个配置解析器的故事——递归深度超限——不是个例。Agent 生成的代码默认选择最通用的方案,而不是最适合你项目的方案。它不知道你的平台栈空间小,不知道你的数据量预期是多少,不知道你的团队习惯用什么样的错误处理模式。

事实三:出了问题,AI 复盘不了

有个朋友的项目上线后出了一个性能问题——接口响应时间偶尔飙到 10 秒。他用 AI 分析了一整天,AI 给出了七八种可能的原因:数据库连接池不够、缓存失效、锁竞争、GC 暂停……每种听起来都有道理。

最后他自己逐行看代码,找到了根因:一个在热点路径上没注意的 O(n²) 循环。数据量小的时候没问题,数据量一上来就炸了。

AI 为什么找不到?因为它没有「这个问题在实际运行中的表现」的感知。它只能基于你给的信息做推理,但你给的信息永远是不完整的。

我不是说 vibe coding 不好。我是说你如果只 vibe coding,那出了问题怎么办?性能瓶颈怎么分析?什么样的设计符合项目需求?这些都需要判断力,而判断力 AI 给不了你

2. 从「写代码的人」变成「审代码的人」

这是一个很大的转变,我花了半年才适应。

以前我的核心工作是写代码——每天大部分时间在敲键盘,创造新的逻辑、搭建新的模块。代码 review 只是辅助性的,看看别人的东西有没有明显的问题。

现在 AI 帮我写了 60%-70% 的代码,我的核心工作变了:判断 AI 写出来的东西好不好

这个转变比我想象的难很多。

因为判断比创造更消耗脑力。创造的时候,你顺着自己的思路走,是顺滑的。判断的时候,你得理解别人的思路(AI 的思路),再和自己的标准做对照,找出偏差。

需要的能力:

  • • 能判断设计方案的好坏。 Agent 给了两种方案,一种简单但扩展性有限,一种复杂但灵活。哪个更适合当前项目?你得权衡。没有标准答案。
  • • 能识别潜在的性能缺陷。 Agent 写的代码逻辑是对的,但用了不合适的算法。测试通过了,上线后数据量上来才暴露。你能不能在 review 阶段就发现?
  • • 能权衡成本和质量。 Agent 的方案可能「过于完美」——用了一个很酷的架构,但项目只需要一个简单的脚本。过度设计也是问题。你能不能识别并制止?
  • • 能兜底。 上线出了问题时,Agent 可以帮你分析,但定位根因、制定修复方案、评估影响面——这些还是得你来。

AI 是你的 copilot,你才是 pilot。这句话不是鸡汤,是这半年的真实体感

3. 给初级开发者的真心话

这一节我犹豫了很久要不要写——怕写成说教,怕像是在摆老资格。但我还是想写。

因为现在入行的新人,面临的诱惑比我当年大多了。

不会写?让 AI 写。
不会改?让 AI 改。
不会 debug?把日志丢给 AI,让它分析。
不会设计?让 AI 给你出几个方案。

看起来效率很高,什么都能做。但有个问题:你作为开发者的能力有没有在增长?

我见过一个初级的同事,用 Agent 写了一个完整的微服务模块——单元测试、集成测试、API 文档一应俱全。看起来很厉害。但当我问他「这个服务的性能瓶颈在哪」的时候,他答不上来。当我问他「为什么要用这个框架而不用另一个」的时候,他说「Agent 选的,看起来挺合适」。

工具让你走得快,但只有你自己知道往哪走

给你几个具体的建议:

建议一:多看看经典代码是怎么写的

Agent 生成的代码风格是「平均化的」——它学习了 github 上大量代码的平均水平。平均意味着不出错,但也意味着不出彩。

去看看 Linux 内核的代码是怎么组织模块的。去看看 Redis 的代码是怎么处理并发和内存的。去看看 SQLite 的测试是怎么写的。这些代码的质量是经过十几年甚至几十年的考验的。

看的时候问自己:如果让我来设计这个模块,我会怎么弄?哪些地方我会和作者做不同的选择?哪种选择更好?为什么?

然后可以试试:让 AI 重新实现这个模块,看看它的设计和经典设计差在哪。你给的 prompt 能不能让它接近经典设计的质量?

建议二:Agent 写的代码,先自己审一遍

养成这个习惯。Agent 出完代码,你通读一遍,找出至少两个可以优化的点:性能的、可读性的、安全性的都行。

不是为了挑刺,是为了保持手感。如果你连审都不审,慢慢地你就看不懂代码了

建议三:Agent 出 bug 了,先自己分析根因

一个常见的坏习惯:Agent 写的代码出错了,把错误日志丢回给 Agent,让它自己修。Agent 修了,发给它跑,跑了又错。再来一轮。

我不是说不能这样,但不应该只这样。

先自己读代码、看日志、定位根因。找到真正的问题在哪——是指针越界?是数据类型不匹配?是并发竞态?定位清楚了,再让 Agent 改。这样你既修了 bug,又锻炼了 debug 能力。

建议四:纯粹的 coding 成本确实低了,但「怎么用」还是需要人来决断

AI 能写 80% 的代码,但那 20% —架构决策、技术选型、模块拆分、接口设计、异常策略、性能优化——还是需要人来拍板。

而且这 20% 决定了那 80% 的质量。架构选错了,后面的代码写得再好也救不回来。

保持学习,保持判断力。别让工具把你架空了

4. 拓展边界,而不是收缩舒适区

既然 AI 把编码的体力活接走了,那省下来的精力应该花在哪?

我的答案是:花在 AI 做不了的事情上

  • • 理解业务。 技术上怎么做才能真正解决问题?不只问「用户要什么」,多问「用户真正需要什么」。这是人的判断力,不是靠 prompt 能解决的。
  • • 做技术决策。 知道什么时候该快(快速验证思路)、什么时候该慢(核心模块要稳)。知道什么样的设计适合什么样的场景。
  • • 跨团队协作。 怎么把你的技术方案讲给非技术人员听?怎么推动各部门对齐?这些事 AI 帮不了你。
  • • 定义问题。 很多时候,最难的不是解决问题,是定义问题。知道「我们真正要解决的是什么」——这个能力 AI 目前不具备。

不要把 AI 当作偷懒的工具,要把它当作拓展边界的工具

以前你一天只能做一件事,现在可以做三件事。但前提是你知道这三件事里哪件是最重要的,哪件可以交给 AI,哪件必须自己来。

写在最后

半年时间,月 token 开销从 100 美金涨到了 1000 美金。

钱烧了,坑踩了,工具换了三轮,工作方式也彻底变了。

回头看,Code Agent 给我带来的最大改变不是代码写得快了——是让我重新思考了一个问题:在 AI 能写代码的世界里,一个开发者的价值到底在哪?

我的答案其实很朴素:判断力

知道该写什么、不该写什么。
知道什么方案好、什么方案差、什么方案只是看起来好。
知道什么时候该用 AI 加速、什么时候该自己静下心来想清楚。
知道出了问题怎么定位、怎么修、怎么避免再犯。

这些能力,AI 给不了你。它只能帮你实现,不能帮你判断。

纯粹的 coding 成本已经很低了。如何在项目中应用,还是需要人来决断。

工具在变,但有两样东西没变:判断力责任心。前者让你知道该做什么,后者让你把事情做好。

AI 能写代码了,但决定写什么代码的,还是人。


灵造哥出品|聚焦机器人 × 嵌入式 × Linux 系统
关注公众号:灵造哥