二八法则,要学会抓重点
01 幂律分布
帕累托 1896 年观察到 80% 的意大利土地归 20% 的人所有,豌豆产量也类似。Juran 在 1940 年代把它推广为通用原则,叫 "vital few, trivial many"
但二八不是巧合,背后是幂律分布:$P(X > x) ∝ x^{-α}$,城市人口、词频、地震震级、网站流量、财富、代码热点函数耗时——都是幂律的具体投影

幂律分布跟正态分布是两个世界:
- 正态世界里:平均值有意义,身高体重考分都在均值附近聚集
- 幂律世界里:头部主导一切,平均收入跟中位数能差一个数量级
幂律分布表示重要性是不均衡的,在幂律分布场景中平均用力是最差的策略
02 反二八场景
二八法则不是万能锤,判断它能不能用,问一个问题:
在这件事上,"够用"算不算成功? 如果够用就行,可以二八不要追求完美;如果必须做到极致,要求必须不出事,那就是反二八的场景
适用场景——投入产出近似线性,且边际收益递减,做到"够用"就有大头收益:
- 找营收大客户:20% 客户带来 80% 营收,资源向他们倾斜
- 修产 bug 最多的模块:少数模块产出大部分线上故障,集中改造它收益最大
- 砍掉低 ROI 的会议 / 流程:识别那些占时间但不产价值的部分,直接去掉
- 先学高频 API:一门新语言或框架,20 个核心 API 覆盖 80% 日常使用
反二八场景——边际收益递增,或存在硬阈值,"差一点点"就等于失败:
- 软件项目的最后一公里:前 80% 功能花 20% 时间,剩下 20%(边界条件、性能、稳定性)花 80% 时间
- 运动员训练 / 乐器演奏:前 20% 让你"会",后 80% 让你"行",决定上限的恰恰是后 80%
- 安全 / 可靠性 / 医疗:从 99.9% 到 99.999%,每多一个 9 都需要数量级投入,省不掉
- 基本功(数学、写作、英语):前期投入不会立刻产 80% 收益,但会持续作用于后面所有事,时间维度上反二八
一句话:二八适用于找瓶颈、砍冗余,不适用于突破上限、保下限
03 怎么识别那 20%
二八法则的核心是抓住 20% 的关键
刚学习新领域时事先并不知道哪 20%,这才是真问题
3.1 找映射
跨领域学习时,那 20% 不是别人画的"知识地图重点",而是在旧领域已掌握知识在新领域的投影
建立已经掌握的知识体系和新领域知识的映射,对比学习,事半功倍
比如,在学习 Spark 内核时,别直接从 SparkSession.sql() 入口往下读——那是新人的路径,对带着旧领域直觉的人是浪费。从认识的算子横向切入:直接打开 SortMergeJoinExec,对照脑子里的 PG 实现,看它怎么接到 codegen 里,这种对比学习不会迷路
3.2 识别枢纽概念
新领域里高频出现、且解释别的概念时反复被引用的,几乎一定是 20%
操作上:刚开始不要急着学,先做高频词统计。翻最近 50 个 PR 的 title、最近一个月的 issue、团队内部设计文档,看哪些词反复出现。例如,Spark 里的 TreeNode、Stage、Exchange、AQE、DAGScheduler、Shuffle 一定会冒出来——它们就是那 20%
3.3 从输出反推输入
新人最容易做的事是"系统学习"——从教材第一章读到最后一章,这是最低效的路径
正确做法:找团队最近的一个具体产出(PR、perf 优化、bug fix),把它读懂。读懂它所需的全部前置知识,就是你接下来一两周的 20%。带着具体问题学不会迷路;学完直接能用,复习成本为零
3.4 把二八滚动起来
二八法则在学习场景里不是一次性应用,是滚动应用
每周问自己一次:"如果下周就要出活,我现在最该搞懂的一件事是什么?"
20% 是一直在变的:第一个月是 Catalyst TreeNode + Scala 模式匹配;第二个月是 Shuffle 与 Tungsten;半年后大概率是 AQE;两年后可能是某条具体的优化器规则
- 学不会"找映射",会迷失在新领域的术语丛林里
- 学不会"滚动",会卡在早期阶段反复学那个 20%
04 结语
二八法则不教你"怎么努力",它只教你"在哪里偷懒";要做的不是少学,是更准地学
