——可视化编程是否真的没有未来?
今天想聊聊可视化编程(visual-programming)的未来发展,喂喂,咱们这儿还没开始,各位大佬先别急着走啊您……确实,可视化这个概念跟任何技术并称,都是技术前沿、下一个风口、万亿市场的代名词,数据可视化、可视化分析、神经网络可视化……唯独在一个领域似乎成了low和过时的象征——可视化编程。无论资深程序员还是风投大佬,只要你跟他提起这个概念,对方都会立刻露出一种“不提这个还能聊”的鄙夷神情。
然而可视化编程本来是一个多么朋克且具有未来感的语汇,它*的意义在于打破一些我们今天看起来不可逾越的技术壁垒,重新定义被称之为底层技术生态的一些东西。著名的信息技术分析公司Gartner早在2012年就提出了“全民开发者”(CitizenDeveloper)概念,指的是借助于一些组件化的集成代码可视化平台,一些不具备专业代码技能和开发经验的“小白”人群也能自主组织或参与应用开发,从而把代码开发由一项程序员专属职能扩充到更广泛的人群,甚至是全人类。想象一下,你们公司的保洁阿姨将参与下个季度的核心项目开发,隔壁的王大爷开发了一个名为“跳了吗”的程序用来约小区大妈一起能跳广场舞……妈耶,这将是一个多么不可思议而令人神往的时代,不仅是IT行业,整个社会都将发生天翻地覆的变革。
然而理想是雄壮的,现实却是悲壮的。从上世纪60年代至今,无数大佬在这个领域进行了前赴后继的探索,提出了各种解决方案,并开发出了配套的工具,目前可知的可视化编程工具已超过90余款。上世纪九十年代,还有人尝试开展一场运动,即在企业中普及可视化编程工具,通过UML CASE来定义和生成应用。这种工具的工作原理是通过可视化方法为系统建模,根据模型生成程序代码,任何代码的变更都可以反向反映到模型上。
但是这些实践都宣告失败了。截至目前,可视化编程只在一个领域取得了一些成果,你猜对了,就是以Scratch、Blockly为代表的儿童编程。想到这些,一股悲壮感油然而生,猛虎落泪.jpg。
那么现在问题来了。为什么一个看似如此潜力非凡的技术风向,却至今未能爆发出应有的潜能,反而受到专业人士唾弃?问题到底出在概念本身,还是缺乏有效的实现路径?对可视化编程的负面印象到底是一种偏见,还是它从根本上就是个糟糕的idea?有没有一种解决方案能够从底层实现革新,创造真正意义上实现可视化编程?这就是我们接下来试图讨论的问题。
一、可视化编程七宗罪——程序员眼中的可视化编程
为了解答可视化编程相较于传统编程到底差在哪里的问题,我们首先和一些程序员聊了一聊。他们是这样说的:
观点一:“编程就不该是一个用鼠标来做的事儿”
几乎所有的程序员都首先对现有可视化编程平台的工作方式提出了质疑。他们认为,大多数可视化平台都采用了Block Type(积木模块型),即通过“拖拽”、拼接并通过可视化窗口对一些对象属性进行定义的方式来实现项目的搭建。这是一种十分低效的编程方式。程序员的基本气节就是,宁愿用键盘敲出一行行代码,也不愿拖坏鼠标。
观点二:“可视化编程只能做做小程序吧”
多数受访程序员们认为,可视化编程工具听起来只能搭建一些前端页面,要么就是通过图形化节点的方式来做一些简单的程序序列,做做儿童编程还行,至于具有复杂数据架构的大型应用,别问,问就是做不了。
观点三:“那玩意儿咋维护呢?”
可视化编程的基本逻辑是实现代码到可视化图形的映射。一个简单的程序包含数百行代码的情况是常态,而当这些代码成为百上千个图形元素,阅读和理解的抽象程度、维护的困难程度甚至会超过以文本形式存在的代码。
观点四:“没有配套的编程系统环境,架构不完善,缺乏安全感”
高级语言历经了很长的发展历程,其实语言本身并没有什么本质提升,但是基本架构、代码库和配套的IDE却日益完善。而可视化编程目前还只停留在初级阶段,只解决了工具层面的核心问题,缺乏配套的工作环境和技术资源积累,将在很大程度上限制工作效率甚至抑制产能。
观点五:“我讨厌非开源的东西”
可视化编程工具基于对既有代码逻辑或对象进行封装来实现,却也因此而无法被轻松解耦,极大地限制了开发的自由度。如果遇到问题,是不是还要重新维护和开发可视化工具本身啊?何况有很多工具甚至还不是开源的。那我要这铁棒有何用…
观点六:“不具备任何复用性”
程序员们均认为,可视化编程工具开发出来的东西都是模块拼接而成的,缺乏有效的可复用机制,首先不具备清晰的数据结构,其次更无法被模块化。所以,只能开发一次性应用???
观点七:“可视化语言与代码本身完全割裂,无法兼容”
除了对于可视乎语言本身的指摘,很多程序员也表现出了对这种新工作方式的抗拒。他们觉得自己已经习惯了代码化的开发逻辑,很难适应一款从根本上存在歧异的“语言”。而如果在使用中要同时兼顾,则更加难以协调思维逻辑的转换。
可以看出,程序员对于可视化编程的抗拒心理主要围绕产能、开发效率、使用性、功能性等实践方面。尽管很多程序员都承认,可视化编程是一个好的概念,但是作为一种工具,它从逻辑上并不能真正实现对高级语言的简化,反而在操作层面将其复杂化了。一言以蔽之,所以可视化编程只能做为一种初级工具,作为高级语言的辅助品,而永远无法取代高级语言。
二、可视化编程工具市场调研——是否真的一无是处?
可以看出,程序员抗拒可视化编程,本质是在说,目前还没有一款成熟的可视化产品真的能够让他们体会到便利,解决他们后顾之忧。这让我们不禁开始思考,本质上这或许是一个技术发展阶段的问题,不是可视化编程这个思路不好,只是好的工具还没有问世?为此,我们调研了目前市场上的一些可视化工具,想要看看是否有一些工具已经做出了一些突破,或者具备实现突破的潜质。
调查显示,作为可视化编程的发源地,目前国外主打可视化编程、低代码编程的平台至少有十几家,其中*代表性的可以说是OutSystems、Mendix、Salesforce、Kony等几家。而值得欣喜的是,国内这几年也有一些功能相对完善的竞品出现,包括明道云、简道云、iVX等。关于这些平台的相关评测文章已经很多了,而这里我们不去比较平台的优劣,主要探讨这些产品在可视化编程领域的技术探索进展到了什么地步,对于传统技术生态的改造有哪些贡献,因此只在国内外产品中各选出一例进行讨论。
1.Mendix
Mendix一直被视为可视化开发领域的标杆产品,也是全球*的Paas提供商。虽然它的核心逻辑是早已不被看好的UML,但不可否认,它确实在这条路上走出了一些新意,告诉我们可视化开发也可以做很多事情。
首先,Mendix是一款目标非常明确的产品,它要解决的核心痛点就是可重复开发。而它解决问题的核心思路是建立可视化模型,通过建立模型之间的数据结构来实现应用模型的搭建。采用模型解释方法取代代码生成方法,一键部署和运行,而不需要再编辑、编译和运行。
Mendix的核心开发方式
在扩展性方面,Mendix使用Java语言编写Javaaction,扩充micorflow来使用定制代码,解决复杂业务问题;如果有更复杂业务,还可以使用提供的DSLs来调用。
Mendix的JAVA接口
同时,Mendix提供了一套完善的基础开发框架,允许使用敏捷方法来应用工具进行模型开发,最小模型为领域模型和GUI模型,services和外部数据源等。
可以看到,针对可视化开发可能存在的功能性、开源、安全性、开发效率等问题,Mendix至少都提供了一些解决方案。我们目前还无法完整评估这种解决方案是否高效,但至少在应用层面已经完全够用。从Mendix官网所提供的应用实例来看,可视化工具已经在某些开发领域体现出它相对于传统编程的优越性。
2.iVX
我们选择iVX作为国内可视化开发平台的代表,是因为它是真的秀,在很多方面让人耳目一新。来,让我们康康,iVX的首页一上来就号称它重构了一套可视化开发语言,Emmm,感觉有点暴躁,它是否真的能做到呢?
首先iVX告诉我们,“可视化编程”并不一定意味着“拖放”。iVX完全摒弃了被人诟病的块拼接模式,通过对象树方式来定义对象结构,通过事件面板的方式来定义对象间的交互逻辑和数据逻辑
iVX的核心开发方式
可以说,iVX在进行编程逻辑可视化的基础上,很好地保留了了原生的开发逻辑。例如,在事件这部分不是通过逐一为每个对象添加响应条件的方式来进行,而视采用条件、循环、动作、回调模块互相组合的方式来做,所有事件都被集成在一个面板里,一目了然
iVX的事件面板
而尤其值得表扬的是它的IDE,采用不同的颜色区分各种对象和事件模块,并支持对所有对象、数据和事件的搜索,能够添加备注,感觉有点厉害。
iVX的开发界面
在开源性和扩展性方面,iVX支持接入API和JS代码。同时非常有意思的是,他们还搞了一个叫小模块的东西,允许用户把自己开发的一部分东西抽象成一个组件,在可复用性方面还是挺有创意的。
我们还看到,iVX采用了前后端分离的数据架构,这无疑是处于对数据的并发性能和安全性的考虑。在同类应用当中这是一个比较具有前瞻性的布局,但是表现如何,还有待测试。
虽然说重新定义编程语言这事儿还不好说,但是iVX这款产品在很多方面都提出了一些具有创造性的解决方案,已经足以让人感到眼前一亮。它至少重新定义了一种新的零代码开发模式,帮助企业做一些建站、开发一些OA应用啥的,应该不在话下。
三、让开发人员用起来——可视化编程工具的未来
基于上面的描述,我们可以看出,目前很多可视化开发工具确实在技术领域取得了一些突破。核心发展的方向主要是两个,一种在于为特定问题或场景提供解决方案,如Mendix专注于可重复开发,国内一些云平台专注于为企业提供快速开发模组。另外还有一些工具则试图构建一款底层开发工具,提供一种全局性的开发思路,这个路无疑比较困难,但是他们也取得了不少进展。从目前已经商业化了的几款工具来看,工具功能已经发展到了可以胜任各类WEB应用、OA应用甚至构建一些平台的水准,也已经建立了基本成熟的aPaas平台的运营模式,有一些大企业入驻并体会到了可视化开发带来的便利。
尽管可视化开发工具并非一无是处,但它的问题也非常明显,距离真正重构技术生态还有着漫长的距离。例如在大企业最为看中的安全性和标准化问题方面,既有工具都还不能提供*的解决方案。而对于上下游资源的运营和新生技术生态的建构,也尚显幼稚。
可视化编程尽管在发展过程中经历了一些挫折,但近年来所取得的成就也应该受到关注。尽管开发人员对于代码的亲近和工具的抵触心理几乎是无法解除的魔咒,类似于一种精神洁癖。但是如果一款工具足够完善,势必能在技术层面撼动这种固有成见。而当更多的开发人员尝试使用可视化工具,并积极在这一领域探索,可以预见,未来可视化编程不仅能参与底层的应用架构,还将帮助我们在更高层次上对事物进行建模。