Post

21 lessons 14 years in google

谷歌大佬的建议

21 lessons 14 years in google

偶然见发现有人转发这篇文章,相当值得读一读。我将原文全部抄写下来,并结合进行AI的解读。资源有很多,有其他人转载的,原博客地址:https://addyosmani.com/blog/21-lessons/

1. The best engineers are obsessed with solving user problems

顶尖工程师痴迷于解决用户问题

It’s seductive to fall in love with a technology and go looking for places to apply it. I’ve done it. Everyone has. But the engineers who create the most value work backwards: they become obsessed with understanding user problems deeply, and let solutions emerge from that understanding.

常见的误区

“拿着答案找问题” (The Solution-First Trap) 很多工程师学了新技术(比如 Rust、Kubernetes、区块链、AI),就会迫不及待地想在项目里用上。 后果: 为了强行使用这种技术,工程师往往会把本来简单的问题复杂化。这就是所谓的“为了证明这把屠龙刀有用,特意去养了一条龙”。这种防御性复杂(Complexity in search of justification) 是工程浩劫的根源,它让系统变得臃肿且难以维护,且未必解决了用户的真实痛点。

正确的做法

最有价值的工程师从来不先谈架构或语言。他们先彻底搞清楚“用户到底想要什么”,然后倒推需要什么技术。 本质逻辑:

  • 如果不理解问题,你写出的每一行代码都可能是“技术负债”。
  • 如果深刻理解了问题,你会发现解决方案往往比预想的要简单得多(Simple and Elegant)。

User obsession means spending time in support tickets, talking to users, watching users struggle, asking “why” until you hit bedrock. The engineer who truly understands the problem often finds that the elegant solution is simpler than anyone expected.

具体的行动指南:如何做到“用户痴迷”?

作者给出了非常接地气的建议,甚至是一些工程师觉得“低端”的工作:

  • 看客服工单 (Spending time in support tickets): 哪怕你是高级架构师,也要去看用户报得最多的错是什么。
  • 直接对话 (Talking to users): 不要只看产品经理传达的需求文档,要去听用户怎么发牢骚。
  • 观察挣扎 (Watching users struggle): 亲眼看看用户在使用产品时在哪里卡住了。
  • 追问到底 (Asking “why” until you hit bedrock): 运用“5 Why”分析法,透过现象看到问题的本质(bedrock)。

The engineer who starts with a solution tends to build complexity in search of a justification.

总结

对于刚入行的工程师: 这段话并不是让你放弃钻研技术,而是提醒你,技术能力是底线,而解决问题的能力是上限。

对于资深工程师: 这是一种思维纠偏。当你在这个行业呆久了,很容易陷入“过度设计”或“技术炫技”的陷阱。作者在提醒大家:最好的代码,往往是那些为了解决一个明确且深刻理解的用户痛点而写的代码,通常这样的代码最简洁,也最有价值。

一句话概括:别让你的技术才华,变成了寻找钉子的锤子;要先看清楚钉子在哪,再决定是用锤子还是用手按进去。

2. Being right is cheap. Getting to right together is the real work

“赢了争论,输了人心”——影响力大于正确性

作者提出了一个反直觉的观点:“Being right is cheap” (正确是廉价的)。在逻辑的世界里,正确似乎是最高追求;但在由人组成的团队里,单打独斗的“正确”一文不值。真正的难点(The real work)在于“带领大家达成共识,一起做正确的事”。

You can win every technical argument and lose the project. I’ve watched brilliant engineers accrue silent resentment by always being the smartest person in the room. The cost shows up later as “mysterious execution issues” and “strange resistance.”

如果你总是证明别人是错的,而你是对的,你以为你在展示能力,实际上你在透支你的“社交信用”。如果你总是赢下每一次技术争论,让同事觉得愚蠢或由于辩不过你而被迫接受你的方案,他们不会当面反驳,但会产生“沉默的怨恨” (Silent resentment)。这是非常高阶的职场洞察。当同事因为你太傲慢而不爽时,他们不会直接说“我不喜欢你的方案”,他们会表现为:代码审查(Code Review)拖延。对你的方案只执行表面,不处理边缘情况。遇到困难时不主动帮你,等着看你笑话。很多技术项目的失败,表面看是执行力问题,本质上是人际关系的崩塌

The skill isn’t being right. It’s entering discussions to align on the problem, creating space for others, and remaining skeptical of your own certainty.

高级工程师的价值不在于自己给出正确答案,而在于让整个团队觉得自己找到了正确答案。你需要给别人留出空间(Create space),让别人发表意见,让别人觉得他们的想法被听到了。有时候,为了达成共识,甚至需要接受一个“80分”的方案,而不是强推你那个无人支持的“100分”方案

Strong opinions, weakly held - not because you lack conviction, but because decisions made under uncertainty shouldn’t be welded to identity.

黄金法则:观点鲜明,但执念不深 (Strong opinions, weakly held) 这是一个在硅谷非常推崇的思维模式。Strong opinions: 你要有主见,不要做墙头草。你要基于你的经验提出你认为最好的方案。Weakly held: 你的自尊心不要和你的方案绑定。当有新数据出现,或者团队坚决反对时,你要能立刻放手,不要觉得“我的方案被否定就是我这个人被否定”。误区: 很多工程师把代码和方案看作自己的“孩子”,一旦被批评就开启防御模式。作者告诉你:方案只是实现目标的工具,不要将其与你的身份(Identity)焊死。

给技术人的建议: 如果你发现自己在团队里总是对的,但项目总是推不动,或者哪怕是一个小改动都要费尽口舌,那么问题可能不在技术上,而在你解决问题的方式上。

下一阶段的修炼:

  • 学会说:“这是我的看法,但我可能是错的,大家怎么看?”
  • 当你赢得争论时,要给对方台阶下。
  • 真正的赢,不是你一个人赢了,而是整个团队拿着一个达成共识的方案一起赢。

3. Bias towards action. Ship. You can edit a bad page, but you can’t edit a blank one

原则:行动偏好(Bias for Actions)。先开枪,后瞄准”—— 只有发布了,才算真实存在。很多工程师都有“完美主义洁癖”,觉得如果是为了发布一坨即便能跑但很难看的代码,或者写一篇逻辑还没完全闭环的设计文档,心里会非常难受。但作者指出:在工程世界里,只要不动手,一切都是零。

The quest for perfection is paralyzing. I’ve watched engineers spend weeks debating the ideal architecture for something they’ve never built. The perfect solution rarely emerges from thought alone - it emerges from contact with reality. AI can in many ways help here.

这是一个经典的场景——会议室里,一群高智商的工程师对着白板激辩,争论是用 gRPC 还是 REST,数据库是用 NoSQL 还是 MySQL,架构是否要微服务化……争论了几周,连一行代码都没写。本质: 这是一种伪工作(Fake Work)。它让你感觉自己在干活,实际上你在逃避“不确定性”。试图在写代码之前就把所有问题在脑子里想清楚,是不可能的。

First do it, then do it right, then do it better. Get the ugly prototype in front of users. Write the messy first draft of the design doc. Ship the MVP that embarrasses you slightly. You’ll learn more from one week of real feedback than a month of theoretical debate.

