第三章 · 生产工具的演变

3.3 框架、低代码与云原生

本节最后更新:2026-05-11
验证环境:无(纯理论章节)

从"写"到"组装"

高级语言把编程的门槛从硬件结构降到了逻辑表达。但你很快会发现:即使有了 Python 或 JavaScript,做一个现代 Web 应用仍然需要海量的工作——你要处理路由、数据库连接、用户认证、缓存、安全防护、部署配置……这些工作和你实现"业务逻辑"的那个核心想法关系不大,但它们必须做。

于是框架出现了。

框架的本质是:把 80% 的应用都需要的通用功能做成现成的模块,你只需要填写那 20% 的个性化部分。 你不需要每次从零实现"用户登录",因为你用了 Django/Nest.js/NextAuth 等框架,这段通用的逻辑已经被封装好了。

框架的演化本身也很有意思。早期的框架是"大而全"的——Ruby on Rails 在 2005 年提出"约定优于配置"的理念,你不需要花时间配置框架的行为,因为框架已经有一套默认的、合理的约定。只要你遵循这些约定,开发效率会极高。但这个模式的代价是:当你的需求偏离了框架预设的轨道时,你需要花更多时间去"绕过"框架的限制。

后来出现了"微框架"——比如 Flask(Python)、Express(Node.js)、Sinatra(Ruby)。它们只做最小的事情(路由和请求处理),其他的由你自由选择要加什么。你可以自己选择用什么数据库、用什么模板引擎、用什么认证方案。灵活性比大框架高,但你也因此需要做更多的决策和配置工作。

再到 2020 年代,出现了"元框架"——比如 Next.js、Nuxt.js、Remix。它们不仅仅是一个框架,而是把前端框架、后端框架、构建工具、部署配置全部整合在一起。你启动一个 Next.js 项目时,它已经帮你处理好了:代码拆分、静态优化、API 路由、服务端渲染、图片优化。你"开箱"就能用,但你对底层配置的控制力也相应降低了。

你发现了吗?框架的发展轨迹和整个编程工具的演化轨迹是一样的——每一代框架都在做同一件事:把通用的问题标准化,让你可以更快地处理那 20% 的独特需求。

框架发展的结果

框架发展的结果,是"编程"这件事从"写代码"越来越多地变成了"配置和组装"。你不再是每一行都自己写,而是在选好的框架上"填空"。

这个转变的深远影响被大多数人低估了。框架不仅是"让你少写代码",它还在无形中帮你"使用了行业最佳实践"。一个 2010 年的 Django 项目,自动使用了 MVC 架构模式、ORM 数据库访问、模板引擎视图层、CSRF 安全防护。你不需要自己设计这些东西——它们已经在框架里了。你选框架的时候,其实是在选一套"这个框架的作者推荐的软件开发方式"。

而且框架还催生了"社区"这个概念。一个流行的框架周围往往有一个巨大的社区,提供教程、插件、模板、解决方案。你用 Rails,遇到问题去 Stack Overflow 一搜,八成已经有人问过了。这种"社区基础设施"的价值,有时候甚至超过了框架本身——你不会成为"孤岛",因为框架已经替你建立了一个生态。

但框架也有一个明显的天花板:当你的需求超出了框架的预设边界时,你会撞上限制。 你能做的事情被限制在框架所支持的范围内。如果你选的框架不支持某个功能,你需要要么绕过它(可能很痛苦),要么自己实现(可能很复杂),要么换框架(可能成本很高)。这个"框架天花板"是所有框架用户的共同体验。

低代码/无代码:可视化的"填空"

框架之后是低代码和无代码平台。它们把"填空"这件事从代码编辑器拖到了可视化界面上。

你在低代码平台上做的事情,本质上仍然是"配置和组装"——拖一个按钮组件放到页面中间,在属性面板里设置它的颜色和文字,在逻辑面板里配置它点击后的行为。这些操作和你写 HTML/CSS/JavaScript 做的事情相同,但完全不需要碰代码。

低代码的意义不在于它比写代码"强",而在于它让完全不懂代码的人也能完成 70% 的软件开发工作。它对非程序员友好,但对程序员来说,当你想做那 30% 的定制化需求时,很快就会碰到平台的天花板。

这个"天花板"是低代码平台最根本的问题:它们本质上是一个"封闭生态"。你在平台上构建的东西,受限于平台提供的能力。比如你用的低代码平台不支持自定义的数据库查询,你就无法实现"按用户的最近活动时间排序"这样的功能——不是因为技术上做不到,而是因为平台没有开放这个接口给你。

