Skip to content
Published on

AI 时代,如何成为十倍工程师

Technical
Authors

本文探讨了“十倍工程师” (10x engineer)的概念,即那些工作效率远超普通工程师的个人。

首先提到了 AI 工具在提高工程师效率方面的潜力,并以作者的亲身经历为例,说明了 AI 如何帮助他在开发 Chaterm 项目时提高了两到三倍的效率。


引言 ​

“十倍工程师”(10x engineer)这个说法,是指那些工作效率远超普通工程师的个人。这个概念最早可以追溯到 20 世纪 60 年代的研究,特别是 Frederick P. Brooks 在他的著作《人月神话》(The Mythical Man-Month)中提到的观点。Brooks 指出,在软件开发领域里,某些程序员的工作效率比其他程序员高出很多,甚至能达到十倍之多。这一观察后来被广泛引用,并逐渐演变成今天我们所熟知的“十倍工程师”的概念。

如今有越来越多的 AI 工具宣传能够提高工程师 10 倍的工作效率,包括但不限于 Anthropic、Trae、Devin 等知名 AI 公司。 ChatermChaterm

我最喜欢的吴恩达老师,也曾发表过长文来探讨 AI 如何使“10x”成为可能。吴恩达认为,随着越来越多的工作受到人工智能的支持,不只是“10 倍工程师”,会有更多的“10 倍市场营销人员”“10 倍招聘人员”“10 倍金融分析师”这样的“10 倍专业人士”出现。 Chatermhttps://x.com/AndrewYNg/status/1887919658201960807?s=20

如果从 chatGPT 发布(2022 年 11 月 30 日)算起,Gen-AI 的风已经吹了 3 年了,Cursor 发布也已经有 2 年了,AI 真的给我们带来了 10 倍的效率吗?如果目前还没有,那要怎么做,才有机会更接近“十倍工程师”呢?

一个真实的案例 ​

我想先从我自身出发,聊聊 AI 到底为我带来了多少效率提升。

在谈效率提升之前,我想先谈一谈如何去衡量效率。我们可以首先给效率下这样一个抽象定义:做同一件事,所花费的时间越短,效率越高。但是这样定义是不够的,这样只规定了“时间”,没有规定“质量”。对于软件工程的效率我觉得可以这样定义:做同一件事,以最小代码量实现并且做到 bug free 的情况下所花费的时间越短,效率越高。这样定义多了两个额外的要求,避免“垃圾代码”和“有问题的代码”。如果不做这两点规定,“提效”从何谈起呢。

我们在这里讨论的开发特指以团队形式开展的大型软件工程项目,不讨论个人项目或者玩具项目。以我参与的一个开源项目 GitHub - chaterm/Chaterm: Open source AI terminal and SSH Client for EC2, Database and Kubernetes.(一款 AI Terminal 工具)为例,这个项目的总计代码量在 8W 左右。原始项目的复杂度对于评估效率很重要,在 10W 代码量的项目中添加 1K 行代码,跟在 100W 代码量的项目中添加 1K 代码量难度是完全不一样的。 Chaterm

最近我要开发一个新的需求——支持 MCP。为完成这个功能,我前后进行了大约 10 次 commit。其中最关键的是下面这两次提交,这两次提交涉及的功能更新共计 5000 行有效代码。

Chaterm

由于项目已经上线三个星期,并未发现 bug,所以我单方面判定这 5000 行代码为合格的代码(如果感兴趣的朋友也可以点开链接帮我 review 一下)。如果没有 AI 的帮助,完成这样一个功能我需要花费多少时间呢?我预计大概要一个月左右,算法很简单,假设手敲代码的情况下一天的有效代码量为 200~300 行,5000 行差不多需要一个月时间。

有了 AI 帮助,我花了多长时间呢?答案是一个多星期,不到两个星期。所以 AI 对我的提效大概是两到三倍左右。离十倍工程师还有很远的距离。如果想要做到十倍效率,那么完成这次功能应该只需要花费 2~3 天的时间。这有可能吗?经过复盘,答案是可能的。

下面我将阐述如何成为“十倍工程师”: 整体上可以分成几块:先选择一个顺手的工具,其次调整编程范式,然后是一些 AI coding 的小技巧,最后通过长期的刻意练习把这些提升沉淀成长期能力。

挑选自己最喜欢的 AI 工具 ​

正所谓“工欲善其事必先利其器”,成为十倍工程师的第一步就是挑选适合自己的 AI 工具。如今的 AI coding 产品真的是琳琅满目、遍地开花。