迭代三部曲: 这是工程迭代的黄金法则。作者甚至鼓励大家发布令自己感到“轻微尴尬”的 MVP(最小可行性产品)。

  • 阶段一 (Do it): 跑通流程。哪怕代码里全是 hardcode,界面丑陋,只要能验证核心价值就行。
  • 阶段二 (Do it right): 重构代码,处理边缘情况,增加测试,使其稳定。
  • 阶段三 (Do it better): 性能优化,扩展功能。 误区: 很多工程师试图在第一阶段就直接跳到第三阶段,结果项目永远发不出去(Forever in development)。

Momentum creates clarity. Analysis paralysis creates nothing.

反馈优于辩论 (Real feedback > Theoretical debate)。无论你在脑子里构想得多完美,一旦接触到真实用户、真实数据流量、真实网络环境,你的架构大概率会出问题。与其在脑子里模拟,不如让现实来打你的脸。只有现实的痛击(Contact with reality),才能让你真正看清正确的架构该长什么样。作者还特意提到了 AI:AI 是快速生成那个“糟糕初稿”的神器,善用它来打破空白页面的恐惧。

给工程师的当头棒喝:

如果你发现自己或者团队陷入了无休止的“架构讨论”或“设计文档审查”,甚至为了一个变量命名争论半天,请立刻叫停。

心态转变

  • 把“发布(Shipping)”看作是学习的开始,而不是开发的结束。
  • 允许自己写出“垃圾代码”(暂时的),只要目的是为了获取反馈。
  • 动量(Momentum) 是解决模糊问题的良药。当你不知道怎么做的时候,先随便做一个版本出来,答案往往就在你动手的过程中浮现了。

正如那句名言:Done is better than perfect.(完成比完美更重要。)

4. Clarity is seniority. Cleverness is overhead

经典辩证关系:聪明(Cleverness)”与“清晰(Clarity)”。作者的核心观点:代码是写给人看的,顺便给机器运行。

The instinct to write clever code is almost universal among engineers. It feels like proof of competence.

But software engineering is what happens when you add time and other programmers. In that environment, clarity isn’t a style preference - it’s operational risk reduction.

这是一个非常经典的定义(谷歌本身对此有专门的论述)。

  • 编程(Programming):是你一个人写一段脚本解决当下的问题。
  • 工程(Engineering):是让这代码在未来 5 年内,由几十个不同的人(包括那时已经忘了这段逻辑的你自己)共同维护、修改、扩展。

在这个维度下,你当年为了炫技写下的“骚操作”,都会变成后来接手人的噩梦。

Your code is a strategy memo to strangers who will maintain it at 2am during an outage. Optimize for their comprehension, not your elegance. The senior engineers I respect most have learned to trade cleverness for clarity, every time.

深层含义: 这是全篇画面感最强的一句。例如,生产环境崩溃了,报警响了,此时是凌晨 2 点。一个倒霉的运维或值班工程师睡眼惺忪地爬起来排查问题。

  • 聪明的代码: 用了三层嵌套的三元运算符,写了一个极其精妙的递归。结果: 值班工程师看不懂,不敢改,只能重启服务碰运气,甚至因为误操作导致事故扩大。
  • 清晰的代码: 平铺直叙,变量名就像说明书一样清晰,甚至略显罗嗦。结果: 值班工程师一眼看懂逻辑,定位问题,5分钟解决战斗。

资深的标志:克制 (Restraint)

原文, “The senior engineers I respect most have learned to trade cleverness for clarity, every time.” 深层含义:

  • 初级工程师: 不知道怎么写,所以写得乱。
  • 中级工程师: 刚学会高级特性(如元编程、复杂的泛型、位运算),恨不得并在所有地方都用上,以此证明自己“会了”。
  • 资深工程师: 明明知道怎么用最炫技的方法写,但忍住了,选择用了最朴实无华甚至有点“笨”的写法。

这种主动选择平庸(for the sake of clarity)的能力,才是真正的 Seniority。

给技术人的建议

  1. KISS 原则 (Keep It Simple, Stupid): 如果你需要写一大段注释来解释这一行代码在干什么,那通常意味着你应该重写这一行代码,而不是写注释。
  2. 对他人的同理心: 每次提交代码前,想象一下如果是一个刚入职 3 个月的实习生看这段代码,他能看懂吗?如果不能,请重构。
  3. 警惕“一行代码党”: 能够用一行代码解决复杂问题在算法竞赛里是英雄,在工程项目里可能是灾难。好读(Readable)永远优于 简短(Concise)。

正如 Python 之禅所说:”Simple is better than complex.”(简单胜于复杂。)

5. Novelty is a loan you repay in outages, hiring, and cognitive overhead

限制对新技术的盲目追求,将有限的创新资源集中在业务核心上,而在基础设施和工具上尽量选择成熟、稳健(所谓的“无聊”)的技术。

新颖度是一笔贷款,你需要用宕机事故、招聘难度和认知负担来偿还

Treat your technology choices like an organization with a small “innovation token” budget. Spend one each time you adopt something materially non-standard. You can’t afford many.

把你的技术选型看作是只有少量‘创新筹码’预算的组织。每当你采用某种非标准化的技术时,就花掉一个筹码。你并没有多少筹码可以挥霍

The punchline isn’t “never innovate.” It’s “innovate only where you’re uniquely paid to innovate.” Everything else should default to boring, because boring has known failure modes.

点睛之笔并非‘永远不要创新’,而是‘只在你能获得独特回报的地方创新’。其他一切都应默认为‘无聊’的选择,因为‘无聊’的技术有已知的故障模式

The “best tool for the job” is often the “least-worst tool across many jobs”-because operating a zoo becomes the real tax.

所谓“最适合这项工作的工具”,往往是指“在许多工作中表现都没那么差的工具”——因为维护一个”动物园“才是真正的重税

6. Your code doesn’t advocate for you. People do

Early in my career, I believed great work would speak for itself. I was wrong. Code sits silently in a repository. Your manager mentions you in a meeting, or they don’t. A peer recommends you for a project, or someone else.

职业生涯早期,我以为优秀的工作成果自己会说话。我错了。代码只是静静地躺在仓库里。

In large organizations, decisions get made in meetings you’re not invited to, using summaries you didn’t write, by people who have five minutes and twelve priorities. If no one can articulate your impact when you’re not in the room, your impact is effectively optional.

在大公司里,决定你是去是留、升职还是加薪的决策,往往发生在你并未受邀的会议上。决策者依据的是并非你撰写的总结报告,而且这些人只有五分钟时间,却要处理十二件优先事项。

解读: 这是对大公司政治现实最精准的描述。

  • 信息压缩带来的失真: 你的直属领导怎么向他的老板汇报你?你的老板怎么向 VP 汇报你?在这个传话链条中,如果你的价值没有被概括成简单、有力的一两句话(Summary),就会在传递中丢失。
  • 决策者的注意力稀缺: 高层没时间去 Review 你的代码。他们只看谁的名字被反复提起,谁解决了关键问题。

可见性即生存:如果你不在场时,没有人能清晰地表达出你的贡献,那么你的贡献实际上就是‘可有可无’的。解读:

  • 代言人(Advocacy)的重要性: 你需要有人做你的“盲点代言人”。当分配重要项目或讨论晋升名额时,必须有一个人在会议室里说:“我觉得这个任务应该给 [你的名字],因为他上次搞定了那个很难的故障。”
  • 残酷的现实: 如果没人替你说话,在组织看来,你的工作就是没有发生过,或者是谁来做都可以(Optional)。