Vibe Coding 和低代码的区别,就在这里变得清晰。低代码给你一个"有限的操作界面",你只能在它预设的组件和能力范围内操作。Vibe Coding 给你一个"无限的对话界面"——你可以通过自然语言要求 AI 做任何事,只要 AI 模型能理解并实现。低代码的边界是平台的功能列表,Vibe Coding 的边界是 AI 的能力上限——两者目前都有限制,但后者的边界在快速扩展,而前者的每一次扩展都需要平台方发布新版本。

云原生:运维层面的"抽象更上一层"

几乎在同一时期,云计算和云原生技术在做类似的事——但不是在开发层面,而是在运维层面。

传统的服务器部署意味着你要自己买机器、装系统、配置网络、处理备份。云服务(AWS、Vercel、Supabase)把这一切都抽象掉了。你不需要知道服务器在哪,不需要配置 Nginx,不需要半夜爬起来处理数据库宕机。你提交代码,云平台帮你处理剩下的所有事。

云原生的演进也经历了几个阶段。第一阶段是 IaaS(基础设施即服务)——AWS EC2 让你在网页上点几下就能租一台虚拟服务器,但你还是需要自己配置和管理这台服务器。第二阶段是 PaaS(平台即服务)——Heroku 让 Git push 就能部署应用,你不需要管理服务器。第三阶段是 Serverless——Vercel Functions、Cloudflare Workers、AWS Lambda 让你连"这是一个服务器"的概念都不需要有,你的代码只是一个"函数",按需调用,按调用次数付费。

这跟 Vibe Coding 有什么关系?极大的关系。

Vibe Coding 的一个前提是"说出想法就能得到一个可用的产品"。如果部署这件事仍然需要你手动配服务器、设域名、搞 HTTPS,那这个前提就不成立。云原生服务提供了"部署层"的抽象,让"一句话上线"从一个营销口号变成了真实的工作流。

想象一下 Vibe Coding 的工作流:你在编辑器里和 AI 对话,AI 生成了完整的应用代码。你说"帮我部署到线上",AI 调用 Vercel 或 Cloudflare 的 API,把你的应用发布到一个公开 URL。整个过程中,你不需要知道 DNS 怎么配置、CDN 怎么加速、数据库连接池怎么设置——云平台替你处理了这些。

三股力量的合流

框架、低代码和云原生不是三条独立的路径——它们在同一个大方向上汇合。

回顾一下它们在做的事情:

这三个方向的抽象加在一起,恰好覆盖了"从想法到上线"的全部链路。它们各自独立发展了几十年,在 Vibe Coding 时代第一次被完整地串联起来。

Vibe Coding 站在这个合流的终点:你负责"说",AI 负责"写代码"(框架替你解决了 80% 的重复编码),云平台负责"部署"(云原生替你解决了 80% 的运维工作)。一句话从"想法"到"上线"之间的所有中间层,全部由抽象层自动完成。

但这也有一个代价。这些抽象层叠在一起,你在遇到问题时要排查的问题也更难了。当你的应用部署后运行出错了,问题可能出在 AI 生成的代码里,也可能出在 AI 选的框架配置上,还可能出在云平台的网络配置中。你能做的排查手段有限,因为大部分细节你并没有亲自控制过。

这和 3.1 节提到的"抽象的成本"是同一个道理——每一层抽象都在便利性和控制力之间做交换。Vibe Coding 时代的开发者不需要深入了解每一层的细节,但至少要知道"这些层存在"以及"出了问题应该找哪一层"。

框架/低代码/云原生的共同遗产

这三种技术有一个共同点:它们都在试图把某些编程工作标准化,让你不需要重复发明轮子。

但请注意,它们各自也都有一个天花板:当你的需求超出框架/平台/服务提供商预设的边界时,你就会撞上限制。Vibe Coding 的不同之处在于——它的"能力上限"不是由某个框架或平台决定的,而是由 AI 模型的推理能力决定的。而模型的推理能力每个月都在快速增长。

🖼
图3-3:框架、低代码、云原生三股力量合流
▲ 图3-3:框架抽象了"写"的重复部分,低代码抽象了"界面的"重复部分,云原生抽象了"跑"的重复部分。三者合流,覆盖了从"想法"到"上线"的完整链路。Vibe Coding 站在这个合流的交汇点上。
本节要点
Vibe 练习

问 AI:

"我想用 Next.js 做一个简单的博客网站,支持 Markdown 写作和标签分类。请告诉我我应该用哪些框架和库,以及为什么选它们。我不需要你写代码,只需要帮我在 5 分钟内完成技术选型。"

拿到回答后追问一句:

"如果我不想用框架,纯粹用原生 Node.js 来实现同样的功能,需要多花多少时间?"

这个追问能帮你理解"框架替你做了什么"——这是判断"什么时候该用框架、什么时候不该用"的基础。学会在"用框架省时间"和"不用框架保控制力"之间做选择,是 Vibe Coding 时代的开发者基本功之一。