原文链接: 21 Lessons From 14 Years at Google
原文作者: Addy Osmani
写好代码是硬实力,但是职场中的工作也需要一些软实力,深度好文在此翻译记录,便与我后续总结反思。以下是原文翻译:
十四年前我刚加入谷歌时,曾天真地以为工程师的天职就是写出完美的代码。我只猜对了一半。随着资历的增长,我愈发意识到,那些真正顶尖的工程师未必是编程技术最强的,但他们一定最擅长处理代码之外的各种复杂局面:人际沟通、职场博弈、目标对齐以及应对各种模糊性。
这些经验教训,如果我能早点领悟,或许能少走几年弯路。有些道理曾让我苦恼数月,有些则耗费数年才真正参透。这些感悟与具体技术无关——技术更迭太快,不值一提。它们关乎的是那些在不同项目、不同团队中反复出现的底层逻辑。
我之所以分享这些,是因为我曾深受前辈们的指点之恩。现在,轮到我将这份经验传递下去了。
1. 顶级工程师总是痴迷于解决用户痛点
爱上一项新技术并强行寻找应用场景,这种诱惑很难抵挡。我也曾深陷其中。但真正能创造巨大价值的工程师往往采用“逆向思维”:他们深挖用户痛点,让解决方案自然而然地从需求中生长出来。
用户导向意味着你要沉浸在支持工单里,与用户面对面交流,观察他们的挣扎,不断追问“为什么”直到触及本质。真正理解问题的工程师往往会发现,最优雅的解法通常比预想的要简单得多。
带着方案找问题的工程师,往往会为了证明方案的合理性而把系统搞得无比复杂。
2. 证明自己正确并不难,难的是带大家一起达成正确
你可以赢下每一场技术辩论,却输掉整个项目。我见过不少天才工程师因为总想表现得比别人聪明而招致反感。这种代价会在后期以“执行受阻”或“莫名阻力”的形式爆发出来。
真正的核心竞争力不在于“我是对的”,而在于引导大家对问题达成共识,为他人留出表达空间,并对自己的定论保持审慎。
“观点鲜明,但立场灵活”(Strong opinions, weakly held)——这并非缺乏主见,而是明白在充满不确定性的决策中,不应将个人自尊与某个决定死死捆绑。
3. 偏向行动:先跑起来,再谈优化
追求完美往往是平庸的开始。我见过工程师们花几周时间去讨论一个从未动工的理想架构。完美的方案从不是想出来的,而是在与现实的碰撞中磨合出来的。
先完成,再完美,后卓越。 把那个甚至有点简陋的原型推到用户面前,写下设计文档的草稿,发布那个让你略感汗颜的 MVP(最小可行性产品)。从一周真实反馈中学到的东西,远比一个月的闭门造车要多。
动力带来清晰,而过度分析只会导致瘫痪。
4. 清晰度代表资历,炫技则是负担
追求代码的“精巧”几乎是工程师的本能,仿佛那是能力的勋章。
但在软件工程中,你需要考虑“时间”和“他人”这两个变量。在这种语境下,代码的清晰度不再是个人偏好,而是降低运营风险的关键。
你的代码本质上是写给陌生人的“战略备忘录”,他们可能要在凌晨两点的故障排查中去阅读它。请为他人的理解而优化,而非为了自己的优雅。 我最敬佩的资深工程师,无一例外都会为了清晰度而放弃炫技。
5. 引入新技术是一笔贷款,代价是未来的维护成本
请把技术选型看作是一笔有限的“创新预算”。每当你引入一种非标准的技术,就花掉了一个配额。你挥霍不起。
这并不是说“不要创新”,而是要“只在能产生独特价值的地方创新”。其他部分请尽量保持“无聊”,因为“无聊”意味着它的失败模式是可预测、可控的。
“最适合的工具”往往是那个在多个场景下“表现最稳”的工具,因为维护一个“技术动物园”的税收高得惊人。
6. 代码不会说话,人才是你的代言人
职业生涯早期,我坚信“酒香不怕巷子深”。我错了。代码只会静静地躺在仓库里。你的经理是否在会上提及你,同事是否在关键时刻推荐你,这才是关键。
在大型组织中,决策往往发生在你不在场的会议上,依据的是你没写过的简报,由那些只有五分钟时间处理十二项优先级任务的人做出。如果当你不在场时,没人能清晰描述你的贡献,那么你的影响力实际上就是零。
这不只是自我推销,而是要让你的价值链条对所有人(包括你自己)都清晰可见。
7. 最好的代码,是那些你从未写下的代码
工程文化往往崇尚“创造”。没人会因为删除了代码而获得晋升,尽管删除代码对系统的提升往往比增加代码更大。你没写的每一行代码,都是你未来不需要调试、维护或解释的代码。
在动手之前,请反复自问:“如果我们不做这个,会发生什么坏事吗?” 如果答案是“没什么大不了”,那这就是最好的方案。
现在的挑战不是工程师写不出代码,而是我们太擅长写代码了,以至于忘了思考是否真的需要写。
8. 规模化之后,Bug 也会变成“特性”
当用户基数足够大时,任何可观察的行为都会变成一种依赖——无论你最初是如何承诺的。总有人在爬取你的 API,利用你的漏洞,甚至缓存你的 Bug。
这带来了一个深刻的洞察:你不能把兼容性工作看作是“打杂”,而把新功能看作是“正事”。兼容性本身就是产品的一部分。
请带着同理心去设计弃用方案,提供充足的时间和工具支持。大多数所谓的“API 设计”,本质上其实是“API 退役”。
9. 团队效率低下的根源往往是“目标不一致”
项目进度拖沓时,人们习惯归咎于执行力:大家不够努力、技术选型不对、人手不足。其实,这些通常只是表象。
在大型企业中,团队是协作的基本单元,但协调成本会随着团队数量的增加呈几何级数增长。大多数“慢”其实是“方向没对齐”——大家要么在做错误的事,要么在以互不兼容的方式做正确的事。
资深工程师会花更多精力去理清方向、接口和优先级,而不是单纯追求“写代码的速度”,因为那才是真正的瓶颈。
10. 专注于可控因素,忽略不可控因素
在大公司里,有无数你无法左右的变量:组织架构调整、高层决策、市场波动、产品转型。纠结于这些只会徒增焦虑。
高效的工程师会精准锁定自己的“影响圈”。你无法阻止部门重组,但你可以控制自己的产出质量、应对态度以及从中学习到的经验。面对不确定性,请拆解问题,找到你能立即采取的具体行动。
这不是消极避世,而是战略聚焦。浪费在不可控因素上的每一分精力,都是在透支你改变现状的能力。
11. 抽象并不能消除复杂性,只是转移了它
每一次抽象都是一场赌博,赌的是你以后不需要理解底层逻辑。有时你会赢,但总有“抽象泄漏”的时候。当那一天到来时,你必须清楚自己脚下踩的是什么。
资深工程师即使在技术栈不断拔高时,也会坚持学习底层原理。这并非怀旧,而是为了在凌晨三点抽象层失效、你孤立无援时,能够看透系统的本质。利用好你的工具栈,但也要看清它的死穴。
12. 写作强制思考,教学相长是捷径
写作能强迫你理清思路。当我向他人解释一个概念时——无论是写文档、做分享,还是给 AI 提问——我总能发现自己知识体系中的漏洞。
这不仅仅是慷慨分享,更是一种高效的“自私”学习法。如果你觉得自己懂了,试着把它讲清楚。 讲不顺的地方,就是你理解浅薄的地方。
教学,本质上是在调试你自己的心智模型。
13. 那些“润滑”工作无价,却往往不可见
所谓的“胶水工作”——写文档、带新人、跨团队协调、优化流程——至关重要。但如果你只是出于“热心”而无意识地去做,它可能会拖累你的技术成长并让你精疲力竭。
请把这些工作显性化。 设定时间边界,实行轮换制,并将其转化为可衡量的产出(如文档、模板、自动化工具)。确保这些贡献被视为“专业影响力”,而非单纯的“性格好”。
“无价且不可见”对你的职业生涯来说是一个危险的信号。
14. 如果你赢了每一场辩论,你可能正在失去人心
我对自己的“绝对正确”始终保持警惕。当我赢得太轻松时,通常意味着危险。人们不再反驳你,往往不是被你说服了,而是彻底放弃了沟通——他们会把这种不满体现在后续的执行中。
真正的共识需要耐心。你必须真正听取不同意见,吸收反馈,甚至敢于公开改变主意。
短期的“口舌之快”远不如长期的“同舟共济”更有价值。
15. 当指标变成目标,它就失去了参考价值
任何展示给管理层的指标最终都会被“玩坏”。这未必源于恶意,而是人类天生会为了被考核的东西而优化。
考核代码行数,你就会得到冗余的代码;考核交付速度,你就会得到虚高的估算。
资深的做法是: 永远成对地提供指标。一个看速度,一个看质量或风险。坚持解读趋势,而非迷信阈值。目标应该是洞察真相,而非实施监控。
16. 承认“我不知道”比装懂更能赢得信任
敢于说“我不知道”的资深工程师并非示弱,而是在营造一种“心理安全感”。当领导者承认不确定性时,其他人也会感到安全。反之,如果大家都装懂,问题就会被掩盖,直到最终引爆。
我见过那种资深成员从不认错的团队,后果是灾难性的:没人敢提问,没人敢挑战假设,新人因为怕显得无知而保持沉默。
以身作则展现好奇心,你才能带出一个真正具备学习能力的团队。
17. 你的职业人脉比任何一份工作都长久
职业早期,我只顾埋头干活,忽视了社交。回过头看,这是个错误。那些注重维护公司内外关系的同事,在数十年后都获得了丰厚的回报。
他们能第一时间获得机会,能更快地搭建跨界桥梁,能获得高质量的内推,甚至能和多年前建立信任的伙伴一起创业。
工作是暂时的,但人脉是长久的。 请带着好奇心和利他心去经营关系,而非功利地钻营。
18. 性能优化往往来自“减法”,而非“加法”
系统变慢时,人们的第一反应是“加”:加缓存、加并行、加算法。有时这没错,但我见过更多的性能奇迹来自于问一句:“有哪些计算其实是不必要的?”
删除无用功的效果永远好于加速有用功。最快的代码,是那行永远不需要运行的代码。
19. 流程是为了降低不确定性,而非为了甩锅
好的流程让协作更顺滑,让失败的代价更低。坏的流程则是“官僚主义的表演”——它的存在不是为了解决问题,而是为了在出事时能找到责任人。
如果你解释不清一个流程如何降低了风险或提升了清晰度,那它多半就是累赘。如果大家花在记录工作上的时间比干活的时间还多,那一定是哪里出了大问题。
20. 最终,时间比金钱更贵,请据此决策
职业早期,用时间换钱是合理的。但到了某个阶段,这个公式会反转。你会意识到,时间才是唯一的不可再生资源。
我见过资深工程师为了追逐更高的职级或几个百分点的加薪而拼到精疲力竭。有些人如愿以偿,但更多的人在事后怀疑,付出的代价是否值得。
这不是叫你躺平,而是要让你明白自己在交易什么,并有意识地去做这笔交易。
21. 成功没有捷径,但有复利
专业技能来自于刻意练习——不断挑战舒适区的边缘,反思,重复。这需要数年的积累,没有速成班。
但好消息是:学习是有复利效应的。 只要你的学习能创造新的可能性,而非仅仅是增加琐碎的知识点。坚持写作(为了理清思路),构建可复用的底层组件,将失败的教训沉淀为实战手册。
那些把职业生涯看作“复利增长”而非“博彩”的人,最终都会走得更远。
结语
21 条建议听起来很多,但核心逻辑其实很简单:保持好奇,保持谦逊,永远记住工程的本质是关于“人”的——你服务的用户,以及与你并肩作战的队友。
工程生涯漫长,你有足够的时间去犯错并重新领先。我最钦佩的工程师,不是那些从不犯错的人,而是那些能从错误中汲取养分、乐于分享发现,并始终坚持在场的人。
如果你刚踏上征程,请相信这段旅程会随时间流逝而愈发精彩。如果你已深耕多年,希望这些文字能引起你的共鸣。