目前市面上已有的 AI coding 产品主要分为四大类:

  • IDE:Cursor、Windsurf、Kiro、Trae、CodeBuddy、Lingma
  • CLI:Claude Code、OpenAI Codex
  • IDE 插件:GitHub Copilot、Cline、Agument
  • 网页端:Lovable、Replit

对于工具的选择,适合自己的才是最好的,基本上各家都做出了自己的特色。最好的选择方法是都去试一试,看看哪个用起来最顺手。不要看网上那些大 V/媒体一天天在那里吹,Claude Code 出来就吹 CC,Codex 出来又吹 Codex。这就像有人告诉你在 Vim 里编程效率很高一样,得实际体验了才知道。

如果你压根就不习惯在 terminal 里面“敲代码”,那 CLI 类的产品就不在你的选项范围内。如果你不是专业开发者,那么网页端的产品可能才是你的最佳选择。就我实际体验下来各家产品之间在 AI 能力方面压根没有那么大差异,所以选一个你用得最顺手的即可。

就我个人而言,偏爱 Cursor,核心原因就一个——Cursor 的 IDE 方便我审查代码。其他家的产品这一点做得并不是很好。最近我发现字节的 Trae 做得也很不错,而且价格也比 Cursor 便宜,下个月准备切过去试试。

做好代码审查 ​

在谈及 AI 提效时,如果让我选一个原则的话,那一定是“做好代码审查”。这就像在使用辅助驾驶时“不要把你的双手脱离方向盘/不要把你的双眼移开路面”一样,AI coding 时尽量不要完全放弃对代码的最终决定权。

我知道现在有越来越多的人在使用 AI coding 时,都不再审查代码。他们的做法通常是这样的:给 AI 下达指令->AI 执行 coding->运行项目->查看功能是否实现->然后开始跟 AI battle:“我要的是这个,不是那个”、“我想要这种实现,不是那种实现”.....“你是傻逼吗”。如果你是一名 AI coding 实践者,多半也经历过这样令人崩溃的时刻。这是程序猿/攻城狮驯服 AI 必然会经历的痛苦过程。

我观察到推荐这种方式写代码的,很多都是非专业背景的开发者,而且主要以个人开发者为主,在推特上做 build in public(公开构建)的人尤其推崇这种方式。并且通常伴随着他们的“战绩”:从零开始使用 AI coding,在多么短的时间内,推出产品,并且做到了多少 MRR(月度经常性收入)。

可是大多人不是在做独立开发,而是在企业里做工程师。这两者不都是敲代码,有什么本质区别吗?这里面的区别可大了,如果你是独立开发,我认为你至少要用 50%的时间去“卖产品”,用剩余的 50%时间去“做产品”,产品做得好不好只决定了你成功的一半,甚至在我看来不到一半。而如果是在企业里面做工程师,你将用绝大部分的时间来“做产品”,而不太需要关心“卖产品”。并且企业中通常是以团队形式进行工程开发,这就使得“代码审查”变得更加重要。

除了代码的质量问题外,代码审查要格外注意一点:代码复用性。目前 AI 在这个方面还不算擅长,碰到问题,往往会随手写个新的函数出来,而不会优先去考虑代码中已经有可复用的函数,或者相似的逻辑。如果不够慎重,项目就会变得越来越臃肿,最终沦为 shi 山。

Spec 编程 ​

在我们最开始接触 AI coding 时,通常的做法是“给 AI 下达指令->AI 执行 coding->运行项目->查看功能是否实现”,不断循环这个过程,直到实现我们想要的效果。在业界有一个专有名词来形容这种编程方式——Vibe Coding(氛围编程)。

经过几个月的实践,我发现 Vibe Coding 并非最佳的 AI coding 姿势。那么正确的姿势是什么呢?这里给大家介绍最近社区很火的另外一种 AI coding 理念/范式——Spec 编程。

Spec 编程的全称是“Spec-Driven Development”,规范驱动开发,Spec 是单词 specification 的缩写。它的核心思想是:把 “规格(spec / specification)” 作为开发的核心驱动力。

如果你上过大学的软件工程课,一下就明白这是什么意思了。软件工程课的大作业要求小组完成一个项目(通常是 xxx 管理系统),最后不仅需要提交一份代码,还需要提交 4 个文档,分别是:需求分析、概要设计、详细设计和测试文档。 Chaterm

开源社区有一个项目GitHub - github/spec-kit: 💫 Toolkit to help you get started with Spec-Driven Development专门帮助人们采用 SSD 进行开发。而亚马逊的 Kiro 直接将 Spec 设计为一种模式,Spec 模式下,在执行代码之前它会为你生成三个文档:

  • requirements.md
  • design.md
  • task_list.md

Chaterm

