专注与帕累托分布——整洁代码的艺术(04)

发表于:2023-6-26 09:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:克里斯蒂安·迈尔    来源:51Testing软件测试网原创

  2.5  专注与帕累托分布
  我还想谈谈“专注”这个相关话题。本书中多次提到专注,如第9章就详细讨论了专注的威力,用80/20原则便可解释为什么专注的威力如此巨大。开聊!
  看看图2-6中的帕累托分布,它显示了向分布顶端移动的改进百分比。爱丽丝是组织中生产力第五高的人。如果她超越了前面的一个人,成为生产力第四高,她的产出(工资)就会增加10%。再往前上一步,她的产出又增加了20%。在帕累托分布中,每个等级的增长都是指数级的,所以即使是生产力的小幅增长也会导致收入的大幅增长。提高生产力会引致收入、幸福和工作乐趣的超线性改善。有人把这种现象称为“赢家通吃”。
图2-6  提高帕累托分布中的排名带来超额好处
  这就是分散注意力没有好处的原因:如果您不专注,就会参与许多帕累托分布。请看图2-7:爱丽丝和鲍勃每天可以各投入3个单位的学习精力。爱丽丝专注于一件事:编程。她把3个单位的精力花在学习代码上。鲍勃的注意力分散到多个学科:1个单位的精力用来打磨国际象棋技能,1个单位的精力用来提高编程技能,还有1个单位的精力用来提高政治能力。他在这三个领域的技能和产出都达到了平均水平。但帕累托分布的特点是给予表现最好的人更多奖励,所以爱丽丝获得了更多的总产出奖励。
  在每个领域都存在不对等回报现象。例如,鲍勃可能会花时间阅读3本互不相关的书(如《Python入门》《C++入门》和《Java入门》),而爱丽丝则阅读3本深入研究Python机器学习的书(如《Python入门》《Python机器学习入门》和《机器学习专家读本》)。结果,爱丽丝将专注于成为机器学习专家,并可以为她的专业技能要求更高的薪水。
图2-7  非线性排名产出——对专注威力的一种策略性解释
  2.6  对程序员的意义
  在编程领域,帕累托分布的结果往往比其他大多数领域更严重地偏重于顶部。分布情况与其说是80/20,不如说是90/10或95/5。比尔·盖茨说:“车床操作顶尖高手的工资是普通车床操作员的几倍,但顶尖软件开发者的价值是普通软件开发者的1万倍。”盖茨认为,顶尖软件开发者和普通软件开发者之间的差别不是16倍,而是1万倍!以下是软件世界容易出现这种极端帕累托分布的几个原因。
  ·顶尖程序员能解决普通程序员无能为力的一些难题。在有些情形下,他们甚至因此获得无数倍于普通程序员的生产力。
  ·顶尖程序员写代码的速度可达普通程序员的10,000倍。
  ·顶尖程序员的代码缺陷较少。想想看,一个安全缺陷会给微软的商誉和品牌带来什么影响!而且,每个缺陷后续都得花费时间、精力和金钱来进行代码库修改和功能添加——缺陷害在当下,患及未来。
  ·顶尖程序员的代码易于扩展。在后续软件开发过程中,当数以千计的程序员在这套代码基础上开展工作时,他们的生产力将得以提升。
  ·顶尖程序员会跳出框框,找到创造性的解决方案,规避昂贵的开发工作,帮助团队专注于最重要的事情。
  在实践中,这些因素组合作用,所以差异可能会更大。
  所以,对您来说,关键问题可能是:如何成为顶尖程序员?
  2.6.1  程序员的成功指标
  不幸的是,“成为顶尖程序员”这句话并不是可以直接优化的成功指标。问题有多个维度。顶尖程序员能快速理解代码,了解算法和数据结构,通晓不同技术及其优缺点,能与其他人合作,善于沟通,有创造力,能持续学习,了解组织软件开发过程的方法,掌握数百种软技能和硬技能。但是,您不可能事事精通。不专注于关键少数,就会被琐碎多数淹没。要成为顶尖程序员,必须专注于关键少数。
  要务之一是专注于写更多代码。代码写得越多,就会写得越好。这是多维问题的简化版本:优化代表性指标(写更多代码),就能在目的指标(成为软件代码顶尖高手)上有所进展,如图2-8所示。
图2-8  编程领域的成功指标:写过的代码行数
  代码写得越多,您就越理解代码,言行举止也越有专家模样。您会结识水平更高的程序员,接受更具挑战的编程任务,于是就会写更加多的代码,变得更优秀。您写的每一行代码都会带来越来越多的回报。您和您所在的公司可以外包大量无足轻重的工作。
  这就是您每天都可以照做的80/20活动:持续记录写了多少行代码,并且优化这一指标。就当它是个达成每日代码平均量的游戏好了。
  2.6.2  真实世界中的帕累托分布
  让我们快速看看真实世界中帕累托分布的案例。
  GitHub代码库中的TensorFlow贡献情况
  在GitHub上可以看到帕累托分布的极端例子。不妨看看颇受欢迎的Python机器学习代码库TensorFlow。图2-9显示了该代码库中前七位贡献者,表2-2是具体数据。
