文章摘要
过去三年Python开发者工具领域变革,Charlie Marsh从计算生物学公司离职后,9天搭建出Ruff原型,后创立Astral公司。他分享行业困惑,探讨AI对编程的影响,还谈及Python工具链变革、开发者营销、选Rust原因等,给出创业建议,强调坚持自我原则。

过去三年间,Python开发者工具领域悄然发生了一场颠覆性变革。一位名叫Charlie Marsh的年轻工程师,从计算生物学公司离职后,在尚未明确方向的状态下,仅用9天就搭建出了Ruff的原型——一款比当时最快的Python代码检查工具还要快10到100倍的代码检查工具。Ruff获得成功后,他顺势创立了Astral公司,并用Rust打造了uv包管理器,这款工具的速度让pip看起来如同慢动作回放。这两款项目迅速席卷Python社区,GitHub星标数快速增长,最终让他在今年三月将整家公司出售给了OpenAI。

这并非一个单纯的“技术天才靠Rust征服世界”的故事。Charlie在播客中与主持人共同探讨了AI Agent如何重塑软件工程的每个环节,除了技术本身,他还分享了行业正在集体经历的困惑:当提交一份“看起来合理”的PR成本降至零,而审查它的成本依然高昂时,我们该信任什么?当编程的乐趣被“指挥Agent干活+逐行审查Agent输出”的工作流取代,编程还值得热爱吗?

这些问题没有标准答案,但Charlie作为一线实践者给出了最诚实的思考。近期海外社交平台上流行的“I read the code”梗,调侃程序员已从“写代码”沦为“读代码”,而Charlie却反其道而行之——他自己使用工具时几乎不读代码,全部交由AI完成。不过他也坦诚,自己曾因完全依赖AI模式被同事提醒,后来他查看了Bun的代码仓库,发现头号贡献者竟是一个机器人,这让他意识到Bun的社区生态与自己团队的完全不同。他还分享了团队对抗低质量AI代码的具体策略,以及从普通工程师转向创业的经历,还有他认为“现在是早期职业工程师最难的时刻”的原因。

Python工具链的变革契机

在创立Astral之前,Charlie在一家计算生物学公司工作,任务是用Python搭建支持机器学习运行的软件系统。这段经历让他一边学习Python,一边接触了Go和Rust,在多个技术栈间切换。他所在的团队规模很小,但代码库体量相对较大,需要服务包括机器学习研究员在内的整个团队。在使用各类生态系统的工具链时,他发现随着项目规模增长,团队不断撞上工具的性能天花板。

他观察到Python生态与Web生态的显著差异:Web领域一直在尝试各种创新,对性能有极强的执念,从用Go编写的ESBuild,到用Rust打造的SWC,再到Bun、Deno等工具,原生高性能工具链已成为JavaScript生态的标配,尤其在应用规模扩大、开发者本地负载增加时优势明显。但Python生态却没有这种趋势,大多数工具仍用Python自身编写,性能优化的空间被极大限制。

这让Charlie产生了一个核心假设:Python工具链完全可以更快。他发布Ruff时的博客标题就点明了这个观点——《Python工具链可以快得多得多》。他搭建的原型验证了这个假设,证明Python生态的工具性能有巨大的提升空间。

开发者营销的关键:10秒抓住注意力

在撰写完关于mypy性能分析的博客后,仅9天他就推出了Ruff的原型。他选择先做代码检查工具,是因为linter相比类型检查器更容易快速交付可用版本,且可以通过迭代扩展规则,让用户从最初的小核心功能中就能获得实际价值,这也是建立项目势能的关键。

Ruff的博客发布后登上了全球技术社区平台首页,在海外社交平台被大量转发。Charlie认为,这其中一半靠运气,一半靠前期的营销策略。他的核心思路是“10秒内抓住注意力”:无论博客、README还是任何宣传材料,都要在用户打开页面的10秒内让他们明白“这个项目对我有什么用”,不需要过多冗余内容,只需清晰传递核心价值。

他特别提到了性能对比图的作用:一张清晰的基准测试图表不需要额外文字解释,就能直观展示Ruff相较于竞品的速度优势,这在注意力经济中至关重要。同时,他采取了极度积极的社区响应策略——只要有人提交issue,他会尽量在一天内确认问题、修复并发布新版本,这种快速迭代的循环为项目积累了大量支持者。此外,行业内的关键人物如知名Python框架作者的关注和试用,也为项目带来了更多曝光。

为什么选择Rust?

Charlie最初选择Rust很大程度上是出于行业跟风,当时Rust在开发者社区热度极高。但随着项目推进,他发现这是一个极其正确的决定。相较于C或C++复杂的工具链和构建系统,Rust的包管理器让开发者克隆仓库后就能直接运行、构建和测试,极大降低了新手的学习门槛,让他可以将精力集中在业务逻辑而非工具配置上。

随着经验积累,他愈发认可Rust的内存安全特性,尽管最初他对此并不在意。Rust还具备出色的扩展性,且头部科技公司也在大规模使用该语言,这让他对Rust的未来充满信心。不过他也表示,自己并非对其他语言持排斥态度,比如Zig的发展就很有趣,他认为Rust也可以向Zig学习,Go语言也有其成功的场景。

AI时代的代码重写:谨慎与边界

如今几乎可以通过AI将现有代码转译为任意语言,但Charlie认为不会对现有项目进行全量重写。首先,完全重写会让人类开发者彻底失去对代码的理解,即使通过直接转译保留了抽象层,若团队重度依赖Agent开发,代码理解的重要性也会被重新定义。

