AIEngineeringPython

我一行代码都没读就发布了",被OpenAI收购后,uv工具创始人开始反思AI编程

InfoQ··原文链接
收录于 2026/7/6 09:33:57

配图:播客视频截图

过去三年,Python 开发者工具领域发生了一场静悄悄的革命。Charlie Marsh 从一家计算生物学公司辞职后,花了 9 天搭出 Ruff 原型——比当时最快的 Python linter 还快 10 到 100 倍。随后他成立 Astral,用 Rust 打造了 uv,最终在今年三月把整家公司卖给了 OpenAI。

但这不只是"技术天才靠 Rust 征服世界"的故事。日前 Charlie 在播客中与主持人 Ryan Peterman 探讨了 AI Agent 如何重塑软件工程的每个环节,并给出了一个一线实践者最诚实的思考。

核心金句速览

  • Python 工具链:隔壁 JS 圈早把工具用 Go/Rust 重写了,Python 圈还在用 Python 写工具,慢得理所当然。"凭啥我们不能拥有同样爽的东西?"
  • 选 Rust:坦白说当初就是跟风(hype),但回头看香爆了——Cargo 一把梭,git clone 完就能 cargo run,不用跟 C++ 构建系统斗智斗勇。内存安全当初根本不在乎,现在觉得真香。
  • AI 时代重写:不会。代码完全重写后,作为人类你可能就不再理解任何代码了;用已知问题换未知问题太蠢,测试全过不代表行为一致(Hyrum's Law),最终坑的是用户。
  • AI 写 PR:现在 AI 写 PR 成本为零,审查成本却更高,开源生态快被淹死了。
  • 结对编程:以前同事闭眼合我 PR,现在逐行细审——因为代码不是我的了,是 Agent 的。信任崩塌了。但整天使 AI 跑各种实验,以前不敢想的问题随手验证,这种解锁感挺爽。
  • 初级工程师:会被坑惨。他们没能力给 AI 当教练,只能被 AI 带沟里去。优秀工程师用 AI 更猛,所以团队倾向招资深工程师。

Python 工具链需要一场"Rust 革命"

Charlie 观察到,Web 生态(ESBuild、SWC、Bun、Deno)早把原生工具链当理所当然,但 Python 生态缺少这种实验精神,所有工具都是 Python 写的。他发布 Ruff 时博客标题就是《Python 工具链可以快得多得多》——本质是一个待验证的假设。9 天做出 linter 原型,因为 linter 核心逻辑简单、规则可无限扩展,"用户从一个小核心加若干规则就能立刻获得价值"。相比之下,完成 75% 的类型检查器几乎毫无用处。

开发者营销"10 秒法则"

Charlie 坦言在工程师圈子里"营销"几乎是脏话,但他认为 GitHub 上成千上万的优秀项目就因为不会营销而永远没人发现。核心策略是"10 秒内抓住注意力":不需要一堆 emoji 和截图,而是用诚实、真诚的方式在几秒内讲清楚"为什么这个项目值得你花时间"。

他当年研究过 OpenAI/DALL-E 的博客——"即使你一个字都不读,光看图片和标题,你也能理解他们做了什么,而且会被震撼到"。Ruff 的 benchmark 对比图就是典型:一张图本身就能说明一切,不需要文字解释。但他也强调不做"图表犯罪"(chart crime,故意截断坐标轴),benchmark 本身复杂且充满争议,必须在准确传达与抓住注意力之间找平衡。

为什么选 Rust

Charlie 坦诚当初选 Rust 很大程度是跟风,但回头看是极其正确的决定。他现在对 Rust 最大的欣赏点反而是工具链:Cargo 让"git clone 然后 cargo run/build/test"就能跑起来变得理所当然,而 C/C++ 的构建系统"那一堆乱七八糟的东西"令人望而生畏。内存安全是他当初完全不在乎、现在觉得"简直太棒了"的东西。

他直言不误:除非有非常特定的技术原因或维护现有软件,否则基本不明白为什么要在新项目里用 C 或 C++——"我知道这么说会被骂,但我无所谓。"但他也不教条,认为 Zig 正在发生的事情非常有趣,Rust 应该向它学习;很多人用 Go 也取得了巨大成功。

AI 时代的代码重写

Charlie 直到去年圣诞假期才开始真正用 Agent 编程,到现在不过几个月,但已经"几乎不在编辑器里直接改代码了,所有修改都通过 Codex 完成,即使小改动也是用提示词驱动"。他对 Bun 那种纯 Agent 重写表示不会做但欣赏其实验精神,并给出三层反思:

  1. 代码理解问题:如果代码被完全重写,作为人类你可能就不再理解任何代码了。如果团队已重度依赖 Agent,理解代码到底还重不重要?
  2. 已知问题换未知问题:即使最好的测试套件也只是正确性的近似逼近。Hyrum's Law 告诉我们任何实现细节最终都会变成某些人依赖的行为——即使测试全过,隐含行为可能已改变,最终把问题推给用户。
  3. 开发方式光谱:从 Karpathy 定义的 Vibe Coding 到完全不使用 LLM。Charlie 自己上周写了个内部用的 Rust linter,全程由 GPT-5.5 完成,"我一行代码都没读"——因为内部工具容易判断正确性。但 UV 被数百万工程师依赖,任何变更必须极其谨慎。

Charlie 去看了 Bun 的仓库,发现"跟我们的仓库完全是两个世界"——头号贡献者是一个 bot,人类提交的 PR 里评论也明显全是 agent 写的。他对那篇重写博文很感兴趣,但认为"没有人类审查,我不认为有人真正读过那些代码的实质性部分,这基本上是不可能的"。

对抗 AI slop 的策略

Charlie 分享了团队对抗 AI slop 的具体做法:

  • AI 政策:不是反 AI,而是过滤净负面贡献。政策很简单——"你提交的东西,你自己得理解"。识别 agent 写的回复有"特征":过于详尽、格式过于规范、用词过于学术、塞满链接,在没必要的地方投入远超人类的"努力"。
  • Zig 项目的对比:Zig 完全禁止 LLM 代码,提出了"贡献者扑克"概念——传统开源中你给新贡献者反馈,他学习成长,本质是投资"人";但 agent PR 打破了这个循环:给反馈→塞回 agent→生成新版本→合并,没有累积没有成长。
  • 审查成本失衡:以类型检查器 TY 为例,有人花 2 分钟写一个"看起来合理"的 PR,团队却要花 1 小时去理解。"这种不平衡正在严重破坏开源社区的生态,我不知道怎么解决,它只会越来越糟。"
  • 自动化验证兜底:TY 每个 PR 都在 Valgrind 和 CodSpeed 上跑大量 benchmark,覆盖内存、模拟时间、墙钟时间;还有整套生态测试对比诊断信息差异。提 PR 前应用 Codex Review(/review 命令)跑几轮。
  • 自己审一遍:在 GitHub UI 里像审阅者一样从头读到尾,往往能发现本地 diff 时忽略的问题。把常犯错误编码进 skill,比如提 PR 前让 Agent 检查"这些条件判断是否仍然相关,还是重构遗留"。

信任的瓦解与重建

团队有人直接对 Charlie 说:"以前你提 PR,我基本扫一眼就过了,因为对你有很高信任度。但现在你提 PR,我得逐行细审,因为那些代码不是你写的,是 Agent 写的。"Charlie 的第一反应是"这真的很值得深思",并承认自己也经历过:"有时候我晚上睡一觉,第二天早上看自己昨晚提的 PR,心里想的是'等等,这代码写得也太烂了吧?'你很容易骗过自己,以为自己交付了和之前同样标准的工作,但实际上根本不是。"

最难的是灰色地带:代码看起来能用、可接受,但根本达不到以前的质量门槛。

Charlie 提到 Mitchell Hashimoto(HashiCorp 联合创始人)的洞察:他故意写了个很糟糕的渲染器让 LLM 优化,结果 LLM 优化快了 10 倍,但他自己手写的版本比 LLM 优化后的还快 100 倍。"如果你不先用大脑从第一性原理去思考'这个东西理论上应该有多快',那你就会把那些积累的 slop 直接交付出去,然后说'我把它优化快了 10 倍',但实际上它应该能快 100 倍。"

不过 Charlie 现在的感受比几个月前好多了。他越来越欣赏与 Agent 协作解锁的事情——运行实验的成本变得极低,整天都能尝试以前很难、成本很高才能回答的问题。他意识到从构建软件中获得的价值其实被保留了下来:仔细思考数据结构布局、合并一个关闭用户问题的 PR,"我从真正修复和改进某个东西中获得巨大满足感,而不仅仅是敲出代码。"

性能优化:Rust 是地板,架构才是杀手锏

Charlie 强调 Rust 更像性能地板或基线,但真正的杀手锏是架构创新。UV 快是因为缓存设计得聪明——重复安装同一个包几乎瞬间完成,这完全得益于缓存布局方式以及从缓存安装到项目的方式,"这种设计思路与之前所有的 Python 包管理器都截然不同"。

他分享了团队 Andrew(BurntSushi,Ripgrep 作者)的一个优化:用单个 u64 整数表示 90% 以上的版本号,替代海量版本对象的内存分配。他还提到 Codex 擅长微观调优,但默认给不出根本性的重新设计——"如果你只是简单要求降低内存,它通常只给边缘性改进。但如果你通过提示引导协作,是可以到达那些更大的设计的。"

初级工程师在 AI 时代的困境

Charlie 坦言对初级工程师来说现在真的非常难。Astral 团队小,倾向招资深工程师,他很难想象刚入行工程师的学习迭代回路会是什么样——"我大概只能从 Codex 那里学习,而不是反过来。很多时候是我在指导 Codex、纠正它、为它提供安全护栏。如果我是初期工程师,太容易掉进使用 Agent 时发生的那些坏事情里了。"

关于"Token 排行榜"的讨论,Charlie 认为 Token 排行榜会创造糟糕激励。团队最高效的人确实用了很多 Token,但这不是因果关系——"很多优秀工程师能够非常有效地使用 Agent,从而放大自己的技能。"

没预料到的快速创业历程

Charlie 离开 Spring 后被一位从 Meta 离职的朋友说服一起创业,进入"想法迷宫"不知道做什么。他先和投资人建立关系但不急着融资,策略是先认识喜欢投这类东西的人,等三到六个月后再联系。但 Ruff 成长太快,投资人主动让他相信了这条路。三轮融资(种子、A、B)从未公开宣布过 A 轮和 B 轮,直到收购公告才被提到——"每一轮融资基本上都是投资人主动发起的,因为公司发展得好,人们想投。"

Charlie 自认是风险厌恶型的创始人:"决定全力以赴创办公司这件事其实没那么大压力,真正的压力是在公司开始成功后到来的——一开始我没什么可失去的,但后来我有了 20 人的团队依赖我。"

开源与商业产品的平衡

Astral 去年八月推出商业产品 PYX(UV 的托管版本/私有注册表),"因为做了开源,每个人都在用我们的开源工具,所以我们的销售漏斗非常好"。收购的一个好处是可以把平台一部分免费开放——比如为 PyTorch/GPU 生态构建的 Python 发行版,"我们不再试图建立独立业务,而是想构建能扩大整个生态的优秀工具。"

坚持原则,别信"标准答案"

Charlie 不喜欢给创业建议,因为行业太多幸存者偏差:"两个极其成功的创始人给你完全矛盾的建议,你会想'我真的不知道该怎么做'。"他的看法是必须弄清楚什么对自己是真的——远程还是线下、要不要联合创始人、每周工作几天,都没有标准答案。

他没听"找个联合创始人"的建议,因为心里没有合适人选就不强求。他建立了其他创始人圈子,"在纽约我们有六七个人,每年争取一起吃两次饭,听起来不多,但这成了一个非常有用的支持系统。"

推荐影响他的内容:Zig 创造者 Andrew Kelley 关于数据导向设计的演讲,"让我用完全不同的视角看待软件。"

给刚毕业的自己的一句话:"你做的是正确的决定,别太焦虑。很多事情如果你基于原则做决定,最终会好起来的。"


访谈视频原链接:https://www.youtube.com/watch?v=Iw65FD4MGgs

声明:本文为 InfoQ 编译,不代表平台观点,也不构成投资建议,未经许可禁止转载。

评分:
暂无0 人评分)