图2-9  GitHub TensorFlow代码库的贡献情况
表2-2  TensorFlow代码提交数量和对应的贡献者
  在总共93,000次提交中,用户tensorflower-gardener贡献了其中的20%。考虑到TensorFlow有数千位贡献者,该用户的贡献占比远超80/20分布的一般情况。这是因为tensorflower-gardener实际上是谷歌公司的一个开发组,它们创建并维护这个代码库。然而,即便将这个开发组排除在外,其余几位贡献最高个人仍然创造了令人印象深刻的纪录,可谓名副其实的成功程序员。您可以在GitHub网站上查看他们的信息。他们中的相当一部分在极有吸引力的公司找到了颇令人兴奋的工作。这种成功是发生在向开源代码库作出大量贡献之前还是之后呢?讨论这个话题没有实际意义。出于任何实际目的,您都该开始训练自己的成功习惯:从现在起,每天写更多行代码。没什么能妨碍您成为TensorFlow排名第二的贡献者——只要在未来的两到三年内,每天向TensorFlow代码库提交两到三次有价值的代码就行。只需在短短几年之内持之以恒地养成一种威力无穷的习惯,您就能跻身于全世界最成功的程序员之列。
  程序员资产净值
  毋庸置疑,程序员资产净值也符合帕累托分布。隐私保护起见,很难获取个体程序员的资产净值,不过NetWorthShare网站展示了各种专业用户自行提交的资产净值信息,其中也包括了程序员提交的信息。虽然数据有点乱,但展示了真实世界中帕累托分布的特异性偏斜(见图2-10)。
图2-10  29位程序员提交的资产净值数据
  在29个数据样本中,只有区区几个软件界的百万富翁!真实世界中的曲线甚至会更加扭曲,因为还有许多身价以十亿美元计的程序员——立即能想到的就有马克·扎克伯格(Mark Zuckerberg)、比尔·盖茨、埃隆·马斯克(Elon Musk),以及史蒂夫·沃兹尼亚克(Steve Wozniak)[ 苹果公司创始人之一。——译者注]。这些技术天才亲手写下代码,创造了对外服务的原型。最近,我们还看到区块链领域涌现出更多的软件大富豪。
  自由开发任务
  自由开发领域被两家网站瓜分:Upwork和Fiverr。自由开发者可以在这两家网站上提供服务,客户也可以通过这两家网站雇佣自由开发者。两家网站都取得了每年用户和营收均达两位数增长的佳绩,而且也都致力于去颠覆禁锢了全世界人才的组织形式。
  自由开发者的平均时薪为51美元。不过这只是平均值——位列前十的自由开发者收入远超这个数。在各个开放市场上,自由开发者的收入情况符合帕累托分布。
  我做过自由开发者,也雇佣了上百位自由开发者,还提供Python自由开发培训服务。基于这些经验,我观察到这种扭曲的收入分布。大多数学员干了个把月就退出了,所以他们的收入甚至达不到平均水准。那些连续几个月每天从事自由开发工作的人,通常能够拿到每小时51美元的平均收入。只有少部分意愿强烈、全力投入的学员能够达到每小时100美元或更高的收入水平。
  为何有些学员失败,而另一些学员却成长起来了呢?来看看Fiverr上自由开发者成功完成的任务(总分为5分,至少得4分)。图2-11聚焦于热门的机器学习领域。我从Fiverr网站上收集数据,跟踪“机器学习任务”类目两个排名最高搜索结果中71位自由开发者成功完成的任务数,结果也符合帕累托分布,这毫不出奇。
  我教过数千名自由开发者学员。大多数学员都只完成了10项以下的开发任务。这种情况吸引我做进一步探究。我很确定,很多学员后来都宣称“自由开发没搞头”。对我来说,这种说法等同于“工作没搞头”或者“生意没搞头”。这些自由开发者学员的失败完全可以归咎于他们没有持久努力。开始他们以为自由开发领域遍地是黄金,当他们意识到必须持续工作才能加入自由开发者赢家行列时,就举手投降了。
图2-11  Fiverr自由开发者和他们完成的任务数
  很多人不能坚持做自由开发工作,这实际上为您提供了向帕累托分布顶部移动的机会。有一个简单的成功指标能确保让您最终成为那1%~3%的顶尖自由开发者,那就是:完成更多的任务。熬下去,每个人都能做得到。既然您已经开始读这本书,说明您满心希望成为最顶尖那1%~3%的自由开发专业人士。多数人败于不够专注,即便他们手艺娴熟、充满智慧、人脉丰富,也无法与专注、投入、了解帕累托分布的程序员相匹敌。
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号