低代码:解放生产力的利器还是一场空洞的炒作?

news2024/11/17 0:03:26

低代码有人说是毒瘤,也有人说是银弹。到底应该怎么看呢?存在即合理

“存在”包括两个角度:

  • 银弹论
  • 毒瘤论

无论从哪个角度看,既然存在这样的论调,就有它们的合理性。

先把关注点移到低代码本身,低代码到底是要革程序员的命?还是成为程序员工具箱里的另一个工具?

如果你觉得低代码的目的是为了革程序员的命,是要把程序员的手脚给捆住,是要束缚程序员的创造性,是要把复杂的现实世界强制机械化、特例化、流程化,那么大概率你会接受毒瘤论。你甚至会毫无保留地否定低代码,认为Low Code除Low以外,不会有Code。毕竟,变革有成本的,而且往往成本巨大,无论是一个人还是一个团队,保持惯性,留恋舒适区才是正常的。我们几十年来用的软件从来都是双手敲代码创造出来,抛弃这个已被无数次证实可行的方法,拥抱一个“饱受争议”的新方法,这本身就需要有莫大的勇气,也要承受风险。

虽然会有很多勇于探索、期望尝试新方法的人和团队,也有很多受困于Pro Code(手敲代码的方式)的各种痛点被迫自我变革的人和团队,但是更多的人和团队是倾向于保持现状的,即使嘴上不说,身体却很诚实。每次回顾会都能复盘出一堆的代码问题,然后一而再、再而三地立flag说要改进,但多数会给出各种借口说明问题无解,然后继续这样的循环。有惯性就有排斥,有排斥就有各种负面论调,毒瘤论是典型代表。

1 Pro Code 创造的软件更“香”吗?

换个角度,把低代码当做程序员工具箱里的另一工具,我们再次审视银弹论和毒瘤论的冲突时,会发现一些不同点。工具不会革谁的命,只会让大家的日子更好过。工具有好有坏,不好用时就丢弃,好用时就多用用。

条条大路通罗马,我们前往罗马除了传统的步行、马车外,还能开汽车、坐飞机,甚至也可以在路况好的时候开汽车,风景好的时候下车漫步抑或纵马驰骋,只要能按时到达罗马,我相信没人会太关注过程,所以在去罗马的旅途只要你开心就好。

开发软件写bug也是类似的,Pro Code方式创造的软件不会比其他方式生产出来的软件更香、不会卖更多米,因为软件用户完全不关注软件是怎么被创造。

软件研发里的“罗马”不仅仅是一个目的地,所以这里带上双引号了。在软件业里,“罗马”除了指代交付的业务功能外,它的内涵还有:交付物可维护性、可扩展性、可测试性、交付过程的成本,甚至是团队的新陈代谢等等许多因素。同样地,我们审视到底是“骑马”好,还是“开车”好的时候,需要关注的不仅仅是心情,而需要关注到所采用的方式是否能在各个方面都有比较好的表现。这是一个极复杂的评判过程,且各个团队有各自的侧重,没有标准答案。

但早已业界共识: Pro Code不是软件开发的银弹,要不然就不会有低代码等多种新方式被提出来甚至展开实践。

门槛高

虽然我们自贬为“码农”,但是根据GitHub的统计数据,去年国内只有大约755万多开发人员,一个人可能只会写hello world就被算进来,摊到各个细分研发领域后,人数就少得可怜了。

跨界难

虽然都是写代码的,但是Java程序员可能很难玩得转C/C++,前端程序员很难玩得转Java/Scala等后端。

一个典型例子是:全栈这个词是在在Node.js火热起来之后才被发明出来的,在这之前,前后端通吃的只能是极少数顶尖骨干。但是,即使现在有了node.js实现前后端跨界,我们跨越到其他领域依然困难。总之,即使在具体业务场景下,要端到端交付一个完整业务,对一个人,甚至一个团队来说,都不是一件简单事。

代码编写只是第一步

之后还有许多问题需要解决。像代码所依赖的第三方库的开源合规治理、第三方和己方的代码安全漏洞检测和治理,还有代码性能、代码测试、运行时运维等,这些工作不是难度大,就是繁琐。最后,为了对抗代码库的熵增,避免代码仓库越来越混乱,越来越难维护,还必须引入代码走查机制,让经验丰富的程序员来把关。