讲到这你以为我是来向你推销 Kiro 的?哎,猜错啦!spec 编程只是一种理念,可以把这种理念运用在任何一款开发工具上。就像面向对象编程一样,用 C 语言也可以面向对象编程。

我们再来重看 Spec 编程,思考一下为什么要先有三个文档?

我想用这句话来解释是最贴切的:Plan first, then build。文档是一种指导,通过文档,我们可以事先知道后面做的事情是不是符合预期。如果不是就提前纠正,如果是就开始执行。至于有没有文档,其实不重要。文档的更新最好是事后的,统一的,而不是事先的,零散的。

下面我将演示如何在 Cursor 中进行 Spec 编程。

最近我将 Chaterm 的 AI 功能从单任务模式扩展到了多任务模式(也就是同时可以执行多个任务)。重构之后出现了一个 bug:回传结果时,无法把结果传回到发起请求的 Tab。 Chaterm

选择 plan mode,将问题描述丢给 AI。它会给出问题的分析和解决方案。 Chaterm

看起来 AI 分析得没毛病,但如果这个时候直接点 build,那就完蛋了。这样还是会陷入之前的“审查代码->否定方案->不断与 AI 校准”的循环中。这个时候我们可以理解为 AI 给出了一个“需求文档”,但是压根没有说“实现方案”。要知道 AI 最擅长:一本正经的胡说八道,即便模型已经迭代多年,但这样的情况还是经常发生。所以不仅要看它怎么说,还要看它怎么做。这个时候要求 AI 给出实现方案:

给出每一个实现的关键细节

在 AI 给出实现细节之后,不要着急点 build。这个时候应该去审查实现细节,现在审查要比修改代码之后再审查容易得多。关键就审查两个方面:首先是:数据结构和算法,只要这两点没有问题,那么程序基本上就不会有什么问题;其次是:代码复用性,看看 AI 是不是又写了一堆原本就有的新函数。 ChatermChaterm

AI 的实现细节大体上已经没有问题了,但遗漏了一些细节,就是资源清理。AI 每一次发送消息,都会将消息映射关系存下来,最后程序终止时才去销毁。假设用户发起了 500 次交互,就会保留 500 条映射关系。这显然是不合理的。 Chaterm

给出下列指令(指令遵循三段论做什么?怎么做?为什么要这么做? ):

映射关系的清理需要提前。每一个消息回传之后,立刻清理。不然会堆积越来越来的映射关系 Chaterm

一切就绪点击 build,一把就成功。修复这样一个 bug 只需要 10 分钟就搞定。如果不这样做,但凡跟 AI 多 battle 两轮,花费的时间就要成倍增加。并且这样写出来的代码,质量有保障。

看着这里,不知道你有没有感到奇怪,说好的 AI 干活呢?为啥感觉很多事情都是自己在做?AI 给出的方案需要自己来确认,AI 做错的地方需要自己来纠正,最后 AI 给出的代码还要自己来审核。这就对了,“十倍工程师”的瓶颈,很大程度上不在 AI,而在于使用 AI 的人。在我看来 AI 是一个资质普通,但悟性极高的工程师。只要你能告诉它正确的做法,它就能立刻将其实现。在现实中属于那种一点就透的人。

善用 User Rules & project rules ​

目前基本上所有的主流编程软件都支持自定义规则(User Rules 和 Project Rules),这是一个被严重低估的功能。通过在项目中设置明确的编码规范、架构约束、命名规则等,你可以让 AI 在生成代码时自动遵循这些约定。例如,你可以指定特定的设计模式、代码风格、甚至是你团队的最佳实践。这样一来,AI 生成的代码质量会显著提升,减少后期审查和修改的工作量。善用这些规则,相当于给 AI 配备了一个"编码指南",让它更懂你的项目需求。

通常而言,User Rules 会被置于最高优先级,例如放在 System Prompt 的最开头或者结尾。以保证 AI 尽可能遵循用户指令。所以当我们发现 AI 的回复不符合我们的预期。通过 User Rules 加以限制是最佳的解决方式。

我的 rules 中添加了以下几条限制 Chaterm

MCP ​

MCP(Model Context Protocol)是 Anthropic 推出的一项强大功能,它允许 AI 直接与外部工具、数据库、API 进行交互。通过 MCP,你可以让 AI 访问项目文档、查询数据库、调用第三方服务等。

MCP 的使用有许多值得探索的地方,很多人觉得 MCP 没用。其实用好 MCP 能够极大的自动化工作流程。后面我会再写一篇文章单独来讲如何用好 MCP。

