2024 年 5 月 2 日 - 巴尔杜尔·比亚纳松
过去十年软件开发的演变令人沮丧,很多东西看似不合理,即便对于身处其中的人也是如此。
通常我们只有在趋势和流行框架、库大受欢迎之后才会注意到它们,那时它们往往与最初的语境相去甚远,其最初的技术价值在炒作、欺诈和虚假承诺的喧嚣声中难以分辨。
若追溯这些趋势的早期起源,会发现起初确实有一些东西,尽管可能很微小。
- MongoDB 有其用途,是一种在特定情境下效果显著(在其他情境下效果不佳)的专用工具,其早期采用者有充分的理由采用它。
- React 在当时是构建网页“视图”层的一个非常聪明且符合人体工程学的解决方案,虽已过保质期,但十多年前首次发布时是一项了不起的创新。
- 大型语言模型是一项了不起的发现,从长远来看,它应该能告诉我们关于文本本质的一些有趣信息,有一些潜在的生产性用途,但其破坏性用途和所代表的危害远远超过了其有用性,使用它们会让人被看低。
- Rails 和 Django 使一类软件——中型网络服务——的创建、开发和维护更加简单直接,是网络开发中的一次真正范式转变,但可能被过度使用并扩展到不适合的软件类型中。
各种成为开发者宠儿的技术通常都有其“价值”,但随着围绕它们的炒作传播,这种价值往往会在翻译中丢失。
令人困惑的不是这个,而是这些技术在其他技术没有的情况下为何会流行起来,尽管它们具有同等价值且深受使用它们的开发者喜爱。
部分原因是资源,如 MongoDB 有风险投资,Facebook 即使在十年前也是地球上最大的公司之一。
但这并不能完全解释清楚,很多有风险投资支持的项目失败了,几乎每个大型科技公司都曾实施和推广过自己的前端视图库,如 Ebay 的Marko至少和 React 一样古老。
部分原因只是时间问题,如 Electron 本应比Tauri更受欢迎,因为 Electron 开创了“用网页技术制作平庸桌面软件”的类别,而 Tauri 是后来者,且要求关注应用安全,这是一个严重的问题,但这也不能完全解释。Cordova/PhoneGap 移动应用框架比 React Native 早六年,但在市场份额上却逐渐失去优势,CoffeeScript 似乎一夜之间就消失了,而 TypeScript 却成为了主导,几乎将其他“编译为 JavaScript”的语言挤出了市场。这表明时间或发布顺序也不能解释一切。
复杂系统本质上是不可预测的,我们永远无法完全理解为什么某些东西在软件开发生态系统中受欢迎,就像我们永远无法确切理解为什么某些书成为国际畅销书而其他书没有一样。
但我们可以形成关于什么能维持受欢迎程度的理论——为什么一些框架和库越来越强大,而另一些则停滞不前甚至逐渐消失。
作者的理论很简单:软件开发中任何给定工具的长期受欢迎程度与它能实现的劳动力套利程度成正比,越能实现劳动力套利,就越能从管理层获得资金和采用。
劳动力套利是什么?#
劳动力套利实际上是雇主在不同地区和领域的员工之间进行博弈,利用劳动力成本、技能和劳动力供应的差异来降低劳动力成本而不影响商品和服务的质量。有效劳动力套利的关键要求是员工可以被视为可互换的“组件”,需要专业知识的工作比不需要专业知识的工作更不容易被套利。
MongoDB 在其鼎盛时期受欢迎主要是因为它让开发者不需要数据库专家,只需将数据放入文档数据库中,让现有的非专业开发者处理即可。Electron、PhoneGap 和 React Native 承诺让公司用更普通的通用开发者取代昂贵的平台专家。
Web 开发的标准化降低了成本,增加了可预测性,使各种浏览器更具互换性,这是一种对冲,减少了每个浏览器的个体市场力量,但通常会增加整个网络的价值,使每个浏览器供应商都受益。相反,劳动力标准化对劳动者不利。
“山坡上的小盒子”#
React 和组件模型使软件开发者标准化,降低了他们的个体议价能力,使他们在就业市场上的比例份额被排除在外。它在高管和管理层中受欢迎完全是因为它帮助他们从就业市场中消除了各种专业技能,如 CSS、可访问性、浏览器中的标准 JavaScript 等,但实际上这些专业技能仍然存在,只是在就业方面占比很小,可以视为已灭绝。
组件模型本身就是另一层套利,特别是与 CSS-in-JS 方法或 Tailwind 等库结合使用时,不必围绕跨职能专业组建团队,而是可以围绕可互换组件构建软件。
组件可以混合搭配,来自不同部门、外包、开源或由 Copilot 生成,在管理层眼中它们是等价的,而成本却相差很大。
这种权衡在开发者需求超过供应时是有效的,因为市场在增长,管理层对套利系统的受欢迎程度并不担心,甚至还为其找借口。但当市场不再增长,资金变得稀缺时,就会发现这些技术在客观上比其他技术更差,如更昂贵、更慢、需要更多带宽、导致用户界面设计更难等。
这一切都是关于降低开发者技能,而不是提高生产力或代码复用#
很多早期读者对劳动力套利的概念感到困惑,认为这不是在反对生产力,如用挖掘机代替一百个工人用铲子干活就是一种终极的劳动力套利,但实际上劳动力套利不是关于输出或生产力,而是关于工人。像 Test-Driven Development 这样的过程需要更多的专业知识,是一种技能,而不是关于输出的。
在软件开发历史上,雇主一直更喜欢资助那些使技能抽象化的工具,而不是真正提高生产力和输出质量的工具,因为软件行业通常资金充足,过去几十年一直处于爆炸式增长,大多数大科技公司要么是垄断企业要么是寡头企业,有资金优势。
但当市场不再增长,资金变得稀缺时,就会发现这些技术的问题。
情况已经改变#
当市场不再增长,资金变得稀缺时,会发现很多技术在客观上比其他技术更差,如更昂贵、更慢、需要更多带宽、导致用户界面设计更难等。React 对于绝大多数制作网络软件的组织来说,客观上比很多其他技术更差,试图抽象化客户端和服务器平台差异的 React 元框架永远无法超越专用服务器框架或定制的前端代码。
这些技术使招聘更容易,但也使管理层更容易解雇整个团队并替换为更便宜的人或其他东西。
所以软件质量差也没关系,因为发布代码的标准很低。技术管理会牺牲技术进步来削弱劳动力。
这对你意味着什么?#
这取决于情况,如果在自由或开源领域工作,能帮助理解为什么一些工具和框架能得到管理层的支持,而一些不能;如果在争取项目资金,能预测哪些想法更可能获得资金;如果不得不使用这些所谓的“软件”,能知道为什么感觉很糟糕;如果是软件开发者,意味着雇主会更强调框架而不是功能,会牺牲软件安全来外包工作,会让业务因发布劣质软件而受损。
这就是工会存在的意义
唯一能对抗这种趋势的方法是通过集体谈判,历史上,只有通过工人的集体努力,才能迫使雇主要求和投资培训与安全,保证工作稳定性,防止大规模裁员和抵制外包。《你值得拥有一个科技工会》这本书正是我们今天这个行业所需要的,值得一读。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。