正文
除了将功能打包成预置的模块外,还有一个很有意思的方向是将预置功能打包成库,供开发者通过极其简单的方式调用,比如 autocode 就在其 stdlib 中集成了很多第三方 SAAS 服务的 API,通过简单的 javascript 调用暴露给用户。下图展示了如何使用它来构建一个 webhook,向 slack 发送消息:
autocode 的这一思想我也实践过。今年年中的时候,我对 deno 比较着迷,试图通过 Rust 构建一系列 javascript API 提供给 deno,让用户的 javascript 代码可以通过简单的 API 访问 KV / document DB(基于 DynamoDB),文件系统(基于 s3),以及一系列 cloud API(比如 github API)。通过这种方式,用户代码基本上就是简单的胶水代码,而复杂的逻辑都被预置的库封装好了。
预置的规则和行为
在预置的功能之上,可以进一步为用户抽象出预置的功能和行为。以 clickUp 为例,当数据发生变化时,你可以从一系列预置的触发器(trigger)选择想要的触发条件,然后再选择相应的行为(action)。这种预置的规则和行为对工作流处理尤为方便,让原本需要代码处理的逻辑转化成简单的配置:
在这一点上,retool 提供了极其精细的控制 —— 比如你可以对一个表格的 row selection 事件提供相应的行为:
以上三种主要的手段帮助应用程序开发者减轻了从界面到功能,再到可复用的工作流和事件处理的工作。对于简单的应用来说,开发效率的确可以得到大幅的提升。更重要的是,开发者要阅读和维护的代码量大大减少,从而进一步降低了引用的 TCO。
AI 辅助开发
除了上述三种降低门槛的手段外,目前大热的 AI 辅助开发也许会是 LCNC 的终极解决方案。我自身是 github copilot 的深度用户 —— 近半年来我个人项目中 70% 以上的单元测试代码都是 Copilot 帮我完成的, 它大大提高了我开发的效率,使得我在不必花费太多额外时间的前提下,可以为自己开源的诸多项目提供不错的测试覆盖率。虽然 Copilot 帮我完成的代码有时还是有荒谬绝伦的错误,但大部分时候,它能够很好地领会了我的意图。而最近一个月爆红的 ChatGPT 更是把 AI 辅助开发的潜力提升到了一个新的高度。所以我觉得,从提升生产率的角度,AI 辅助开发未来在 LCNC 领域会扮演终结者的角色。虽然现在还没有 LCNC 厂商发布 AI 辅助开发的版本(可能我比较孤陋寡闻),但我相信,前面那张 LCNC 生态图中的大小公司们,都已经在它们内部迭代的产品中试图增加 AI 辅助开发:用户只需通过文字描述其对要开发的产品的想法,AI 可以生成若干个满足这一想法的产品供用户选择,最终用户仅仅需要微调就可以得到自己心仪的产品。如果这个愿景可以实现,那么这也许就是软件开发终极的生产力提升的手段!也许,我们有幸在未来的五到十年见证到人人都能开发和维护自己的应用程序的盛况,就像二十年前互联网走进千家万户,让上网冲浪,获取信息不再是象牙塔和少部分人的专利那样。
我对低代码开发平台的浅见
出于职业习惯,我对不少低代码平台都做了一些肤浅的尝试。它们在各自的细分领域都有不俗的表现,但没有特别让我眼前一亮的通用开发平台。如果我要开发一个 SAAS 服务,一个提供某个特定功能的 Web 应用(比如为开源的 excalidraw 增加 s3 存储能力),或者一个超出 CRUD 范畴的内部系统,目前的 LCNC 平台似乎都不能很好地满足我的需求。
另外,从纯程序员用户的角度,我希望 LCNC 平台支持其应用可以在生命周期内不断迭代。毕竟,开发一款软件产品只是万里长征走完了第一步,后续的随需而变,不断进化才是产品生命力的体现。这就意味着:
-
LCNC 平台需要为应用提供不同的环境(起码有 dev / staging / prod)的支持。应用可以在 dev 环境下随心所欲地开发更改,但要严控 prod 环境下的稳定性,可用性和兼容性。
-
应用「代码」具备版本控制的能力,最好是支持 git。此外,应用的测试,CI/CD 该如何处理,需要深入思考。毕竟,一款严肃的应用离不开这些基本的开发流程的支持。
-
应用要具备可观测性。即便是公司的内部系统,我们也需要知道其性能如何,是否有页面或者组件出现问题,也需要有足够的 audit trail 来了解访问情况。
-
应用可以对外提供程序接口,或者抛出事件,让应用之外的世界可以与之联动。我觉得随着 LCNC 思想的深入,这是个水到渠成的需求。毕竟,一个应用不该仅仅满足于获取数据,处理数据和展示数据,还需要有能力让自己成为一个中转站或者中间人,为别的应用服务。