Pro Code问题显然不止这些,但已足够说明问题。许多问题由于代码自身导致,引入一些工具降低代码量,许多问题也就缓解甚至解决。代码本身无直接价值,业务才有直接价值,从来没听说过哪家公司是凭百万千万行代码repo作为资产上市。公司之所以能上市肯定是由于资本市场认可它的业务价值,代码只不过是用于实现业务的一种场常见方式,但绝不是唯一。

不管是白猫黑猫,能抓老鼠的就是好猫,吃喝拉撒越少的猫则是更好猫。只要能实现相似价值的业务,并且承载该业务的方式的副作用比代码要少,那么这就是一种更好方式。

相信你有足够的理性来把低代码作为一种工具来看待,而不认为这是一种程序员自我革命手段。

2 Low Code 银弹论合理吗?

既然Pro Code不是银弹,那Low Code是不是银弹呢?当然也不。

Pro Code和No Code一个纯代码,一个无代码。假设Pro Code的代码量是100,那No Code就是0,所以Pro Code和No Code是截然不同的,甚至你可以认为这两者毫无关系。No Code最典型形态莫过SaaS类产品。

Low Code应摆在哪个位置?关键点不在于多少,而在于有没有!

Low Code当然是有代码的,所以它和Pro Code是一路货色,从创建业务价值的最根本上说,它们是一样的,都是通过代码来创建业务价值。而No Code则不是,它只是对已有业务的二次组合来创建业务价值,No Code创建业务的全过程都没有源码的参与。

Pro Code和Low Code的差异

本质差异在于源码在这两者创造业务价值的过程中所扮演的角色:

  • Pro Code是把代码当作关键输入来创建业务的
  • Low Code则不是,它的输入是一些结构化的数据

Low Code工具有能力将结构化数据生成为源码,然后再采用与Pro Code相同的方式将源码转为业务能力。很显然的一点是,Low Code把源码当做中间产物,而Pro Code则将源码做为关键输入。相信现在你应该可以分清楚Pro Code、Low Code、No Code之间的差异了。

那么Low Code为啥也不是银弹呢?关键就在于,Low Code是采用无逻辑的结构化数据来描述业务的,对于相同业务,Low Code的描述能力要弱于有逻辑的Pro Code。所以,Pro Code都做不到的事情,Low Code当然也做不到。

根据前面与Pro Code的比对,我们可以看出, Low Code对业务的描述能力既弱于Pro Code,也与Pro Code没有实质差异,看起来Low Code一无是处啊。我认为这可能是低代码毒瘤论的理论基础。别急,继续往下看。

Pro Code开发方式是指令式的,它的开发过程是告诉计算机如何一步步实现某个业务。Low Code则不然,它的开发过程是不停地在描述和细化这个业务最终的样子。

可以说,Low Code的开发人员的思维方式与Pro Code的开发人员完全不一样,他们始终在思考这个业务应该是啥样的,而Pro Code的开发人员则是在开发过程中不停地思考如何将业务翻译成一条条指令。其中关键的一点是,对于Pro Code开发人员来说,这个业务最终的样子不是天上掉下来的,抑或大风刮来的,而是要在他们着手翻译成指令之前先想清楚的。

所以结论就是,Low Code开发人员要比Pro Code开发人员少做一个事情:无需将业务翻译成指令,从而他们得以用更高的效率实现相同的业务,在单位时间内创造更多业务价值。

低代码模式除了效率外,还有另一个卖点,那就是低技术门槛。它可以赋能更多人,使其可以快速参与业务开发。没错,就是实现外卷!

根据我们前面说的,Low Code依然有代码,但70%~90%甚至更多比例的代码是自动生成的。这里要特别注意的是,其中100%的框架性的代码都是自动生成的,这部分代码不但与业务无直接关系,即没有直接业务价值,还是最难开发的,一出问题都是大问题。而剩余的小部分需要开发者填写的代码,则基本上都是表达式,或者部分复杂业务逻辑。

表达式也好,强业务逻辑代码也好,都是在直接实现业务功能,所以即使在低代码平台上写代码,那也是在直接实现业务逻辑。那些只有业务能力但无开发能力的人、需要写UI的后端开发,或者是需要写业务的前端开发等人群,都可以在低代码平台上实现跨界开发,实现端到端的业务交付能力。赋予原本没有技术能力的人快速参与的能力,是低代码的另一个重要能力。

基于以上提效和赋能两点,我们有足够的理由来认为低代码银弹论是合理的,银弹论并非一群“不务正业”、“整天想着再造一个轮子”的人的自嗨。

