80/20 原则的基础概念
该原则认为, 大部分效果出自少数起因。例如, 少数人得到大部分收入, 少数研究者做出大多数创新成果,少数作者写出大部分图书,等等。
您可能听说过 80/20 原则——它在个人生产力文献中随处可见。它受欢迎的 原因有两个方面。第一个方面, 只要您能找出重要的事情, 即导致 80%结果的那 20%活动,并坚持不懈地专注于这些活动, 80/20 原则就能让您同时保持轻松和 高效。第二个方面, 我们可以在很多情况下观察到这个原则, 所以它具有相当大 的可信度,甚至很难想出效果与起因数量等同的例子。不妨试着找一些 50/50 分 布的例子,其中 50%的效果出自 50%的起因。当然,具体分布并不总是 80/20 , 具体数字可以变为 70/30 、90/10,甚至 95/5,但总是严重偏向产生大部分效果的少数起因。
我们使用帕累托分布图来呈现帕累托原则,如图 2- 1 所示。
图 2- 1 中, 帕累托分布以效果(纵轴) 与起因(横轴) 表示。效果可以是工 作成功或失败的任何度量单位, 如收入、生产力或软件项目中的缺陷数量。起因 可以是与这些结果相关的任何实体, 如雇员、企业或软件项目。为了得到特征明 显的帕累托曲线, 我们根据它们产生的效果对起因进行排序。例如, 收入最高的 人在横轴上排第一位,然后是收入第二高的人,以此类推。
生产力
通过专注于关键少数而不是琐碎多数, 您可以将生产力提高 10 倍, 甚至100 倍。不信吗?让我们计算一下这些数字是怎么来的。 先假设一个基本的 80/20 分布。
我们将使用保守的 80/20 参数(80%的成果来自 20%的人)计算出每组的生 产率。在某些领域(如编程),分布比例可能更夸张。
图 2-3 显示, 在一个有 10 名员工的公司中, 2 名员工产出了 80%的成果, 而 其余 8 名员工只产出了 20%的成果。用 80%除以 2 名员工, 得出公司中表现优异 的员工的平均产出为 40%。如果我们把另外那 20%的成果除以 8 名员工, 结果是 表现最差的员工平均仅有 2.5%的产出。绩效整整差了 16 倍!
16 倍平均绩效差异是存在于全世界数百万机构中的事实。帕累托分布具 备分形特征, 这意味着在拥有数千名员工的大型组织中,其业绩差异甚至更为 明显。
结果差异不能仅仅用智力来解释—— 一个人不可能比另一个人的智力高 1,000 倍。结果差异来自于个人或组织的具体行为,做同样的事情可以得到同样 的结果。然而, 在改变行为之前, 必须清楚想达到什么结果, 因为研究表明, 在您能想象到的几乎任何指标上,结果都极端不平等。
对程序员的意义
在编程领域,帕累托分布的结果往往比其他大多数领域更严重地偏重于顶 部。分布情况与其说是 80/20,不如说是 90/10 或 95/5。比尔 ·盖茨说:“车床操 作顶尖高手的工资是普通车床操作员的几倍, 但顶尖软件开发者的价值是普通软 件开发者的 1 万倍。”盖茨认为,顶尖软件开发者和普通软件开发者之间的差别 不是 16 倍, 而是 1 万倍!以下是软件世界容易出现这种极端帕累托分布的几个 原因。
● 顶尖程序员能解决普通程序员无能为力的一些难题。在有些情形下, 他们 甚至因此获得无数倍于普通程序员的生产力。
● 顶尖程序员写代码的速度可达普通程序员的 10,000 倍。
● 顶尖程序员的代码缺陷较少。想想看, 一个安全缺陷会给微软的商誉和品 牌带来什么影响! 而且, 每个缺陷后续都得花费时间、精力和金钱来进行 代码库修改和功能添加——缺陷害在当下,患及未来。
● 顶尖程序员的代码易于扩展。在后续软件开发过程中, 当数以千计的程序 员在这套代码基础上开展工作时,他们的生产力将得以提升。
● 顶尖程序员会跳出框框,找到创造性的解决方案,规避昂贵的开发工作,帮助团队专注于最重要的事情。
在实践中,这些因素组合作用,所以差异可能会更大。
所以,对您来说,关键问题可能是:如何成为顶尖程序员?
程序员的成功指标
不幸的是, “成为顶尖程序员”这句话并不是可以直接优化的成功指标。问 题有多个维度。顶尖程序员能快速理解代码, 了解算法和数据结构, 通晓不同技 术及其优缺点, 能与其他人合作, 善于沟通, 有创造力, 能持续学习, 了解组织 软件开发过程的方法,掌握数百种软技能和硬技能。但是,您不可能事事精通。 不专注于关键少数, 就会被琐碎多数淹没。要成为顶尖程序员, 必须专注于关键 少数。
要务之一是专注于写更多代码。代码写得越多, 就会写得越好。这是多维问 题的简化版本:优化代表性指标(写更多代码),就能在目的指标(成为软件代 码顶尖高手)上有所进展,如图 2-8 所示。
代码写得越多, 您就越理解代码, 言行举止也越有专家模样。您会结识水平 更高的程序员, 接受更具挑战的编程任务, 于是就会写更加多的代码, 变得更优 秀。您写的每一行代码都会带来越来越多的回报。您和您所在的公司可以外包大 量无足轻重的工作。
这就是您每天都可以照做的 80/20 活动:持续记录写了多少行代码,并且优化这一指标。就当它是个达成每日代码平均量的游戏好了。
本文摘选自《整洁代码的艺术》的第2章。
[德] 克里斯蒂安·迈尔(Christian Mayer) 著,韩磊,严敏,马飞雄 译
程序员的实用工具书,Python网站Finxter的创办人多年经验的结晶。传递"减少和简化"的代码编写思想,教您应用九大原则提高生产力、做到事半功倍。
大多数软件开发人员在复杂的代码上浪费了大量的时间。《整洁代码的艺术》提出的九大原则将教会您如何编写清晰、可维护且功能完备的代码。本书的指导原则很简单:缩减和简化,将精力投入到重要的工作上,省下大量的时间,卸下代码维护的重担。
热销书作者克里斯蒂安.迈尔在本书中利用他的经验帮助许多程序员完善他们的编码技能。他给出专业建议和真实例子,展示如何:利用80/20原则,专注于重要任务——最要紧的那20%代码;避免孤立编码,创建最小可行产品,获得早期反馈;编写整洁、简单的代码,排除混乱;避免导致代码过度复杂的过早优化;平衡您的目标、能力与反馈,达到高产出的心流状态;应用“做好一件事”哲学,极大地提升代码功能;利用“少即是多”哲学,设计有效用户界面;用“专注”原则贯穿所学的这些新技能。
本书采用Python作为示例语言,但以与语言无关的方式呈现概念,适合不同水平的程序员。