This isn’t strictly about self-promotion. It’s about making the value chain legible to everyone- including yourself.

这严格来说不在于自我吹嘘。而是在于让价值链条对每个人——包括你自己——都变得清晰易懂。

价值链的可读性(Legible): 你有责任将晦涩的技术工作翻译成商业价值。

  • 错误做法: “我重构了这个模块,减少了 30% 代码量。”(老板听不懂这就好在哪里)
  • 正确做法: “我优化了核心模块,让服务器成本降低了 20%,并且让新功能上线速度快了一倍。”(这就叫“清晰易懂”)

总结 这段话给技术人员的建议是:不要做沉默的工兵。

  • 主动沟通: 定期向管理者同步工作进度和价值(不仅仅是进度)。
  • 寻找盟友: 建立良好的人际关系,确保你的工作被同事和上级认可。
  • 翻译价值: 学会用业务语言包裹技术成果,让那些“没时间看代码”的人也能秒懂你的牛逼之处。

代码只能保证你不被解雇,但那些替你说话的人,才能决定你飞多高。

7. The best code is the code you never had to write

软件工程领域中一个极具智慧的极简主义哲学,类似于设计界的“少即是多(Less is more)”,但 在编程语境下,它的含义往往更加深刻和反直觉。

核心观点:代码即负债(Code is Liability)

We celebrate creation in engineering culture. Nobody gets promoted for deleting code, even though deletion often improves a system more than addition. Every line of code you don’t write is a line you never have to debug, maintain, or explain.

这段话批判了当前工程文化中的激励机制偏差:

  • 加法受赏:由于“做新功能”不仅可见度高,而且容易量化(KPI),工程师和管理者往往倾向于不断做加法。
  • 减法被忽视:删除冗余代码、简化系统架构虽然能极大提升系统的健康度和开发效率,但这种工作往往是“隐形”的,很难在晋升答辩中作为亮点展示。
  • 后果:系统变得越来越臃肿(Bloatware),导致后期开发寸步难行。

Before you build, exhaust the question: “What would happen if we just… didn’t?” Sometimes the answer is “nothing bad,” and that’s your solution.

这提供了一个具体的决策工具——“空值测试”。 在动手写代码之前,甚至在设计方案之前,必须先进行灵魂拷问:“如果不做这个功能,天会塌下来吗?”

  • 如果答案是“没什么大不了”,那么“不做”本身就是最优解。
  • 这种思维方式要求工程师从“执行者(How to build)”转变为“决策者(Why/Whether to build)”。

The problem isn’t that engineers can’t write code or use AI to do so. It’s that we’re so good at writing it that we forget to ask whether we should.

这是一个非常深刻的心理学洞察。

  • 手里拿着锤子,看什么都是钉子:现在的工程师(加上 AI 辅助)写代码的能力太强、效率太高了,以至于遇到任何问题,第一反应就是“写个脚本/功能/微服务”来解决。
  • 盲目的勤奋:我们因为太擅长“建设”,从而丧失了“克制”的能力。我们用战术上的勤奋(快速写代码),掩盖了战略上的懒惰(思考这是否真的必要)。

在工作中如何应用:

  • 质疑需求:当产品经理提出需求时,先问“如果不做会怎样?”,砍掉伪需求是最高效的编程。
  • 重构减负:把“删代码”视为一种成就,定期清理僵尸代码。
  • 警惕 AI:AI 让生成代码变得极其廉价,但这并不意味着我们应该无节制地生成代码,因为人类阅读和维护代码的成本依然昂贵。

8. At scale, even your bugs have users

核心现象:海勒姆定律(Hyrum’s Law),这句话直译是“当规模足够大时,甚至连你的 Bug 都有用户在使用”。

  • 承诺 vs 现实:API 文档(承诺)里可能写着“列表返回顺序不固定”,但如果你的代码在 99% 的情况下碰巧是按字母排序的,用户就会默认并依赖这个“字母排序”。
  • Bug 变成了 Feature:哪怕你有一个 Bug(比如某个字段在特定情况下为空),只要用户量够大,一定有人写了代码来利用这个空值做逻辑判断。
  • 后果:当你试图“修复”这个 Bug 时,在这些用户眼中,你实际上在“引入”Bug,因为你打破了他们既有的运行逻辑。

With enough users, every observable behavior becomes a dependency - regardless of what you promised. Someone is scraping your API, automating your quirks, caching your bugs.

可观测行为即契约,这里列举了用户是如何“滥用”你的系统的:

  • Scraping API:你没公开的接口,他们抓包抓到了,就在用。
  • Automating quirks:你的系统有个怪癖(quirk),比如每晚 12 点会卡顿一下,用户就会针对这个卡顿写自动化脚本。
  • 结论:在用户眼里,如果你允许它发生,它就是产品的一部分。不管是文档里写的,还是偶然发生的,只要是“可观测的行为”,就是用户眼中的“契约”。这让系统修改变得极其困难。

This creates a career-level insight: you can’t treat compatibility work as “maintenance” and new features as “real work.” Compatibility is product.

兼容性即产品力,这是对工程师职业价值观的重大修正。

  • 误区:很多工程师认为开发新功能(New Features)才是“真正的干活”,而维护旧系统、保持兼容性(Compatibility)是脏活累活。
  • 真相:对于一个成熟的平台,稳定性与兼容性才是最大的产品特性。如果你的每一次更新都让用户提心吊胆,不管你的新功能多炫酷,用户都会流失。
  • 升维:能处理好复杂系统的兼容性问题,解决历史遗留的“屎山”而不破坏现有业务,是高级工程师区别于初级工程师的核心能力。

Design your deprecations as migrations with time, tooling, and empathy. Most “API design” is actually “API retirement.”

优雅的退场,这是一个极其精妙的定义——API 设计的本质是设计它的死亡方式。

  • API Retirement:发布一个 API 很容易,但要在数百万用户依赖它的情况下安全地废弃它(Deprecation)极其困难。
  • Empathy(同理心):不要简单地发个公告说“下个月关停”。你需要提供工具(Tooling)、预留足够的时间(Time),帮助用户平滑迁移。
  • 设计哲学:在写下第一行 API 代码时,你就要思考:未来这一行代码该如何被安全地替换或删除?如果没想好“出口”,就不要设计“入口”。

实际工作中的建议:

  • 防御性编程:如果不希望用户依赖某种行为(例如排序),请在测试环境中主动随机化这种行为,尽早暴露问题。
  • 敬畏存量:修改旧代码时,不要只看文档,要看日志。文档说了算不算,线上真实流量说了才算。
  • 把废弃当产品做:如果必须要改动一个破坏性的接口,请像发布新产品一样对待这次“废弃”——写文档、给工具、做宣讲、留缓冲期。

9. Most “slow” teams are actually misaligned teams

大多数团队之所以“慢”,不是因为他们跑得不够快,而是因为那是他们在往不同的方向跑,或者跑在错误的道路上。

When a project drags, the instinct is to blame execution: people aren’t working hard enough, the technology is wrong, there aren’t enough engineers. Usually none of that is the real problem.

当一个项目延期了,直觉反应: 管理层通常会认为:员工不够努力(在那儿摸鱼?),技术选型太烂(这框架不行!),人手不够(再招10个工程师!)。这些通常只是替罪羊。真正的病根不在于“手”,而在于“脑”和“嘴”(即沟通与决策)。

