10倍效率的开发者即将消亡
【编者按】这篇文章是作者对于 10 倍效率的开发者这一概念的批判和反思。作者认为,这种概念是基于错误的假设和测量方法,导致了一些不良的后果,比如过度依赖个人英雄主义,忽视团队合作,以及缺乏对软件质量和可维护性的关注。作者提出了一些替代的观点和建议,比如重视软件工程的原则和实践,培养团队的信任和协作,以及使用更合理的评估标准和工具。作者预测,随着软件行业的发展和变化,10 倍效率的开发者这一神话将会逐渐消失,取而代之的是更加专业和平衡的开发者。
原文链接:https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer//
未经允许,禁止转载!
最近,我在 Mocktail 项目中引入了 Sorbet 类型检查器,这让我非常兴奋,因为这将大幅提升 Ruby 程序员的开发效率。
但是,目前还没有达到预想的目标。
至今我已经提交了 150 次 代码,在项目发布之前,还有许多问题需要解决。这是一项艰巨的任务。我不仅需要投入大量的时间学习 Sorbet ,还要面对各种边缘情况和难以定位的 bug,有些是类型系统本身的问题,有些是类型系统揭示出来的代码问题。我正在做一些创新性的尝试,所以我的心情时而兴奋时而恐惧。
除了我目前的探索之外,还有一个更深层次的问题值得我们所有程序员思考,那就是:“为什么我总是对自己要求过高?”
让我与众不同的是什么
我是一个热爱编程的人。
我经常遇到一些棘手的问题,让我彻夜不眠地寻找解决方案。每天早上,我都会带着新的想法起床。我缺乏充足的睡眠,即使睡着了,我也在脑海里思考问题。这样导致我无法平衡生活和工作。最后,我发现自己只完成了 20% 的工作,每天都陷入这种循环,时间就这样流逝了。直到有一天,我对解决问题的渴望超过了我对忽略其他事情的内疚,我开始急于找到答案。当我即将攻克难关时,我给自己造成的压力就像一个苛刻的老板设定的“生死攸关”的截止日期。
然后,在一个普通的星期天下午 4 点,工作终于完成了。
有时候人们会对他做的东西感兴趣,但通常他们不会,甚至他自己也不会。
我会花一些时间整理邮件,收拾房间,然后刮胡子。然后,我开始下一个自己安排的、重复性的任务。
从 13 岁开始,我的生活模式就基本没有变过。我可以肯定地说,我一直在忙于各种各样的子任务,实现创新的想法,但是要保持个人生活的健康和工作生活的可持续性,却是很困难的。
当我在 Crowe 公司担任咨询顾问时,有一年我为客户提供了 2100 小时的咨询服务,相当于每周工作 40 多个小时,全年没有休息,且这并不包括旅行时间。这还不包括旅行时间和每周大约 6 个小时的行政工作。即使这样,我仍然利用晚上和周末的时间,尝试用 bug 遍地、文档匮乏的初始 iPhone SDK 开发了一个苹果应用程序。这个应用是 vBulletin 网络论坛的原生客户端,虽然我对底层技术一无所知,但我还是全心全意地完善这款应用。那一年我是否得到了充分的休息?我已经忘记了。那一年的记忆也变得模糊不清。
最后,我的应用因为可能存在用户发布不雅内容或图片的风险被 Apple 拒绝上架。虽然很遗憾,但也没什么大不了的,我可以再开发其他的产品。
我不知道用什么词汇才能客观地描述我上述的行为,而不涉及过多的价值评判。完美主义者?狂热者?热衷者?无论我们怎么称呼这种冲动,它并不完全是好事,反而给我带来了一些负面影响。但是,这也是我在面对自己的特性和性格缺陷时,选择积极地寻找解决方案,而不是消极地压抑或改变的一个体现。
其他的例子:
在面对压力时,我会持续不断地思考。我借助创造一种与正在构建项目相关的压力反应来恢复一些控制权,这样可以迫使我的大脑对对我有益的工作进行深度思考。这种方式既能够掩盖我每天无效的、不合理的忧虑,还能通过利用压力反应来提高工作效率和产生更多有益的思考成果。在这个时间段,即使我离开键盘,我仍能产生丰富的思考成果,其效率几乎与直接对着键盘工作时一样。
我的听力不好,特别是在团队和嘈杂环境中,我听力的表现更差。(我总是喋喋不休的一个原因是,我觉得主导对话比冒着误解别人的话而可能冒犯他们的风险更为安全。)就像参与填空游戏一样,我常常感觉需要了解一些背景知识才能理解别人的意思。多年来,我已经将这种“填空”技巧转化为创新和幽默感的来源。我大部分的双关语和文字游戏,其实都源于我在填补听力理解空白时的惊喜发现。我最创新的思想往往来自于我误解他人的话语,后来发现他们实际上在讨论别的主题。
我在学习方面非常弱——缺乏兴趣、易于分心、善于反驳。我从未喜欢过学习,尝尝逃避学习。每当我试图理解某事物时,只要有一丝不适,我就会抓住任何能让我暂时逃避的事物。当我真正开始取得进展时,我往往会发现自己对一些前提持有异议,或者会试图挑战并证明作者的观点是错误的。不过,一旦我真正掌握了某个知识点,我会熟练运用。这意味着我会彻底研究每个细节,以避免所有的陷阱。在职业上,这种显而易见的弱点反而成为了我的超能力。由于我习惯于用困难的方式去学习所有事物,这使我成为一名天生的顾问和导师。因为我已经探索过所有错误的路径,所以我通常能在他们陷入困境之前就预见到,理解他们偏离正确路径的原因,并指导他们如何回归正确的轨道。
我今天选择这个话题的原因,并不是因为上述的任何一点让我显得特殊。实际上,像这样的矛盾在 1990 年之前出生的程序员都普遍存在,甚至已经成为了一种常态。
独一无二的程序员时代
我刚才的描述,不禁让人联想到《生活大爆炸》 或 《硅谷》 中的人物形象。我承认一个事实:在我最出色的时刻,我更像是一个充满刻板印象、被过度塑造的角色。几十年来,我们将一系列负面的特性与程序员联系在一起,仿佛这种联系是内在的,不可避免的。我一直以为这种刻板印象是无稽之谈——任何人都可以学习并精通编程——但现在我开始意识到,这也可能是我们所处时代的产物。
换句话说,我开始相信,那个以独立学习、着迷于技术、与众不同的程序员为典型的时代,正逐渐走向尾声。
那么,我为什么会有这样的想法呢?因为在一个特定的、代际性的时刻,有一群人被吸引进入了软件行业,我就是其中的一员。这个时刻发生在家用电脑广泛普及与被各大平台封闭的短暂过渡期。在这个信息技术成熟的临时阶段,电脑具备了可获取性和可探索性。在电脑变为无法简单分解的消费设备之前,仅仅使用一台电脑就需要理解许多工作原理。在理解电脑工作原理的过程中成长,使得编程更易于掌握。由于于一些幸运的巧合,以及像 RadioShack 这样的公司的营销策略,社会无意间将一个社会流动性的机会交给了美国的中上阶级家庭中的男孩们,他们更喜欢与电脑为伴,而不是在户外与同龄人交往。我就是其中的一员,我也也遇到了许多与我有相似经历的程序员。
然而,程序员并非一直如此。我记得在 2003 年我向一位计算机科学教授询问我们学校性别差异的问题时(我们的班级只有一名女性,后来她转了专业),他回忆说在 1990 年以及黑客和游戏玩家亚文化兴起之前,我所在大学的计算机科学专业有大量的女性学生。1984 年,全美女性计算机科学专业的入学人数翻了一番, 达到了 37.1% 的峰值,随后急剧下降。
我们有理由相信,程序员的形象并不是一成不变的,因为有很多证据表明,下一代专业程序员将不再只由编程爱好者构成。如今,从事软件开发的人与他们的前辈有显著的差异。我想说的是软件行业的高薪待遇:它使得编程从一个只吸引那些真正热爱电脑的人的中产阶级工作,变成了一个能够吸引任何想要保障自己财务未来的人的舒适的中上阶级职业。想想在过去十年中转行的人,有多少人被建议“学习编程”。无数的人选择了这个行业,仅仅是因为编程是一个相对稳定、高收入的职业。(当然,这并没有任何不妥!)
代际冲突的酝酿
虽然我不确定是否有人会对我的父母说"OK Boomer"(近期在欧美极其流行的网络短语。作为一个贬义词,它被用来驳斥或嘲笑那些心胸狭窄、观点过时、消极判断、居高临下的老年人),但我可以想象这样的称呼可能不会让他们感到不适。
同样地,我也不确定是否有人给我们这一代人起了某个特定的称呼,但我相信社会上已经积累了足够的不满情绪,甚至可能在 TikTok 上已经有人创造了一个引人注目的称呼。
在我这个同龄人的圈子里,许多人仍然认为自己是社会的局外人,在父母的地下室中与 CRT 电视长大。但我推测下一代将会看到一个看似同质化的群体,由四十多岁的人组成,他们穿着连帽衫和凉鞋(加上袜子!),巧妙地掌握了软件行业在经济成熟时期的控制权。
仔细思考这种变化,你可能会开始将那些老旧的程序员看作是热衷一代(Enthusiast Generation),因为他们处于一个独特的起始环境,这一代人不太可能被复制。一旦我引入“代际”这个概念,通过代际冲突的视角来看待过去十年中出现的许多有争议的问题就变得更加容易理解。就像任何有关代际的讨论一样,需要注意的是,界限并不明确,存在许多例外情况,而且很多观察结果将局限于特定的地域和文化(例如美国,或许还有加拿大)。将人们归类到不同的代际中,只能为我们提供一种观察人群变化的新方式,这需要足够长的时间跨度来观察几十年渐进变化的积累。
为了举例,我将强调三个备受关注的冲突,并从代际变迁的视角解释它们。
Passion (激情)
我记得大约 8 年前,“激情”这个词非常流行。这让我有些不舒服。但事实上,几乎任何事情都会引起我的不满情绪。
我记得当时我在想,“禁止使用‘激情’这个词只会导致人们选择其他词,比如‘自我驱动’、‘高度积极’和‘有抱负’。”我记得我曾经问自己:“我们是否应该筛选那些将编程视为工作之外爱好的候选人?”但我没有考虑到的是,对于那些期望工作只是一份工作,却发现自己被我这一代人来管理的人来说,这会是一种怎样的体验。也许团队中的其他人会主动加班而无需被要求。也许所谓的“无限制”的休假会对晋升机会造成阻碍。也许建立人际关系需要在午餐时间讨论 Emacs 和 Vim 、机械键盘开关,或者 Hacker News 首页上的任何话题时持有前沿的观点。这听起来像是一种相当痛苦的存在,尤其是如果编程并不是你每天早上起床的动力。
如果我们考虑到这种可能性,即我们正在经历一种代际变革,那么对于“激情”这个问题的争论将证明这样一种假设:大多数程序员总是对编程充满激情的假设是错误的,并且事实恰恰相反。
Craftsmanship (匠心)
这让我想起了另一个备受争议的词汇——"匠心"。我亲眼见证了它的起源,它是对 2000 年代末敏捷软件运动中技术方面被淡化的一种反应,取而代之的是更具利润性的软技能培训和咨询服务。如果你错过了,大部分与匠心相关的话题都可以归纳为 "Slow Code(慢编码)" 运动(一个提倡在软件开发中慢下来,注重质量和可维护性的运动)。人们热衷于讨论"三思而后行"、建立学徒计划以培养新的程序员,以及利用自动化测试进行各种非测试目的的方法。
我曾是这个社区的活跃成员,多次在会议上发表演讲,将我的名字放在宣言上,并始终鼓励任何愿意倾听的人提高软件质量。
然而,回想起来,匠心运动的目的不仅是为了重振敏捷方法(如极限编程)所带来的伟大工程见解,它还是对一代程序员迅速激增的回应,这些程序员并不像我们一样关心代码质量。有一种观点认为认真的程序员正面临威胁,并且在数量上无法与不那么认真的程序员相提并论。如果你的团队无法严格控制代码库中的内容,你将陷入复杂的泥潭中,无法应对漫长的构建时间,并再次面对另一个遗留系统。
如果我们把这个紧张点看作是我们正在经历的代际转变的另一种表现,问题就更显而易见:"你允许在代码库中存什么样的代码"很容易与"你给谁赋代码库的权限"混为一谈。
"测试驱动设计"等术语太多,以至于即使是例行的对话也充满了修辞陷阱。对学徒制度的重视也存在一些未经深入探讨的假设:它意味着编程只有一种"正确的道路",我们这一代人已经独特地找到了这条道路,而且学习它的唯一方式就是模仿前辈们。我看过很多关于将软件开发视为专业的演讲,就像我们对待管道工、电工和专业认证的工程师一样,对程序员进行许可认证。每个人不想编写糟糕的软件,但如果按照这个运动中的指示来,就没法写代码了。
10倍开发者
在你开始发表观点之前,我知道你对于所谓的 “10倍” 开发者可能已经有了自己的看法。也许你已经读过一些文章,如这篇、那篇、或者其他。这个术语指的是那些被认为能够以相当于其他十个程序员产出的神秘开发者。然而,对于“10倍”开发者,到底指的是哪些方面的产出和哪十个程序员并没有一个明确的定义。
“10倍”这个概念早在我们讨论现代程序员之前就已经存在了。它似乎源于一个并不可靠的研究, 该项研究于1968年进行,结论是在经验丰富的程序员中,最优秀者的生产力是最差者的十倍(相对于平均水平)。我们之所以还记得它,是因为它被引用在 Fred Brooks 开创性的著作 《人月神话》中。
有些人在工作中比其他人更擅长是一个不争的事实。至少在 2010 年代之前,这一点是无可争议的。然而,随着这个概念引起争论,尤其是来自与风险投资相关的人的观点,他们主张创业者应该“只雇佣 10 倍的开发者”,这引发了业界人士之间的激烈讨论。
作为回应,许多人认为那些持有这种表述的人在选择一种奇怪的争论,并声称“10倍开发者不存在”。这引发了更多的反批评,因为大多数人可以举出那些工作价值仅相当于自己十分之一的人的例子。随着时间的推移,对话陷入了僵局,明确的战线将支持者和批评者划分开来。一方面,支持者认为许多高薪程序员并不一定是非常优秀的,但其中一些程序员的价值远远超过了典型薪酬范围(这也是谷歌过去引以为傲的“不公平薪酬”)。另一方面,批评者倾向于将所有关于程序员的负面刻板印象都归咎于这些所谓的超级高效开发者,暗示10倍开发者的高产出往往伴随着难以衡量的组织和技术成本。
然而,回顾过去,如果我们将这场辩论看作是代际冲突的一种表现,那么结果可能会有很大的不同。
坦率地说,根据我的经验,我确实相信有些程序员在编程方面的能力至少比其他人强上一个数量级。曾经我与那些可以在几分钟内解决我花费数天甚至数周时间才能解决的问题的程序员一起工作过。我亲眼目睹过一个程序员在一天内独自构建了一个整个团队两周才能完成的项目,而且没有产生任何反社会的、不可持续的负面影响。实际上,相反地,我经历过那些几天、几周甚至几个月都没有任何进展或取得任何进步的程序员,他们最终寻找办法找回颜面。
虽然承认这一点可能会让人感到不舒服,但并不完全是无理地推测,总的来说,那些热衷于编程的业余程序员可能会胜过那些每天下班后就放下键盘的专业程序员。
根据我的经验,以下特质可以将这两者区分开来:
孜孜不倦:愿意花更多的时间练习编程,而不仅仅是被迫长时间工作,这种内在动机驱使下的自愿行为通常会使一个人成为更优秀的程序员。
执着不懈:拥有无限的好奇心和毫不留情的坚韧追寻答案,不论是在他们的工作描述中 spelunk 开源代码堆栈跟踪还是调试其他团队的代码,这种追求会带来更好的信息和更快的进展。
中庸之道:以工作的质量为傲,并追求卓越,但不要陷入完美主义的陷阱,而是在必要时找到合适的折中方案,以产生更好、易于维护的软件。
在这代际裂痕的背景下,以上三点的特质不仅在上一代模式中得到体现,还具有更广泛的适用性。那些在业余时间编程、执着地不放弃困难问题,并对自己的工作成果质量投入个人感情的人,具备了这些特质。
对于那些不愿意每周超过 40 个小时呆在电脑前的新一代成员、有重要家庭事务的人,或者不愿意在完成琐事时异步思考重构技术的人来说,我无法想象这种动态是否会令他们愉快。他们会永远被更加热衷的同事超越,而对于这些同事来说,“程序员”不仅仅是一种身份,更是一种职业。我没有答案。
这是一个令人不舒服的对话,因为它揭示了一种让人不舒服的现实。
应对这一现象的策略
如果将不同年代的程序员类比属于不同世代的人,他们正引领着这个行业的巨大转变,这种类比可以帮助我们识别当前面临的许多挑战之间的共同线索。这种类比还可以使我们能够预测和规划未来不可避免的困难,因为越来越多的早期世代的成员将逐渐退出。
假设你已经阅读到这里,并接受了以下两个观点:
下一代的程序员不太可能像上一代那样受到编程的热爱的驱动,而是可能因为其他的原因而选择这个职业。
软件行业没有充分考虑到下一代程序员的特点和需求,而是沿用了旧有的模式和方法。这可能会导致软件行业与时代脱节,无法适应新的变化和挑战。
如果这样的话,那么你可能可以想象,这里有很多问题需要解决。我们上面回顾的一些热点问题已经是众所周知的,即使我们当时没有找到一个共同的原因。很可能还有更多的挑战隐藏在表面之下,等待着引发它们爆发的火花。我们是否要主动地发现和解决这些问题,取决于我们自己。
以下是我经过几天的思考后自己想到的一些问题:
新一代程序员更希望从人力资源和管理层那里获得支持,而上一代程序员更倾向于认为主动管理(例如职业发展规划、指导和目标设定)会削弱他们的自主权和内在动机。组织能否有效满足两个群体的需求?
业界普遍认为,没有人知道如何教人编程。计算机科学的学位并不能让程序员为编程的工作做好准备,这一直是留给学生在自己的时间里自己摸索的练习。如果行业要比我们这些热情的程序员活得更久,它会不会采用一种可持续的方法来教育下一代,而不是要求他们自学所有的东西?
将你的业务赌在一个无限的自我启动、自给自足、自律的候选人身上,就像是投资于化石燃料开采的长期前景一样。那些以热情的程序员为核心的企业文化如何适应一个需要更多指导、支持和问责的新一代呢?
我们唯一确定的是随着时间不断流逝,变化是常态,所以为一个与过去不同的未来做规划通常值得花更多时间。
你在这个世代转变中看到了哪些挑战?欢迎在评论区分享你的看法!
推荐阅读:
▶微软Office AI工具定价每人每月30美元;Meta开源免费可商用大语言模型Llama 2;美团申请美团光年商标|极客头条