好书精读 · READ 921

《The Effective Engineer》

The Effective Engineer · 埃德蒙·刘(Edmond Lau)· 2015

EN →

一句话

工程师之间真正的差距,不在谁写得快、谁加班多,而在同样一小时,投在了杠杆率(leverage)多高的地方——而杠杆率是可以被有意识地挑选、放大、并且日复一日复利下去的。这本书要治的病只有一个:勤奋地做低价值的事,然后把疲惫当成贡献。

坐标

埃德蒙·刘(Edmond Lau)是斯坦福 CS 出身、在 Google 搜索质量组、Ooyala、Quora(工程主管)与 Quip 工作过的工程师;这本 2015 年自出版的书,内容来自他自己的踩坑加上对 Facebook、Google、Dropbox、Etsy、Instagram、Twitter 等公司工程师与技术负责人的大量访谈。它在思想上是安迪·格鲁夫《High Output Management》的工程师个人版——格鲁夫问「一个经理如何提高整个组织的产出」,刘问的是「一个不带人的工程师,如何提高自己每小时的产出」,连核心工具(杠杆率)都直接承自格鲁夫。它不是一本讲技术的书,是一本讲「把技术花在哪」的书。

核心论点

核心概念,逐个讲透

杠杆率(leverage):全书唯一的公式,也是唯一要背下来的东西

先把词说清楚。「杠杆」的原意是撬棍:支点选得好,同样一份力气能撬起大几十倍的石头;选得不好,你按断手指也纹丝不动。刘把它写成一个比值:杠杆率 = 这件事产生的影响力 ÷ 你为它花的时间。注意分母是时间,不是难度、不是代码行数、不是你有多累——这一点决定了整本书的立场:努力不是分子,努力是分母。

有了这个比值,提高杠杆率就只剩三条路,别无第四条:

为什么这个概念重要:它把工程师最常见的一种自我安慰彻底拆穿了——「我这周非常忙」在这个公式里是一个纯粹的分母陈述,不含任何信息。刘的观察是,绝大多数人不是不够勤奋,而是把勤奋花在了一条早已收益递减的曲线上:反复手工执行一个每天都要跑的流程、修一个没人报障的边缘 bug、在一个可能被砍掉的项目上抛光细节。

低杠杆(看起来很忙)高杠杆(当天像没干活)
典型动作手工重复执行发布流程;修无人报障的小 bug;给不确定要不要做的功能写完整实现把发布脚本化;把构建从 10 分钟压到 1 分钟;先做一个能验证需求的最小版本
收益形状一次性,做完即止每天重复兑现,随团队规模放大
他人可见度高(有 PR、有工时)低(省下的时间不会出现在任何报表里)
失败的代价白干几天白干几天,但换回一个「不该往这走」的确定答案

同样的一小时,落在左边还是右边,是这本书唯一关心的问题。

它如何改变你看世界:你会开始对「忙」祛魅,转而对「这件事做完之后,明天会不会更省力」敏感。并且你会发现一个不舒服的推论——如果一件事的杠杆率长期为零,那么把它做得再漂亮,也只是在把损失做得更精致。

把「学习速率」当成早期最高杠杆的投资

刘的第二个主张,是把杠杆率的镜头从「这周」拉到「这十年」:职业早期最高杠杆的产出不是代码,是你自己学习速度的提升,因为它是唯一会复利的东西。复利的意思在这里非常具体:今天多学到的一点,会让明天的每一件事都稍微做得更快一点,而快出来的时间又可以继续用来学——增长的是斜率,不是当期的一个数。

由此他给出一个非常反直觉、也非常实用的选择标准:挑工作时,别只看当下能产出什么,要看这个环境的学习速率。他列出的判断维度大致包括——公司是否在快速成长(成长中的公司才有大量新岗位与新问题,人才会被推着往上走)、身边有没有比你强的人、代码库与文档是否开放可读、发布节奏是否够快(快节奏=反馈多=学得快)、是否给你自主权、是否有正式的培训与新人机制。注意这几条全都不是薪资,也不是职级。