Low Code离银弹还有多远?

低代码毒瘤论者只看到表面,或者思考深度不足,没能从实质上看到Pro Code和Low Code的差异。即使如此,我也认为毒瘤论是有合理性的。毕竟很多实现Low Code的人自己也没想明白就匆匆动手,为了达到少代码(而非低代码)的目的而做出各种各样无理约束,你不能这个、不能那个,最终不但没能发挥出低代码的优势,反而降低了效率,被他人诟病。

即使抛开这类情形不说,Low Code本身的成熟度也需要改进, 一个重要改进点是:如何有效解决强逻辑场合下的可视化配置方法,这是Low Code采用无逻辑的结构化数据描述业务常见的重要短板。这个问题至今也在困扰着我,我认为我们目前给出的解决方案并非最优解,仍然需要孜孜不倦地探索出更合适的手段。

低代码要真正成为银弹,除了解决强逻辑的可视化配置外,要做的事情还有很多。有一部分我在前文已经有过描述了,这里再给你简单总结和拓展一下,一方面是为了用作毒瘤论非合理性的额外论据,另一方面也是为了给这个专栏后续的内容埋点伏笔。

首先,快速部署能力是要有的,最基本的需要一键导出所有运行时需要的文件,最好能做到一键部署和运行时,这样的能力将给业务的小伙伴提供巨大的便利,大幅减少他们的试错时间。

其次,也是最重要的,低代码平台还需要关注生成的App的可测试性。如果生成的App是一个黑盒,出错时无从下手,日志打印惜字如金,要是这时候平台再对业务团队的困境置之不理甚至推诿,那无论是谁都会厌恶这样的开发方式的。

可测试性是一个非常综合的能力,从最基本的部署运行开始,到丰富准确的日志,再到直接给予业务团队调试支持,甚至到直接提供自动化测试的能力,这里头涉及的不仅是技术,还有团队间如何协作的问题。

还有一个容易被无视的能力是,低代码平台需要支持多人协作开发,当业务越来越复杂,多人协作是刚需。 这个问题往往在平台建设初期就容易被无视,在后期随着应用的复杂度上升后才被提出,这时候再去实现,成本会非常大。此时平台有可能会简单粗暴地采用互斥的方式来掩耳盗铃。

要知道,业务团队往往面临巨大的交付工期压力,如果小李无法在小王编辑时上手,一急之下他们可能将数据复制一份来同时编辑,结果发现无法手工合并结构化数据,这样的情形放谁身上都会抓狂。所以支持多人协作开发是低代码平台非常必要的一个能力,而这背后其实还隐藏着编辑历史管理、分支管理等潜在需求,这些都对业务团队多人协作效率有很大的影响。

再者,兜底能力也是很重要的。 低代码平台不可能面面俱到,它总有能力边界,但这个能力边界不能束缚业务团队的探索。业务需要紧随市场甚至引领市场,而市场是千变万化的,任何公司都无法决定,所以要把“业务提出低代码平台能力之外的需求”当做一种常态。此时,低代码平台需要有一种策略帮助应用快速实现需求,哪怕直接上手编码乃至Hack。这样的策略就是兜底策略。

此外还有一些增值功能,包括UX设计规范自动对齐、提供UX设计稿转代码(D2C)能力、App的可维护性、App的埋点&数据采集、App的开源合规治理、App的安全漏洞治理、App的性能等等。简单来说,这些都是低代码平台的亮点能力,并且是拉开与Pro Code差距的重要能力。

讲到这里我们可以看到,低代码平台只关注开发能力是远远不够的。而毒瘤论的另一个重要基础就是来自于许多低代码平台只注重开发能力,而无视业务交付过程的其他能力,特别是对App可测试性的漠视。

作为低代码的坚定支持者和践行者,我当然不同意低代码是毒瘤这个论断,但是我不会轻易去喷这些言论,而是努力去理解和挖掘毒瘤论的言论基础,从中分析出那些容易被我们无视或者轻视的需求。只要我们常常能细心、谦虚地观察业务开发过程中的方方面面,并及时发现业务团队的痛点和需求并及时解决,以一种服务者的态度来为业务提供服务,我相信,毒瘤论会渐渐消散的。

总结

很少有一种技术像低代码这样同时被两种极端言论评价,今天我们从一个理性的角度审视了这两种言论,并尝试去理解它们的思路和痛点。

