前端开发人员成为新兴市场要归功于与云托管抽象化崛起的一系列软件开发趋势。抽象化的解决方案简化并扩展了这些原本很难管理的原语的使用。就 PartyKit 这个案例而言,这里所说的原语包括 Cloudflare 的 Durable Objects,这些对象本质上是Cloudflare Workers,但拥有内存中的状态。
此处,我们来讲讲关于让位于托管服务的原语的故事。首先,在软件开发中,服务的抽象化历史也同样适用于语言。花费时间编写裸金属和低级语言代码的程序员越来越少。尽管 C、汇编和 Fortran 这类人类可读性较低的语言不会很快消失,但 Rust 吸引到的支持者越来越多,而且大多数开发人员日常编写的也都是技术栈顶层的高级代码。
GitHub Octoverse 2023 现状的报告证实了这一趋势。根据他们的调研,在 2020 万开发者(指拥有 GitHub 账户的个人)中,过去一年中“开发者数量增加了 21%”,JavaScript 仍然是最受欢迎的语言。RedMonk 自己的语言排名也印证了这一发现:自 2015 年以来 JavaScript 一直是最受欢迎的语言。事实上,在排名前 7 的语言中有 6 个来自技术栈的顶部,其中三个是客户端语言(JS、CSS 和 TypeScript)。根据这些调查,我可以得出一个结论:随着软件领域的不断蓬勃发展,新进入该领域的开发人员大部分都将从事前端工作。
除了开发人员编写的语言之外,现代软件开发还严重依赖于将琐碎的工作和复杂性抽象出去的服务。虽然一些脾气暴躁的系统管理员无疑会对这一宣言感到不满,但事实上,外包运营越来越受欢迎,因为运维很难,基础设施很昂贵,安全性和合规性的风险很高。
API 经济与云原生
前端成为新兴市场是抽象化不断扩散的结果,而抽象化已成为一种不可避免的趋势。托管服务可以将用户认证等复杂且耗时的任务交给领域专家,从而提高安全性;还可以将高度规范化的服务,比如 POS 系统,交给领域专家处理。如此一来,各个公司就可以专心开发业务逻辑。在前端工具和供应生态系统方面,这种向抽象化的转变源自全栈的失败。尽管全栈工程师的兴起对雇主有利,但这一概念被该领域的许多人普遍抨击,因为期望开发人员掌握一切会给他们带来不必要的认知负担。正如 Laurie Voss 所说:
抽象化细节可以帮助我们脱离不断发展的技术栈的苦海。
下面,我们通过回顾所谓的 API 经济来深入研究抽象化的主题。自从云计算问世以来,API 就成为了云计算发展的关键,Salesforce 和 eBay 早在 2000 年就允许访问自家的 Web API,在提供 API 的推动下,很多公司都采用了“快问开发人员”的理念,引用 Paul Lehair 的话来说,这已经“吞噬了世界”。API 是现代软件开发的关键,而前端工程师恰好可以从这一发展中受益。J Chris Anderson 是 Couchbase 的联合创始人之一,目前就职于面向前端开发人员的数据库创业公司 Fireproof,他认为:
目前 API 正在集成到前端,这就是前端具有购买力并成为新兴市场的原因。
最近,大型语言模型的集成中也体现出了 API 驱动的开发的崛起。开发人员不必再自行训练模型或在本地托管,他们可以利用 OpenAI 的 ChatGPT、Google 的 Gemini 或 Anthropic 的 Claude 等轻松构建聊天机器人,开发人员只需集成这些供应商的 API 即可无缝而又简单地使用这些服务。事实上,OpenAI 的定制 GPT 提供了定制的体验,消除了训练和自主托管这些模型的痛苦。他们非常重视开发者体验,提供了详尽的文档、快速入门指南和 SDK。
除了前端工程师对 API 的熟悉程度之外,供应商为这些用户提供的抽象化通常是云原生的。Begin 的联合创始人 Brian LeRoux 对前端成为新兴市场的未来持乐观态度,因为该领域对云的熟悉度很高。从供应商的角度来看:
前端工程师是迁移到新云的绝佳市场。
因为前端开发人员在构建动态的交互式网站时必须考虑后端,所以他们很清楚无服务器和云托管的重要性。事实上,服务器/客户端分两步走的挑战尚未得到解决,该领域内大量聪明的开发人员的脑力都用于解决这些挑战了。
抽象问题
当然,采用这些抽象化程度高的解决方案也存在一定的弊端。抽象化的产品和服务通常以 API 和库的形式交付,同时也将其他人的代码引入到项目中。这就意味着美丽与危险并存。抽象化的解决方案要求项目采用特定的形式,并且往往难以随着项目规模的扩大而扩展。我曾听到过一个陈旧的观点,推特必须将后端从 Ruby on Rails 改为 Scala(一种建立在 Java 基础上的语言) ,因为 Java 之类的低级语言具有更好的可扩展性。就处理繁重的流程和缓存层而言,Java 之类的语言仍然是非常宝贵的。然而,像推特这样的大型应用程序是例外,而不是顺应规则,这意味着成长的痛苦并不会阻碍大多数开发人员使用 JavaScript 和 TypeScript。
除了规模化的问题之外,通过托管服务和产品抽象化复杂性的成本往往非常高昂。Vercel 为了简化开发,以一种非常简单的构建体验打包了 AWS 原语,不需要任何配置,但用户必须付费才能获此便利性。这导致一些开发人员抱怨 Vercel 的费用高得离谱。尽管开销增加了,但许多公司发现无需雇佣工程师来管理基础设施,这一点开销还是非常值得的。Branch Insurance 的联合创始人兼首席技术官 Joe Emison 已经提出了商业案例:利用云服务,并雇佣和培训专门从事前端技能的初级开发人员:
我们有更好、更强大的云服务可供构建(例如 AWS、GCP、Azure、Netlify、Twilio、Stripe),因此关注界面的开发人员也会增加。
换句话说,将运营工作外包给了托管提供商,Branch 的工程部门就能够完全专注于 UI 和前端界面。尽管 Branch 是一个极端案例,但软件开发的未来正朝着 Emison 所描绘的方向发展。
下面,我们来谈谈许多开发人员依赖抽象化和托管服务的最后一个因素,但这是一个负面消息:所谓的职业生存威胁。我曾讨论过人们对前端的刻板印象:有人认为这类工程师因女性居多而被忽视,而且这个岗位被大量初级开发人员占据。对于持有这种刻板印象的人来说,由前端主导的未来意味着软件工程的终结。按照这种思维方式,前端工程师与仅依赖低代码和无代码解决方案的平民开发人员不分伯仲。如果我们真的指望 James Somers 提到的 AI 及低/无代码取代软件工程师,那么我们确实处于“工匠日渐式微”的边缘。
但我不认同以如此消极的心态来看待前端驱动的未来。我认为实际情况恰恰相反,大量的创新都出现在前端。任何持有以下看法的供应商最终都会失败:前端工程师能力不够,技术不够精湛,因此成为定价过高的黑匣子解决方案的受众。
前端已死,前端永存
关于最新的新兴市场,我还有最后一点想说。与任何形式的转变类似,前端的晋级之路并不平坦,但在软件开发的特定条件下,这一过程伴随着角色的重新分配,以及前端与后端、客户端与服务器、静态与交互等传统分割界限变得越来越模糊。许多人长期以来一直批评前端和后端这样的术语,比如 Melissa Mcewan 指出:“这种分类大概在十年前就已经过时了,但依然存活到了现在。”
Reddit 用户 n9iels 也赞同这一观点:“根据我的经验,前端领域正在仅有从 HTML/CSS/JS 转变为包含服务于前端的后端。特别是对于完全使用 React 或 Angular(SPA)构建的网站,前后端之间的界线变得非常模糊了。”
“前端”、“后端”和“全栈”之类的术语无法准确反映出现今的软件开发生命周期,因此最终都会被新的开发者类型所取代。虽然我不认为“前端”这个术语很快就会被抛弃,但在现实实践中,这个领域必将持续变化。前端开发这个岗位将出现一种新型的工程师,他们利用 API 和云服务来实现高性能、交互式的用户界面。这些开发者将跨整个技术栈工作,但不同于全栈工程师假设自己什么都懂,这类新型的开发人员将利用手头的工具,并在这些工具不足的地方创新。
前端的太阳已经升起,但这个领域是一颗仍在发展的恒星。尽管人工智能技术的蓬勃发展和零利率政策资金政策的消失带来了不确定性,软件行业似乎特别不稳定,但供应商们意识到,从事技术栈顶端工作的开发者处于有利之位。这个行业和市场变得越来越错综复杂,但在前端领域工作的开发者已经直面了这些挑战。可能有人认为这会催生大量机械化的开发者,盲目地陷入超级扩展服务的统治之下,但我认为随着开发劳动力继续向技术栈的上层移动,客户端和用户界面体验的改进(比如缓存、WebAssembly、服务器端渲染、容器化的微前端)将与之并行增长。如今软件行业中最闪亮的明星以及最具开拓精神的开发者都在前端领域工作,因为这个领域使用了他们最喜欢的前沿技术。
暂无评论内容