俺这个才是低代码

所谓低代码,直观来讲,就是让代码写起来更简单容易。完成同样的任务时,代码量(也就可以理解为工作量)会比其它技术更少;另外,还有个重要指标是要对开发人员的要求足够低,如果都要 N 年经验的高手来写,即使能写得短小也很难达到降低成本提高效率的目的。

谈论低代码时,首先得有一种代码,看看这种代码是不是比其它代码更低一点。彻底没有代码纯靠可视化模板配置的开发模式,要么过于简单远远做不到足够的灵活性,要么会复杂到还不如写代码的地步。在很多情况下,代码其实是最好的模板。

那么,应该怎么评判代码是不是更低呢?

低代码主要是面向信息系统(也就是 MIS)开发,因为只有 MIS 的需求五花八门,每家都不一样,永远做不完,高效率低门槛的开发和维护手段就显得特别有意义。

我们说过,MIS 的主要任务是 IPO(输入、处理、输出),这些 IPO 都是围绕数据展开的。

什么样的数据呢?

就是我们通常说的结构化数据,存在关系数据库中的那种数据。MIS 中很少需要处理非结构化数据,偶而出现了也就是简单的存储。而针对结构化数据的统计查询以及转换处理都则非常常见。

现代 MIS 通常可以分成前后两端。

前端环境就是浏览器和手机,开发语言基本上被 JavaScript 垄断了(MIS 应用的手机端呈现界面因为要和 WEB 端尽量保持一致,所以主要也在手机中的浏览器控件上用 JavaScript 实现的,而很少用原生 Java 或 ObjectC)。重新搞一套新的代码需要在用户机器上安装相应的运行环境,这不太现实。基于 JavaScript 再实现一套新代码,不仅成本巨大而且运行性能也会很差,不具有可操作性。所以,前端就只能继续用 JavaScript 凑合了,没多少可想的了。

不过,好在前端有足够多被模型化的控件,即使不写代码仅做些配置也能将就使用;个别需要用代码完成的数据处理运算任务也不算复杂,基于这些控件再用 JavaScript 对付也还可以接受。

复杂且重要的运算处理都在后端,那么用什么代码来写?

主流技术也就是 SQL、Java/C#。这些算低吗?

这要来看结构化数据处理的要求,我们之前讲《从 SQL 语法理解集合化》时说过,处理结构化数据的语言要求这么一些特征:结构化数据对象、集合运算类库、Lambda 语法、动态数据结构等。

在这个评判标准下,Java 肯定不合适了,它就没有一个像样的结构化数据对象。新版 Java 有了 Stream 等集合类库以及开始支持 Lambda 语法,但也是且也只能针对很通用的数据对象(这是 Java 本身的目标决定的),处理结构化数据时写起来仍然比较麻烦。而且,Java 是编译型语言,也天生难以动态化。还有,Java 是个强面向对象语言,深刻理解面向对象理念并不是件很容易的事情,开发 Java 应用时还需要建立复杂的工程化环境,这些对于开发人员来讲都是不低的门槛。

SQL 代码一定程度算比较低了,许多非专业人员都能用 SQL 写出查询,写 SQL 时也不需要过于关心应用架构,只要理解数据和业务本身,而这也是开发人员必须要有的知识。

所以很多应用是用 Java+SQL 来实现的。

但是,SQL 有两个硬伤:有序计算和有过程的逻辑,经常关注这里文章的同学都能看到我们经常进行这些讨论。

SQL 的这两个硬伤,会导致稍复杂一些的运算处理都变得非常麻烦,经常写出几百行 N 层嵌套的语法,过几个月自己都看不懂。SQL 还特别难调试,进一步推高开发成本。

如果改用存储过程倒是可以实现过程运算,但那又像转回 Java 了。虽然存储过程是用 SQL 写的,它同样没什么好用的结构化数据对象(只能靠临时表对付)和集合运算,经常还不如用 Java 指挥 SQL 来工作。而且,使用存储过程时,也会面临一些应用架构的麻烦事。

SQL 代码的“低”,只适合于相对简单的场景。业务需求复杂化之后,它的实现复杂度会平方级陡增。

那还有什么?

Python 略好一点,pandas 有个 dataframe 可以算作是结构化数据对象。但是 Python 的集成性比较差,除非整个应用都是用 Python 写的,这种情况还不多见。而且,dataframe 也只能算个半吊子,它本质上是个矩阵,并不是我们常规意义的数据表,很多运算思考起来很绕。而且,还要再说一遍而且,pandas 是个第三方类包,它的应用环境也不太简单,调试麻烦度依然。

Scala 也是一种选择,它也有个 dataframe 可以对付一些结构化数据处理,但也不算很专业。Scala 代码本身还算低,但是面向对象那堆东西的理解门槛一点也不低,而且也面临复杂的工程环境。

那就没有了吗?

还是有的,润乾集算器的 SPL 就是低代码,很有可能现在是业界唯一的了。

这其实是集算器被发明的原因。润乾做报表出身,自然会涉及很多复杂运算,然后发现这些运算用 SQL 和 Java 都很难写,而且这些困难无法在现有体系上完善来解决。磨了 N 年,干脆自己发明一种语言解决这些问题了,也就是 SPL。

SPL 中有完善的结构化数据对象,大小数据都能搞。它虽然采用了少量面向对象的语法,但并没用深奥的面向对象概念,重点都放在数据处理和运算上。程序逻辑上有点像早期的 BASIC 语言,增加上了结构化数据和集合运算,很容易理解。SPL 是解释执行的,天生动态语言,也易于集成到 Java 应用中,数据相关的开发人员甚至不用理解架构,只要关心业务和数据就可以了。

详细介绍是说不完了,有兴趣的可以到乾学院再去了解。