代码复制成本归零:工程师的价值正在向上漂移

When copying code costs nothing, taste becomes the new moat

上周六下午,我在 GitHub 上刷到一个 5k star 的开源 CLI 工具——一个看起来挺漂亮的本地日志聚合器。我心血来潮:能不能用 Claude Code 复刻一个?

三个小时后,核心功能跑起来了。彩色输出、文件 watch、正则过滤、多源合并,一应俱全。我兴奋了大概五分钟,然后意识到一件让我心里一沉的事:

我根本不需要这个工具。

那为什么三个小时前我会觉得"做出一个这样的东西"是有价值的?

因为在我过去十几年的职业训练里,“能做出来"本身就是稀缺的。一个能从零搭出完整工具的工程师,值钱。但今天下午,这个稀缺性在我自己的笔记本上被亲手碾碎了。

软件开发的成本结构正在崩塌。几年前一个工具的人力成本占 90%,今天复制成本趋近于零。但奇怪的是,软件本身并没有因此变得更值钱——价值跑去了别处。

跑去了判断层:决定做什么、不做什么、什么是好的、用户真正需要的是什么。

这篇文章想讲清楚一件事:当 AI 把"写代码"这件事的成本干到零之后,工程师的价值不是消失,而是向上漂移。理解这个漂移方向,决定了你接下来三年是焦虑还是兴奋。


一、问题定义:为什么"能写代码"突然不值钱了

写代码的本质,是把已知的解决方案翻译成符号。

这个翻译过程在过去之所以值钱,是因为它有三个稀缺性:

  1. 知识稀缺:你得知道某个 API、某个模式、某个最佳实践
  2. 技能稀缺:你得熟练到不犯低级错误
  3. 时间稀缺:你得愿意花几个小时把它一行行敲出来

AI 同时把这三个稀缺性干没了。它读过几乎所有公开代码,错误率比中级工程师还低,速度快两个数量级。

举个直观的对比,看一个常见任务:搭建一个带认证、数据库、REST API 的 SaaS 后端。

时代工具时间主要成本
2015Express + Postgres + Passport 手写一周人力(90%)
2020Supabase / Firebase一天人力(60%)+ 学习成本
2025Claude Code 一句话生成5 分钟几乎归零
2026同上,但带完整测试和部署5 分钟真·归零

注意成本曲线不是线性下降,是阶梯式断崖。每一次跳跃后,前一代的"专业能力"就贬值一个数量级。

这意味着:你过去为了"会写"投入的训练,正在以肉眼可见的速度变成沉没成本。


二、传统认知里的三个误区

面对这个变化,工程师圈子里流传着几种安抚自己的话术。我把它们一一拆开。

误区 1:AI 写不了复杂代码

“复杂"这个词在被滥用。

大多数所谓的"复杂代码”,其实是长代码——它的复杂度来自规模而非新颖性。状态机、缓存层、消息队列、分布式锁、ORM 映射……这些东西看起来复杂,但模式都在 AI 的训练集里。

真正复杂的是什么?是需求的复杂。是你要不要做这个功能、要做到什么程度、放在哪一层、如何与现有系统协调。这些不在代码里,在你脑子里。

AI 把代码这一侧的复杂性消化了。剩下的复杂性,全部压在了"你能不能描述清楚要什么"上。

误区 2:我学得快就能保住价值

学什么?

如果你学的是"如何用某框架”——React 18、Next.js App Router、LangChain 0.3……这些东西的半衰期已经短到 6 个月。AI 学这些比你快得多,因为它每天都在被新数据训练。

学习速度本身已经不是护城河了。学习方向才是。

学"框架的使用"是死路。学"框架背后解决的问题"和"为什么这个解法优于另一个"才有累积效应。

误区 3:高级工程师肯定不受影响

冲击的程度,不按 title 算,按"输出物的可复制性"算。

一个挂着 Senior 头衔但每天在写 CRUD 和适配业务逻辑的工程师,和一个 Junior 但能在产品方向上做出关键判断的人——前者比后者更危险。

我见过 15 年经验的"老炮"在 Claude Code 面前手足无措,也见过 2 年经验的年轻人用 AI 一周做出一个完整产品 MVP。差别不在工龄,在他们关注的层次。


三、新框架:软件价值漂移三层模型

为了把这个漂移方向讲清楚,我提出一个简单的模型。