In large companies, teams are your unit of concurrency, but coordination costs grow geometrically as teams multiply. Most slowness is actually alignment failure - people building the wrong things, or the right things in incompatible ways.

在大公司,团队是并行工作的单元(Unit of concurrency)。理论上人越多干得越快,但实际上,随着节点(团队)增加,节点间的连线(沟通路径)呈几何级数暴增。

对齐失败”(Alignment Failure):

  • 做错的东西: 也就是产品方向错了,开发了半天发现不是用户或业务需要的。
  • 做不兼容的东西: 团队A写的接口,团队B根本调不通;或者团队A改了底层逻辑,导致团队B的模块崩了。
  • 结果: 大量时间花在了返工、争论接口定义、修复集成错误上,而不是在开发新功能上。

Senior engineers spend more time clarifying direction, interfaces, and priorities than “writing code faster” because that’s where the actual bottleneck lives.

在初级阶段,写代码的速度可能是瓶颈。但在复杂系统中,歧义(Ambiguity) 才是瓶颈。 资深人员的职责: 一个Senior Engineer之所以值钱,不是因为他敲键盘的速度是Juniors的10倍,而是因为他花了大部分时间在做“对齐”工作:

  • 明确方向: 确保大家知道由于什么原因要做什么(Why & What)。
  • 定义接口: 划定边界,确保团队A和团队B可以在不打架的情况下并行工作。
  • 确定优先级: 决定什么先做,什么后做,避免资源分散。

实际工作中的建议:

  • 当你接到一个任务(Ticket/Jira)时,在动手前,强迫自己确认三件事
    • Why: 为什么要做这个?业务价值是什么?(防止做成了X,但业务其实需要Y)
    • Constraint: 也就是边界。这个功能不应该影响什么?有没有一定要兼容的老数据?
    • Deadline vs Scope: 这个任务的优先级到底多高?如果时间不够,应该砍掉哪部分功能(MVP思维)?
  • “接口优先”原则(API First):先写契约,再写逻辑: 在写任何实质性的业务逻辑代码前,先写好 Interface、Proto 文件或 Swagger 文档。
  • 推行 RFC (Request for Comments) 文档:文化如果你要开发一个耗时超过 3 天的功能,不要直接写代码,先写一个简单的技术设计文档(Design Doc / RFC)。
    • 写下来: 用简单的语言描述你的方案:A方案是什么,B方案是什么,为什么选A?数据库怎么设计?
    • 发出来: 发到群里或给 Team Leader 看,请求大家 Review(挑刺)。
    • 对齐: 如果大家在文档阶段就吵完了,代码写起来就是一泻千里;如果等代码写完了才发现大家理解不一致,那是灾难。
    • 收益: 这里的“慢”是为了后面的“极速”。文档是最低成本的试错方式。

10. Focus on what you can control. Ignore what you can’t

“斯多葛主义(Stoicism)的职场应用”。关注你能掌控的,忽略你无法改变的。

In a large company, countless variables are outside your control - organizational changes, management decisions, market shifts, product pivots. Dwelling on these creates anxiety without agency.

  • 现实情况: 在大公司工作,你实际上是处于一个巨大的、复杂的系统中。这里充满了你无法控制的变量(Variables):组织架构调整(Reorg)、管理层的决策、市场的风向变化、产品的突然转向。
  • 副作用: 如果你总是盯着这些你无法左右的事情,结果只有“Anxiety without agency”(没有行动力的焦虑)。即:你很担心,但你手里没有任何“抓手”去改变它,这种内耗是最伤人的。

The engineers who stay sane and effective zero in on their sphere of influence. You can’t control whether a reorg happens. You can control the quality of your work, how you respond, and what you learn. When faced with uncertainty, break problems into pieces and identify the specific actions available to you.

该做什么:锁定“影响圈” (Sphere of Influence)

  • 区分边界: 那些能够“保持清醒和高效”(sane and effective)的工程师,懂得划清界限。
    • 不可控区: 公司是否会重组、明天是否会砍项目。
    • 可控区(你的影响圈): 你代码的质量、你对变化的反应态度、你从中学到了什么技能。
  • 具体战术: 面对巨大的不确定性时,不要在大脑里演练灾难片。要把大问题拆解成碎片(pieces),找出其中你可以立刻着手去做的具体行动(specific actions)。

This isn’t passive acceptance but it is strategic focus. Energy spent on what you can’t change is energy stolen from what you can. 这段话最后特别强调了一个非常重要的区别:

  • 这不是“被动接受”(Passive acceptance): 这不是教你“躺平”、“摆烂”或对公司漠不关心。
  • 这是“战略性聚焦”(Strategic focus): 这是一种资源管理的智慧。你的精力(Energy)是有限的货币。
  • 成本计算: 每一分花在抱怨、担忧不可控之事上的精力,都是从你本可以用于提升自我、把事情做好的精力中偷走(stolen)的。

当你感到焦虑时,问自己两个问题:

  • “这件事是我能决定的吗?” -> 如果不是,划掉,停止思考它。
  • “在这个局面下,我当下能做的最好的动作是什么?” -> 哪怕只是写好这一行代码,或者更新好简历。

一句话总结: 别为天气(大环境)烦恼,专注修好你的屋顶(自身能力)。

11. Abstractions don’t remove complexity. They move it to the day you’re on call

抽象(Abstractions)并不会消除复杂性,它只是把复杂性转移到了你值班(On-call)的那一天。我们使用各种框架(Frameworks)、云服务、高级语言,这些都是“抽象”。它们把底层脏活累活打包成一个黑盒子,让你觉得开发很容易。但这是一种错觉。那个黑盒子里的复杂逻辑依然存在,只是暂时被屏蔽了。什么时候会遭到反噬?通常是系统崩溃、你半夜被电话叫起来修Bug的时候。

Every abstraction is a bet that you won’t need to understand what’s underneath. Sometimes you win that bet. But something always leaks, and when it does, you need to know what you’re standing on.

  • 每一次使用抽象,你都在打赌: 你赌的是“我不需要知道这盒子底下是怎么运作的,也能把活干好”。
  • 残酷的现实: 绝大多数时候你是赢的(开发效率高),但“抽象泄漏定律”(Leaky Abstractions)告诉我们——任何非平凡的抽象都会有漏洞。
  • 后果: 当抽象层失效(Leak)时,如果你只懂表面API,不懂底层原理,你就像刚才还开着自动驾驶的人突然被扔到了悬崖边,却连方向盘在哪都不知道。

Senior engineers keep learning “lower level” things even as stacks get higher. Not out of nostalgia, but out of respect for the moment when the abstraction fails and you’re alone with the system at 3am. Use your stack.

这段话解释了为什么高级工程师即便在使用最新的High-level技术栈,依然会去学习底层(Lower level)知识(如内存管理、网络协议、数据库原理)。

  • 不是因为怀旧(Nostalgia): 不是因为他们那是老古董,喜欢写汇编。
  • 而是因为敬畏(Respect): 他们敬畏那个时刻——凌晨3点(3am),服务器挂了,所有的监控报警都在响,常用的Debug工具失效了,你不仅代表你自己,你代表整个公司面对系统。
  • 关键区别: 在那一刻,Google搜不到答案,只有你对系统底层运作的思维模型(Working model) 能救你的命。

But keep a working model of its underlying failure modes.

