Instant (YC S22) 招聘创始 TypeScript 工程师
instant
instant
PricingExamplesEssaysDocs
Discord
GitHubLogin
Sign up
创始 TypeScript 工程师
Instant 是一个可以在前端使用的实时数据库。我们为您提供 Firebase 和 Supabase 的最佳特性,一个支持关系的同步引擎。这是一种像 Figma、Notion 和 Linear 这样的公司在内部构建,用来驱动其产品的技术 (试用 demo)
我们正在寻找一位创始 TypeScript 工程师加入我们在旧金山的 4 人团队。如果您:
- 对类型人体工程学(甚至包括类型在智能感知中的显示方式)非常痴迷
- 享受构建人们会花费数小时使用的 UI
- 想要构建一个同步引擎,以支持下一个 Figma 或 Notion
那么我们想和您聊聊!那么,为什么是这三点?让我们解释一下:
1. 您对类型人体工程学非常痴迷
在库中使用 TypeScript 的好处之一是可以为用户提供优秀的开发者体验。类型不仅仅可以捕获拼写错误,它们还是一个工具。它们能提供自动完成和良好的反馈;在合适的时机出现,它们可以让人心情愉悦。我们不仅仅想构建一个优秀的数据库,我们还想让人们喜欢使用它。
Instant 是 typed。这需要一些严肃的 type fu,但最终用户可以获得自动完成和类型安全。而现在,这些类型只是一个初步版本。以下是一些未来的计划:
类型化的 where 子句
想象一下,您正在构建一个类似 goodreads 的应用。您想要编写一个如下的查询:给我书架中包含 "基督山伯爵" 的个人资料。在 Instant 中,它会看起来像这样:
{
profiles:{
$:{where:{"bookshelves.books.title":"Count of Monte Cristo"}},
}
};
通过它,您可以获得这些个人资料。但是 bookshelves.books.title
的类型太宽泛了:允许任何字符串。这意味着用户可能会出现拼写错误,或者忘记 profiles
上存在哪些关系。
但是,我们已经可以访问 schema 了。我们_可以_对 where 子句进行类型化。这样,当用户开始编写 "booksh" 时,我们可以使用 profiles
上存在的所有关系进行自动完成!
这很棘手(在查询中可以做 很多事情),但这对用户来说是一个巨大的好处。
改进智能感知
或者说说 schemas:当您将鼠标悬停在一个 schema 上时,您将在 TypeScript 中看到以下内容:
const schema: InstantSchemaDef<EntitiesWithLinks<{
profiles: EntityDef<{
name: DataAttrDef<string,true>;
},{},void>;
bookshelves: EntityDef<{
title: DataAttrDef<string,true>;
},{},void>;
},{
...;
}>, LinksDef<...>, RoomsDef>
现在,复杂的类型在智能感知中可能看起来非常令人生畏。一些复杂性是不可避免的,但是可以做_很多_事情来改进它。例如,悬停显示中真的需要包含 EntitiesWithLinks
、EntityDef
、DataAttrDef
吗?
有些人可能认为不值得为智能感知输出而烦恼。但是您知道这会区分最好的库。优秀的类型会带来巨大的好处。
性能、实用类型...
等等。我们想为类型输出添加更多测试(我们正在考虑的一个项目是编写一个测试 智能感知 输出的库)。我们想编写基准测试,以了解类型在更大的代码库中的性能如何。我们想改进您定义 schema 和编写事务的方式。我们想添加更多实用类型,以便用户可以在 Instant 之上构建自己的库。
2. 您享受构建人们会花费数小时使用的 UI
如今,Instant 附带一个 CLI 工具 和一个 Dashboard。
由于 Instant 是我们用户基础设施的核心部分,他们最终每天花费数小时与之交互。我们有责任使他们的体验尽可能愉快。UI 在这里发挥着真正的作用。人们可能不会有意识地注意到它,但是每个细节都会累积起来。有很多工作要做:
CLI 中的迁移
目前,您可以使用 CLI 推送您的 schema,但是我们不支持任何破坏性操作。您可以添加一列,但是无法删除它(您可以手动执行此操作)。我们推迟了在 CLI 中进行破坏性操作,因为我们想制作正确的 UX:一种感觉自然,但又不会让您自食其果的体验。您可以帮助设计和实现它吗?也许是时候添加迁移,或者从 terraform 中获取灵感了。
更好的 Sandbox
在 dashboard 中,我们有一个 sandbox,可让您运行查询和事务:
您可以试运行事务,进行查询,并查看您的权限如何工作。用户在这个工具中花费数小时。但是这里缺少很多东西。例如,您可以保存代码片段,或者拥有对 sandbox 所做更改的历史记录吗?
更好的 Explorer
或者看一下 Explorer。它使您能够以可视化方式查询和更改数据。这通常取代了用户需要为管理面板编写的自定义代码。您已经可以进行查询、创建行、链接对象和上传文件:
但这仅仅是开始。用户还用管理面板做什么,我们如何直接提供给他们?我们想创建一个与 Airtable 相同级别的编辑体验,在他们开始构建应用程序之前,每个开发人员都可以使用。
Rules, Examples...
还有更多。我们想改进我们的 permissions 语言,并使其更易于内省。我们的 examples 页面显示了您可以使用 Instant 的几种方法,但是如果它有数百个示例并且可以搜索呢?这个列表还在继续!
3. 您想构建一个同步引擎,以支持下一个 Figma 或 Notion
Instant 的客户端 SDK 实现了同步引擎:
在 SDK 内部,有一个客户端数据库,可以像服务器一样运行查询。客户端 DB 使 Instant 能够脱机工作,并开箱即用地获得乐观更新。它充满了让计算机科学教科书变得生动的问题:
- 更好的 joins: 客户端运行一个 nested loop 来实现 joins。但是,随着我们增加缓存量,nested loops 可能会成为一个问题。也许是时候添加 hash joins 了!
- 更好的 indexes: 我们使用一个 map of maps 作为我们的 indexes。这可以工作,但是比较查询的效率会低于应有的水平。也许是时候考虑编写一个 OrderedSet 了
- 更好的 introspection: 我们构建了一个 state machine 来管理不同事件如何交互:websocket 更新、连接更改、客户端/服务器更改。但是它非常复杂且难以推理。我们能让观察事件和重放它们更容易吗?也许我们可以研究 actor model 或 structured concurrency 来获取灵感。
- 更好的 local storage: 我们将 IndexedDB 视为键值存储,并序列化大块状态。我们可以改为序列化成较小的块吗?
- 更少的 re-renders: 目前,查询可以更改超出需要的范围。我们希望每次更新都更加精细,以便用户减少 re-renders。
如果我们做对了,我们就有机会构建一个既_简单_又可扩展到像 Figma 或 Notion 这样的应用程序的复杂性的抽象 —— 您可以使用它快速构建任何应用程序。
题外话:后端
客户端 SDK 与用 Clojure 和 Postgres 编写的后端通信。有时,您最终可能会接触 Clojure。我们不希望您成为 Clojure 专家,但是如果您也对破解该语言感到兴奋,我们将很高兴让您加入。
关于我们
您可能会对自己说...这是很多职责。从 TypeScript 类型、到客户端数据库、再到 UI。
我们希望这能像我们一样让您感到兴奋:很多难题是我们喜欢在 Instant 上工作的原因之一。
我们是一个 4 人的团队。我们中的三个人在旧金山(Daniel、Joe、Stopa),我们中的一个人在柏林(Niki)。Joe 和 Stopa(创始人)已经认识 10 多年了,并在 Facebook 和 Airbnb 合作过。Daniel(第一位工程师)和 Stopa 曾在 Wit.ai 和 Facebook 合作过,并且是 10 年的朋友。Niki 发布了 datascript,并撰写了最早的 essays 之一,关于 Instant 想要支持的 web 应用程序类型。
我们喜欢一起工作。我们的目标是与我们将成为一生的朋友的人一起工作。我们热爱那些热爱自己所做的事情,具有高度正直、乐观和以原则为导向的黑客。在内部,我们有一种黑客心态 —— 我们快速构建、我们彼此友善,并且坚定地致力于让我们的用户满意。
更多信息
- 地点:我们位于加利福尼亚州旧金山!
- 仅限 In-person 或开放搬迁:我们是一个小团队,我们确实更喜欢所有人一起工作!
- 薪酬:介于 0.5%-2% 的股权和 15 万至 20 万美元的基本工资 + 医疗/牙科/视力福利之间的滑动比例
申请
如果您已经读到这里并且感到兴奋,我们真的应该谈谈🙂。向我们发送一封电子邮件:founders@instantdb.com,其中包含一些关于您自己的信息,以及您从事过的项目。如果您构建过 TypeScript 库,那将是一个很大的优势,但不是必需的。
Instant Engineered in San Francisco ExamplesEssaysDocsDiscordGitHubPrivacy PolicyTermsLogin Signup