沐鸣娱乐


        低代码,要怎么低?和低代码有关的十大问题(低代码用什么语言)

        或许是因为 Mendix 和 Outsystems 的收购及融资,还有 Gartner/Forrester 的鼓吹(Gartner 甚至预测 4 年后低代码开发会占应用开发的 65% 以上,你敢信?),这两年低代码忽然开始受到关注,不少公司在开发这方面的产品 ,jabdp平台就是这样的一种低代码开发平台。本文将谈谈我对低代码的理解,尝试回答这个 10 问题 :

        1. 低代码是什么?
        2. 之前是否有低代码平台?它们是怎么做的?
        3. 低代码究竟能解决什么问题 ?
        4. 低代码平台适合用在什么地方?
        5. 低代码平台会带来什么新问题 ?
        6. 低代码平台的难点在哪?
        7. 前端如何低代码 ?
        8. 后端如何低代码?
        9. 低代码平台是否会大量取代研发?
        10. 未来会怎样?

        低代码是什么?

        维基百科的说法,低代码这个称呼是 Forrester 在 2014 年提出的 ,指那些用可视化方式创建应用的平台,特点是代码量比传统开发少得多,甚至无代码,所以能显著提升开发效率。

        这个定义比较模糊,使得低代码平台有各种各样的形式,我见到的就有以下几种:

        1. 在线 IDE 和编辑器,界面方面虽然有可视化设计 ,但需要二次开发才能用。
        2. 提供一站式开发平台,提供了持续集成、部署和运维等功能,包含开发全流程。
        3. 简化前端开发,界面方面可以做到不用写 JavaScript 。
        4. 简化后端开发,可以在线设计数据结构,并实现增删改查功能。
        5. 彻底简化前后端开发,甚至变成无代码平台 ,什么都可视化编辑 ,易用性好 ,但牺牲了灵活性,这里面有很多子分类,比如 BPM 、OA 系统、APP 开发等。
        6. 围绕某个成熟产品扩展功能 ,比如 CRM 、ERP 之类的产品,为了满足定制需求,提供定制开发功能。

        为什么会有那么多种形式?在我看来主要和团队定位有关,有个「康威定律」是这么说的 :

        "设计系统的架构受制于产生这些设计的组织的沟通结构 。" ——M. Conway

        比如公司内有两个独立的小组,那整个系统设计肯定会划分出两个独立的模块 ,相互之间有明确的界限,这也影响了对于低代码平台实现方式的选择。

        如果是前端团队 ,一般会选第 1 种形式,很少考虑第 3 种,因为团队成员都会 JavaScript ,没必要弄个不用写 JavaScript 的产品 ,更不会考虑第 4 种,因为不负责后端开发。

        如果后端的团队,就会选择第 4 种,因为只负责后端开发。

        如果是大公司内的工程团队,因为职责是负责开发环境,所以会选择第 2 种形式,但这种形式一般有很多定制功能,并且依赖公司内部基础设施,导致只能在内部使用。

        如果是创业公司,往往会选择第 5 种形式,面向外部当然是前后端都封装起来更简单,但可能过于追求「无代码」,导致虽然用起来简单 ,却失去了灵活性,只适合简单应用 。

        如果公司本身有成熟产品了 ,自然是选择第 6 种方式,围绕这个产品来扩展更有优势 。

        因此下次在了解一款低代码产品前 ,先了解它背后是什么团队 ,擅长做什么,团队背景将在很大程度上决定这款产品的侧重点 。

        之前是否有低代码平台 ?它们是怎么做的?

        在低代码这个名词出现前早就有各种提升开发应用效率的产品了 ,比如我知道最早的是 FileMaker,它在 1985 年就出现了 ,发展历史几乎和这几十年的计算机技术同步,最早是 DOS 下的程序,苹果推出 GUI 操作系统 Macintosh 之后改成了 GUI 程序,在 2010 年移动时代推出了手机版的 FileMaker Go,然后在 2016 年推出了云上版本 FileMaker Cloud,最新版本又加入了人工智能。

        FileMaker 最初定位是个数据库,但它在数据库的基础上扩展了应用开发功能,使得可以基于它开发应用 ,比如下图是用它编辑应用界面的例子 :

        低代码,要怎么低?和低代码有关的十大问题(低代码用什么语言)

        FileMaker

        类似的还有 Microsoft Access,也是非常古老的软件 ,1992 年就发布了 :

        低代码,要怎么低?和低代码有关的十大问题(低代码用什么语言)

        Access

        Oracle 在 2004 年也搞过一个叫 APEX 的东西 ,基于向导的方式生成几种固定模板页面,虽然灵活性差但用起来简单,最近也改叫低代码了。

        低代码,要怎么低?和低代码有关的十大问题(低代码用什么语言)

        Oracle APEX

        另外就是Visual Basic 6.0,1998 年发布的,功能比现在的许多低代码平台都强。

        低代码,要怎么低?和低代码有关的十大问题(低代码用什么语言)

        还有著名的 SaaS 软件 Salesforce,十几年前就可以扩展字段来扩展功能,可以看到界面还是 web 1.0 时代的风格  :

        低代码,要怎么低?和低代码有关的十大问题(低代码用什么语言)

        Salesforce

        另外还有很多商业产品 ,它们几乎都有十年以上的历史,最近才改叫低代码平台 。

        低代码究竟能解决什么问题?

        对于这个问题,有两种极端,专业开发者会认为低代码平台是个玩具,没什么用,而小白又以为有了这个完全不懂写代码也能开发应用,但这两种想法都不太正确 。

        要回答这个问题,首先按《人月神话》里的说法将软件开发进行分类:

        所有软件活动包括 :

        根本任务–打造构成抽象软件实体的复杂概念结构。

        次要任务–使用编程语言表达这些抽象实体,在空间和时间限制内将它们映射成机器语言。

        这个分类最早出现在 1986 年作者的论文里,年代久远可能看过的人不多 ,这里多说两句,「根本任务」指什么 ?举个例子,比如要实现一款发工资的软件 ,里面涉及到如何计算所得税 ,那就得实现个人所得税的计算方法 ,用什么语言实现这个算法属于「次要任务」,而这个算法本身属于「根本任务」,无论用什么方式实现,你都不可能降低这个算法复杂度,比如个人所得税有 7 个层级 ,那就一定在某个地方有 7 个 if 语句。

        「根本任务」无法解决,因为它就是需求本身,唯一解决办法是砍需求。

        低代码平台主要解决的是「次要任务」,用更简化的方式来实现同样的功能 ,比如前面那个问题,在低代码平台中常见有这几种做法:

        1. 提供一种简化的 DSL,类似 Excel 里的公式。
        2. 提供图形化代码编辑器,类似 Unreal Engine 里的「蓝图」,或者类似 Blockly/Scratch 那种拼图的方式。
        3. 支持写代码或外部 api 来扩展。
        4. 平台内置实现,比如前面提到的个人所得税,平台可以内置一个专门算这个的函数。

        其中 DSL 的方式只适合简单场景 ,因为 DSL 一般不具备复杂的逻辑控制、定义函数等功能,DSL 中要加入这些功能还不如直接用成熟的语言 ,比如 JavaScript/Lua。

        很多低代码平台使用的是第 2 种方式 ,这种方式看起来最符合低代码平台的定义,也看起来最高大上,以 UE4 里的蓝图为例,这是我见过最复杂的可视化代码编辑器 ,可以用它来编写着色器和控制游戏流程:

        低代码,要怎么低?和低代码有关的十大问题(低代码用什么语言)

        根据 Epic 国内社区经理的说法,蓝图在实际开发中用得更多,我的个人体会是这种编辑器有以下几个好处 :

        1. 方便预览 ,尤其是写着色器时可以马上看到每个节点的输出,这点比代码有明显优势。
        2. 解决了编程环境问题 ,不需要花时间配置环境。
        3. 节点会列出参数和属性,这样就不需要像写代码那样查手册了,直接点选就可以修改 。
        4. 调试能实时生效 ,比如拖动某个数值马上能看效果 。
        5. 不容易犯错,比如需要符合类型才能连线 ,因为整个环境是可控的 ,在很多细节上可以比代码报错跟友好。
        6. 最重要的是:蓝图比 C 简单得多 ,也不像 C 那样需要多年经验 ,因此对人员的要求更低 ,更容易招到人 。

        图形化编程在三维设计领域取得了不少成绩,比如 Blender、Grasshopper、Houdini、NUKE 、Substance Designer 等,通过节点编程的方式极大提升了灵活度 ,但这些都是针对特定领域优化,并不是通用编程方式。

        对于通用编程领域使用节点编辑器是否可行?《人月神话》里也提到过图形化编程,原文是这样说的:

        流程图是一种非常差劲的软件结构表达方式。实际上,它最好被视为是 Burks, von Neumann 和 Gold stine 试图为他们说设计的计算机提供一种当时迫切需要的高级控制语言。如今的流程图已经变得复杂了,一张图有若干页,有很多连接点,这种表现形式实在令人同情。流程图已经被证明是完全不必要的设计工具–程序员是在开发之后,而不是之前绘制描述程序的流程图。

        更加基本的是,如我们上面所讨论的,软件非常难以可视化。即使用图形表达出了流程图、变量范围嵌套情况、变量交叉引用、数据量和层次化数据结构等等 ,也只是表达了某个方面,就像盲人摸象一样。

        这本书里预言的是 10 年内不会有突破性进步,然而过了 34 年的今天也没见明显进步 ,1985 年 Raeder 在他的文章里告诉我们流程图最早是给汇编语言用的,因为汇编代码里都是跳来跳去的 ,看着容易晕,有这样的图可以看起来更清晰 :

        低代码,要怎么低?和低代码有关的十大问题(低代码用什么语言)

        但在高级语言下就不需要这个了,因为高级语言下的代码可读性和这张图是一样的 ,但在复杂业务逻辑下用图形连线会很乱,对于熟悉看代码的开发者来说效率反而降低了,后来在《人月神话》20 周年纪念版里增加了这样一句话 :

        流程图是被吹捧得最过分的一种程序文档。详细逐一记录的流程图是一件令人生厌的事情,而且高级语言的出现使它显得陈旧过时。

        所以这几种方法里我最倾向的是第 3 种,直接通过代码扩展功能,目前排名靠前的低代码平台都支持代码扩展,比如 Salesforce 和 ServiceNow,尤其是 ServiceNow 在前后端都使用 JavaScript,后端用到了 Rhino 引擎。

        如果需求很常见,可以选择第 4 种方法,有些低代码平台针对某个垂直领域做了优化,集成了许多这个行业常见的功能,在同一个行业中,一家公司要解决的「根本任务」 ,在另一家公司大概率也会遇到,因此使用这种低代码平台可以明显降低成本。比如淘宝可以算是电商行业的「低代码」平台 ,它把各种电商相关的功能都集成进去了,同时还提供了店铺装修功能实现个性化设计。

        低代码平台适合用在什么地方?

        什么样的应用适合使用低代码平台 ?目前看来最适合的场景是面向企业内部员工(B2E)的应用,也就是企业内部的各种系统及平台。

        虽然也有面向对外应用的低代码平台,比如创建移动 APP ,但这种只有小公司才会用 ,因为对外应用一般是公司主营业务 ,需要很高的自主可控性,而且定制需求多,对展现的要求也很高,没法复用低代码平台中的组件,只能通过自定义代码扩展,但如果大量使用代码扩展就还不如完全自己开发了。

        jabdp为例 ,常用的功能 ,例如表单列表的增删改查 ,只需简单的自定义和配置就能自动生成。复杂的业务功能,只需要会基本的sql语句和javascript语法,就能进行快速开发,满足其个性化的业务需求,设计出各种复杂的企业web应用 。既能快速提高开发效率 ,帮助公司节省人力成本,同时又有效解决企业级项目中常遇到的改需求的问题,不失灵活性。

        jabdp开发平台适合用于大部分的企业级web应用的开发,尤其适合企业信息管理系统(MIS)、企业资源计划系统(ERP)、客户关系管理系统(CRM),业务支撑系统(BSS)等。并且就一些经典的项目案例提取整合出各种类型的项目模板,共享给开发者参考,开发者可以在原有的项目基础上进行修改定制 ,以打造其个性化的企业信息化平台 。

        低代码平台会带来什么新问题 ?

        尽管低代码平台能明显提升效率,但它也会带来新的问题 ,比如扩展性、难以支持复杂场景 、性能等问题,但在我看来最大的问题是平台锁定 ,许多问题都是这点带来的:

        1. 平台使用自己内部独立的框架 ,需要额外的学习成本。
        2. 平台是个黑盒 ,不清楚内部如何实现 ,遇到 bug 、性能等问题只能求助官方。
        3. 如果有的需求不能满足,需要等平台的排期升级。
        4. 信息分布在各处,不像本地代码那样方便全局搜索,对于不熟悉的新人往往得在各个界面里找半天,而且是功能越强大的平台越难找。
        5. 不方便多人协作,有的平台只提供少量环境 ,难以做复杂的分支管理。
        6. 平台后续发展是个未知数,哪天倒闭了怎么办 ?Google 4 年前发布了一款低代码创建 APP 的产品 Google App Maker ,既能可视化创建界面 ,又能写 JavaScript 扩展功能,但它在今年 2 月份的时候宣布关闭 ,无法导出,用户只能自己重写一个,连 Google 的低代码平台都会关闭,其它小公司就更别说了  。

        低代码平台为什么做不到开放 ?在我看来主要是两个原因 :

        1. 技术上的矛盾,为了实现低代码就得隐藏很多不必要的细节,而这些细节有的依赖平台底层框架,有的依赖平台编辑器,这些都是低代码平台最核心的技术,没法开源。
        2. 商业上的矛盾 ,如果能方便导出 ,让使用者可以二次修改并部署到任意地方,低代码平台就变成离线开发工具了,只要一个帐号就能开发无数应用 ,不利于商业化,因此甚至有的低代码平台只提供 SaaS 版本,只能在线使用 。

        平台锁定这个问题在国内更严重 ,有种说法是古代中国属于大陆农业文明 ,农业文明的特点是强调自给自足,能不求人就不求人,这个长期影响很难改变,所以国内公司一变大就希望什么都自己掌握 ,信不过别人。

        目前国内只有一个封闭的开发平台取得了巨大成功,这个平台是微信小程序,相比原生 APP 开发 ,微信小程序的开发成本更低 ,而且还跨平台 ,所以其实也能算是低代码,微信小程序就是很封闭,只能运行在微信上 ,还得使用专门的框架和工具,连注册账号和发布应用都要人工审核 ,但依靠微信的影响力和用户量,这些都不是主要问题。

        在这个问题上 ,jabdp低代码平台已经实现了全部开源,https://gitee.com/jabdp/jabdp。

        低代码平台的难点在哪 ?

        在我看来低代码平台的难点是如何同时满足易用性和灵活性,因为它们经常是冲突的,以低代码平台中必备的可视化页面编辑器为例,要怎么实现页面布局?主要有三种做法 :

        1. 基于 flexbox/float 方式来布局,这种方式灵活性强,但牺牲了易用性 ,需要使用者至少懂点 css,不然弄不明白。
        2. 基于绝对定位来布局,这种方式易用性强 ,想拖哪就拖哪,但又失去了灵活性,要支持多分辨率就得手机和 PC 单独编辑,而且不好实现根据内容自动撑开高度。
        3. 提供水平/垂直分栏的容器,通过它们组合来实现各种布局,这种方式处于上面两者之间,灵活性和易用性都不突出,只适合用在移动端或后台类的页面 。

        除了布局,还有另一个问题是要不要支持自定义 class ?不支持的话灵活性差 ,改个字体所有地方都要配一遍 ,而支持又导致易用性差 ,不了解 css 的用户会发现改了一个地方影响到别的了,要想不一样还得新建一个 class,有理解上的成本。

        所以复杂灵活的可视化编辑器有可能吃力不讨好 ,那偏向易用性呢?有些低代码平台追求「零代码」,让普通人都能用起来,但这样会面临另一个意想不到的强大竞品:「Excel」,对于普通人来说 Excel 就是一个好用的数据库,可以添加数据、修改数据、查找数据 、排序过滤等 ,还能做图表 ,无需开发应用就能管理数据。

        前段时间在吴伯凡的课程里听到一个故事 ,原文是这样的:

        雷军很吃惊地发现,小米的整个管理系统 ,就是采购部门也就是供应链部门抱着一台电脑,生产部门抱着一台电脑,销售部门抱着一台电脑 ,电脑里都是Excel,三个部门打开以电脑后就对数字,这就是小米的流程管理 。

        同行知道这些事情以后不相信,认为这是天下奇闻。一个一年生产几千万台手机的公司 ,管理流程竟然是这样的,这种流程出问题也是很自然的。

        但从另一个角度看 ,这个故事却告诉我们 ,小米刚开始几年仅靠 Excel 就能生产几百万台手机,创造几百亿流水了 ,因此很多时候 Excel 就足够了,目前有些在线编辑的 Excel 平台,还出现了类似 Airtable 那样的新型 Excel,还有专门做漂亮表单的 Typeform 等,甚至连 Notion 这个文档工具都内置一个小数据库 ,这类产品在易用性上远好于各种零代码平台 。

        低代码,要怎么低?和低代码有关的十大问题(低代码用什么语言)

        前端如何低代码?

        前端开发的主要工作是界面、交互和业务逻辑,20 年前的 FrontPage 和 Dreamweaver 就实现了可视化编辑页面 ,但它们生成的代码远不如手写,后来随着前端重构的流行,开发者又回归到通过写代码来制作页面。

        现在可视化页面编辑器主要用于制作静态原型,或者官网及落地页 ,很少用在前后端交互比较多的页面中,因为动态数据难以在可视化编辑器里展示 ,比如 if xxx 的时候显示 yyy 要怎么显示呢?所以界面开发效率提升主要靠 UI 组件库 。

        前端 UI 组件库十几年前就有了,比如 YUI 是在 2006 年发布,jQuery UI、Ext JS 也紧跟着在 2007 年发布了,但这些组件库在产品线中用得不多 ,你想想百度搜索、贴吧、知道、百科的各个页面中,有哪些东西是通用的 ?能想到的恐怕只有轮播图 、弹出层、下拉菜单这几个 ,这些在整体开发中占比不高,即便都用上对整体效率提升也不明显 ,所以前面也提到低代码平台不适合用在面向用户的产品中 。

        但在企业应用中情况就不一样了 ,这些应用页面相似度更高 ,大部分是表格表单,而且更重视功能而不是个性化展现 ,因此更容易实现复用 。

        在企业应用里甚至可以简化成表格展现,第一列是时间,第二列是用户名 ,第三列是文本 ,虽然展现差了很多,功能却是一样的 。

        后端如何低代码?

        在后端方面 ,低代码平台主要能解决这几类问题:

        1. 系统开发通用性问题,比如
        • 登录、帐号/角色、权限管理
        • 页面路由和导航
        • 外部系统对接,有的还提供一种通用协议来连各种数据源
        1. 数据管理,增删改查
        2. 流程管理
        3. 开发及运行环境

        其中最常用的是增删改查,要如何实现 ?目前见到有这 3 种方式:

        1. 基于表单,优点是用起来简单 ,只需要设计好表单就可以用了 ,但缺点是灵活性要弱 ,难以支持复杂的关系。
        2. 基于数据模型 ,需要先定义数据模型,优点是灵活性强,但易用性又差了  ,非开发人员使用会有成本。
        3. 提供 BaaS 服务 ,比如开源的 Parse ,通过提供友好的 API 来实现用户管理、数据存取等功能,这种方式需要写后端代码 ,但灵活性高 。

        低代码是否会大量取代研发?

        不会 ,原因如下:

        1. 前面提到过低代码不适合开发面向客户(toC)的应用,在许多公司这部分才是最占人力的。
        2. 对于企业内部应用 ,低代码可以显著提升效率,但效率提升带来的不是人员减少,而是需求增多,很多之前中低优的项目终于排上了。
        3. 低代码平台解决不了「根本任务」,图形化编程只适合特定场景,用它来做控制流还不如写代码,因此依然需要研发。

        未来会怎样 ?

        我的个人判断是 :

        • 图形化编程只能在特定领域成功,目前看来主要是和音乐及图形相关的软件。
        • 面向普通用户的无代码平台发展会受限,很多时候还不如用「Excel」。
        • 对于成熟的垂直领域,购买软件是成本最低且效果最好的选择。
        • 低代码在国内和国外会有明显区别 ,国内更喜欢私有部署而不是 SaaS 版本,技术锁定将会是在国内推广时的最大障碍。
        • 低代码平台不适合用来开发面向客户的应用,以后也一样。

        好了,今天的文章分享到这就结束了,要是喜欢的朋友,请点个关注哦!–我是简搭(jabdp),我为自己“带盐”,感谢大家关注 。

        相关新闻

        联系我们
        联系我们
        分享本页
        返回顶部

          XML地图