作者并不是让你拒绝使用抽象(还是得用,为了效率),而是给出了具体的建议:

  • Use your stack(使用你的技术栈): 尽情使用高级工具,不要重复造轮子。
  • Keep a working model(保持思维模型): 当你在用一个黑盒子(比如一个数据库ORM,或者Kubernetes)时,你脑子里必须清楚:它是怎么坏的?(Failure modes)。
    • “如果这个API超时了,底层发生了什么?”
    • “如果这个云服务挂了,是不是因为底层的磁盘IO打满了?”
  • 向下深挖一层: 如果你写Python/Java,了解一下内存;如果你写前端,了解一下浏览器渲染原理和HTTP协议;如果你用SQL,了解一下索引原理。

一句话总结: 工具为你节省了开发的时间,但你必须把节省依然下来的时间用来理解工具的底层原理,否则你迟早要在凌晨3点连本带利地还回去。

12. Writing forces clarity. The fastest way to learn something better is to try teaching it

核心法则:输出倒逼输入。 写作强迫你理清思路。要更好地学习某样东西,最快的方法就是尝试去教别人。

Writing forces clarity. When I explain a concept to others - in a doc, a talk, a code review comment, even just chatting with AI - I discover the gaps in my own understanding. The act of making something legible to someone else makes it more legible to me.

  • 大脑的欺骗性: 我们经常觉得心里“懂了”,但这通常只是一种模糊的直觉。这种直觉是不可读(illegible)的。
  • 写作/教学的作用: 当你试图通过写文档、做演讲、写代码评审意见(Code Review Comment),甚至只是跟 AI 聊天来解释一个概念时,你必须把那种模糊的直觉转化为线性的、逻辑严密的语言。
  • 暴露盲区: 就在这个“转化”的过程中,你会惊讶地发现自己理解上的漏洞(gaps)。

“为了让别人能看懂,我首先得让自己彻底看懂。”

This doesn’t mean that you’re going to learn how to be a surgeon by teaching it, but the premise still holds largely true in the software engineering domain.

This isn’t just about being generous with knowledge. It’s a selfish learning hack. If you think you understand something, try to explain it simply. The places where you stumble are the places where your understanding is shallow.

这是这段话最精彩的反转视角。很多工程师不愿意写文档或做分享,觉得这是在做慈善,浪费自己的时间。然而作者指出:

  • 不是为了利他(Generous): 写文档不光是为了帮别人。
  • 而是为了利己(Selfish): 这是一个学习的捷径(Hack)。
  • 试金石: 当你认为你懂了一个技术(比如并发模型、分布式锁),试着用最简单的语言解释它。如果你在某处卡壳了(Stumble): 恭喜你,你这就找到了你认知浅薄(Shallow)的地方。这比别人考你还准。

Teaching is debugging your own mental models.

终极隐喻:教学即Debug。

  • 你的大脑里对某个技术的理解,就像一段并在运行的“思维代码”。
  • 你不写出来、不讲出来,这段代码就一直在后台静默运行,你根本不知道里面有多少Bug。
  • 教学(Teaching) 的过程,就是把这段思维代码拉出来运行一遍单元测试。你在教别人的过程中,实际上是在Debug你自己的大脑,修复那些逻辑断层和错误认知。

作者加了一个小注脚:这招在软件工程(知识密集型) 领域特别管用。虽然你不能靠“教别人做手术”来学会做手术(那是肌肉记忆),但在理解复杂的系统架构和代码逻辑时,这个逻辑是无敌的。 不要把写文档、写注释、做技术分享看作是“不得不做的杂活”。

一句话总结: 如果你不能简单清晰地把它写出来,说明你并不是真的懂。写作不是为了展示你的知识,而是为了修补你大脑中的Bug。

13. The work that makes other work possible is priceless - and invisible

胶水工作(Glue Work)。这段话是给那些“团队里最热心、最负责任但在晋升答辩时却经常吃亏”的工程师的最强警示。

Glue work - documentation, onboarding, cross-team coordination, process improvement - is vital. But if you do it unconsciously, it can stall your technical trajectory and burn you out. The trap is doing it as “helpfulness” rather than treating it as deliberate, bounded, visible impact.

核心概念:什么是“胶水工作”?

  • 定义: 文档撰写、新人入职引导(Onboarding)、跨团队沟通协调、流程优化。
  • 特性: 这些工作像胶水一样把团队粘合在一起。没有它,项目会散架,团队会混乱。它是无价的(Priceless)。
  • 陷阱: 它是隐形的(Invisible)。代码提交记录(Commits)看得见,修好的Bug看得见,上线的功能看得见,但“花了3小时帮新人配好环境”通常看不见。
  • 误区: 很多工程师(尤其是容易产生共情的人)做这些事是出于下意识的(Unconsciously)好意。你觉得自己在帮忙,大家都夸你“人真好”。
  • 后果:
    • 职业停滞(Stall technical trajectory): 你把时间都花在杂事上,核心技术产出变少,晋升时评委只看硬指标(Hard Skills),导致你无法晋升。
    • 职业倦怠(Burn out): 当团队不仅不奖励你,反而因为这部分工作没做好而指责你,甚至因为你没时间写代码而给你低绩效时,你会彻底崩溃。

Timebox it. Rotate it. Turn it into artifacts: docs, templates, automation. And make it legible as impact, not as personality trait.

作者不是让你别做(毕竟这工作很关键),而是教你如何高明地做。要把“热心助人”转化为“工程影响力”。

A. 资产化/产品化(Turn it into artifacts)

  • 不要做一次性的一对一服务。
  • 要产出资产:
    • 如果你教新人配环境,不要手把手教,写一篇文档或者写一个自动化脚本。
    • 如果你在协调流程,不要只在群里喊话,建立一个模板或引入一个自动化工具。
  • 目的: 文档、脚本、模板是可以被看见的“交付物”,它们证明了你的贡献。

B. 设定边界(Timebox it & Rotate it)

  • Timeboxing(时间盒): 给自己设定上限,比如每周只花10%的时间处理杂事,剩下的必须保护好自己的核心开发时间。
  • Rotate(轮岗): 不要让胶水工作成为你一个人的专属责任。建立轮值机制(On-call for glue work),让团队每个人都分担这份痛苦,大家才会意识到这工作的价值。

C. 可视化影响力(Make it legible as impact)

  • 不要让老板觉得你是“性格随和(Personality trait)”,要让老板觉得你是“在做提升团队效率的系统性工程(Impact)”。
  • 在绩效报告里,不要写“我很乐于助人”,要写“通过自动化入职流程,将新人上手时间缩短了50%”。

总结 “无价且隐形”是职业生涯的慢性毒药。

一句话总结: 胶水工作必须做,但不能作为“好人好事”默默地做。你要把这些杂活变成文档、工具和流程,把“隐形的付出”变成“可见的杠杆率”。

Priceless and invisible is a dangerous combination for your career.

14. If you win every debate, you’re probably accumulating silent resistance

表面上的“全胜”往往预示着潜在的失败。标题的直译是,如果你赢了每一场辩论,你可能正在积攒“沉默的阻力”。

I’ve learned to be suspicious of my own certainty. When I “win” too easily, something is usually wrong. People stop fighting you not because you’ve convinced them, but because they’ve given up trying - and they’ll express that disagreement in execution, not meetings.