┌──────────────────────────────────────────────────┐
│                                                  │
│   L3  判断层  (Judgment / Taste)                 │  ← 价值飙升
│       做什么、不做什么、什么是好                  │
│       为谁做、什么时候做、做到什么程度            │
│                                                  │
├──────────────────────────────────────────────────┤
│                                                  │
│   L2  设计层  (Design)                           │  ← 人机协作
│       架构权衡、接口契约、性能边界                │
│       安全模型、数据流、失败模式                  │
│                                                  │
├──────────────────────────────────────────────────┤
│                                                  │
│   L1  实现层  (Implementation)                   │  ← 复制成本归零
│       写代码、调 API、CRUD、模板                 │
│       配置、调试、部署脚本                        │
│                                                  │
└──────────────────────────────────────────────────┘

         ↑                      ↑
    AI 替代率                 人类价值密度
   L1: 95%                   L1: 低
   L2: 40%                   L2: 中
   L3:  5%                   L3: 极高

三层的特性完全不同。

L1 实现层 是过去 90% 工程师工作的所在。写一个 endpoint、加一个字段、改一个 bug、配一个 nginx。这一层的特点是:模式已知,规则明确,结果可验证。所以它最容易被 AI 接管,且接管速度最快。

L2 设计层 是关于"怎么搭"的决策。要不要拆微服务?这个表用什么主键?缓存放 Redis 还是 in-memory?API 是 REST 还是 RPC?这一层的特点是:有多个合理解,需要权衡。AI 能给出选项,但拍板的人还得是你——因为权衡需要上下文,而上下文 AI 不一定有。

L3 判断层 是关于"做不做"和"做什么"的决策。这个功能要不要上?用户真正的痛点在哪?什么时候停掉这个产品线?这一层的特点是:没有标准答案,需要 taste。AI 在这一层基本帮不上忙,因为 taste 来自经验、品味和对世界的真实接触。

这三层之间还有一个关键的非对称性:价值密度恰好和 AI 替代率成反比

L1 的 95% 工作可被 AI 替代,意味着如果你的产出 90% 在 L1,那你的市场价值正在以每年 30%-50% 的速度蒸发。 L3 的 5% 可被替代,意味着一个能在 L3 持续做出好判断的人,市场价值会在未来三年翻倍。


四、应用方式:个人、团队、公司

这个模型的价值不在于描述现状,在于指导你重新分配注意力。

4.1 个人:把时间从 L1 抢回来

我自己的做法是每周复盘一次时间分配,按 L1/L2/L3 打标签。

from dataclasses import dataclass
from typing import Literal

Layer = Literal["L1_implementation", "L2_design", "L3_judgment"]

@dataclass
class WorkBlock:
    """A unit of work, classified by which value layer it lives in."""
    description: str
    hours: float
    layer: Layer

    @property
    def ai_replaceable_ratio(self) -> float:
        """How much of this block AI could fully take over today."""
        return {
            "L1_implementation": 0.95,
            "L2_design": 0.40,
            "L3_judgment": 0.05,
        }[self.layer]

    @property
    def human_value_density(self) -> float:
        """Inverse of replaceability — where your time actually compounds."""
        return 1.0 - self.ai_replaceable_ratio


def weekly_review(blocks: list[WorkBlock]) -> dict[str, float]:
    """Show how this week's hours splits across the three layers."""
    total = sum(b.hours for b in blocks)
    by_layer: dict[str, float] = {}
    for b in blocks:
        by_layer[b.layer] = by_layer.get(b.layer, 0.0) + b.hours
    return {layer: round(h / total, 2) for layer, h in by_layer.items()}


if __name__ == "__main__":
    week = [
        WorkBlock("写一个新的 settings 页面", 6.0, "L1_implementation"),
        WorkBlock("调试 OAuth callback 的边界情况", 3.0, "L1_implementation"),
        WorkBlock("决定是否拆出独立的 billing 服务", 2.0, "L2_design"),
        WorkBlock("和用户聊为什么留存掉了", 1.5, "L3_judgment"),
        WorkBlock("决定砍掉 v2 的两个 feature", 0.5, "L3_judgment"),
    ]
    print(weekly_review(week))
    # → {'L1_implementation': 0.69, 'L2_design': 0.15, 'L3_judgment': 0.16}
    # 警示:69% 的时间花在最容易被替代的层

# generated by hugo AI

跑完一次你会很难受。我第一次做这个统计时,L1 占了 75%。

把它降下来的方法不是"少干活",而是把 L1 的工作主动交给 AI,把腾出来的时间投入 L2 和 L3。具体说:

  • L1 工作的姿势:从"我来写"变成"我来描述、AI 来写、我来 review"。Review 的时候只看 L2/L3 的问题:架构有没有歪、需求理解对不对,不去抠语法
  • L2 工作的姿势:把 AI 当成"穷举选项的初级架构师"。让它列出 3-5 个方案及取舍,你来拍板。这个对话本身就是 L2 训练
  • L3 工作的姿势:AI 在这里基本帮不上忙。你需要的是和真实用户聊、看真实数据、做真实决策。不要试图把 L3 也外包给 AI——那是在掏空自己