我们从Pro Code、Low Code、No Code的对比中了解到Pro Code与Low Code的关键差异不在于代码量的多少,而在:

  • 代码在这两者创造业务价值的过程中所扮演的角色,对Pro Code来说,代码是关键输入,而对Low Code来说,代码仅仅是中间产物、是副产品;
  • 使用Low Code开发虽然也需要少量编码,但是基本上都是在填写表达式,直接实现业务价值,与业务价值无关的代码则几乎全都被自动生成;
  • 使用Low Code开发业务的人几乎时时刻刻都在描述和细化业务最终的样子,使用 Pro Code的开发人员不仅需要思考业务最终的样子,还要将其翻译成一条条计算机指令。

这些差异正是Low Code的比较优势,这也是为啥Low Code可以帮助业务提效和赋能的原因:无需长篇累牍地编码可以大幅降低使用的门槛,实际上就是对无编码技能者进行赋能;几乎所有框架性、非功能代码全部自动生成,以及无需将业务翻译成一条条计算机指令,可以大幅压缩开发周期,实际上就是在提效。

但即使如此,当下的Low Code也不是银弹,因为我们在分析毒瘤论的过程中意识到Low Code除了注重开发能力之外,还应该具有诸多其他能力以覆盖业务研发全生命周期,包括一键导出和部署、较高的可测试性甚至自动化测试能力、多人协作、兜底能力等等,若低代码平台不具备这些能力,则很难发挥低代码技术的优势。

Low Code许多增值功能:

  • 自动对齐UX设计规范、UX设计稿转代码(D2C)能力
  • App的埋点&数据采集
  • 开源合规治理
  • 安全漏洞治理

都是拉开Pro Code差距的重要抓手。

FAQ

低代码平台是否只需把开发能力发挥到极致就可以了?除了开发能力之外,低代码平台还需要注重哪些能力的建设?你认为其中最重要的是哪些?

低代码平台的确需要开发能力的支持,但除此之外,还需要注重以下能力的建设:

  1. 可视化设计能力:低代码平台需要提供可视化的界面设计工具,让用户能够通过拖拽、配置等方式快速构建应用界面。

  2. 数据建模能力:低代码平台需要提供数据建模工具,让用户能够通过简单的操作定义数据模型,实现数据的存储和管理。

  3. 组件化能力:低代码平台需要提供可复用的组件库,让用户能够快速构建应用功能。

  4. 自动化部署能力:低代码平台需要提供自动化部署工具,让用户能够快速将应用部署到云端或本地环境。

其中,我认为可视化设计能力和组件化能力是最重要的两个能力,因为这两个能力可以大大提高开发效率,降低开发成本。

再分享我整理汇总的一些 Java 面试相关资料(亲自验证,严谨科学!别再看网上误导人的垃圾面试题!!!),助你拿到更多 offer!

点击获取更多经典必读电子书!

2023年最新Java学习路线一条龙:

