←新闻详情

Pragmatic Engineer更新于 10月30日 15:07

Google 大规模软件工程与 CS 教育:对话 Titus Winters

Software engineering at Google & CS education with Titus Winters

AI 导读

Titus Winters 在 The Pragmatic Engineer 播客中回顾了 Google 2010 年对 250M+ 行 C++ 代码的大规模重构,当时由 10,000 名工程师维护,团队用解析、匹配、代码生成、新旧 API 共存、分片、封禁旧模式、删除旧 API 七步完成,且全程早于 LLM 时代。他还谈到 Google 因 Search 无法按月发布而强制每项改动附带测试,以及他参与更新 ACM/IEEE 本科计算机课程指南、认为现有课程几乎都该推倒重来。

正文 · AI 翻译

The Pragmatic Engineer:Google 的大规模软件工程与 Titus Winters 谈计算机科学教育 1×0:00 当前时间:0:00 / 总时长:-1:40:11 -1:40:11

Google 的大规模软件工程与 Titus Winters 谈计算机科学教育。Titus Winters 分享了在 Google 规模下进行工程实践的经验教训,并探讨了 AI 如何重塑开发者生产力和计算机科学教育。Gergely Orosz 2026年10月29日

开始之前:我这周和下周都在旧金山,主持这些免费参加的活动(需提前注册)。如果你在附近,希望能在其中一场见到你:

The Pragmatic Engineer Unplugged:周三(11月4日),下午5点至7点30分。嘉宾是 Diogo Almeida(Jev 的创造者、ChatGPT 的共同发明者)和 Bryan Cantrill(Oxide 的联合创始人兼 CTO)。我们还有名额,点此报名。

System Update:周四(11月5日)下午5点至8点。我们还有最后几个名额,点此报名。

现在可在 YouTube、Apple 和 Spotify 上收听和观看。本页顶部有本期节目的文字稿,底部有时间戳。

本期赞助商

• turbopuffer – tpuf 工程团队正在从第一性原理出发彻底重新设计他们的存储架构。而且他们把全过程都记录了下来!他们取得了重大进展,来看看:turbopuffer.com/v3

• Linear – 对我们开发者来说,一大挑战就是要审查的代码量实在太大。Linear Diffs 是一项新功能,可以在 Linear 内部审查 PR,把所有上下文集中在一处。它还支持堆叠式 PR。来看看吧

• WorkOS – WorkOS 打造了 Airlock,这是面向 AI 智能体的授权层。它会根据智能体的意图和你的规则评估每一个请求,然后允许、拒绝或转交给人工处理。可与 Claude Code、Codex 和 MCP 网关配合使用。来试试吧

一位曾参与制定当今软件工程课程体系的工程师如今表示,这套课程几乎应该全部推倒重来。这一矛盾因何而起?我们从《Software Engineering at Google》的第一作者那里寻找答案。

Titus Winters 在 Google 工作了十多年,期间他领导了 readability 项目,并构建了 Abseil——Google 开源的基础 C++ 库。他目前是 Adobe 的高级首席科学家,专注于开发者体验和生产力。

在本期 The Pragmatic Engineer 播客中,Titus 和我讨论了他的团队如何完成 Google 250 万行 C++ 代码库的大规模重构项目、Google 为何强制要求测试,以及他参与更新 ACM/IEEE 本科计算机科学课程指南的工作。

我们还探讨了为什么传统的生产力指标会错过 AI 的一些最大收益、计算机科学教育需要做出哪些改变,以及新入行的工程师如何才能脱颖而出。

与 Titus 对话的要点

Titus 是一位思考深入的人,参与过一些非常有趣的项目。以下是我们交谈中让我印象深刻的 12 点。

1. 重构 2.5 亿多行 C++ 代码是有史以来最大的重构任务吗?这发生在 2010 年的 Google,当时 Titus 加入这家搜索巨头才几个月。一封内部邮件征集志愿者帮助清理旧的 C++ 代码,其中一些还是最早的 Google 员工写的。

