您好!欢迎来到聚一下资讯网

汇聚最前线的资讯报道,传播正能量,让网民们就可尽知天下事。了解最新热点,就上聚一下资讯网

聚一下资讯网

我认为是低代码,Low-Code中的Low

发布时间:2020-11-17 22:14:30 编辑:小优 来源:uc

简介:什么是低代码?我们为什么需要低代码?低代码会让程序员失业吗?本文总结了低代码领域的基本概念、核心价值与行业现状,带你全面了解低代码。

我认为是低代码,Low-Code中的Low(图1)

一 前言

如果选择用一个关键词来代表即将过去的2020年,我相信所有人都会认同是“新冠”疫情来得太快就像龙卷风,短短数月就阻断了全世界范围内无数人与人之间的物理连接。但好在,我们已经全面迈入互联网时代:N95口罩再厚,也阻挡不了信息比特流的顺畅流通(宅男:B站依然香)居家隔离再久,也妨碍不了钉钉的准时送达(社畜:工作依然苦)逍遥子在9月份的云栖大会上说:“新技术代表的新生产力,一定是我们全速战胜疫情、开创未来最好的原动力。” 那么在后疫情时代,究竟需要什么样的新技术,才能真正解放IT生产力,加速社会数字化转型,Make The World Great Again?我认为是低代码(Low-Code)

基于经典的可视化和模型驱动理念,结合最新的云原生与多端体验技术,低代码能够在合适的业务场景下实现大幅度的提效降本,为专业者提供了一种全新的高生产力范式(Paradigm Shift)另一方面,低代码还能让不懂代码的业务人员成为所谓的平民者(Citizen Developer)弥补日益扩大的专业人才缺口,同时促成业务与技术深度协作的终极敏捷形态(BizDevOps)本文将重点介绍低代码相关背景知识,包括低代码的定义与意义、相关概念、行业发展等,期望能帮助大家更好地认识与理解低代码这个新兴领域。

二 什么是低代码

“Low-Code”是什么?如果你是第一次听说,没准也会跟我当年从老板口中听到这个词后的内心戏一样:啥?“Low-Code”“Code”是指代码我知道,但这个“Low”字是啥意思?不会是老板发现我最近赶工写的代码很丑很“Low”吧... 想多了,老板怎么可能亲自review代码呢。那难道是指,“Low-level programming”里的“Low”老板终于发现让我等编程奇才整天堆Java业务代码太浪费,要派我去闭关写一个高性能C语言网络库... 显然也不是,老板哪能有这技术情怀呢。那到底是什么意思?作为一名搜商比情商还高的程序员,能问Google的绝不会问老板。于是我一顿操作后,不假思索地点开了第一条搜索结果。果不其然,这是一条充满自由芳香只有翻墙才能闻到的Wikipedia词条:Low-code development platform。

Wikipedia定义

我认为是低代码,Low-Code中的Low(图2)

从Wiki的这段定义中,我们可以提炼出几个关键信息:

低代码平台(LCDP)本身也是一种软件,它为者提供了一个创建应用软件的环境。看到“环境”几个字是不是很亲切?对于程序员而言,低代码平台的性质与IDEA、VS等代码IDE(集成环境)几乎一样,都是服务于者的生产力工具。

与传统代码IDE不同的是,低代码平台提供的是更高维和易用的可视化IDE。大多数情况下,者并不需要使用传统的手写代码方式进行编程,而是可以通过图形化拖拽、参数配置等更高效的方式完成工作。

Forrester定义

顺着Wiki的描述还能发现,原来“Low-Code”一词早在2014年就由Forrester提出了,它对低代码平台的始祖级定义是这样的:

我认为是低代码,Low-Code中的Low(图3)

相比Wiki的版本,这个定义更偏向于阐明低代码所带来的核心价值:

低代码平台能够实现业务应用的快速交付。也就是说,不只是像传统平台一样“能”应用而已,低代码平台的重点是应用更“快”更重要的是,这个快的程度是颠覆性的:根据Forrester在2016年的调研,大部分公司反馈低代码平台帮助他们把效率提升了5-10倍。而且我们有理由相信,随着低代码技术、产品和行业的不断成熟,这个提升倍数还能继续上涨。

低代码平台能够降低业务应用的成本。一方面,低代码在软件全生命周期流程上的投入都要更低(代码编写更少、环境设置和部署成本也更简单)另一方面,低代码还显著降低了人员的使用门槛,非专业者经过简单的IT基础培训就能快速上岗,既能充分调动和利用企业现有的各方面人力资源,也能大幅降低对昂贵专业者资源的依赖。

