# The End of Front-End Development

[The End of Front-End Development](https://www.joshwcomeau.com/blog/the-end-of-frontend-development/)

在过去几个月，有很多初入职场的开发者和我聊天，他们越来越担心 AI 会取代自己的工作。看着那些令人惊叹的来自 GPT-4 的 demo 的出现，他们担心等到自己熟悉 HTML/CSS/JS 时，就没有相应的前端开发工作了。

这种论调在 Twitter 随处可见：

> Anyone who only has a frontend skillset should diversify their skillset immediately because their job won't exits soon.
>
> 如果你只有前端技能，那么你应该学些其他技能，避免因为前端工作不再存在被解雇。

我完全不同意这种观点。我不认为 web 开发者工作会消失不见。我已经受够了 FUD（Fear, Uncertainty, Doubt 恐惧、不确定性、怀疑） 在网络中的传播。

所以，在这篇博客文章里，我将分享关于将会发生什么的假设。事情即将改变，但不是以人们传播的吓人的方式。

> 说实话（Full discloure）：
>
> 我应该标注出来，在这件事情上，我是利益相关者：我在线教授软件开发。如果开发者工作开始消失，它会影响我的收入。
>
> 也就是说，文章中的观点是我真实信仰的体现。你可以自己决定这些信仰是否存在偏见。

## 回顾历史

CSS 语言发布于 1996 年的 Internet Explorer 3 浏览器中，不到两年，第一个“无代码”网站构建器——Homestead，出现。

Homestead 允许人们构建自定义的网站，而无需写代码。

从那时开始，就有一种声音认为：新技术的出现会让 web 开发者变得多余。在 2000 年代，是 Wordpress；在 2010 年代，是 Webflow；在 2020 年代早期，是“no code”工具。

某种程度上，Web 开发者已经过时了。如今，如果本地的面包店、牙医或艺术家需要一个网站，他们可能不会雇佣一个开发者，支付他们成千上万美元，来从头开始构建某个东西。他们会打开 SquareSpace 网站，选择一个他们喜欢的模板，然后每个月支付 20 美元。

然而，Web 开发者依然存在。

上周，OpenAI 做了一个 GPT-4 的展示。这其中有一个相当令人深刻的演示：GPT-4 可以将一个网站的手绘草图，变成功能齐全的网站，包括用 JS 来触发“Reveal Punchline”按钮。

这是了不起的，我认为这在设计原型阶段有很大潜力……但是我们需要明白：我们不需要 Web 开发者花几十年时间来构建这样的网页。在这种 HTML 文档和目前开发者编写的代码之间有着显著差异（为什么？）。

## 展望未来

目前为止，我看到的大多数演示在范围上很有限：一个简单的 HTML 页面，或者一个单独的 JS 函数。一个开发者花一个下午就可以完成这种事情。

但这还只是在早期！如果事情以同样的速度加速，它将能够在几年内构建完整的应用程序，对吗？

说到 LLM（Large Language Models, the machine learning models that power tools like GPT-4），比如 GPT-4，我远不是一名专家。但我知道它们是如何在更高层次上帮助我们的。

从根本上说，LLMs 就是一个超级强大的文本预测器。给定一个提示，它们使用机器学习来尝试并得出最可能遵循该提示的字符集。

像 OpenAI 这样的公司花大量的时间和精力调整模型以改善输出。一支由人类标签员组成的军队对模型的输出进行 "打分"，而模型则不断学习和进化。

如果你已经尝试过像 ChatGPT 或 Bing Chat 这样的基于 AI 的工具，你可能注意到这些答案可能有 80% 是正确的，但是它们在表述的时候，充满了绝对和不可动摇的信心。

LLMs 无法验证或者检验它们的假设。它们无法确定自己的输出是真是假。它们在玩一个概率游戏，估计这串字符似乎与提示中的字符串兼容。

有时，这些回答是荒谬的。OpenAI 团队称之为“hallucinations 幻觉”。

随着技术的进步，我们可以期待一些粗糙的边缘被磨光，但从根本上说，总会有一定程度的不正确。这些工具没有任何机制来客观地验证它们的响应。

因此，精确度会提高，但它永远不会完美。如果我们讨论的是让网络开发者过时，这就是一个问题。如果你不是一个程序员你将不能分辨对错。你无法辨别幻觉。

但是等等，在那个 GPT-4 演示中，我们看到 AI 是如何自我修复的！复制粘贴错误信息，它会发现并修正问题。

但是，并非所有幻觉都会报错。比如，我最近使用 GPT-4 用 React 生成一个 `&lt;Modal&gt;` 组件，尽管输出出人意料地好，但它仍有一些可访问性方面的错误。创建应用的人不会注意到这些错误，但最终的用户一定会注意到！

那么代码中的安全漏洞呢？当出现严重错误时，谁应该承担责任？

---

还需要提到一点：生成 50 行 HTML 代码和生成一个可以投入生产的 Web 应用程序之间有着巨大差异。像我的博客这样的小型应用程序有大约 65k 行代码，跨越 900 多个文件。这还不包括博客内容，只有 JS 和 TypeScript。

即使有 95% 的准确率，这也是令人头痛的调试过程。这就像一个开发者花费数月时间构建一个庞大的项目，在此期间从没有运行代码调试过，直到 100% 完成才开始调试。这简直是噩梦。

AI 不是魔法。它只是和它的训练数据一个水平。代码片段遍布互联网，而且是通用的。相比之下，每个代码库都是独一无二的。很少有大型的开源代码库。AI 应该怎样学习，才懂得构建符合现实要求的大型项目？

我们会很快到这种程度——非开发者可以通过和聊天机器人聊天，得到一个小型的完整项目，就是那种现在人们使用 Webflow 构建的东西。这是很棒的事情！

但是，我认为，要让大型科技公司解雇它们的开发者，使用提示工程师（prompt engineers）取代他们，还有很远的路要走。在我看来，有几个潜在的无法解决的问题阻碍这变成现实。

## 增强，而非替代

从这篇文章来看，你看不出我对 AI 的观点，但实际上我对它们相当乐观。

我认为最有可能出现的情况是，类 GPT-4 工具被集成到开发者工作流中，并被用来放大一个熟练的开发人员所能做的事情。

木匠没有被电动工具取代，会计师没有被电子表格取代，摄影师没有被数码相机/智能手机取代，我不认为开发人员会被 LLMs 取代。

我确实想知道开发者工作的总数是否会下降；毕竟，如果每个开发者都更有效率，我们不就只需要更少的工作吗？

不一定。就目前而言，对软件开发者的需求远远大于供应（我对于目前软件开发者需求大于供应这一点持怀疑态度，因为很多公司都在裁员）。在我工作过的每一家公司，我们都有很多想做的事情，但是我们受到开发人员数量的限制。

如果开发人员的效率突然提升两倍，会发生什么？能修复更多的错误，能创造更多利润。我们并不缺少可以建造的东西，所以我们并不像开发人员那样没有工作可做。

我实际上认为这可以增加开发人员工作的总数。

今天，有很多公司根本不雇佣软件开发人员。我曾经为一家名为 Konrad Group 的公司工作，该公司为其他公司构建 Web 程序，其中很多公司的名字家喻户晓。因为开发成本是如此之高，对他们来说，将开发需求外包出去比雇佣内部开发人员更有意义。

那些财富前 500 强的公司正在根据当前的软件开发成本进行计算。让我们进行一些假设：设定他们需要 4 个开发者，每人 15 万美元，每年 60 万美元。对他们来说，支付 50 万美元的代理费来为他们管理这件事更有意义。但是如果 LLMs 真的放大了开发者的工作效率，他们可能会以每人 15 万美元的价格雇佣 2 个开发者来做同样多的工作。突然之间，数学变得更有吸引力了。

让我澄清一下：我不是一个经济学家，这些都是一些疯狂的猜测。我并不是说，事实会以此种方式发展。我想说的是，这对我们来说并不是一个必然的结果。没人知道事情会如何发展，我对人们表现出的最坏情况是既成事实的态度感到有点厌倦了。

## 我们（开发者）不是唯一有这种对话的群体

Aaron Blaise 是一位资深的动画家和插画家。他在迪士尼工作了将近二十年，为迪士尼的经典电影做出了贡献，如《美女与野兽》(1991)、《阿拉丁》(1992)、《风中奇缘》(1995)等。

几周前，他在 YouTube 上发布了一个视频：[Disney Animator REACTS to AI Animation](https://www.youtube.com/watch?v=xm7BwEsdVbQ)。读完这篇文章后，他的观点对你来说很熟悉：他认为这些工具不是威胁，他认为这些工具可以提高动画师的工作效率，并带来更多的动画师工作。

现在，许多行业的艺术家和知识工作者都在进行着同样的对话。人们担心他们的工作将被 AI（如 GPT-4、DALL-E 2、Midjourney）。

GPT-4 通过模拟律师考试的分数可以让它排到应试者的前 10%，很多律师都在进行完全相同的讨论。

我个人的信念是，在大多数情况下，工作中的专业人士会找到将这种技术集成到工作流的方法，提高他们的生产力和价值。特定任务会交给 AI，但不会很多。

但是如果我错了，事实证明 LLMs 可以完全取代软件开发人员呢？如果是这样的话，我怀疑 LLMs 会取代绝大多数知识工作者。

这不是那种通过转换到不同的学科就能避免的海啸。没有更高的地方了。所以，与其去赌未来会带来什么，为什么不专注于你所热爱的，你所感兴趣的，你所擅长的呢？

> 前端 vs. 其他技术领域
>
> 网上有些人一直在建议，前端开发特别容易被人工智能取代，并建议开发人员专注于后端或数据工程。
>
> 这在我看来完全是反过来的。我不认为任何开发人员必须担心被淘汰，但如果有任何必要，我认为是后端。
>
> OpenAI 上周的 GPT-4 直播展示两个代码相关的 Demo：
>
> - “Joke website” 前端
> - 基于 Python 的 Discord 机器人
>
> 对比来看，生成的 Python 代码更接近于生产状态。我最近使用 Node.js 构建 Discord 机器人，代码是类似的。
>
> 相比之下，在为笑话网站生成的基本 HTML 文档和我每天编写的前端代码之间有太多的距离。
>
> 这是一个过度概括的说法，但在过去的十年左右，很多复杂性已经从服务器转移到了客户端。单一的 Express 应用程序已经变成了 serverless 函数的集合，而我们的前端已经从超链接的数字文件发展到完整的相当桌面程序质量的应用程序。
>
> 而且，前端是用户与之交互的产品的一部分。公司通常希望他们的产品是定制的，独特的，根据他们的品牌精心制作。相比之下，后端是不可见的。一般的后端比一般的前端更容易被接受。
>
> 令人沮丧的是，在我们的行业中，有很多人认为后端开发比前端开发更难或更复杂，因为“真正的”工程是在服务器上进行的。这当然是无稽之谈。
>
> 我认为自己是一个全栈开发者。我的职业生涯实际上是从后端开始的，PHP 和 Ruby on Rails。我仍然花费大量时间为我的课程平台编写后端代码。前后端在不同方面都存在困难。它们既复杂又艰难。
>
> （顺便说一下，即使前端不涉及 JS 框架，它仍然是复杂和困难的。我非常尊重那些专门使用 HTML、 CSS 和普通的 JS 创建高质量网站的人，他们专注于易用性和可访问性。而且我不认为他们会很快被人工智能取代）

## 使用 LLMs 帮助你学习

我听到一些人说 ChatGPT 在学习技术技能方面真的很有帮助。如果你对教程中的一些东西感到困惑，你可以要求人工智能向你解释！

对我来说，这是一个非常有趣的用例。本质上，ChatGPT 就像一个结对程序员，他可以帮助你理解还不明白的问题。你可以问它具体的问题，得到具体的答案。

但我觉得你得小心点。使用这样的工具来帮助您学习，有正确的方法，也有错误的方法。

错误的做法是把它当作 GPS 导航。当我不得不开车去某个地方时，我会把地址输入我的 GPS，然后不分青红皂白地按照它的指示去做。我通常会到达我需要去的地方，但是这不需要我的精神努力。结果，我的方向感完全消失了。如果没有合成声音告诉我该怎么做，我现在哪儿也去不了。

与其把它当成 GPS，我建议你把它当成陪审团成员。LLMs 是被告，出庭作证。

你会听他们说什么，但你不会接受它作为事实。你会持怀疑态度，批判性地思考每一个词。

与其盲目地复制/粘贴 ChatGPT 生成的代码，不如逐行浏览它，并确保你理解它。让它澄清一下。用权威的资料来源（例如官方文件）再次检查那些看起来可疑的东西。记住 LLMs 是100% 自信的，但不是 100% 准确的。

如果你遵循这个策略，我认为 LLMs 可以提供很多价值。

## 给有抱负的开发者的信

我想写这篇博文的原因是专门针对那些正在学习网络开发的人，他们感到焦虑和绝望，好像花这么多时间没有什么意义。

我不能保证事情会完全保持不变。我确实怀疑，人工智能将对我们的工作方式产生影响。我早在 2007 年就开始修补 HTML/CSS/JS，从那时起，事情发生了很大的变化。 **开发人员总是要有适应性，要与技术一起发展** 。

但到目前为止，我没有看到任何迹象表明我们的工作有危险。我试着想象一下，如果非开发人员能够在不了解 Web 技术的情况下构建出完整的网络应用，那会是什么样子。我想出了很多理由，说明这是不可能的，即使未来的 GPT 迭代不会出现那么多的幻觉。

我可能错了。我没有能够看到未来的水晶球。太阳可能明天就会爆炸，但是我真的不相信我们正处在 Web 开发者被淘汰的风口浪尖上。我担心很多可能会成为开发者的人，因为这种论调而放弃努力成为开发者。

我不希望你在五年后回首往事时，如果软件开发人员的需求更加旺盛，你会后悔停止追求你的梦想。