一支由十几人组成的团队被组建起来。当时 Google 有近 2.5 亿行代码,由 10,000 名工程师编辑。Titus 回忆这次清理时说:“我们是在更换帝国大厦的地基。我们不被允许关闭大楼,也不能阻断交通。哦,而且我们还在地下室发现了核废料。”

2. 这次重构使用了高级语言解析技术,远早于 LLM 的出现。早在 2010 年,还没有 LLM 可用于这次巨型重构。以下是团队的做法:

解析:对整个代码库运行 MapReduce。mapper 将每个构建目标解析为抽象语法树

匹配:在语法树中匹配精确的调用模式

代码生成:生成由机器执行的编辑

共存:让旧 API 和新 API 并行工作

分片:一旦新 API 准备就绪,按目录拆分编辑,并分批发送

封禁旧模式:确保没有人把旧模式复制回代码中

删除:移除旧 API

clang-format 工具包之所以存在,正是因为 Titus 和他的团队在这次重构中需要它。

3. 在 Search 无法再定期发布之后,Google 强制要求自动化测试。大约在 2007 年,旗舰产品 Search 再也无法以每月一次的节奏发布,他们能做到的最好程度是每季度发布到生产环境。

Google 几乎每一项改动都会触及 Search 的代码,甚至像 Gmail 的改动也是如此。为了加以控制,Google 作为一个组织强制要求每一项改动都必须附带测试。随着时间的推移,Search 恢复了以往更高的发布节奏。

4. Google 的 readability 项目可能是科技界有史以来最大的教育项目。要在 Google 进行代码改动,需要两个人通过代码审查来批准该改动:

文件/项目的“所有者”:团队中具备领域知识的人

“readability”审查者:获得认证、在改动所用语言方面属于“readability”专家的工程师

Google 的第一位工程师 Craig Silverstein 会亲自带领每一位新入职的开发者完成他们的第一次代码改动。Java 团队将这种做法发展为导师制,由经验丰富的审查者以轮值方式被指派审查所有改动。很快,一套面向所有语言的正式 readability 项目就建立起来了。Titus 三个月前离开 Google 时,任何时候都有 10,000 多名工程师注册在 readability 项目中。其他地方还有过比这更大的工程“课堂”吗?

5. 恐惧不能成为工程工作的可接受基础。Titus 认为,如果无法安全地做出有价值的改动,那么你的代码库就是不可持续的。不应该对修改代码库心存恐惧。拥有能够捕获错误的恰当“安全网”在战略上非常有价值,因为它能让团队无所畏惧地进行改动。

6. 有了 AI,故障似乎正在增多。Titus 与其他公司的工程师交流,情况如出一辙:代码产出相比一年前大幅增加,故障也增加了约 30%,而交付的功能数量却停滞不前。看起来就像是在原地踏步。从这个角度看,这对 AI 并不利;仅从故障来看,这项技术可能是负面的。

7. 另一方面,AI 让那些没有它就并不现实的雄心勃勃的项目成为可能。Titus 对 AI 作为净生产力提升持乐观态度,并认为人们关注错了重点。他认为 AI 的真正价值不在于以更高速度重复以前做过的事情。相反,它在于做你以前从未想过的事情:那些过去根本说不通的、如此雄心勃勃的项目!

8. 推倒美国本科计算机科学课程(其中大部分)。Titus 是 2023 年 ACM/IEEE/AAAI 计算机科学课程指南指导委员会中唯一一位在职工程师,他认为该课程已经无可救药地过时了。他指责该课程自 2000 年左右以来没有发生实质性变化,而行业却已经变了。测试与验证被认为对新入职者重要得多,但它们却不在课程之中。

除非做出重大改变使其具有相关性,否则计算机科学的入学人数可能会下降,而专注于实用开发技能的软件工程项目将对学生具有吸引力——这是 Titus 的预测。

9. “中间群体”的学生在 AI 面前最为挣扎。计算机科学项目的教授告诉 Titus,学生分为三类:

最优秀的比以往任何时候都更优秀,并充分利用了一个耐心、知识渊博的导师,也就是 AI

中间群体:教授们说,所有低于“最优秀”水平的学生都垮掉了:成绩低于 B 的学生往往完全看不懂代码

