---
title: "代码写得太顺手，我做出来的垃圾越来越多了 | 行开心的颠倒世界"
description: "AI 把做工具的成本降到了零，也拆掉了程序员的刹车片。满磁盘的半成品玩具项目证明：写代码变容易后，验证和维护变得极贵。给冲动设个 48 小时冷冻期，才能把真正有价值的系统做出来。"
canonical: "https://xingkaixin.me/posts/friction-as-a-feature/"
language: "zh-CN"
---

# 代码写得太顺手，我做出来的垃圾越来越多了

AI 把做工具的成本降到了零，也拆掉了程序员的刹车片。满磁盘的半成品玩具项目证明：写代码变容易后，验证和维护变得极贵。给冲动设个 48 小时冷冻期，才能把真正有价值的系统做出来。

2026年9月14日·1,159 字·3 分钟

[AI编程](https://xingkaixin.me/tags/AI%E7%BC%96%E7%A8%8B/)[工程实践](https://xingkaixin.me/tags/%E5%B7%A5%E7%A8%8B%E5%AE%9E%E8%B7%B5/)效率工具

![代码写得太顺手，我做出来的垃圾越来越多了](https://xingkaixin.me/cover/friction-as-a-feature.webp)

前两天清理 Mac 空间，顺手翻了下 `~/workspace/toy/` 这个文件夹。

里面整整齐齐躺了二十多个工程：`x-thread-archiver`、`cf-d1-notion-sync`、`pdf-invoice-renamer`、`vcard-to-sqlite`……

每个点进去看一眼，commit 历史整洁规范，全都是 Claude Code 或者 Cursor 跑出来的。单测全绿，甚至还煞有介事地配了 GitHub Actions 工作流和 Dockerfile。

但我甚至想不起里面有一半项目当初是拿来干嘛的。

## 五分钟生成的工具，死在第一张真实发票上

就拿那个 `pdf-invoice-renamer` 来说吧。起因只是我某天报销发票，觉得一个个重命名文件太麻烦。

放在两年前，我大概会叹口气，老老实实肉眼核对两眼文件名手动改掉。因为我知道自己搓个工具得装 Poppler、调 Python 的 `pdfplumber`，还要处理不同税控盘导出来的奇葩版式，折腾一整晚都不一定能跑通。

但上个月那天晚上，我脑子一热，直接在终端里敲了一句需求。

Claude Code 反应飞快，不到五分钟就用 Rust 搓了个 CLI，还自带多线程提取。跑起来那一瞬间，单测通过，终端里刷出格式化好的文件名。我甚至产生了一种“我今晚顺手就能把它打包发个 Product Hunt”的迷之自信。

第二天我真拿真实发票去跑，问题立刻炸开。某张带双层文本的电子发票直接把正则表达式打崩了，终端里抛出一整屏的 UTF-8 解码乱码。

这时候如果是我自己一行行敲出来的代码，我大概会顺藤摸瓜去改 parser。但我看着那两百行由 Agent 一口气吐出来的 Rust 代码，脑子里第一反应居然是：算了，反正这个月的发票已经报销完了，先不管了吧。

这个项目从此烂在本地磁盘里，再也没被打开过。

![五分钟生成的 Rust 工具遇到真实发票后报错并被搁置](https://xingkaixin.me/posts/images/friction-as-a-feature/friction-as-a-feature-01.webp)

## 曾经烦人的工程阻力，其实是理智的刹车片

以前写代码时那种“浑身难受的阻力”，在某种程度上其实救过我很多次。

光是 `pnpm create` 之后配一遍 `tsconfig.json`、调 `vite.config.ts` 里的路径别名、被 ESLint 各种红线卡住，就能把一个人一时兴起的冲动磨掉大半。那会儿觉得这套环境配置地狱烦得要命，但它确实像个沉重的物理刹车片——在你为了一个只用五分钟的伪需求打算浪费整个周末的时候，一脚把你给踹醒。

因为实现成本摆在那里，你会下意识掂量：这个东西真的非做不可吗？如果答案是否定的，大部分烂点子在配置完依赖前就会死掉。

现在倒好，大模型把这副刹车片彻底拔掉了。

## 生产越是廉价，验证和维护就越昂贵

做东西的边际成本一旦被压到接近零，脑子里蹦出任何一个半生不熟的念头，你都能在喝口水的工夫让 Agent 敲出一个全栈工程。

但系统工程的守恒定律并没有消失：你省下了敲键盘的体力，换来的却是桌面上永远关不掉的终端标签页、几十个跑了一半的 feature 分支，还有一堆连你自己都懒得读第二遍的黑盒代码。

代码写得太顺手，会让人产生一种掌控全局的错觉。你以为自己在创造生产力工具，实际上只是以极高的并发度向磁盘里倾倒一次性的数字垃圾。

一旦遇到真实业务里的边界异常，没有人愿意接盘那些连自己都未曾深思过的实现。

## 给冲动设一个 48 小时的物理冷冻期

上周我把 `~/workspace/toy/` 整个目录彻底删除了。

顺便给自己立了一条硬规矩：以后脑子里再冒出什么“顺手写个小工具”的点子，哪怕手再痒，也坚决不准立刻开终端。

拿一张便签纸把需求写下来，贴在显示器边框上，老老实实放满两天。

两天后要是发票还得报销、流程还卡在喉咙里、工具非用不可，再开电脑让 Agent 动手也不迟。

![点子先等待四十八小时，八张便签最终一张也没留下](https://xingkaixin.me/posts/images/friction-as-a-feature/friction-as-a-feature-02.webp)

那张显示器边框上贴过的七八个点子，到现在一个都没活过四十八小时。

**写代码时那点让人烦躁的阻力，从来不是效率瓶颈；它是在你动手制造更多数字垃圾之前，替你踩下的最后一脚刹车。**

## 版权声明

作者

XingKaiXin

标题

代码写得太顺手，我做出来的垃圾越来越多了

发布时间

2026年9月14日

文章链接

[https://xingkaixin.me/posts/friction-as-a-feature/](https://xingkaixin.me/posts/friction-as-a-feature/)

本作品采用[CC BY-NC-ND 4.0 DEED](https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh-hans)许可。

导览

展开导览
