谷歌工程师的21堂课
当我14年前加入谷歌时,我以为这份工作就是写好代码。我只说对了一部分。随着时间推移,我逐渐意识到那些卓越的工程师不一定是编程最好的——而是能驾驭代码之外一切的人:处理人际关系、组织政治、目标协同和模糊地带。
这些经验都是我希望能早点知晓的。有些本该让我少走数月弯路,有些则花了数年才真正领悟。它们与技术细节无关——那些变化太快不值一提。这些是关于那些在项目与团队间反复出现的共性规律。
我分享这些,是因为曾有许多工程师的无私经验让我获益良多。这算是我对这份馈赠的接力传递。
1.顶尖工程师痴迷于解决用户问题
我们会本能地迷恋某项技术并寻找应用场景。我也犯过这个错。但真正创造价值的工程师会逆向思考:先深入理解用户痛点,再让解决方案自然浮现。
用户至上意味着要沉浸于客服工单、直面用户、观察使用痛点、不断追问”为什么”直到触及本质。真正理解问题的工程师,往往能找到比预期更简单的优雅方案。
而带着预设方案出发的工程师,常常会堆砌复杂度来证明自己的方案。
2.正确很廉价,达成共识才是真功夫
你可以赢遍所有技术争论却输掉整个项目。我见过天才工程师因永远要做”最聪明的人”而积累 silent resentment(无声怨恨),代价就是后续出现”诡异的执行阻力”和”莫名其妙的抵制”。
关键不在于正确,而在于:明确讨论目标、为他人留出空间、对自己的笃定保持警惕。
强观点,弱坚持——这不是缺乏信念,而是明白在不确定时的决策不应成为身份标签。
3.行动优于完美。先发布再迭代。烂文章可以修改,白纸永远无法编辑
追求完美会让人瘫痪。我见过工程师为尚未建造的东西争论”完美架构”数周。真正的完美方案很少来自空想,而是与现实的碰撞。AI在很多方面能帮上忙。
先实现,再优化,再精进。把丑陋的原型给用户测试,写出混乱的设计初稿,发布让你略感尴尬的MVP。一周的真实反馈胜过一月理论空谈。
行动产生清晰,分析瘫痪毫无产出。
4.清晰是资历,炫技是负债
写炫酷代码是工程师的本能冲动,这像是一种能力证明。
但当加入”时间”和”其他程序员”这两个变量后,清晰的代码就不再是风格选择——而是降低运维风险的必须。
你的代码是给凌晨2点处理故障的陌生人看的战略备忘录。为他们而优化,而非为你自己。我尊重的资深工程师都学会了用清晰取代炫技。
5.创新是笔高利贷,用故障、招聘和认知负担偿还
把技术选型看作拥有有限”创新币”预算。每采用一项非标技术就花费一枚——你根本没多少库存。
重点不是”永不创新”,而是”只在核心价值点创新”。其他都应选择成熟方案,因为已知的风险才是可控的。
“最适合的工具”常是”多数场景下最不差的工具”——因为维护动物园终将成为真实负担。
6.代码不会为你说话,人才会
我曾以为杰出工作会自我证明。错了。代码在仓库里沉默不语。你的上司可能在会议中提到你,也可能不会。同事可能推荐你参与项目,也可能是别人。
在大机构里,决策常在你缺席的会议中,通过你未撰写的摘要,由那些只有5分钟处理12项优先级的人做出。如果没人在你缺席时能说清你的贡献,那你的价值就可有可无。
这不是鼓吹自我推销,而是让价值链条对所有人可见——包括你自己。
7.最好的代码是你无需编写的代码
工程师文化崇尚创造。没人因删除代码获得晋升——尽管删除常比新增更能改善系统。每少写一行代码,就少一行需要调试、维护和解释的内容。
构建前先问:”如果我们不做会怎样?”有时答案是”没什么坏结果”,那就是最佳方案。
问题不在于工程师会不会写代码或用AI辅助,而在于我们太擅长编写,以至于忘了追问是否应该写。
8.规模效应下,连bug都有用户
用户量足够大时,所有可见行为都会成为依赖项——无论你是否承诺过。总有人抓取你的API、自动化你的特性、缓存你的bug。
这带来职业级洞见:不能把兼容性视为”维护”,而新功能才是”正事”。兼容性本身就是产品。
设计淘汰方案时要像设计迁移方案:留足时间、提供工具、保持同理心。多数”API设计”实质是”API退休方案”。
9.多数”慢团队”实则是”错位团队”
项目拖延时,我们常归咎执行力:不够努力、技术选错、人手不足。通常这些都不是根本问题。
在大公司,团队是并发单元,但协作成本随团队数量几何级增长。多数低效实则是协同失效——各自构建错误内容,或以不兼容方式构建正确内容。
资深工程师花更多时间澄清方向、接口和优先级,而非”更快写代码”,因为真正的瓶颈在这里。
10.专注可控之事,忽略不可控之事
在大公司,无数变量超出你控制:架构调整、管理决策、市场变化、产品转向。纠结这些只会带来焦虑而无行动力。
保持清醒高效的工程师会聚焦影响圈。你无法控制是否重组,但可控制工作质量、响应方式和学习收获。面对不确定性时,拆分问题并明确可执行动作。
这不是被动接受,而是战略聚焦。耗费在不可控事项的能量,都是从可控事项偷来的。
11.抽象不消除复杂度,只是把账单留到你oncall时支付
每个抽象都在赌你不需要理解底层。有时你会赢,但总有例外——当抽象泄漏时,你必须知道脚下是什么。
资深工程师持续学习”底层”知识——不是出于怀旧,而是对凌晨3点独面故障时刻的敬畏。使用抽象栈,但要掌握其底层故障模式。
12.写作倒逼清晰。教是最好的学
向他人解释概念时——通过文档、演讲、代码评审甚至与AI对话——我会暴露自己的认知盲区。让他人明白的过程,也让自己更明白。
这不是说通过教学就能成为外科医生,但在软件工程领域基本成立。
这不仅是知识分享。更是自私的学习技巧。如果你认为自己懂了,试着简单解释它。卡壳之处就是理解尚浅的地方。
教学是调试自己心智模型的过程。
13.奠定基础的工作无价却隐形
胶水工作(文档、入职培训、跨团队协调、流程改进)至关重要。但若无意识承担,可能阻碍技术成长并导致 burnout。陷阱在于把这些当作”乐于助人”,而非明确、有限、可见的贡献。
要设定时限、轮值承担、转化为产物(文档/模板/自动化),并让贡献可见——而非视作性格特质。
无价却隐形对你的职业生涯很危险。
14.如果每场辩论都赢,可能正在积累 silent resistance
我开始怀疑自己的笃定。当太容易”赢”时,通常出了问题。人们停止反对不是被说服,而是放弃尝试——这种分歧会体现在执行而非会议上。
真正的共识需要时间。必须真正理解其他观点,吸纳反馈,有时当众改变主意。
短期的正确感远不如长期拥有愿意协作的伙伴重要。
15.当指标成为目标,就不再是指标
所有暴露给管理层的指标终被操纵。无关恶意,而是人性使然——我们优化被测量的东西。
统计代码行数?得到更多行。追踪开发速度?得到膨胀的预估。
资深做法:每个指标需求都搭配”速度+质量/风险”的对子。坚持解读趋势而非崇拜阈值。目标是洞察,不是监控。
16.承认无知比假装懂创造更多安全区
资深工程师说”不知道”不是示弱——而是在创造安全空间。当领导者承认不确定时,就释放了他人效仿的信号。反之会形成集体假装理解的 culture,让问题潜伏直至爆发。
我见过从不承认困惑的团队 leader 造成的危害:无人提问、假设不受挑战、新人沉默因以为别人都懂。
示范好奇心,就能带出真正学习的团队。
17.人脉网络比任何工作更持久
早期我只专注工作忽视 networking。回看这是个错误。注重人际的同事——内外兼修——收获数十年红利。
他们率先获知机会、快速搭建桥梁、获得角色推荐、与多年建立的信任伙伴共同创业。
工作会逝,人脉长存。以好奇和慷慨经营,而非功利性社交。
当需要改变时,往往是关系为你开门。
18.多数性能提升源于删减工作而非增加巧思
系统变慢时,本能是增加:缓存层、并行处理、更优算法。有时没错。但我见过更多性能提升来自追问:”有哪些计算根本不需要?”
删除不必要的工作几乎总比加速必要工作更有效。最快的代码是从不运行的代码。
优化前先质疑工作存在的必要性。
19.流程为降低不确定性而存在,而非留痕追责
优秀流程让协作更易、失败代价更低。糟糕流程是官僚戏剧——存在意义只为追责。
若说不出某流程如何降低风险或提升 clarity,那它很可能只是 overhead。
当撰写流程文档耗时超过实际工作,就彻底本末倒置了。
20.终有一天,时间比金钱珍贵。请相应行事
职业初期我们用时间换金钱——这没错。但某个时刻起,等式反转。你会意识到时间才是不可再生资源。
我见过资深工程师为追逐晋升或几个百分点薪资耗尽心力。有些人得到了,但多数事后怀疑是否值得。
重点不是”不努力”,而是”清楚交易内容,并 deliberate(有意地)抉择”。
21.没有捷径,但有复利
专业能力源于刻意练习——持续突破舒适区、反思、重复。经年累月。无法压缩。
但希望在于:当学习创造新选项而非零散知识时,会产生复利。写作不为流量而为 clarity;构建可复用模块;将经验教训转化为决策手册。
把职业视为复利而非彩票的工程师,往往走的更远。
最后的话
21堂课看似很多,实则核心不过几点:保持好奇,保持谦逊,记住工作本质关乎人——你服务的用户与并肩的队友。
工程师生涯足够漫长,容你犯许多错仍能领先。我最敬佩的不是从不犯错的人,而是从错误中学习、分享发现并持续前行的同行者。
若你刚启程,请知前路愈行愈开阔。若你已深耕,愿这些经验引发共鸣。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!