当团队成员意识到无论怎么反驳最后都是你赢时,他们会选择闭嘴。这种闭嘴是放弃,而不是认同。 当人们无法在会议桌上(决策阶段)表达不同意见时,他们并没有消除分歧,而是将分歧带到了工作岗位上(执行阶段)。

Real alignment takes longer. You have to actually understand other perspectives, incorporate feedback, and sometimes change your mind publicly.

  • “说服” vs. “对齐”:
    • 赢(Winning): 是一种零和博弈,我要证明我是对的,你是错的。这带来的是短期的自我满足。
    • 对齐(Alignment): 是共识机制,在这个过程中,大家的观点可能都被修正了,但最终目标一致。
  • 改变主意是力量,不是软弱: 作者强调要“incorporate feedback, and sometimes change your mind publicly”。敢于公开承认“你的观点比我好”,不仅不会削弱威信,反而能建立信任,表明你关注的是最好的结果,而不是维护自己的正确性。

The short-term feeling of being right is worth much less than the long-term reality of building things with willing collaborators.

这段话给我们的教训是:警惕那些赢得太轻松的时刻。

  • 短期感觉: 做一个永远正确的“常胜将军”很爽(Ego boost)。
  • 长期现实: 你正在失去团队的智慧,并在每个人心中埋下消极对抗的种子。 建议的做法: 如果会议室里一片死寂,或者每个人都迅速点头,你应该感到恐慌。你应该主动挖掘异议,问这样的话:

  • “如果这个计划失败了,你们觉得主要原因会是什么?”
  • “我是不是漏掉了什么风险?”
  • “谁能扮演‘唱反调’的角色来挑战一下这个想法?”

正如最后一句所说:用“愿意合作的人”去“建立长期的事业”,远比“当下觉得自己是对的”要有价值得多。

15. When a measure becomes a target, it stops measuring

这段揭示了管理学中著名的“古德哈特定律”(Goodhart’s Law)的核心实质,并给出了非常实用的“高阶破解法”。 直译:当一个度量指标变成目标时,它就不再是一个好的度量指标了。

Every metric you expose to management will eventually be gamed. Not through malice, but because humans optimize for what’s measured.

指标(Metric)原本是为了反映现实情况(比如温度计反映气温)。但一旦你告诉员工“为了拿到奖金,你需要把温度计读数提高”,大家就会拿打火机去烤温度计,而不是去想办法让天气变暖。作者强调这通常不是源于恶意(Malice),而是源于人性。人类是天生的优化机器(Humans optimize for what’s measured)。如果你考核A,大家就会拼命优化A,哪怕代价是牺牲B、C和D。

If you track lines of code, you’ll get more lines. If you track velocity, you’ll get inflated estimates.

展示了单一指标如何导致错误的激励:

  • 代码行数(Lines of code):
    • 初衷: 想看程序员工作量大不大。
    • 结果: 程序员开始写啰嗦、臃肿的代码,不再复用代码,甚至故意把简单的逻辑复杂化。结果代码质量下降,维护成本飙升。
  • 开发速度/估算点数(Velocity):
    • 初衷: 想看团队交付得快不快。
    • 结果: 通货膨胀。原本定为“2个点”难度的任务,团队会说这其实是“5个点”。表面上看团队完成了更多点数(Velocity很高),实际上产出并没有增加。

The senior move: respond to every metric request with a pair. One for speed. One for quality or risk. Then insist on interpreting trends, not worshiping thresholds. The goal is insight, not surveillance.

单一指标是毒药,成对指标是解药

指标对冲(Paired Metrics)

永远不要单独考核一个维度,要用另一个相互制衡的维度来“牵制”它。

  • 速度(Speed) vs. 质量(Quality): 如果你考核交付速度,必须同时考核Bug率。如果交付快但Bug多,不能算赢。
  • 数量(Volume) vs. 满意度(Satisfaction): 如果你考核客服接电话的数量,必须同时考核用户满意度。否则客服会为了凑数而匆忙挂断电话。

关注趋势,而非阈值(Trends, not thresholds)

  • 阈值(Threshold): 比如“必须达到99%”。这会导致造假或动作变形。
  • 趋势(Trend): 比如“我们在变好还是变坏?”。这鼓励解决根本问题。

洞察 vs. 监视

  • 看数据的目的不应该是像工头一样拿着鞭子监视(Surveillance)员工是否偷懒。
  • 目的应该是获得洞察(Insight):系统哪里堵塞了?团队哪里受阻了?我们需要调整什么策略?

这段话给管理者的建议是:

  1. 如果你在考核什么,就要准备好大家会为了迎合这个数字而牺牲其他东西。
  2. 永远不要看单边的数字。 任何一个孤立的KPI都是危险的。
  3. 设计“互相打架”的指标对。 例如:不仅要看“销售额”,还要看“退货率”;不仅要看“获客数”,还要看“留存率”。
  4. 不要让员工觉得你在监视他们,而要让他们觉得你在利用数据帮助团队发现问题。

16. Admitting what you don’t know creates more safety than pretending you do

这段话触及了现代高绩效团队的核心基石:心理安全感(Psychological Safety)。它颠覆了传统的领导力观念——权威不是来自于“全知全能”,而是来自于“真实”和“好奇”。

Senior engineers who say “I don’t know” aren’t showing weakness - they’re creating permission. When a leader admits uncertainty, it signals that the room is safe for others to do the same. The alternative is a culture where everyone pretends to understand and problems stay hidden until they explode. 资深工程师说“我不知道”并没有表现出软弱——他们是在创造许可。另一种情况是,大家都假装听懂了,问题被掩盖起来,直到最后爆发。

“特许权”(Permission)的概念: 在任何等级制度中,行为标准都是由上位者设定的。如果最资深的人都不得不假装什么都懂,那么所有资历比他浅的人就更不敢承认自己不懂。破冰效应: 当资深人士坦然说出“我不懂”时,他实际上是在发布一条隐形的团队规则:“在这个房间里,知识盲区是被允许存在的,提问是安全的。”真正的自信: 只有对自己能力有足够自信的人,才敢于公开承认某一处的无知。这种坦诚反而增加了大家对他的信任。

大家都假装听懂了,这是软件工程和项目管理中最可怕的场景,通常被称为“皇帝的新装”效应:因为没人敢问,所以每个人都以为“别人都懂,只有我不懂”。为了不显得蠢,每个人都跟着点头。这种沉默会导致错误的假设(Assumptions)无法被挑战,逻辑漏洞无法被填补。问题在这个阶段解决成本最低。如果大家都假装懂,问题就会一直通过架构设计、代码编写,直到上线崩溃(Explode)。那时候的代价是指数级增长的。

I’ve seen teams where the most senior person never admitted confusion, and I’ve seen the damage. Questions don’t get asked. Assumptions don’t get challenged. Junior engineers stay silent because they assume everyone else gets it. 初级工程师保持沉默,因为他们以为其他人都懂。

新人和初级员工往往最容易感到焦虑。如果资深人士表现得像神一样全知,新人会感到巨大的压力,觉得自己不配待在这里。在这种高压环境下,新人害怕提“蠢问题”。但往往正是新人的那些“天真问题”,能戳破资深人士复杂的思维惯性,发现盲点。如果新人不敢说话,团队就失去了这种纠错机制。

Model curiosity, and you get a team that actually learns. 树立好奇心的榜样,你就会得到一个真正善于学习的团队。