再给大家推荐一个学习 前后端软件开发 和准备Java 面试的公众号【JavaEdge】(强烈推荐!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关联查询和子查询

关联查询和子查询: 二、关联查询: 1、全连接:两个表作笛卡尔积 2、内连接:找到两个表中的关联数据 3、外连接: 左外连接:grade中12无学生,但是还是会显示出来(以左边的表为基准&am…

javascript 触发事件

在 JavaScript 中,原始方法 initEvent() 用于创建新事件。 最新更新添加了用于构建自定义事件的新关键字。 此外,在为 JavaScript 构建的清单中还有大量事件。 以下部分将预览预定义事件之一的示例及其触发方式。 还有一个定制的事件,将细节…

Redis 高可用【主从复制 哨兵 集群】

主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡&am…

使用JMX管理Spring Bean

1.使用JMX管理Spring Bean 2.spring通过annotation注解注册MBean到JMX实现监控java运行状态 3.Spring与JMX集成

LangChain大型语言模型(LLM)应用开发(三):Chains

LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

系列一、RocketMQ入门

一、MQ概述 1.1、MQ简介 MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程的API软件系统。消息:消息即数据,一般消息的体量不会很大。 1.2、M…

redis主从同步对象模型学习笔记

目录 1 淘汰策略1.1 配置1.2 哪些数据将会被淘汰呢?1.2.1 过期key中的1.2.2 所有的key1.2.3 禁止淘汰 2 持久化2.1 背景2.1.1 概念2.1.2 fork进程写时复制机制2.1.3 大key 2.2 redis持久化的方式2.2.1 aof2.2.2 aof-rewrite2.2.3 rdb 2.3 redis持久方案的优缺点2.4 …

Redis跳表

简介 Redis 中的有序集合(Sorted Set)是用跳表(Skip list)来实现的。这里就需要了解一下跳表的概念。 链表:链表插入,删除某一个节点的时间复杂度是O(1),但是查询的时间复杂度是O(n)。 跳表就是解决链表在有序节点场…

Jmeter:使用代理录制脚本

目录 前言: 介绍下各设置项: 前言: JMeter 是一个功能强大的性能测试工具,可以用于模拟多种场景下的负载测试和性能测试。其中一个常用的功能是使用代理服务器录制脚本,以便在后续的测试中模拟真实的用户行为。 下…

数据库优化---索引

这里写目录标题 索引简介结构(Btree)操作总结 索引 简介 优缺点 利远远大于弊 结构(Btree) 所有的数据都存在叶子节点 操作 具体代码 注意,主键以及唯一约束,都会自动创建一个索引,主键索…

git常用命令之Pull

7. Pull 命令作用延展阅读git pull 1. git fetch2. git merge FETCH_HEAD1. fetch origin的所有分支2. merge 当前分支参考git pull origin master1. git fetch origin master2. git merge FETCH_HEAD 拓展:Git常用命令汇总

时间触发嵌入式系统:各种系统的概念

1.1 引言 一说到软件系统,脑子里面就会闪现很多名词: 信息系统 桌面应用系统 实时系统 嵌入式系统 事件触发系统 时间触发系统 这些名字搞得脑子很乱,感觉都熟悉,又有些陌生,还是需要简单的介绍一下。 1.2 信息系统…

MySQL高可用 MMM

MySQL高可用 MMM 一、MMM1.1 MMM介绍1.2 关于 MMM 高可用架构的说明 二、搭建 MySQL MMM2.1 环境准备2.2 搭建 MySQL 多主多从模式2.3 安装配置 MySQL-MMM 一、MMM 1.1 MMM介绍 Master-Master replication manager for MvSQL,MySQL 主主复制管理器。 1、是一套支持…

vue3如何使用vant中IndexBar索引栏?

目录 1、为什么要使用IndexBar索引栏?2、引入3、基础使用4、处理后端返回的数据5、渲染页面 1、为什么要使用IndexBar索引栏? 在我们开发移动端的时候,有时候会遇到制作通讯录或者城市索引栏,这种时候我们就可以使用vant中快捷方…

warp框架教程2-log模块,addr模块和header模块

log , addr 和 header 从本文开始,我们将介绍 warp 中 Filter 的核心模块。在文档中有 filter 相关模块的介绍, 本文来介绍其中的 addr,header 和 log addr 模块 addr 模块非常简单,它是用来获取远程客户端的地址的。使用起来…

高性能计算学习教程,从入门到精通

学习高性能计算需要一定的计算机科学和数学基础。以下是一个详细的学习路线,从入门到精通高性能计算的步骤: 阶段一:基础知识学习 计算机科学基础:了解计算机体系结构、操作系统、数据结构和算法。学习编程语言如C/C、Python等。 …

苹果手机没法访问Fildder代理服务怎么办

浏览器输入http://ip:port进入可下载证书页面 异常情况: 浏览器访问http://ip:port后无响应,白屏,或有“无法使用跳转网络”的提示 解决方法: 1. PC重新下载fiddle证书并重启 Fildder4--Tools--Options--HTTPS--Actions--"…

【2022吴恩达机器学习课程视频翻译笔记】2.5无监督学习-part-2

2.5无监督学习-part-2 In the last video, you saw what is unsupervised learning, and one type of unsupervised learning called clustering. Let’s give a slightly more formal definition of unsupervised learning and take a quick look at some other types of uns…

ruoyi-vue版本(三十)Spring Security 安全框架中token的生成与解析

目录 1 使用2 写工具类3 使用工具类 1 使用 1 项目里面添加依赖 <!-- Token生成与解析--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency>2 写工具类 package com.ruoyi.framework.we…

【MQ】消息队列的简介以及常见问题的解决方案

MQ MQ的基本概念 MQ全称Message Queue&#xff08;消息队列&#xff09;&#xff0c;实在消息的传输过程中保存消息的容器。多用于分布式系统之间的通信。 分布式系统的两种通信方式&#xff1a;直接调用、借助第三方间接完成 发送者成为生产者&#xff0c;接受者称为消费者…