4.2 团队:重构招聘和评估

如果你管理团队,这个模型会改变你做几件事的方式。

招聘:减少"按代码量算产出"的角色。一个能稳定输出"该做什么"判断的人,比五个 L1 卷王更值钱。简历筛选时多看决策,少看技术栈列表。

评估:用"决策质量"替代"代码行数"。问一个工程师:你这个季度做的最重要的判断是什么?为什么是它?后来证明对不对?这一组问题比看 PR 数量信息量大十倍。

配比:每个团队需要更高比例的"L3 人才"——不一定是 PM,也可能是高级工程师中的 sense maker。一个 10 人团队,L3 浓度从 1 个变成 3 个,输出质量会有质的变化。

4.3 公司:商业模式被迫迁移

工具类 SaaS 的护城河正在系统性地消失。

如果你的产品是"用户花 5 分钟就能用 Claude Code 自建出 80% 功能"的那种——比如轻量协作工具、简单 CRM、内部 dashboard——那你的定价权和留存都会被快速侵蚀。这不是危言耸听,是已经在发生的事。

新的护城河是这些不能被复制的东西

  • 数据:用户在你这里产生的、且无法迁出的历史数据
  • 网络效应:用户因为别的用户也在而留下
  • 品牌信任:用户愿意把关键流程托付给你而不是一个临时复刻品
  • 对客户的深度理解:你知道某个特定行业的 100 个细节,AI 不知道

“做 AI 就能做"的产品,不再值得 VC 投资。值得投资的是"AI 让做这个产品变成可能,但你之外的人做不到一样好”——壁垒在 L3,不在 L1。


五、一段代码佐证:复刻 vs 创造

回到开头那个周六的实验。我后来又做了第二个对比实验。

任务 A:复刻那个开源日志工具。耗时 3 小时。最终价值:0(我不用它)。 任务 B:解决我自己工作流里的一个真实痛点——把每天散落在 5 个地方的工作记录自动归档到一个 markdown 文件里。耗时 30 分钟。最终价值:每天节省 10 分钟,且持续受益。

代码量:A 远大于 B(A 大概 1500 行,B 不到 300 行)。 价值差:B / A ≈ 100 倍。

差别就在 L3——任务 B 包含了一个判断:“我今天真正缺的是什么?"。任务 A 没有这个判断,只是在重复"做"这个动作本身。

更扎心的版本:任务 A 的 1500 行代码,AI 一年内会被替代到任何一个普通用户都能复刻。任务 B 的 300 行代码,AI 一年内也能写——但你不会知道要写它,除非你像我一样花了三个月观察自己的工作流。

写代码的能力会贬值,知道写什么的能力不会。


六、判断 vs 复刻:一个具体的决策清单

每次你坐到电脑前准备开始一段开发工作,可以先问自己这五个问题:

┌─────────────────────────────────────────────────────────┐
│  L3 Pre-flight Checklist                                │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  1. 这个东西做出来后,谁会真的用?包括我自己。           │
│                                                         │
│  2. 如果不做,会失去什么?是真损失还是机会成本错觉?     │
│                                                         │
│  3. 做出来的"好"和"足够好"差多少?我需要哪一档?         │
│                                                         │
│  4. 这是在解决问题,还是在享受"做出东西"的成就感?       │
│                                                         │
│  5. 一年后回看,这段时间用在这上面值得吗?              │
│                                                         │
└─────────────────────────────────────────────────────────┘

这五个问题没有一个能让 AI 帮你回答。

但每问一次,你就离 L3 近一步,离被 AI 替代的命运远一步。

我现在每次想"用 Claude Code 做点什么"之前,都会先过一遍这个清单。被它毙掉的项目,比通过的多得多。


七、升维总结:从"做出来"到"知道做什么”

回到那个周六下午。我用 Claude Code 复刻了一个工具,“做"得很完美。但"做"本身没意义。

软件开发的价值,正在从"做出来"漂移到"知道做什么”。

这不是工程师的危机,是工程师角色的重新定价

那些焦虑的工程师,是因为还在 L1 层卷——他们的训练全部投入到一个正在迅速贬值的层。 那些兴奋的工程师,是因为终于可以摆脱 L1 的繁琐——他们花了十年训练却没机会展示的 L3 判断力,第一次成为主战场。

你今天写下的代码,AI 一年内就能复制。 但你今天做出的判断——为什么写、为什么不写、为谁写、停在哪——那是别人复制不了的东西。

护城河没有消失,它只是从你的指尖,搬到了你的脑子里。


你在工作里有没有发现自己花在"写代码"之外的时间越来越多?哪些 L3 的判断让你印象最深?欢迎留言聊聊。


See also