这段话给管理者的终极建议是转变角色定位:

  • 旧观念: 领导者必须是“知道答案的人”。
  • 新观念: 领导者应该是“最渴望学习的人”。

总结: 当你身为资深人士或领导者时,要在会议上大方地说:“这里我没听明白,你能再解释一下吗?” 或者 “我不确定这个方案是否完美,大家怎么看?”

这不仅不会让你看起来蠢,反而会让整个房间的智商(Collective Intelligence)瞬间提升,因为每个人都终于敢把脑子里的真话拿出来讨论了。

17. Your network outlasts every job you’ll ever have

这段话是职业发展中关于复利投资的最重要一课。它纠正了一个常见的技术人员误区:认为“把活干好”就是职业发展的全部。 标题的直译是:你的人脉比你任何一份工作都长久。工作是流动的,人脉是固定的。

  • 工作只是载体: 无论你在多么伟大的公司(如Google、Apple),或者你的职位多么重要,这大概率都只是你职业生涯的一个片段(平均3-5年)。一家公司可能会倒闭,部门可能会被裁撤,项目可能会被砍掉。
  • 人脉是底座: 那些和你一起打过仗的同事、互相认可的同行,会跨越不同的公司一直存在于你的职业生涯中。工作是“租来”的平台,人脉才是你真正拥有的“私有资产”。

Early in my career, I focused on the work and neglected networking. In hindsight, this was a mistake. Colleagues who invested in relationships - inside and outside the company - reaped benefits for decades. 我曾专注于工作而忽视了社交。事后看来,这是一个错误。

很多务实的人(尤其是工程师)倾向于“Heads Down”(埋头苦干),认为只要把代码写好、把任务交付,自然会得到回报。他们甚至认为搞关系是“虚头巴脑”甚至“肮脏”的。现实是: 如果没有关系的维护,你的优秀只有你的直线经理知道。一旦你离开这个环境,你的所有努力都归零了。长期回报: 那些不仅把活干好,还花时间去了解同事、建立连接的人,实际上是在为未来几十年的职业生涯铺路。

They heard about opportunities first, could build bridges faster, got recommended for roles, and co-founded ventures with people they’d built trust with over years.

Your job isn’t forever, but your network is. Approach it with curiosity and generosity, not transactional hustle. 带着好奇心和慷慨去建立人脉,而不是功利的交易。

这是这段话最精华的部分,它重新定义了什么是“好的社交”:交易型(Transactional Hustle)——这是大家讨厌的,像狩猎。平时不联系,一联系就是要内推、要找工作、要卖东西。这种社交不仅无效,还会透支信用。慷慨型(Curiosity and Generosity)——这是作者提倡的:像耕种。在不需要帮助的时候去帮助别人,对别人的工作真诚地感兴趣。利他思维: “如果不求回报,我可以为这个人提供什么价值?”(比如分享一个有用的工具,介绍一个合适的人选)。当你习惯性地给予,信任就会像存款一样积累。

When the time comes to move on, it’s often relationships that open the door. 当需要离开的时候,往往是人际关系为你打开大门。

降低风险: 招聘在本质上是风险很高的行为。看简历和面试永远无法完全了解一个人。信任传递: 为什么最好的机会往往在公开招聘之前就被内部消化了?因为信任。如果一个我信任的前同事推荐了你,那么我对你的信任门槛会立刻降低。共同创业的基础: 能够一起合伙做生意的人,一定是经过多年磨合、建立了深厚信任纽带的人。

总结:作者建议我们不要做一个“只会干活的机器”,而要做一个“连接者”。

当下的建议:不要等到失业了才想起去联系老同事。

  • 现在就去请隔壁组的同事喝杯咖啡,纯粹出于好奇问问他们在做什么。
  • 在别人遇到困难时,主动伸出援手,而不去计算“这对我的KPI有什么好处”。
  • 因为KPI这季度就会清零,但那份人情债和信任感,十年后可能回报你一个改变人生的机会。

18. Most performance wins come from removing work, not adding cleverness

这段话不仅是关于软件性能优化的技术建议,更是一种工程哲学。它强调了“少即是多(Less is more)”和“做减法”的重要性。 真正的性能飞跃,通常不来自于你有多聪明地发明了复杂的算法或架构,而来自于你有多果断地砍掉了无用的步骤。

  • “Adding cleverness” (增加机巧):指使用炫技式的编程、晦涩的算法或过度工程化。
  • “Removing work” (移除工作):指直接取消不必要的业务逻辑或数据处理。

When systems get slow, the instinct is to add: caching layers, parallel processing, smarter algorithms. Sometimes that’s right. But I’ve seen more performance wins from asking “what are we computing that we don’t need?”

当系统变慢时,工程师的第一本能通常是“加东西”:

  1. 加缓存(Caching):但这带来了缓存失效和一致性的复杂问题。
  2. 加并行(Parallel processing):但这带来了死锁和资源竞争的风险。
  3. 更聪明的算法:但这可能导致代码难以维护。

作者承认这些方法有时是有效的,但他暗示这是一种被动反应,是用战术上的勤奋(堆技术)来掩盖战略上的懒惰(不思考业务本质)。

Deleting unnecessary work is almost always more impactful than doing necessary work faster. The fastest code is code that never runs.

最高效的优化手段是“质疑”。

  • 我们真的需要渲染这个用户根本看不到的下拉菜单吗?
  • 我们真的需要每秒更新一次这个从未变化的数据吗?
  • 我们真的需要在数据库里查出所有的字段而只显示其中一个吗?

当你发现某个计算是多余的并将其删除时,你获得的性能提升是 100% 的(因为它变成了 0 开销),而优化现有逻辑往往只能提升 10% 或 20%。

软件工程的至理名言: The fastest code is code that never runs. “最快的代码是那些根本不运行的代码。”

Before you optimize, question whether the work should exist at all.

这是给开发者的最终建议:在你想着以此优化循环、升级数据库或重构架构之前,先停下来审视业务流程。不要试图更高效地做无用功(Do not optimize something that should not exist)。

这段话想表达的 “性能优化三层次”:

  1. 下策(做加法): 系统慢了 -> 加机器、加缓存、加复杂逻辑。结果:系统变快了,但变复杂了,维护成本激增。
  2. 中策(做优化): 系统慢了 -> 优化现有代码逻辑。结果:系统快了一点。
  3. 上策(做减法): 系统慢了 -> 发现这部分功能根本不需要 -> 删掉它。结果:系统瞬间极致流畅,且代码更简单了。

一句话总结:别花时间去优化那些本就不该存在的垃圾代码,直接删掉它们才是王道。

19. Process exists to reduce uncertainty, not to create paper trails

段话是对组织管理、流程制定和企业文化的深刻洞察。它无情地揭露了“形式主义”的弊端,并重新定义了什么是“好的流程”。

流程(Process)存在的唯一合法理由是对抗混乱(Entropy)。

  • 好的流程是为了让大家在面对未知时知道该怎么办,从而让结果可预测(reduce uncertainty)。
  • 坏的流程只是为了创造“Paper trails”(书面痕迹/留痕)。在很多大公司,人们填表、写报告,不是为了推进项目,而是为了将来出事时能拿出证据证明“我按流程做了,这事儿不怪我”。