他也给出机制层面的具体做法:把学习正式排进日程(Google 式的「20% 时间」,关键不在比例而在它必须是固定的、不可被日常工单挤掉的),读团队里核心抽象的源码、多写代码、参加内部技术分享、主动请人 review 自己的设计。这一节背后引的是心理学家卡罗尔·德韦克(Carol Dweck)的成长型思维(growth mindset)——即把能力看成可训练的,而不是固定的天赋;持有这种信念的人在遇到失败时更倾向于把它读成「我还没学会」而不是「我不行」。(这个概念本身近年有严肃的复现争议,下文会诚实交代。)

它如何改变你看世界:它把「这份工作值不值得做」的问法从「给我多少」换成了「一年之后,我会变成一个能做什么的人」。对早期工程师,这几乎是一次估值模型的更换——把自己当成一支正在增长的资产来经营,而不是一个按小时出租的劳动力。

优先级:重要而不紧急的那一格,永远没人替你排

刘在这里借用了柯维(Stephen Covey)的四象限——把事情按「紧急 / 不紧急」和「重要 / 不重要」分成四格。关键在第二象限:重要但不紧急。写测试、改架构、做文档、自动化、招人,全在这一格。它的特点是:今天不做,什么都不会发生;连续一年不做,什么都会发生。而紧急的事天生带闹钟,重要的事天生不带——于是不设防的人,会被紧急的事把一整年吃掉。

他给的操作抓手朴素得近乎可疑,但都对应着确切的机制:

它如何改变你看世界:你会意识到,「优先级」不是一份你排完就固定的清单,而是一个需要定期重排的动作。刘的说法是把「排优先级」本身也变成一件例行公事——因为环境每周都在变,上周最该做的事这周多半已经不是了。

迭代速度:唯一能提高「所有其他事」杠杆率的元杠杆

这是全书最有实操价值的一章。迭代速度指的是「从一个想法到拿到反馈」这个回路要花多久。刘的主张是:它不是众多优化项中的一项,而是一个杠杆——因为你此后做的每一件事,都要穿过这个回路。

把数字摆出来就一目了然:假设你验证一次改动要 10 分钟(构建 + 部署 + 手工点一遍),一天顶多试二三十次;把它压到 30 秒,同样一天你能试几百次。快 20 倍不只是省时间,它改变了你的工作方式本身:当试错足够便宜,你会从「想清楚再动手」切换到「动手来想清楚」,而后者在需求不确定时几乎总是更快找到答案。反过来,当每次验证都很贵,人会本能地减少尝试次数、堆积改动、一次提交一大坨——于是出错概率上升、定位成本上升,形成一个越慢越怕、越怕越慢的正反馈。

对应的具体投资:持续部署(Etsy 以每天数十次上线著称,Facebook 也长期以高频发布作为工程文化的核心)、投入时间做省时的内部工具、缩短调试与验证回路(能不能只跑相关的那几个测试?能不能在本地复现线上数据?)、以及把自己的工作环境练熟——编辑器、快捷键、shell、调试器。这条最容易被当成「小技巧」而轻视,但账很直白:一个每天要做几百次的操作,快一秒就是一年几十小时。刘还提醒了一条常被工程师忽略的:瓶颈往往不在技术,而在等审批、等设计稿、等另一个团队的接口——这些非工程瓶颈同样吃掉迭代速度,而且通常没人负责优化它。

它如何改变你看世界:下次抱怨「这个流程真慢」,先算一下你今年还要走多少次这个流程;如果答案是三位数,那修流程就不是分心,那就是正事。

用度量与验证代替信念:先造小一号的,再造真的

刘的第三部分处理的是「怎么知道自己做的是对的」,两个抓手:度量早验证

度量的第一课不是「多埋点」,而是选对那一个指标。他的判据是:好的指标要能驱动你想要的行为。举个书里那类对比——用「注册用户数」当指标,团队就会去优化注册漏斗,哪怕注册完的人第二天就走;换成「每周活跃使用时长」,同一批人就会转去改留存和产品价值。指标不是温度计,指标是方向盘:你量什么,团队就会往哪开。

