Google 250M+ 行 C++ 代码重构与 CS 教育:对话 Titus Winters
Software engineering at Google & CS education with Titus Winters
前 Google 工程师 Titus Winters 回顾了 2010 年对 Google 约 250M 行 C++ 代码的大规模重构,团队用 MapReduce 解析、抽象语法树匹配和代码生成完成替换,全程早于 LLM 出现。他还谈到 Google 因 Search 无法按月发布而强制要求每次改动附带测试,以及他参与更新 ACM/IEEE 本科计算机课程指南的工作。
开始之前:我这周和下周都在旧金山,主持这些免费参加的活动(需注册)。如果你在附近,希望能在其中一个活动见到你:
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 工作了十多年,期间领导了可读性项目,并构建了 Abseil——Google 开源的基础 C++ 库。他目前是 Adobe 的高级首席科学家,专注于开发者体验与生产力。
在本期The Pragmatic Engineer podcast中,Titus 和我讨论了:他的团队如何应对 Google 2.5 亿行 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:确保没有人把旧模式复制回代码中
删除:移除旧 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. “记住安德鲁的斧头”——给初级工程师的建议。安德鲁用斧头砍倒一棵树。还是安德鲁的斧头砍倒了树?Titus 说,是安德鲁做的,斧头只是实现他意志的工具。AI 也是如此:它是供你使用的工具,将这一工具拟人化会让我们脱离这种思维模式。
12. 要想成功,不要复制别人都在做的事!当我们的时间接近尾声时,我问 Titus 他会对二年级学生说什么。这段内容没有进入播客,但我把它加在这里!
“我人生中的大部分成功都来自不做其他人都在做的事。如果你只是听什么是热门话题,追逐字面上每个人都在追逐的同样闪亮的东西,要想脱颖而出真的极其困难。
我的主要建议[是]找到你热爱的东西,而不只是你假设会出现在每个人简历上的东西,然后大量去做。找到一个热情项目,深入钻研它。
比如,‘我如何使用计算和 AI 氛围编码新一代技术?’‘我如何解决这个对我很重要的问题?’‘或者我如何通过游戏或艺术表达自己?’你做的[事情]越是独特的你,你就越脱颖而出,你做得越多,你学到的就越多。”
与本集相关的 The Pragmatic Engineer 深度内容
• 与 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 《Software Engineering at Google》一书
43:10 Google 的可读性审查
47:18 团队为何仍然重要
52:41 心理安全感
58:17 裁员与文化
1:02:11 衡量开发者生产力
1:11:17 重新思考计算机科学教育
1:22:56 应届毕业生应该学什么
1:32:08 Titus 理想的软件工程课程
1:36:27 进入科技行业的建议
1:38:35 书籍推荐
参考资料
如何找到 Titus Winters:
• X:https://x.com/TitusWinters
• LinkedIn:https://www.linkedin.com/in/tituswinters
• GitHub:https://github.com/tituswinters
本期节目中提到:
• QBasic: https://en.wikipedia.org/wiki/QBasic
• Harvey Mudd College:https://www.hmc.edu
• UC Riverside:https://ucr.edu
• 通用即插即用(UPnP): https://en.wikipedia.org/wiki/Universal_Plug_and_Play
• 远程过程调用(RPC): https://en.wikipedia.org/wiki/Remote_procedure_call
• 由 Titus Winters、Tom Manshreck 和 Hyrum Wright 编写的《Software Engineering at Google》: O’Reilly · 免费在线版
• The Pulse:我们能从 Bun 借助 AI 快速重写 Rust 中学到什么?: https://newsletter.pragmaticengineer.com/p/the-pulse-what-can-we-learn-from
• Bun:颠覆技术生态系统的经验教训: https://blog.pragmaticengineer.com/bun-lessons-from-disrupting
• Clang:https://clang.llvm.org
• 抽象语法树(AST): https://en.wikipedia.org/wiki/Abstract_syntax_tree
• MapReduce: https://en.wikipedia.org/wiki/MapReduce
• ClangFormat: https://clang.llvm.org/docs/ClangFormat.html
• BrontoSource:https://www.brontosource.dev/
• ZTA:零 Token 架构 – Kelsey Hightower | PlatformCon 2026:
• Kubernetes 与 Kelsey Hightower 在巅峰时退休: https://newsletter.pragmaticengineer.com/p/kubernetes-and-retiring-at-the-top
• Google SRE 系列书籍: https://sre.google/books/
• Hyrum Wright 的网站:https://www.hyrumwright.org
• Tom Manshreck 谈 O’Reilly: https://oreilly.com/pub/au/7955
• Craig Silverstein: https://en.wikipedia.org/wiki/Craig_Silverstein
• 与 Boris Cherny 一起构建 Claude Code: https://newsletter.pragmaticengineer.com/p/building-claude-code-with-boris-cherny
• DORA:https://dora.dev
• 无责事后复盘文化(Google SRE 书): https://sre.google/sre-book/postmortem-culture/
• Cat Hicks 博士的网站:https://www.drcathicks.com
• Cat Hicks 所著《软件团队心理学》: https://www.amazon.com/dp/B0GQTCL1J4
• Google 的平台工程: https://www.oreilly.com/library/view/platform-engineering-at/9781098169428/
• 《人月神话》: https://www.oreilly.com/library/view/mythical-man-month-the/0201835959/
• 囚徒困境(重复博弈): https://en.wikipedia.org/wiki/Prisoner%27s_dilemma
• Adobe 任命 Anil Chakravarthy 为 CEO,接替 Shantanu Narayen: https://daringfireball.net/linked/2026/09/04/adobe-new-ceo
• 是的,你可以衡量软件开发者的生产力(麦肯锡): https://www.mckinsey.com/capabilities/people-and-organization/our-insights/yes-you-can-measure-software-developer-productivity
• 衡量开发者生产力?对麦肯锡的回应:• https://newsletter.pragmaticengineer.com/p/measuring-developer-productivity
• 衡量开发者生产力?对麦肯锡的回应,第二部分: https://newsletter.pragmaticengineer.com/p/measuring-developer-productivity-part-2
• Kent Beck 如何塑造软件工程行业: YouTube · Newsletter
TDD、AI 智能体与 Kent Beck 一起编程: https://newsletter.pragmaticengineer.com/p/tdd-ai-agents-and-coding-with-kent
• 群体智慧: https://en.wikipedia.org/wiki/Wisdom_of_the_crowd
• 开发、部署、运营:理解软件开发成本与价值的整体模型: https://queue.acm.org/doi/full/10.1145/3733703
• CS2023:ACM/IEEE-CS/AAAI 计算机科学课程体系:https://csed.acm.org/
• 与 Peter Mattis 谈分布式数据库: https://newsletter.pragmaticengineer.com/p/distributed-databases-with-peter
• Cockroach Labs:https://www.cockroachlabs.com
• GIMP:https://www.gimp.org
• GTK:https://www.gtk.org
• LeetCode:https://leetcode.com
• Malcolm Gladwell 所著《异类:成功的故事》(一万小时定律): Amazon · Wikipedia
• 滑铁卢大学合作教育: https://uwaterloo.ca/co-operative-education/
• 计算机永远无法被问责(1979 年 IBM 培训幻灯片): https://simonwillison.net/2025/Feb/3/a-computer-can-never-be-held-accountable/
• 当编写代码不再是挑战时的计算机教育: Communications of the ACM · ACM Digital Library
—
制作与营销:Pen Name。
来源:The Pragmatic Engineer · newsletter.pragmaticengineer.com