The best process makes coordination easier and failures cheaper. The worst process is bureaucratic theater - it exists not to help but to assign blame when things go wrong.

  • 好的流程(润滑剂):

    1. 让协作更简单: 比如自动化的代码合并流程,不需要人工开会协调。
    2. 让失败更廉价: 比如完善的测试环境和回滚机制。好的流程不是“禁止失败”,而是降低失败的代价,让你可以大胆尝试。
  • 坏的流程(官僚表演):

    1. Bureaucratic theater(官僚主义剧场): 看起来大家都很忙,会议很多,PPT 很精美,但业务没有任何实质进展。这是一种表演。
    2. Assign blame(为了甩锅): 这种流程的设计初衷就是为了“问责”。层层审批并不是为了把关质量,而是为了把责任分摊到每一个签字的人头上,或者确立替罪羊。

If you can’t explain how a process reduces risk or increases clarity, it’s probably just overhead. 如果没有价值,那就是累赘。

对任何一条现有规则(比如“周报必须写满500字”或“改一行代码需要三个经理审批”),如果不满足以下两个条件之一,它就是垃圾(Overhead):

  • Reduces Risk(降低了风险): 确实能阻止重大事故发生。
  • Increases Clarity(增加了清晰度): 让大家更明白目标和分工。

And if people are spending more time documenting their work than doing it, something has gone deeply wrong.

这是组织僵化的绝症信号:“关于工作的工作”超过了“工作本身”。当工程师花在 Jira/文档/周报上的时间,超过了写代码的时间;当设计师花在解释设计上的时间,超过了画图的时间,这个组织就已经病入膏肓了。

20. Eventually, time becomes worth more than money. Act accordingly

Early in your career, you trade time for money - and that’s fine. But at some point, the calculus inverts. You start to realize that time is the non-renewable resource.

当你刚进入职场一无所有时,你拥有的最大资本是“时间”和“精力”,而你最缺的是“钱”。这时候,用时间换钱(加班、拼命工作)是合理的,甚至是必须的。这是资本积累的必然过程。作者指出,这是一个动态过程。随着你财富的积累,边际效益(Marginal Utility)发生了变化。多赚一块钱带来的快乐越来越少,而少了一个小时的自由时间带来的痛苦却越来越大。钱没了可以再赚,但时间(你的青春、健康、陪伴家人的机会)是不可再生资源(Non-renewable resource)。当你意识到这一点时,你的人生算法(Calculus)就必须颠倒过来了:应该开始用钱去买时间,而不是继续用时间换钱。

I’ve watched senior engineers burn out chasing the next promo level, optimizing for a few more percentage points of compensation. Some of them got it. Most of them wondered, afterward, if it was worth what they gave up.

高龄职场人的盲区: 很多资深人士(文中特指高级工程师)已经习惯了“努力工作 -> 升职加薪”这个路径。即使他们已经不再迫切需要更多的钱,惯性依然驱使他们为了下一次晋升而耗尽心力(Burnout)。作者观察到,为了仅仅增加几个百分点的薪水(比如从年薪百万涨到一百一十万),这些人往往付出了巨大的代价(健康崩溃、家庭破裂、失去生活情趣)。即使最后拿到了钱,回过头看,他们也会怀疑当初放弃的东西是否过于珍贵。

The answer isn’t “don’t work hard.” It’s “know what you’re trading, and make the trade deliberately.”

作者强调,这不是劝你不努力或者这就开始混日子(躺平)。要有意识地交易: 核心在于“知情同意”。如果你清楚地知道:“这接下来的两年我会非常辛苦,失去所有的周末,但我需要这笔钱买房/创业/给孩子治病”,并且你接受这个代价,那就去做。这就是“Deliberately”(深思熟虑地)。仅仅因为周围的人都在卷,或者仅仅因为系统设定了下一个职级,你就盲目地把这辈子最宝贵的、不可再生的时间投入进去,而没有想过你换回来的那点钱对你现在的幸福感是否真的有提升。

21. There are no shortcuts, but there is compounding

关于长期主义”和“资产积累”。作者借用了金融概念(复利 vs. 彩票)来阐述职业发展的底层逻辑,尤其针对工程师或知识工作者。 没有捷径(No Shortcuts): 很多人试图寻找职业发展的“作弊码”(比如:有没有什么课听了就能变大神?有没有什么捷径能快速升职?)。作者明确告诉你:没有。

Expertise comes from deliberate practice - pushing slightly beyond your current skill, reflecting, repeating. For years. There’s no condensed version.

刻意练习的真谛: 这里精准地描述了“刻意练习”(Deliberate Practice)的三个要素:

  • 走出舒适区(pushing slightly beyond):如果你每天只做自己得心应手的事,那叫“重复”,不叫“练习”。你必须做一点点觉得难的事情。
  • 复盘(reflecting):做完了要思考哪里做得好,哪里不好。
  • 时间维度(For years):这不是几周的事,是以年为单位的积累。

这一段的潜台词: 不要相信任何许诺你有“浓缩版”成功路径的人,真正的专家都是靠笨功夫熬出来的。

But here’s the hopeful part: learning compounds when it creates new options, not just new trivia. Write - not for engagement, but for clarity. Build reusable primitives. Collect scar tissue into playbooks.

这是这段话最精彩的部分,作者教你如何让努力产生复利(Compounding)。

  • 知识的陷阱(Trivia vs. Options):
    1. 死记硬背API文档、背诵面试题,这些是 Trivia(琐碎信息)。它们是线性的,学一条知道一条,不会产生裂变。
    2. Options(选项/杠杆): 真正的复利来自于学习那些能给你带来新机会的技能。比如:学会写作能让你把技术影响力扩大十倍;学会底层架构逻辑能让你触类旁通。
  • 打造你的“职业资产库”: 作者给出了三个极具操作性的建议:
    1. 写作是为了清醒(Write for clarity): 不要为了骗赞(engagement)去写文章。写作是为了理清你混乱的思绪。如果你能把复杂的技术问题写清楚,不仅锻炼了思维,这篇文章本身也会成为你永久的资产,替你在睡梦中传播影响力。
    2. 构建可复用的积木(Build reusable primitives): 不要每次都从零开始。作为工程师,你应该积累自己的代码库、工具脚本、通用的思维模型。这次工作积累的工具,能让下一次工作效率翻倍。
    3. 把伤疤变成攻略(Scar tissue into playbooks): “Scar tissue”(伤疤组织)隐喻你在工作中踩过的坑、背过的锅、熬过的夜。不要让这些痛苦白白浪费。把教训总结成 Playbooks(行动指南/SOP)。下次遇到类似危机,你比别人从容,这就是资深专家的价值。

The engineer who treats their career as compound interest, not lottery tickets, tends to end up much further ahead.

彩票心态(Lottery Tickets):寄希望于加入一家刚起步的公司这就是下一个谷歌。寄希望于遇到一个带你飞的老板。寄希望于一次性的爆发。这种心态下,你的努力往往是投机性的,一旦没中奖,可能一无所获。

复利心态(Compound Interest):专注于提升自己的能力底座。今天的努力是为了让明天的努力更轻松、更有效率。即使没有遇到风口,凭借积累的“复用积木”和“实战攻略”,你的价值也会随时间指数级增长。

建议:不要再去寻找“速成大神”的秘籍,老老实实地打磨手艺。把你的每一次失败都记录下来变成经验文档,把你重复的代码封装成工具,把你思考的过程写成文章。当你不再指望运气,而是指望积累时,运气往往就来了。

This post is licensed under CC BY 4.0 by the author.