Wasp(Web 应用程序规范)是一个类似 Rails 的框架,用于 React、Node.js 和 Prisma。该开源框架,旨在通过 React、Node.js 和 Prisma 简化全栈 Web 应用程序的开发,它通过为 JavaScript 开发人员提供类似 Rails 的体验而受到关注。
该框架使用简单的配置文件(.wasp)来描述高级应用程序细节,结合在熟悉的框架如 React 和 Prisma 中编写独特逻辑的能力,使其成为开发人员快速原型设计和部署 Web 应用程序的优选项。
Wasp 最引人注目的一个方面是其编译器,使用 Haskell 构建,从.wasp 文件生成前端、后端和部署的完整源代码。这种“智能”方法使开发人员能够专注于编写业务逻辑而不是样板代码,具有内置的全栈身份验证、简单部署和全栈类型安全等功能。
而关于 Wasp 的故事要从 7 年前说起。
2020 年,Wasp 的两位创建者第一次在这个社区发布项目帖子时,他们还没想好自己到底要做什么,刚刚,这个项目在 GitHub 上斩获了 1.5 万 star,并且得到了众多个人创业者、初创公司和财富五百强企业的广泛应用。
该项目已经在 Discord 中汇聚了约四千名开发者,而如今的 Wasp 尚处于 Beta 测试阶段。
为什么要做这样一个项目?这要从 7 年前两位创始人遇到的难题说起。
Wasp 这两位创始人是:Matija Sosic 和 Martin Sosic,他们不仅是双胞胎兄弟,还是技术上的强力搭档。
Matija 拥有计算机科学硕士学位,也是一名软件工程师,拥有丰富的软件开发经验,他擅长干净代码、函数式编程和 Web 开发,热衷于组建团队打造实用产品。
Matija 的职业经历丰富:2020 年以前,曾在 Lifebit Biotech 担任工程团队负责人,带领团队解决技术难题,推动生物技术与软件开发融合项目的进展。2017 年,加入 Techstars Tech Associate(伦敦)团队,参与跨国项目,积累国际合作经验。他也曾担任 TalkBook 的首席执行官兼联合创始人,凭借敏锐市场洞察力,带领团队推出创新产品,促进公司业务增长。
Matija Sosic
Martin 则在算法和系统设计方面有着深厚的背景。他对开发产品、开源、函数式编程、Web 开发以及干净代码满怀热忱。曾作为算法竞赛选手,在逻辑与编程能力上崭露头角。他曾在谷歌、Palantir 等企业实习,并在 Lifebit.ai 的工程团队负责人。
Martin Sosic
2018 年
,在为一家位于伦敦的初创公司开发用于在云端运行生物信息学分析的网络平台时,Matija 和 Martin 萌生了创建 Wasp 的初步想法。
当时,他们要使用最新最热门的堆栈从头开始创建全栈应用程序。于是他们选择了 React/Node.js;对于以前的项目,他们通常会在后端使用 PHP/Java/Node.js,在前端使用了 jQuery/Backbone/Angular。因为兄弟二人花了很多时间重新学习如何使用最新的堆栈,只是为了重新构建相同的功能(身份验证、CRUD、表单、异步作业等)。
所以当时两人就有这样的疑问:“为什么不使用与堆栈无关的高级语言(例如 SQL 对数据库所做的那样)抽象这些常见功能,以便永远不再重新实现它们?”
所以在构建 Wasp 之前,他们充分地调研了项目的可行性。
Matija 表示:“在之前的创业公司中,我们发现与用户交谈非常有帮助,所以我们决定在 Wasp 中再次这样做”。
于是兄弟二人在大约一个月的时间里,进行了 25 次问题调研,探讨“用户在 Web 应用开发中面临的最大挑战是什么?”汇总结果后,他们确定了以下四个问题最为重要,并决定在 v1 版本中重点关注它们:
-
快速启动一个新的 Web 应用程序并确保遵循最佳实践是很困难的。
-
在管理前端、后端和数据库的状态时存在大量重复 / 样板。
-
每个新应用程序都会重新实现许多常见功能。
-
开发人员因日益复杂的工具而不知所措,不想负责管理它。
他们还根据主题对得到的答案进行了聚类,以便能够更深入地研究并确定最受关注的领域:
受访者遇到的有关启动和设置新网络应用程序的问题。
在与其他开发人员确认并澄清了问题后,兄弟二人觉得终于应该开始编写代码了。
2019 年年初
,兄弟二人在 GitHub 上创建了一个新的 repo,并开始设置工具并尝试这个概念。
在接下来的几个月里,他们将 Wasp 视为一个附带项目 / 实验,没有进行任何营销。但是,他们非常清楚外部反馈的重要性。因此,在构建了一个非常基本的代码生成功能后,他们还创建了一个项目页面,可以与其他人分享,以解释他们正在做的事情并征求反馈。
这是 Wasp 的第一个页面,虽然它没有很好地解释 Wasp 的作用。
那时,他们为 Wasp 想出了第一个“真正”的名字 - STIC:规范到实现编译器,因为 Wasp 的远大愿景是成为一种与堆栈无关的规范语言,让人们可以从中生成实际的代码,例如 React 和 Node.js 甚至其他一些堆栈。
他们分发 STIC 项目页面的首选方式是通过相关的 subreddits - r/webdev、r/coding、r/javascript、r/Haskell、r/ProgrammingLanguages 等。
这是他们发布的第一篇有关 Wasp 的 Reddit 帖子:
但他们很快了解到的一件重要的事情是,Reddit 不喜欢任何形式的宣传和推销。有时,即使兄弟俩认为当时他们只是在征求反馈,而非推销。继 Reddit 之后,他们又在 Hacker News 上发布了产品。
Martin 和 Matija 还跟进了他们之前采访过的人,询问他们在 Web 开发方面遇到的问题。兄弟二人向这些受访者展示了 STIC 项目页面并征求意见。从他们收集到的所有反馈中,两人发现了以下问题:
-
开发人员不熟悉“DSL”这个术语。我们几乎每天都会使用 DSL(例如 SQL、HCL(Terraform)、HTML),但它不是一个流行的术语。
-
开发人员害怕学习一门新的编程语言。虽然 Wasp 的目标从来不是取代 Java 或 Typescript,而是让 Wasp 与之协同工作,但兄弟二人未能很好地传达这一点。他们的信息让开发人员觉得,如果他们想使用 Wasp,他们必须放弃所有以前的知识,从头开始。
-
没有人可以尝试 Wasp + 除了项目页面之外没有任何文档。尽管 Wasp 的代码是公开的,但目前除了项目页面外,几乎没有其他文档。此外,他们尚未建立构建和分发系统,这意味着只有经验丰富的 Haskell 开发人员才能从源代码构建它。这种情况使得开发人员难以理解其高层愿景,因为他们缺乏足够的资源和支持。Web 框架和语言通常需要实际体验才能判断其优劣,但由于缺乏可尝试的版本,开发人员很难评估 Wasp 的实际效果。
在处理完这些反馈后,兄弟俩意识到下一步要让 Wasp 达到这样的状态:开发人员可以轻松试用它,而无需任何额外的知识或面对从源代码编译的麻烦。这意味着要稍微完善一下,添加一些关键功能,并编写我们的第一个文档,以便用户知道如何使用它。
他们当时的宗旨是专注于一件事,要么开发,要么社区。由于 Wasp 团队只有兄弟两人,所以很难同时做多件事。文档发布后,Wasp 已准备好轻松下载,他们将此版本称为“Alpha”,并再次切换到“社区”模式。
像很多初创企业一样,Wasp 团队一心搞研发之际,也遇上了创业路上的第一道坎——资金短缺。
2020 年 5 月
,在第一次资金申请被拒绝后,Wasp 团队第二次向知名创业孵化器 Y Combinator(YC)提交了申请。然而,他们收到了 YC 合伙人 Harj Taggar 的回复,表示 YC 决定不资助 Wasp 这一批次的申请。Harj 在邮件中肯定了团队成员的编程能力,并指出他们致力于简化 Web 应用开发的目标是有价值的。然而,YC 认为 Wasp 所提出的领域——为 Web 应用开发创建领域特定语言(DSL)——是一个许多程序员都曾尝试解决的难题,因此决定不予以资助。
这一决定对 Wasp 团队来说无疑是一个打击。当时,他们已经在 Wasp 项目上投入了一年半的时间,其中最后 9 个月更是全职开发。为了追求这个梦想,团队的两兄弟辞去了之前的工作,全身心投入到项目中。到了这个阶段,他们在心理、生理和经济上都已感到精疲力竭。
尽管如此,Wasp 团队并没有放弃。与此同时,他们也更冷静地同时重新审视最初的决定——为什么要创建这样一款开源项目?
Matija 和 Martin 在回忆这段旅程时表示:“刚开始,Wasp 只是我们的一个念头——或者更确切地讲,是一个现实问题:‘为什么还没人做过?如果动手试试,我们会遇到哪些挑战?’在经历了十年之间持续开发 Web 应用程序,并使用各类主要技术栈(包括服务器端的 PHP、Java 和 Node.js,再到客户端这边的 Backbone、Angular 和 React)之后,我们对于‘框架疲劳’可谓深有体会。换言之,每种新技术栈都在重新发明轮子。”
于是他们开始思考这个问题,并把需要解决的问题记录下来。
他们再次坚定了 Wasp 项目立足的根源——要创建一套框架,通过提供更高级别的抽象来消除大量样板,同时保持足够的灵活度,避免其与特定技术栈和架构牢牢绑定。
既然目标已经十分明确,接下来就是一步一步坚定地走下去。与大多数成功故事一样,一个优秀项目的诞生往往并非线性推进。它的开端往往经经历漫长的“沉寂”,但偶尔也会出现希望。