低代码核心能力

基于上述的定义和分析,不难总结出如下这3条低代码平台的核心能力:

我认为是低代码,Low-Code中的Low(图4)

全生命周期:作为一站式的应用平台,低代码支持应用的完整生命周期,即从设计阶段开始(有些平台还支持更前置的项目与需求)历经、构建、和部署,一直到上线后的各种运维(e.g. 监控报警、应用上下线)和(e.g. 数据报表、用户反馈)

低代码扩展能力:使用低代码时,大部分情况下仍离不开代码,因此平台必须能支持在必要时通过少量的代码对应用各层次进行灵活扩展,比如添加自定义组件、修改主题CSS样式、定制逻辑流动作等。一些可能的需求场景包括:UI样式定制、遗留代码复用、专用的加密算法、非标集成。

不只是少写代码

回到最初那个直击心灵的小白问题:Low-Code中的“Low”到底是啥意思?答案已经显而易见:既不是指抽象程度很低(相反,低代码方式的抽象程度要比传统编程语言高一个level)也不是指代码很low(也相反,低代码所生成的代码一般都经过精心维护和反复,整体质量强于大部分手写代码)而是单纯的“少写代码” — 只在少数需要的情况下才手写代码,其他大部分时候都能用可视化等非代码方式解决。

再往深一点儿看,低代码不只是少写代码而已:代码写得少,bug也就越少正所谓“少做少错”,因此环节的两大支柱性工作“赶需求”和“修bug”就都少了;要测的代码少了,那么用例也可以少写不少;除了阶段以外,平台还覆盖了后续的应用构建、部署和,因此运维操作也更少了Low-Code → Low-Ops

我认为是低代码,Low-Code中的Low(图5)

平台的职责与

上面说的是低代码给者提供的能力与吸引力,那么作为服务的提供方与应用的承载者,低代码平台自身应该承担怎样的职责,其中又会遇到多大的?是否就一定要如阿里云所主张的那样,“把复杂留给自己,把简单留给别人”虽然这句话听起来很深明大义,但不知道大家有没有想过,为什么我们一定要抱着复杂不放,平白无故给自己找事?就不能直接干掉复杂,也给咱阿里云自己的员工留点简单吗?是工作太容易就体现不出来KPI价值了,还是家里的饭菜不如公司的夜宵香?

根据《人月神话》作者Fred Brooks的划分,软件的复杂度可以划分为本质复杂度(Essential complexity )和偶然复杂度(Accidental complexity)前者是解决问题时固有的最小复杂度,跟你用什么样的工具、经验是否丰富、架构好不好等都无关,而后者就是除此之外在实际过程中引入的复杂度。通常来说,本质复杂度与业务要解决的特定问题域强相关,因此这里我把它称为更好理解的“业务复杂度”这部分复杂度不是任何方法或工具能解决的,包括低代码。而偶然复杂度一般与阶段的技术细节强相关,因此我也相应把它称为“技术复杂度”而这一部分复杂度,恰好就是低代码所擅长且适合解决的。

为者尽可能屏蔽底层技术细节、减少不必要的技术复杂度,并支撑其更好地应对业务复杂度(满足灵活通用的业务场景需求)这是身为一个低代码平台所应该尽到的核心职责。

我认为是低代码,Low-Code中的Low(图6)

在尽到上述职责的同时,低代码平台作为一个面向者的产品,还需要致力于为者提供简单直观的极致体验。这背后除了巨大的工作量,还得能在“强大”和“易用”这两个很难两全其美的矛盾点之间,努力找到一个符合自己产品定位与目标客户需求的平衡点 — 这也许是设计一个通用低代码平台所面临的最大。

三 低代码相关概念对比

纯代码(Pro-Code / Custom-Code)

“纯代码”可能算是我杜撰的一个词,更常见的说法是专业代码(Pro-Code)或定制代码(Custom-Code)但意思都一样,就是指传统的以代码为中心(Code-Centric)的模式。之所以我选择用“纯代码”是因为如果用“专业代码”会显得似乎低代码就不专业了一样,而用“定制代码”又容易让人误解成低代码无法支持定制的自定义代码。

当然,更准确的称谓我认为是“高代码”与低代码恰好对应,只是名字太难听,被我嫌弃了...因为即便是使用传统的代码IDE,有些工作也支持甚至更适合以非代码方式完成,比如:iOS端时使用的SwiftUI界面设计器、服务端数据库应用时使用的PowerDesigner建模工具。不过这部分可视化工作在传统模式下只是起辅助作用,最后通常也是生成者可直接修改的代码;者仍然是以代码为中心来开展主要工作。