最弱的:他们更容易赶上中间群体的水平——不过,主要是靠用 AI 产出垃圾。

当我在母校做一次客座讲座时,教授们告诉了我类似的观察——按成绩划分的“中间群体学生”,对该学科的理解低得令人失望,与往年相比。

10. 给学生的提示词和测试评分,比只关注他们的代码更好。Titus 会关注学生在构建和验证软件时所投入的思维过程,而不仅仅是产出。

11. “记住 Andrew 的斧头”——给初级工程师的建议。Andrew 用斧头砍倒了一棵树。还是说,是 Andrew 的斧头砍倒了那棵树?Titus 说,是 Andrew 干的,斧头只是实现他意志的工具。AI 也是如此:它是供你使用的工具,而将这一工具拟人化会让我们脱离这种心态。

12. 要想成功,不要照搬别人都在做的事!随着我们的时间接近尾声,我问 Titus 他会对二年级学生说些什么。这一段没有进入播客,但我把它加在这里!

“我人生中的大部分成功都来自不做其他人都在做的事。如果你只是听什么是热门话题,并追逐字面上每个人都在追逐的同一个闪亮的东西,那么要脱颖而出真的极其困难。

我的主要建议是,找到你热爱的东西,而不只是你臆测会出现在每个人简历上的同一样东西,然后大量地去做。找到一个热情项目,真正深入其中。

比如,‘我如何使用计算和 AI 氛围编程的新一代技术?’‘我如何解决这个对我非常重要的问题?’‘或者我如何通过游戏或艺术来表达自己?’你做的越是独一无二的你,你就越能脱颖而出,你做得越多,你学到的就越多。”

与本集相关的 The Pragmatic Engineer 深度内容

• 2026 年科技行业状况

• 深入 Google 的工程文化

• 与 AI 智能体协作时,放慢速度以加快速度

• 衡量开发者生产力?对麦肯锡的回应

• 科技公司如何衡量 AI 对软件开发的影响

• 代码审查正在发生什么?

• 当 AI 编写几乎所有代码时,软件工程会怎样?

• 与 Nicole Forsgren 博士(DORA 的创建者、SPACE 的共同创建者)探讨开发者生产力

• 与 Laura Tacho 一起衡量 AI 对软件工程的影响

时间戳

00:00 开场

07:01 被 Google 录用

09:48 在 Google 找到自己的专长领域

14:32 Google 为何强制要求测试

17:45 新工程师为何害怕犯错

20:40 Abseil:Google 的 C++ 基础库

23:09 Google 的大规模 C++ 重构

30:48 用 AI 进行重写

39:07 《Google 的软件工程》一书

43:10 Google 的可读性审查

1:02:11 衡量开发者生产力

1:11:17 重新思考计算机科学教育

1:22:56 应届毕业生应该学什么

1:32:08 Titus 理想的软件工程课程

1:36:27 进入科技行业的建议

1:38:35 书籍推荐

参考资料

在哪里可以找到 Titus Winters:

本集中提到的内容:

• Harvey Mudd College:https://www.hmc.edu

• UC Riverside:https://ucr.edu

• Abseil:网站 · GitHub

• OpenRewrite:文档 · GitHub

• 无责事后复盘文化(Google SRE 手册):https://sre.google/sre-book/postmortem-culture/

• Cat Hicks 的《软件团队心理学》:https://www.amazon.com/dp/B0GQTCL1J4

• Adobe 任命 Anil Chakravarthy 为 CEO,接替 Shantanu Narayen:https://daringfireball.net/linked/2026/09/04/adobe-new-ceo

• 开发、部署、运维:理解软件开发成本与价值的整体模型:https://queue.acm.org/doi/full/10.1145/3733703

• CS2023:ACM/IEEE-CS/AAAI 计算机科学课程体系:https://csed.acm.org/

• Malcolm Gladwell 的《异类:成功的故事》(一万小时定律):Amazon · Wikipedia

• 滑铁卢大学合作教育:https://uwaterloo.ca/co-operative-education/

—

制作与营销:Pen Name。

关于本集的讨论

想了解更多吗?

来源

Pragmatic Engineer