其次,重写本质上是用已知问题交换未知问题:即使测试套件全部通过,也无法保证程序的隐含行为完全一致,相关定律指出,任何实现细节最终都会成为部分用户的依赖,这意味着重写很可能引入新的、未被发现的问题,最终将排查成本转嫁给用户。

他还观察到,当前提交PR的成本已降至近乎为零,但审查和验证的成本却在不断升高,这种不平衡正在严重破坏开源社区生态。他的团队制定了AI贡献政策,并非反对AI,而是过滤掉净负面的贡献,要求提交者必须理解自己提交的代码,因为纯AI生成的评论或代码无法提供人类独有的洞察力和复现步骤。

性能优化:不止于语言,更在于架构

Charlie团队打造的工具比当时的主流方案快一个数量级,这其中Rust提供了基础性能基线,但真正的关键在于架构创新。以UV包管理器为例,其性能提升更多来自缓存设计的优化:重复安装同一个包几乎可以瞬间完成,这得益于缓存布局和安装流程的重新设计,与语言本身关系不大。

在Ruff的开发过程中,团队也通过架构优化不断提升性能,比如团队成员提出的版本号表示优化,用单个整数即可表示绝大多数版本,大幅降低了内存分配开销。而在类型检查器项目中,增量检查的实现则基于特定框架,通过依赖图仅重新计算受影响的部分,极大提升了大型项目中的响应速度。

他还提到,AI擅长局部性能优化,但无法替代人类从第一性原理出发进行系统性架构思考。比如业内一位开发者的案例中,AI将渲染器优化了10倍,但人类手写的版本仍比AI优化后的版本快100倍,这说明仍需要人类主导核心设计。

对抗AI低质量代码的策略

面对AI生成代码可能存在的质量问题,Charlie的团队采取了多重策略:首先是强化自动化验证,每个PR都会运行大量基准测试,覆盖内存使用、执行时间等指标,同时通过生态测试对比前后版本的诊断信息差异。其次,要求团队成员在提交PR前先用AI Review工具进行多轮审核,提前发现问题。

此外,他个人也会在平台中逐行审阅PR,以发现本地对比时容易忽略的问题。他还会将团队常见的错误编码为共享技能,让AI在生成代码时主动规避这些问题,比如检查条件判断的合理性、代码的可读性等。

初级工程师的AI时代困境

Charlie认为,当前的早期职业工程师正面临前所未有的挑战。团队更倾向于招聘资深工程师,因为优秀的工程师能更有效地使用AI工具放大自身技能,而初级工程师往往无法为AI提供有效的指导,反而容易被低质量的AI输出带偏。

他坦言,如果自己是刚入行的工程师,可能也会陷入依赖AI却无法掌握核心技能的困境。如今的学习迭代回路已发生变化,过去工程师可以通过向资深同事学习快速成长,但现在初级工程师可能只能从AI那里获取信息,这无疑增加了掌握扎实软件工程基础的难度。

意料之外的创业历程

Charlie的创业并非刻意规划的结果。他从原公司离职后,被一位同期从头部科技公司离职的朋友邀请共同创业,两人最初在众多想法中徘徊,直到他将业余时间投入到开发者工具的开发中。他原本计划先与投资人建立联系,等一段时间后再启动融资,但项目的快速发展让事情提前到来。

融资过程远比他想象的顺利,三轮融资均由投资人主动发起,投资人不仅给予了充足的支持,还承诺如果他后续不满意可以退还投资退出,这让他初期的压力小了很多。真正的压力来自公司走上正轨后,团队规模扩大带来的责任。他始终保持保守的融资策略,更在意与投资人的理念契合而非竞价条款。

开源与商业化的平衡

Astral的商业化路径始于推出的托管服务,主打包管理器的私有注册表支持。许多用户出于安全或私有工件发布的需求,需要替代公共注册表的方案,该服务的推出恰好解决了这一痛点,且由于客户端与服务器端垂直整合,产品的速度和易用性都得到了极大提升。

尽管开源工具保持免费,但商业化产品的收入增长相当可观,且依托开源社区的用户基础,销售漏斗质量极高。被收购后,团队得以将更多工具免费开放给社区,比如针对特定生态的预构建发行版,解决了长期困扰开发者的环境配置问题。

给创业者的建议:坚持自我原则

Charlie并不喜欢给创业者提供通用建议,他认为行业内存在大量幸存者偏差,相同的建议可能带来完全相反的结果,最重要的是找到自己的原则并坚持下去。比如远程办公还是线下办公,两种模式都可以成功,他的团队全程采用远程办公,反而招到了优质的跨区域团队。

他建议创业者尽量减少融资环节的时间消耗,找到真正信任的投资人而非周旋于众多投资方。如果没有合适的联合创始人,不必勉强,可以通过与亲友、早期团队分享,以及建立创始人圈子来获取支持。他还提到,不必过度关注行业的统一标准,找到符合自己期望的工作方式才是最重要的。

对于刚毕业的自己,他会告诉当时的自己:“你的决定是正确的,不必过度焦虑。”他曾在离开学校后选择加入非盈利教育机构,也曾因朋友的高薪奖金而犹豫,但最终这段经历为他积累了宝贵的运营和技术经验,让他找到了真正热爱的事业——构建开发者工具。

以上内容不代表本平台立场,仅供读者参考