AI 写代码最危险的地方,不是它会写错。是它写错得太快。
需求没搞明白,已经开始改文件。
测试没跑,已经告诉你“应该没问题”。
一个方向错了,5 分钟能给你堆出 2000 行代码。
最近看到一个仓库,专门治这个:
玩 Claude Code / Codex / Cursor 的,建议收一下。
它做的事很简单:
不给 Agent 加速。先给 Agent 上规矩。
核心流程就这几个:
/spec → 先把需求说清楚
/plan → 先拆任务,别急着动代码
/build → 再开始写
/test → 别说“应该能跑”,跑给我看
/review → 重新审自己刚写的东西
/ship → 最后才上线
看起来都很基础。但 AI Coding 到现在,最缺的恰恰就是这些基础。以前程序员方向错了,可能半天才写歪。现在 Agent 方向错了,它会用极高的效率,把你带进沟里。
所以速度已经不是最稀缺的东西。不跑偏才是。
里面几个 Skill 我挺喜欢。
interview-me
需求说不清?那就先别写。
让 Agent 一直问。问到它真的知道你想干嘛,再开始。
这一步看起来慢,其实最省时间。
很多“AI 写烂了”的项目,根本不是模型不行,是第一句话就没说清楚。
spec-driven-development
这个我现在越来越认。
以前是直接说“帮我做个 XXX”,Agent 立刻开工。
现在更愿意先把 Spec 定死:做什么、不做什么、输入输出是什么、边界在哪、什么情况才算完成。再写。
AI 越快,Spec 越重要。
不然你只是更快地把错误需求做完。
test-driven-development
AI 最擅长生成一种东西:看起来很对的代码。
但代码不是作文。看起来对,没用。跑过才算。
所以我现在看到“应该可以正常工作”,基本都会条件反射:跑测试。
doubt-driven-development
名字就很对味。
Agent 给你一个答案,不要马上信。多问一轮:
为什么这么设计?有没有更简单的?这个假设验证了吗?会不会修了一个 Bug,又埋了三个?
主动怀疑一次。
这个思路我觉得不只适合 Coding。美股、Crypto、预测市场也一样,越是一个你特别想相信的观点,越该主动找证据干它。
这个仓库真正有意思的地方,不是“又多了 24 个 Skills”。
而是它提醒了一件事:
以后拉开 Agent 差距的,可能不只是模型,而是工作流。
同一个 Claude Code。
一个人直接说“帮我把这个功能做了”。
另一个人先走 Spec → Plan → Build → Test → Review → Ship。
最后出来的东西,大概率不是一个级别。
所以以后别只研究:怎么让 AI 写得更快。
更值得研究的是:
怎么让 AI 少犯蠢。
仓库:
做 AI Coding 的,建议收。
别再让 AI 给你手搓 Java 工具类了。
Google 有个 5 万+ Star 的老牌开源库,很多你让 AI 现写的东西,它十几年前就给你造好了:名字叫 Guava。
写 Java 的建议认识一下。尤其现在天天让 Claude / Codex 写代码,更有必要。简单讲讲怎么用👇
Guava 是什么?你可以把它理解成:java 官方标准库的“加强包”。Google 自己大量 Java 项目都在用。
里面已经给你封好了很多常见东西:
集合
字符串处理
缓存
Hash
I/O
并发工具
Graph
基础类型工具
很多东西,你根本没必要让 AI 再造一遍。
先装。
Maven:
Gradle:
implementation("")
Android 用:
33.6.0-android
就这么简单。
第一个我很喜欢的东西:ImmutableList
普通 List 谁都能改。但有些数据你压根不希望后面的人碰。比如:var coins = ImmutableList.of("BTC", "ETH", "SOL");创建完就是不可变集合。
这个思路其实很重要:
能不让代码改,就别给它改的机会。
AI 写大型项目时尤其有用。
少一点“谁把这个 List 改了”的灵异事件。
第二个:Multimap
这个很舒服,普通 Java 里,如果一个 Key 对多个 Value:
Map>
然后你就开始:
判断有没有 Key
创建 List
再 add
再处理空值
Guava 直接:
Multimap sectors = ArrayListMultimap.create();
然后:
sectors.put("AI", "NVDA");
sectors.put("AI", "GOOGL");
sectors.put("Crypto", "COIN");
一看就懂,这种才叫少写垃圾代码。
还有一个很实用:
Preconditions
以前经常看到:
if (user == null) { ... }
if (amount <= 0) { ... }
一层套一层。
Guava 可以直接:
checkNotNull(user);
checkArgument(amount > 0);
代码一下干净很多,不是为了炫技。而是让真正重要的业务逻辑露出来。
Guava 里还有一堆这种小东西。Joiner、拼字符串Splitter、拆字符串、Sets、集合操作、Hashing
、Hash、Graph、图结构、以及各种 Collection 工具。
单独拿出来都不惊艳。但写一个真实项目的时候,你会发现:每天浪费时间的,恰恰就是这些小破事。
这也是我现在用 AI 写代码越来越明显的一个感受:不要什么都让模型生成。
比如:“帮我写一个集合去重工具。”、“帮我写一个字符串拼接工具。”、“帮我实现一个 Multimap。”,能写。
但没必要,成熟轮子已经存在的时候,最好的 Prompt 往往不是:帮我写。而是:这个东西有没有成熟库?
所以 Guava 真正值得学的,不是背 API。而是建立一个意识:别重复造轮子,尤其 AI 时代。模型写 300 行代码只需要几十秒,并不代表那 300 行代码应该存在。能用成熟、经过大量项目验证的库解决,很多时候比让 AI 再生成一套更靠谱。
仓库:
写 Java 的可以直接收。
下一篇我准备拆一个更狠的:“我平时让 AI 写代码,最常用的 10 个 GitHub 仓库。”不是收藏夹吃灰那种。是真的能少写很多代码。
显示更多