低代码与纯代码之间的关系,其实跟和文章之间很像:

低代码就像是现代的大部分内容都由直观易理解、表达能力强的图片组成,因此更容易被大众所接受。但与此同时,也不是死板得只能有图片,完全可以添加少量文字(如字幕、标注)来弥补图片表达不够精确的问题。BTW,关于“图”和“文字”之间的辩证关系,可以进一步参考《架构制图:工具与方》1这篇文章中的相关描述。

纯代码则更像是传统的“文章”虽然很久以来都一直是信息传播的唯一媒介,但自从技术诞生以及相应软硬件基础设施的普及以来,便逐渐开始被抢走了风头。如今,已成为大部分人获取信息的主要渠道(从电视到B站抖音)而经常读书读文章的人却越来越少。但不可否认的是,文章依然有它存在的意义和受众(不然我也不会费这劲敲这么多字了)即使“市场份额”一直在被挤压,但永远会有它立足的空间。

我认为是低代码,Low-Code中的Low(图7)

如果按上面这种类比关系推导,低代码未来也会遵循与类似的发展轨迹,超越纯代码成为主流模式。Gartner的预测也表达了相同的观点:到2024年,所有应用程序活动当中的65%将通过低代码的方式完成,同时75%的大型企业将使用至少四种低代码工具进行应用。

但同样地,就像是永远无法取代文章一样,低代码也永远无法彻底取代纯代码方式。未来低代码和纯代码方式将以互补的形态长期共存,各自在其所适合的业务场景中发光发热。在后面的“低代码业务场景”章节,会详细列出哪些场景在现阶段更适合用低代码模式。

零代码(Zero-Code / No-Code)

从分类的完备性角度来看,有“纯代码”自然也应该有完全相反的“零代码”也称为“无代码”。零代码就是完全不需要写代码的应用平台,但这并不代表零代码就比低代码更高级和先进,它只是做了一个更极端的选择而已:彻底拥抱简单的图形可视化,完全消灭复杂的文本代码。选择背后的原因是,零代码平台期望能尽可能降低应用门槛,让人人都能成为者(注意: ≠ 写代码)包括完全不懂代码的业务分析师、用户,甚至是产品经理(不懂装懂可不算懂)

即便是专业者,在技术分工越来越精细的趋势下(前端/后端/算法/SRE/数据分析..)也很难招到一个能独立和维护整套复杂应用的全栈工程师。但零代码可以改变这一切:无论是Java和JavaScript傻傻分不清楚的技术小白,还是精通深度学习但没时间学习Web的算法大牛,都可以通过零代码实现自己的技术梦或全栈梦。“改变世界的idea已有,就差一个程序员了”这句玩笑话或许真的可以成真;哦不,甚至都用不着程序员,有idea的人自己就能上。

我认为是低代码,Low-Code中的Low(图8)

当然,所有选择都要付出代价,零代码也不例外。完全抛弃代码的代价,就是平台能力与灵活性受限:

另一方面,由于目标受众是非专业人员,平台能支持的操作会更趋于“化”e.g. 页面只支持大块业务组件的简单堆叠,不支持细粒度原子组件和灵活的CSS布局定义)同时也只会透出相对“亲民化”的模型和概念(e.g. 使用“表格”表示数据,而不是用“数据库”,无法支撑强大专业的底层原语和编程理念。

我认为是低代码,Low-Code中的Low(图9)

虽然零代码与狭义上的低代码有着上述明显差异,但从广义上来说,零代码可以当作低代码的一个子集。Gartner在其相关调研报告中,就是将“No Code”划在了范围更广的低代码应用平台“LCAP”Low-Code Application Platform中。而当前市面上很多通用的低代码平台,也都兼具一定程度的零代码能力;比如低代码领域领头羊Mendix,既提供了简单易用的零代码Web IDE - Mendix Studio,也包括一个功能更强大的低代码桌面IDE - Mendix Studio Pro。

HpaPaaS(高生产力应用PaaS)

上文提到,“Low-Code”一词是拜Forrester所赐。作为同样是国际知名调研机构a.k.a 造词小能手的Gartner,显然不会轻易在这场可能决定低代码领域江湖地位的新概念作词大赛中认输,于是也于2017年发明了“HpaPaaS”High-productivity application Platform as a Service这个听上去更高大上的缩写词。

按照Gartner的定义,HpaPaaS是一种支持声明式、模型驱动设计和一键部署的平台,提供了云上的快速应用(RAD)部署和运行特性;这显然与低代码的定义如出一辙。但事实证明,名字起得太专业并不见得是好事,“HpaPaas”最终还是败给了起源更早、更接地气也更顺口的“Low-Code”从2019年开始,Gartner在其相关调研报告中也开始全面采用“Low-Code”一词(如LCAP)亲手为“HpaPaaS”打上了 @deprecated 印记。

我认为是低代码,Low-Code中的Low(图10)

值得补充的是,“HpaPaaS“这个词也并非横空出世,而是传承自更早之前Gartner提出的“aPaaS”它俩之间的关系是:HpaPaaS只是aPaaS的一个子类;除了HpaPaaS这种通过低代码实现的高生产力应用平台以外,aPaaS还包括面向纯代码的传统应用平台(High-control aPaaS,即可控度更高的纯代码方式)

四 为什么需要低代码

低代码是什么可能并没那么重要,毕竟在这个信息的世界,永远不缺少新奇而又短命的事物。大部分所谓的新技术都只是昙花一现:出现了,被看到了;大部分人“哦”了一声,已阅但表示不感兴趣;小部分人惊叹于它的奇思妙想,激动地点了个赞后,回过头来该用什么还是什么。真正决定新技术是否能为新生产力的,永远不是技术本身有多么优秀和华丽,而是它是否真的被需要,即:为什么需要低代码?如果用不同的主语填充上面这个问句冷知识:这叫做“延迟主语初始化”,可以更全面地看待这个问题:

为什么「市场」需要低代码?

在这个大爷大妈都满嘴“互联网+”和“数字化转型”的时代,企业越来越需要通过应用(App)来改善企业内部的信息流转、强化与客户之间的触点连接。然而,诞生还不太久的IT信息时代,也正面临着与我国初级阶段类似的供需关系矛盾:落后的软件生产力跟不上人民日益增长的业务需求。

我认为是低代码,Low-Code中的Low(图11)

Gartner预测,到2021年应用需求的市场增长将至少超过企业IT交付能力的5倍。面对如此巨大的IT缺口,如果没有一种性的“新生产力”体系,很难想象仅凭现有传统技术体系的发展延续就能彻底解决问题。而低代码技术正是带着这样的使命而降临,期望通过以下几个方面彻底革新应用生产力,拯救差一点就要迈入水深火热的IT世界:

提效降本 & 质量保障

虽然软件行业一直在高速发展,新的语言、框架和工具层出不穷,但作为从业者我们不得不承认:软件仍处于手工作坊阶段,效率低、人力成本高、质量不可控。项目延期交付已成为行业常态,而瓶颈几乎总是人员(对机器能解决的问题都不是问题)优秀的人才永远是稀缺资源,还贼贵;软件质量缺陷始终无法收敛,线上故障频发资损不断。

相比而言,传统制造业经过几百年工业的发展,大部分早已摆脱了对“人”的强依赖:从原料输入到制品输出,中间是各种精密仪器和自动化流水线的稳定支撑,真正实现生产的标准化和规模化。虽然信息化号称是人类的第三次工业,但以软件行业目前的状况,远远还没到达成熟的“工业化”阶段。

所以,亲爱的程序员朋友,当你与前端联调了一上午接口,又与产品撕逼了一下午需求,再与自己的bug抗争了一整晚,好不容易遁入梦乡又被一连串报警短信吵醒时,是否有抬头对着星空憧憬过:“I have a dream... that one day,软件也能像工业制品一样,批量流水化生产,稳定高效没烦恼。” 事到如今,不管你有没有意识到,这个憧憬正在慢慢变成现实。

我认为是低代码,Low-Code中的Low(图12)

是的,低代码正在将应用软件过程工业化:每个低代码平台都是一个技术密集型的应用工厂,所有项目相关人员都在同一条产线内紧密协作。主力不再是熟知for循环一百种写法的技术Geek,而是一群心怀想法业务sense十足的应用Maker。借助应用工厂中各种成熟的基础设施、现成的标准零件、自动化的装配流水线,者只需要专注于最核心的业务价值即可。即便是碰到非标需求,也可以随时自己动手,用最灵活的手工定制(代码)方式来解决各种边角问题。

扩大应用劳动力

通过让大部分工作可以仅通过简单的拖拽与配置完成,低代码(包括零代码)显著降低了使用者门槛,让企业能够充分利用前面所提到的平民者资源。部分纯零代码需求场景下,低代码还能让业务人员实现自助式(self-service)应用交付,既解决了传统IT交付模式下的任务堆积(backlog)问题,避免稀缺的专业资源被大量简单、重复性的应用需求所侵占,也能让业务人员真正按自己的想法去实现应用,摆脱交由他人时不可避免的桎梏。

我认为是低代码,Low-Code中的Low(图13)

至此,应用能力不再是少数专业者的专利和特权,且今后所需要的技能门槛与拥有成本也会越来越低,真正实现所谓的“技术民主化”democratization of technology

加强过程的沟通协作

多方调查结果显示,软件项目失败的最主要原因之一就是缺乏沟通poor communication传统模式下,业务、产品、设计、与运维人员各司其职,且各有一套领域内的工具和语言,长久以来很容易形成一个个“竖井”silos让跨职能的沟通变得困难而低效。这也是为什么当前热门的敏捷和DevOps都在强调沟通前者是协同Biz与Dev,而后者是协同Dev和Ops而经典的DDD领域驱动设计也主张通过“统一语言”来减少业务与技术人员之间的沟通不一致。

我认为是低代码,Low-Code中的Low(图14)

有了低代码后,这一状况将得到根本改善:上述各角色都可以在同一个低代码平台上紧密协作(甚至可以是同一个人)这种全新的协作模式不仅打破了职能竖井,还能通过统一的可视化语言和单一的应用表示(页面/数据/逻辑)轻松对齐项目各方对应用形态和项目进度的理解,实现更终极的敏捷模式,以及在传统DevOps基础之上更进一步的BizDevOps【2】

统一平台下的聚合效应

人员聚合:除了上一点所提到的各职能角色紧密协作以外,人员聚合到统一的低代码平台进行作业后,还能促进整个项目流程的标准化、规范化和统一化。

应用聚合:一方面,新应用的架构设计、资产复用、相互调用变得更容易;另一方面,各应用的数据都天然互通,同时平台外数据也能通过集成能力进行打通,彻底消除企业的数据孤岛问题。

生态聚合:当低代码平台聚合了足够多的者和应用后,将形成一个巨大的、连接一切、有无限想象力的生态体系,彻底放飞低代码的价值。

为什么「这个时代」才需要低代码?

如果你了解过市面上各种低代码产品,不难发现其实这个领域的许多玩家在低代码概念诞生之前就已经存在了,比如:低代码领域的另一个巨头OutSystems,早在2001年就已经创立;而去年也被Forrester评为低代码行业leader之一的FileMaker,更是诞生于遥远的1985年(正好35岁,似乎在疯狂暗示什么)那么,如果低代码像前面说的那么好,为什么以前没有火起来呢?从技术和业务两个角度看,可以归纳为以下原因:

技术成熟度不足

低代码底层的各项核心技术可视化、模型驱动、RAD、BPMS...都已经有漫长的发展历史,看上去似乎只是新瓶装旧酒。然而理智的人都知道,任何技术都会遵循所谓的“技术成熟度曲线”The Hype Cycle不可能刚一诞生就跳过发育直接秀翻全场,被大规模采纳和投入生产。以模型驱动技术为例,虽然十几年前就已经有体系化的理论研究e.g. MDA和配套工具e.g. EMF但在当时的技术背景下,由于能力不完备、过于理想化、技术门槛高等原因,一直没能在工业界走向主流。

我认为是低代码,Low-Code中的Low(图15)

而如今这个时代,支撑低代码的那些“老”技术都已经过长时间的发展酝酿与市场检验,而另一些完美互补的“新”技术(e.g. 云原生、响应式Web)也在飞速发展和走向成熟,是时候通过“低代码”这个新酒瓶重新包装上市,为亟需新生产力的传统IT市场带来一场真香之旅了。

业务收益不明显

即使十几年前的低代码技术已经足够成熟,也一定不会在当年的应用市场上产生现在这样的影响力。为什么?因为技术都是为业务服务的,而当时的应用业务需求可比现在简单多了:没有如今的多渠道(Multi-channel)多样化体验(Multi-experience)和各种集成与定制需求,也不会奢求如今已成为企业级应用标配的弹性、分布式和高可用,更是缺乏快速变化的IT业务场景来推动持续集成与快速交付。

虽然低代码可以完美解决上述所有问题(e.g. 多端应用生成、云原生架构、API集成能力)但放在当年的市场和业务背景下,加上前面所说的技术不成熟度,整体的投入产出比会很低,不足以让企业大面积采纳低代码解决方案。

我认为是低代码,Low-Code中的Low(图16)

而如今这个时代,企业都快被新技术带来的能力和收益“惯坏了”动不动就是:我想做一个送菜应用。用户端?安卓、iOS、H5、小程序都来一套。端?一般都在电脑上看,但记得手机上也得适配啊。服务端?上云,必须的。哦,我听技术合伙人说现在流行多云架构,也给我整一套哈。运维还要钱?啥是运维?应用有了不就能用了嘛,运维还要花我钱?你当投资者给我的钱是大风刮来的啊!

如果用传统的模式,这么全套下来的工时与报价,可能早就吓跑了这群跟产品经理一样天真可爱的人;但现代化的低代码技术,可以圆了上面这位创业者的卖菜梦,用白菜一般的价格,实现一样的价值。当年的程维如果能用上现在的低代码,第一版的滴滴App也就不至于被外包做得乌烟瘴气直接报废了(至少能多扛一阵子...)

为什么「专业者」也需要低代码?

虽然零代码确实是设计给非专业者用的,但其所能支撑的业务场景确实有限,无法真正革新传统模式,替代那些仍需专业者参与的复杂业务场景。而狭义上的低代码却有潜力做到这一点,因为它天生就是为专业者而量身定制的。Gartner最近的一项调研报告显示,“66%的低代码平台用户都是企业IT部门的专业者”这充分说明了,专业者比平民者更需要低代码。

屏幕前一批穿格子衬衫的同学要发问了:“低代码都不怎么写代码了,怎么能算是为我们程序员服务呢?”虽然程序员讨厌重复自己,但重要的事情还是得多说一遍: ≠ 写代码。1万年前蹲在洞穴里的原始人,在用小石子画远古图腾;100年前坐在书桌前的徐志摩,在用钢笔给林徽因写情书;而今天趴在屏幕前的很多人,相信都已经开始用上手写板或iPad涂涂写写了。千百年来,人类使用的工具一直在演进,但所从事活动的本质并没有多大改变。无论是用小石子还是小鼠标,写作绘画的本质都是创造与表达,最终作品的好坏并不取决于当时你手中拿着什么;同样地,应用的本质是想法和逻辑,最终价值的高低也不取决你实现时是用的纯代码还是低代码。

而相比纯代码而言,低代码极有可能成为更好的下一代生产力工具:

减少不必要的工作量

可视化拖拽与参数配置的极简模式,结合模型驱动的代码自动生成机制,可以消灭绝大部分繁琐和重复的boilerplate代码;一站式的部署和运维平台,无需自己搭建CI/CD流水线、申请环境资源、配置监控报警;一次搭建同时生成、构建和发布多端应用,免去人工同步维护多个功能重复的端应用;开箱即用的组件库、模板库、主题库、连接器等,让最大化软件复用成为可能。总而言之,低代码能够让专业者更专注于创新性、有价值、有区分度的工作,而不是把宝贵时间都耗费在上面那些不必要的非业务核心工作上。

强大的平台能力支撑

虽然上面列的技术支撑性工作并不直接产生业务价值,但却会直接影响业务的性能、成本、稳定性、安全性、可持续发展能力等。有远见的企业,绝不允许牺牲这些重要指标,来换取短暂的业务加速。低代码平台深知这一点,因此在简化和屏蔽底层技术细节的同时,也会尽可能把自己所cover的部分做到最好(至少能和纯代码方式一样好)包括但不限于:

现代化的技术架构和实现:现代化的低代码平台,在支撑用户应用时所选择的技术架构与实现方案,也会是现代化且符合业界最佳实践的,例如,前端基于主流的HTML5/CSS3标准和React框架,后端基于成熟的Java语言、SpringBoot框架和MySQL数据库,部署环境基于云原生的Docker镜像、CI/CD流水线、K8s集群和Service Mesh技术相关知识可参考《正确入门Service Mesh:起源、发展和现状》。

一体化生态能力复用

复用(Reuse)是提升软件效率和工程质量的最有效途径。传统的代码模式下,者可以通过提取公共类/函数、引用共享库、调用外部API服务、沉淀代码片段和模板等方式实现复用。在低代码的世界里,平台也可以提供对应的多层次多粒度复用手段,比如页面组件库、逻辑函数库、应用模板库等。

但更重要的是,低代码平台还可以充分发挥其一体化的生态优势,提供强大易用的可复用能力(资产)的发现、集成与共享体系:以页面组件为例,你可以直接用组件,也可以在平台自带的组件市场上搜索和引用更合适的组件,还可以自己用代码一个自定义组件并发布到市场中。平台的生态体系越大,积累的可复用能力就越多,应用的成本也会越低。

相比而言,虽然传统代码世界整体生态更庞大和深厚,但由于各类技术不互通、缺乏统一平台与市场、代码集成成本高等原因,一直以来都没有形成有类似规模潜力的生态能力复用体系,导致重复造轮子和低水平重复建设的现象司空见惯,还美名为“新基建”

说到这里,另一批裹着冲锋衣头顶锃亮的同学也忍不住了:“万一低代码真的发展起来了,是不是就不需要那么多程序员了啊?上有老下有小的,同是码农身,相煎何太急!”低代码虽然是一场应用生产力,但并不会革掉程序员的饭碗。它去掉的只是难懂的编程语法、繁琐的技术细节和一切可自动化的重复性工作,并没有也无法去掉应用最核心的东西:严谨的业务逻辑、巧妙的算法设计、良好的工程风格等。对于真正的程序员,即使剥去他一层又一层的编程语言和工具熟练度技能外壳,最终剩下的仍然是一个有价值的硬核者。

为什么「我不」需要低代码

质疑1:低代码平台不好使

“试用过一些所谓的低代码平台,要么能力很弱,要么体验太差,只能点玩具应用。”

作为调研过国内外多款低代码产品的深度体验用户,我的观点是:不能以偏概全。低代码市场在国内正处于爆发初期,所以许多与低代码只沾一点边的产品也都在蹭热点;但它们并不能代表低代码目前的业界水平和发展方向。市面上真正成熟的企业级低代码平台,完全有能力以高效的方式满足大部分复杂场景的功能需求,以及企业级应用所需要的安全、性能、可伸缩等非功能需求,这一点在国外市场已得到充分验证(不然也不会这么被寄予厚望)

当然,国内市场尚处于鱼龙混杂的混战阶段,遇到真龙的概率很低,但碰上金鱼鲤鱼甚至木头假鱼都在所难免。相信随着时间推移,真正有实力和口碑的产品都能脱颖而出,为大家展现低代码该有的样子。

质疑2:低代低不可控

“平台上的各种可视化组件、逻辑动作和部署环境都是黑盒,如果内部出问题无法排查和解决。”

作为同样不搞清楚底层原理不舒服斯基的程序员,我更愿意相信:问题只是暂时的。虽然这确实是目前使用低代码平台时绕不开的一个痛点,但并不属于低代码技术本身的固有缺陷。计算机领域有一句至理名言:任何问题都可以通过增加一个间接的中间层来解决。低代码的思路亦是如此:与当年的操作和现在的云平台一样,都是想通过建立一个黑盒化的中间层抽象来降低者的工作量与心智负担。

当然,所有额外增加的中间层都不是完全免费的,低代码也不例外。作为一个尚未成熟稳定的新的中间层,低代码必然会出现各种让使用者束手无措的问题,就跟当年的操作内核bug、如今的云主机I/O hang一样。但历史规律也告诉我们,所有伟大的技术最终都会走向成熟;只要低代码领域一直健康发展,问题总会越来越少,最终降到一个绝大部分人感知不到的范围内。过去萦绕在Windows用户心中挥之不去的“蓝屏”问题,对如今的新用户来说早已不知为何物;今天低代码者所遇到的种种“蓝瘦”问题,未来也终将成为被遗忘的历史(谁还没段黑历史呢)

质疑3:低代码应用难维护

“应用一旦复杂起来,各种复杂逻辑流穿插着自定义代码,看不懂也改不动,还不如全用代码呢。”

作为对软件可维护性深有感触的无脑级布道者见《救火必备!问题排查与优化手册》,我不得不说:用低代码,也要讲基本法。一般来说,无论是使用低代码还是纯代码,造成应用可维护性低的根本原因往往不在于工具,而是者自身没有去遵循一些软件的普适原则,比如工程规范性、命名可读性、DRY/KISS/SOLID原则等。

好的低代码平台绝不会阻碍者去改善应用的可维护性;恰恰相反,还会尽可能提供引导和帮助。以Mendix为例,除了支持基本的模型分析与重构(e.g. 无用模型、对象重命名、子逻辑流提取)以外,甚至还提供了基于ISO/IEC 25010标准的应用质量监控(AQM)能力。另一方面,让应用变得难以维护的一个客观原因也是应用本身过于复杂,而低代码作为高度抽象和自动化的模式,在降低应用复杂度方面是专业的。

五 低代码行业发展

回应质疑的最好方式,就是做好你自己,用实际的表现说话。对于一个行业而言,判断它当前的表现是否够好,或者未来是否有潜力做到更好,可以从以下这三个方面进行衡量:市场规模(蛋糕够不够大)适用场景(是否可落地)竞品状况(有没有被验证过)

市场规模

“Talk is cheap,show me the code money.” — Linus Starcraft

文章可以忽悠,但市场不会说谎:

Forrester在2015年曾预测过,低代码的市场将从2015年的17亿美元增长至2020年的150亿美元。

Marketsandmarkets在今年四月份的分析报告中预测,低代码的市场将从2020年的130亿美元(估算值,可以看出来与Forrester当年的预测是接近的)增长到2025年的450亿美元(年复合增长率:28.1%)

PS Inteligence在2018年的分析报告中预测,全球的低代码平台市场中,亚太地区将在今后五年(2019-2024年)中保持最高的增长速度。

我认为是低代码,Low-Code中的Low(图17)

总结一下就是两点:

低代码的市场规模足够大,且一直都在高速增长。

作为亚太地区的经济大国与IT强国,中国的低代码市场将会引来一个爆发期,未来几年内的增速都会超过全球平均水平。

适用场景

理论上来说,低代码是完全对标传统纯代码的通用模式,应该有能力支撑所有可能的业务场景。但理论也只是理论,低代码一统江湖的梦想尚未照进现实,也不可能完全取代现实。前文中提到过,低代码与纯代码方式是互补关系,未来也将长期共存,各自在其所适合的业务场景中发光发热。同时还需要指出的是,当前阶段的低代码技术、产品和市场都尚未完全成熟,因此部分本来可能很适合用低代码来的场景,目前也只能先用纯代码来替代。

Gartner在2019年的低代码调研报告中,曾经绘制过一张用来阐述低代码适用场景的“应用金字塔”

我认为是低代码,Low-Code中的Low(图18)

应用级别划分:从下往上,分别为工作组级(Workgroup Class)部门级(Departmental Class)企业级(Enterprise Class)可扩展需求极强的企业级(Extreme-Scale Enterprise Class)容易看出来,它主要的划分维度就是应用所面向的用户基数(基数越大,可扩展需求也越高)

任务关键性:从下往上,各级别应用的任务关键性(Mission Criticality)逐级递增。例如一个只在工作组内使用的后台应用,一般都不会涉及到影响整个企业的关键任务。脱离企业这个视角来看,整个软件产业中也有很多通用的任务关键型应用,比如:实时操作、航空调度、银行对账。

应用需求量:从上往下,各级别应用的需求体量(Volume)逐级递增,呈现一个金字塔形状。这个特征可以用万能的2/8原则来理解:20%的“全民”应用,由于需求的通用性和普适性,可以覆盖至少80%的用户群体(例如企业大部分人都要用的考勤)而剩下那80%的“小众”应用,由于需求的定制化和特殊性(例如蚂蚁的期权...)就只能覆盖各自小圈子里那20%的用户了。

竞品概况

我认为是低代码,Low-Code中的Low(图19)

上图分别是Gartner给出的低代码平台魔力象限和Forrester给出的低代码平台技术波谱。从图中可以看到:

OutSystems和Mendix一马当先,是公认的低代码领域头牌。这两家都是很纯粹的通用低代码平台,且都经过了长时间的发展和积累:OutSystems成立于2001年,员工人数1000+,年营收超过1亿美元;2018年6月获得了KKR和高盛的3.6亿美元融资,目前估值超过10亿美元;Mendix成立于2005年,员工人数500+,年营收超过2300万美元(18年数据)2018年8月被西门子以7.3亿美元收购。

Salesforce和Microsoft紧随其后,都处于行业领先者地位。但这两家的公司性质和发展路径都很不一样:Salesforce是以SaaS起家,公司规模就不用多说了,反正就是SaaS届的巨无霸。这类SaaS厂商做低代码的动力,是为了解决客户对成品SaaS软件的定制诉求。M$更不用多介绍,只说下他们做低代码的天然优势:一方面,作为办公软件,低代码可以帮助他们的客户实现从Excel表单到定制App的能力与体验升级;另一方面,作为云计算三巨头之一,低代码可以帮助他们连接内部的云计算生态体系,为者提供一个统一和易用的上云界面。

六 结语

本文总结了低代码领域的基本概念、核心价值与行业现状。虽然这些内容都比较基础和偏理论,但我始终认为,深刻理解一个的前提,正是这些务虚的东西 — 技术架构只会告诉你这个是怎么实现的(How)无法准确表述它到底能用来做什么(What)以及为什么要做这样一个东西(Why)而后面这两个问题的答案,才是后续所有设计与演进的根因和驱动力。

本文相关词条概念解析:

代码

代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括惟一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。源代码是代码的分支,某种意义上来说,源代码相当于代码。在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,它由通过编译器完成。

说点什么