这里,我只举一个非常实用的例子。使用 AI coding 时,我经常会碰到这样一种情况:AI 扩展了我的认知边界,也就是 AI 解决了一个我都不懂的问题。很多人碰到这种情况,接受了 AI 的代码之后就算结束了。但其实,这恰恰是深入了解和学习新知识的好机会。"干中学"是对王阳明“知行合一”理念的很好诠释。有 AI 这个老师,可以让它把每一行代码拆开来讲解。搞懂了还不算结束,真正的高手总是善于总结。我们不是高手,总结也嫌麻烦,但是现在有了 AI 这个好帮手。

通过 MCP,让 AI 把问题总结好,并写入到自己的知识库中。可以使用 Notion/语雀/obsidian,这里我使用的是我们自己开发的 Confluence MCP server,用于连接企业的知识库。

以后隔一段时间,把笔记拿出来看一看,温故知新。 Chaterm

反直觉的建议 ​

很多人以为在 AI 时代,工程师应该把精力放在“如何更好地使用 AI 工具”上,比如 Prompt Engineering。PE 很重要,但不是根本。真正能让你脱颖而出的,仍然是你作为软件工程师的基本功。

以下这些乍看“反直觉”的建议,才是迈向“十倍工程师”的关键:

  1. 比以往任何时候都更深入理解你所使用的语言 不是泛泛地“会用”,而是深入到语言的类型系统、运行时机制、内存模型、并发模型等底层细节。 原因很简单:当 AI 给出一段代码时,你需要有能力判断其是否正确、是否高效、是否踩了底层机制的坑。AI 真的太容易写出看似正确的代码了。稍不注意就会被带入坑里。每次纠正它时,它只会说:你说得太对了!

  2. 比以往任何时候都更深入理解你所使用的框架 理解框架的运行机制、生命周期、数据流、性能瓶颈,你才能指导 AI 写出“符合框架最佳实践”的代码。如果对框架的理解不够深入,就只能接受 AI 写出的看似 work 的代码。这方面也是踩了很多坑。

  3. 掌握好数据结构和算法 即使 AI 能写代码,数据结构和算法仍是软件工程的“终极底层逻辑”。 你需要知道什么结构适合什么场景、复杂度如何。这样你才能判断 AI 是否给了你一个不错的解法,而不是由 if else 堆砌起来的 shi 山代码。

  4. 熟读设计模式 设计模式本质是一套“如何写出可维护代码”的经验总结。当需求变更、功能增加时,一个结构清晰、职责明确的模式可以让你改动最少的代码,而不是把整个系统拆掉重来。正如我前面所说,AI 真的很容易写出 if else 垃圾代码。AI 能写代码,但 AI 不会替你做架构决策,不会为你考虑项目未来的可扩展性。设计模式正是这种结构性思考的核心能力。未来的工程师角色将会变成:你负责思考结构,让 AI 去实现细节。

做这一切为了:更好的审查 AI 的代码、更好的指导编写代码。终极目标只有一个:成为架构师。未来的开发工作模式就是一个人指导一堆 Agent 干活。

成本 ​

最后我想谈一谈成本。过去一个月,我在 Cursor 上的花费大约是 60~70 $,还未达到 Cursor 和 Claude 设定的最高档 200 $。这可能也是我没有成为"十倍工程师"的原因之一——用量没有达到十倍,效率自然也无法达到十倍。

这里说的“用量”,不是为了刷额度而瞎问,而是尽可能让 AI 多参与真实的工程任务:写代码、查问题、改设计,然后由自己认真审查和纠偏。高用量的本质,其实是你和 AI 之间形成了高频的反馈循环——你越会用它,它也就越能帮你把效率拉高。

我知道有些很厉害的工程师很早之前就已经达到 200 $配置限制。当时我并没意识到他们对 AI 的利用已经达到何种程度。大家可以试一下,就算不审查代码,仅以实际运行来判断 AI 生成代码的可靠性这种方式来使用 AI,要达到 200 $的使用限额,都是一件非常困难的事。

等到我的用量达到 200 $一个月时,我会再写一篇文章阐述我的实践。

展望 ​

想要成为“十倍工程师”,不管有没有 AI 都不是一件容易的事情。但 AI 的出现确实为我们提供了一种可能,将 AI 作为放大你能力的杠杆。关键在于,你要先成为一个优秀的工程师,才能借助 AI 成为"十倍工程师"。在此基础上通过刻意练习,来无限地接近这一目标。

如果你做的是大型软件工程项目,预计在未来三到五年内,可能都无法做到“脱手”让 AI 自己去干。在这段时间里,我们能做的是把 AI 擅长的发挥到极致,并借此提升自身的能力以适应未来世界对工程师的要求。

拥抱时代的人,永远不会被时代抛弃