紧接着必须补上的另一半是古德哈特定律(Goodhart's law)一旦某个度量成为目标,它就不再是一个好的度量。机制是——人会去优化这个数本身,而不是它原本代表的东西。以代码行数考核会得到啰嗦的代码;以关单数考核会得到被拆碎的工单。所以刘同时要求「对数据本身保持怀疑」:先确认埋点没错、口径没漂、样本没被筛过,再谈结论。他还建议把一些常用数字内化成直觉(一次内存读取、一次磁盘寻道、一次跨机房往返各是什么量级),这样你在白板上就能估出一个方案可不可行,而不必等实现完再发现慢了三个数量级。

验证这一半更狠:能用一天做出来验证的东西,不要花一个月做完再去验证。手段包括最小可用版本、原型、A/B 实验、灰度、先手工跑通再自动化。它对抗的是工程师最典型的失败模式——把「我们已经投入了三个月」当成继续投入的理由(沉没成本),而不是把「三个月了还没人用」当成停下的理由。

它如何改变你看世界:你会把「做完」和「做对」拆成两件事,并且默认自己一开始就是错的,然后去买最便宜的那次纠错。

估算与「90% 完成」谬误

软件项目几乎总是延期,刘不满足于把它归因为乐观,而是给出了可操作的拆解:

而最需要被点破的是「90% 完成」谬误:一个项目在报「完成 90%」之后,往往还要再花掉与前面相当的时间。机制并不神秘——前 90% 是已知的编码工作,剩下的 10% 是集成、边界情况、迁移、性能、上线、回滚方案与所有「上线后才知道」的东西,而这些恰恰是最不可估的部分。所以「90% 完成」这句话真正的含义是:已知的部分做完了,未知的部分还没开始。

长期杠杆:把功劳从「我做的」挪到「系统和人」

全书最后一部分处理的是时间尺度最长、也最容易被跳过的杠杆:

务实的质量观。刘不站「代码必须完美」,也不站「先跑起来再说」,他把技术债(technical debt)当成一笔真的债来处理:借是可以借的——为了抢一个窗口期而走捷径通常划算——但你必须知道利息是多少(每次改动多花的时间),并且给它排一个还款计划。不还的债不会消失,它会变成一种税,从此对每一次改动抽成。与之配套的是能规模化的质量手段:代码评审(作用不只是抓 bug,更是让知识与规范在团队里流动)、自动化测试(把「保证不出错」这件事从人身上挪到系统上)、以及真正好的抽象——一个好的抽象(如 MapReduce 之于分布式计算)的价值在于,它让后面每一个人都不必再解决同一个问题。

把运维负担降到最低。原则是「先做简单的那个」「快速失败(fail fast)」「能自动化就别用纪律去顶」。「快速失败」值得解释清楚:让错误在最早、最接近源头的地方大声崩掉,而不是被吞掉、带着坏数据往下游流——一个早十分钟崩溃的系统,比一个三天后才显出异常的系统便宜一百倍。Instagram 早期以极小的工程团队支撑巨大用户量,靠的正是刻意维持技术栈的简单:每引入一个组件,你就是在给未来的自己排一个永久的值班表。

投资团队,是个人所能做的最高杠杆的事。招对一个人、把新人上手时间从一个月压到一周(Facebook 的 Bootcamp 机制、以及「新人第一周就往生产环境提交代码」的做法都是这个思路)、写一份让所有人不必再问的文档、把一次事故做成不追责的复盘(blameless postmortem)——不追责是关键设计:只有当讲出真相不会挨罚,你才拿得到真实的因果链,才可能真正修掉系统性原因。这类事的杠杆率是全书最高的,因为它的分子里坐着的不是你一个人的产出,是整支团队此后所有人的产出。

精华骨架

全书的论证其实是一条链,三段:

它证成了什么:一个工程师的产出差异,主要不由技术水平决定,而由选择决定。靠什么证的?——诚实地说,靠的是一个清晰的分析框架 + 大量业界案例与访谈,而不是对照实验。这本书的价值不在于发现了新东西,而在于把「怎么选」这件通常靠资深者口传心授、且大多数人要吃五年亏才悟到的事,压成了一个可以随身携带的比值。

常见误读 & 批评争议

误读一:高杠杆 = 少干活、走捷径。正相反。书里高杠杆的动作(写工具、修流程、带新人、做复盘)几乎都是额外的工作,而且当天没有产出、也不容易被看见。杠杆率讲的是把同样多的力气换个支点,不是把力气省下来。

误读二:这是一本效率技巧合集。技巧只是外壳。它真正的内核是一套价值排序——先问「值不值得做」,再问「怎么做得快」。把它当成快捷键手册读,就正好漏掉它唯一重要的那一章。

批评一:杠杆率其实算不出来。这是最实在的方法论弱点。「影响力」在事前无法量化,事后才知道,于是这个公式极容易退化成事后合理化——做成了就说是高杠杆,做砸了就说当初判断错了。它在实践中更像一个提问的角度,而不是一个可计算的判据;把它当公式用的人会失望,当追问用的人会受益。

批评二:强烈的硅谷特化与幸存者偏差。全书的样本是 2010–2015 年间高速成长的湾区公司。「优化学习速率」「换一家成长更快的公司」这类建议,隐含了充足的资金、旺盛的岗位与自由的跳槽市场。在一个不增长的组织、或工作机会稀薄的市场里,你的杠杆上限往往由组织结构决定,而不是由你的判断力决定。书里对这一点几乎没有处理。

批评三:过于个人主义,回避了权力与政治。「定期重排优先级」的前提是你能决定自己做什么。现实里大量工程师的低杠杆工作是被指派的;而如何影响这个指派——向上管理、争取资源、在没有职权的情况下推动跨团队的事——正是《The Staff Engineer's Path》《Staff Engineer》这类书的主场,也正是本书的盲区。它教你在给定的选择集里选对,不教你怎么把选择集撑大。

批评四:它引用的「成长型思维」有复现问题,需要诚实标注。德韦克的成长型思维近十年遭遇了严肃的检验:多项大规模荟萃分析发现,思维模式与学业成绩的相关性很弱,干预的平均效果远小于流行叙事所暗示的;后来一项覆盖全美数万名学生的大型试验确实测到了效果,但幅度很小,且主要集中在成绩较差的学生身上。结论应当是:把它当成一个温和有益的态度调整可以,把它当成一台产出巨大回报的引擎则站不住。本书对它的引用属于「流行心理学的顺手征用」,读的时候值得打个折。

批评五:思想上高度承袭,原创有限。杠杆率来自格鲁夫《High Output Management》,四象限来自柯维,最小可用版本与验证来自精益创业一脉,工时估算的老问题在《人月神话》里已被讲透。它的贡献是压缩与转译——把这些散落在管理学、心理学、创业方法论里的东西,全部翻译成一个独立贡献者(individual contributor)每天用得上的语言。这份价值是真实的,但读者应当知道自己读的是一部优秀的综述,不是一项原创研究。

批评六:技术细节已经开始过时。书写于 2015 年,工具链、部署方式与协作形态在此后十年变化极大(远程协作的常态化、大模型进入日常开发),而书中那些具体建议中最依赖当时环境的部分已明显褪色。公式与心法仍然成立,示例需要你自己换新。

十句话精华

1. 杠杆率 = 产生的影响力 ÷ 投入的时间。分母是时间,所以「我很努力」在这个公式里只会让比值变小。

2. 提高杠杆只有三条路:同样的事更快做完、同样的时间做出更大价值、干脆换一件更值得做的事。第三条最有效,也最少人用——因为它要你承认手上这件不值得。

3. 效率是把事做快,效能是做对的事。一个把没人用的功能写得极其优雅的人,效率满分、效能为零。

4. 职业早期最高杠杆的产出不是代码,是你自己学习速率的提升——因为只有它会复利,长的是斜率而不是当期的数。

5. 重要而不紧急的那一格永远没人替你排:紧急的事自带闹钟,重要的事不带。一年不动它,它会连本带利来找你。

6. 迭代速度是元杠杆。把验证一次改动从十分钟压到三十秒,改变的不只是时间,是你从「想清楚再动手」切换成了「动手来想清楚」。

7. 你量什么,团队就往哪开——指标是方向盘不是温度计;同时记住古德哈特定律:一个度量一旦变成目标,它就不再是个好度量。

8. 「完成 90%」的真实含义是:已知的部分做完了,未知的部分还没开始。剩下那 10% 是集成、边界、迁移与上线,也就是最估不准的全部。

9. 技术债是真的债,可以借,但你得知道利息是多少并安排还款;不还的债不会消失,它会变成对此后每一次改动抽的税。

10. 个人杠杆有上限,所以最后要把杠杆放进不随你离开而消失的东西里:自动化的系统、写下来的知识、不追责的复盘,和一个比你来时更强的团队。