无代码编程时代下,程序员要失业了?

640?wx_fmt=gif

 

640?wx_fmt=jpeg

作者 | Phodal

责编 | 伍杏玲

 

【CSDN 编者按】“中台之后,便是无代码编程。”无代码编程是什么?开发流程是怎么样的?有何优缺点?

无代码编程时代来了,就不需要程序员编写代码了吗?下面作者将跟大家聊聊无代码编程的那些事儿。

规模化的组织,经常要面临这样的挑战:每个应用的基础设施是相同的,部分的代码也是相同的,甚至于它们可能只是数据模型不同而已。结果却导致了,他/她们要一次又一次地重新编写一个应用。对于一个新的应用而言,它需要对接大量的三方(非自己团队)服务。服务之间的不断变化 ,导致了对应的使用方也需要发生变化。不断变化的业务,导致了前台的设计不断变化。为了应对快速谈的的前台服务,后台便诞生了中台,以提供快速的响应能力。而随着中台进一步沉淀,从某种形式上趋于稳定,而前台仍然需要快速地响应能力。

于是乎,作为一个前端开发人员,我们不断提炼和复用代码,想着的模式在之前的文章已提到了:

  • 脚手架

  • 组件库

  • 模式库

  • 模板和模板应用

对应的,我们还创建了一系列的 CLI、工具集、编程器插件以及设计系统,以完成整个系统的快速开发。然而,我们还缺少一套有效的工具,来统一化的管理这些工具。

换句话来说,就是:我们需要一个前端的中台,它便是无代码/低代码编程。

 

640?wx_fmt=png

什么是无代码编程?

 

无代码/低代码是一种创建应用的方法,它可以让开发人员使用最少的编码知识,来快速开发应用程序。它可以在图形界面中,使用可视化建模的方式,来组装和配置应用程序。开发人员可以直接跳过所有的基础架构,只关注于使用代码来实现业务逻辑。

当然,从开发人员的角度来看,降低代码量,可能是:

  1. 框架本身处理了复杂性。毕竟 “复杂度同力一样不会消失,也不会凭空产生,它总是从一个物体转移到另一个物体或一种形式转为另一种形式。”

  2. 代码生成减少了工作量。大量的复制、粘贴需要更多的时间。

流程

只是凭借这个概念,我们是无法理解无代码编程的。于是,我画了一张图来展示相应的架构和流程:

640?wx_fmt=jpeg

低代码编程流

依照我的观点来看,我将无代码编程分为了两部分:

  • 用于构建 UI 的编辑器——一种在线的拖拽式 UI 设计和页面构建工具

  • 用于编写业务逻辑的流编辑器——通过流编程的方式来编写业务代码(多数是对于数据的处理)

UI 编程器

为了设计出我们的 UI 构建器,我们需要准备好一系列的基础设施:

  • UI 编程器。用于拖拽式设计 UI。

  • 空白脚手架。一个带有完整的应用生命周期的项目,但是它是一个空白的项目——用于我们在构建 UI 的过程中,随时随地的添加组件和代码。

  • 设计系统。我们需要一个完整的组件库,大量的页面模板,以及一定数量的模板应用,减少相应的开发工具量。

  • 代码片段集。它将设计系统中的组件库进一步实例化成代码段,在完成编辑后通过 CLI 来动态编辑代码。

  • DSL(领域特定语言,可选)。中间生成物,用于隔离框架与设计。

流编程器

  • 流编程器。用于拖拽式、输入编写业务代码。

  • 后端服务。如果不能提供现成的后端服务,则需要拥有一个标准的 API 规范,以及相应的 mock server。

  • 模式库。包含相应的业务处理代码,如通用的登录、数据获取、UI 交互等。

  • DSL(领域特定语言,可选)。同上

当然了,我们还需要能实时预览构建出来的应用。随后,我们执行了构建,而后构建出了一个半成品应用。开发人员只需要在它的基础上开发应用即可。而在开发人员开发的过程中,我们可以设计一系列的工具,来帮助开发人员更快速地构建应用。

  • 编辑器插件。包含设计系统、模式库等的自动完成代码,以及组织内部常用的代码库。

  • 调试工具。对于混合类型的应用而言,我们还需要一个开发工具来快速构建应用。

从上述的流程上来看,无代码编程还具有以下的特点

  • 拖放式界面。又或者是可视化模型——基于节点和箭头。

  • 基于视觉的设计

  • 可扩展的设计。如对于插件、插件商店,社区等一系列的支持。

  • 跨平台功能。支持 PC Web 应用开发,支持移动应用构架等。

  • 强大的部署后。即平台包含着整个应用的生命周期。

  • 拥有丰富的集成支持。可以随意的找到需要的组件,以及对应的后台服务。

  • 配置化。它也意味着大量的自定义配置。

  • 自制的领域特定语言(可选)。用于构建时优化。

优缺点

相应的,它具有以下的一些优点:

  1. 高效。不用多说,节省时间和开发成本。

  2. 有限的 Bug,安全性。

  3. 低成本。其所需的预算非常有限。

  4. 易用(取决于设计)。

  5. 开发速度更快。

  6. 开发过程中的 AI 。

  7. 维护成本低。

对应的相应的缺点有:

  1. 仍然需要编程技能。

  2. 受限的自定义能力。

  3. 可扩展性成了新的问题。

  4. 集成受限。

就当前而言,低代码开发平台通常分为两大类:

  • 对于外部:制作简单的产品,如网络移动应用程序

  • 对于内部:为您的团队或企业创建业务应用程序

诸如只使用 CRUD、表单、验证、简单聚合、分页等简易的服务。最常见的例子就是表单构建了,诸如金数据这样的应用,便是可以直接通过拖拽元素来生成,相应的开源实现有 jQuery Form Builder。

对于开发人员来说,我们只需要定义好数据模型,再通过拖拽来决定元素的位置即可。从这种角度来看,只要能使用 Serverless 构建的应用和服务,都可以直接使用低代码开发模式。

 

640?wx_fmt=png

开发流程对比

 

从我们的理解来看,传统应用的开发流程是:

  1. 分析、设计、确认、规划需求。

  2. 设计系统架构。

  3. 搭建前后端项目。选择技术栈、从零开始搭建或者从脚手架中创建。

  4. 搭建持续集成。

  5. 创建线框图和高保真原型。

  6. 设计数据模型,定义前后端契约,即 API URI、方法、字段等。

  7. 前后端实现业务逻辑。

  8. 前端实现 UI 页面。

  9. 集成第三方后端服务。

  10. 功能需求测试(DEV、QA、ST、UAT)

  11. 跨功能需求测试(安全性、性能等)

  12. 部署到生产环境。

低代码开发流程:

  1. 分析、设计、确认、规划需求

  2. 选择需要的第三方 API

  3. 在可视 IDE 中绘制应用程序的工作流程、数据模型和用户界面。

  4. 连接 API——通常使用服务、函数发现。

  5. 编写业务逻辑(可选)。手动代码添加到前端或者自定义自动生成的 SQL 查询。

  6. 用户验收测试。

  7. 部署到生产环境。

从步骤上来看,无代码编程少了几个步骤。这些步骤都因为大量丰富的内部系统集成,而变得非常简单。

 

 

640?wx_fmt=png

适用场景

 

就当前而言,无代码编程实际上是一种高度的场景预设的模式。因此,它存在一定的适用场景:

  • 模型驱动开发。

  • 快速 UI 构建。

  • 极简的业务功能。

  • IT 资源受限。在资源受限的情况下,能快速开发出符合业务需求的应用最重要。

而从流程上来看,对于一部分的应用来说,我们并不能实现无代码编程——存在一些业务上的不同之处。因此,多数场景之下,只是实现了低代码编程。

若是想真实的无代码编程,则需要一些更特定的场景:

  • 设计表格(输入数据)

  • 创建报告(组织数据)

  • 常规调度和自动化过程(操纵数据)

更多的场景正在探索中。

 

640?wx_fmt=png

无代码编程的挑战

 

无代码编程,除了需要准备好上述的一系列基础设施,还不可避免地会遇到一系列挑战。

  1. 谁来写这部分代码?

  2. 客户端的基础设施准备。

  3. 服务端的服务平台搭建。

  4. 统一用户体验设计。设计出一系列能便利组合的组件,及对应的模板页面。与此同时,它们还能适应于不同的风格,即有多样性的主题支持。

  5. DevOps 流水线设计。低代码编程,依赖于一系列的自动化工具,以实现构建、调试、部署以及维护,同时还包含应用的测试。

  6. 领域语言设计。

  7. 自动化测试。如果我们的前端代码是自动生成的,那么我们还需要对它们进行测试吗?这是一个好问题,而如果代码是自动生成的,那么测试也应该是自动生成的。毕竟要在平台上,编写大量的自动化测试,以保证平台的质量。

其中,有一些部分略微复杂一些,我们大概可以探索一下。

 

640?wx_fmt=png

谁来写这部分代码?

 

在我们创建这样一个平台和工具时,我们要考虑的第一个问题是,这个工具是为谁写的?

  • 没有编程经验的人。如业务人员,他/她们对于业务系统有着非常丰富的经验。

  • 有编程知识,但是没有经验的人。

  • 有一定经验的开发人员。

  • 有丰富经验的开发人员。对于专业的人来说,自动化就意味着缺少灵活度。甚至与自己编写相比,他们要花费更多的时间来修复生成的代码。

显然,对于相当有经验的开发人员而言,这个工具并不一定是他们所需要的。

 

640?wx_fmt=png

客户端基础设施

 

从我的理解来看,它适合于快速的 MVP 构建,并且生成的代码还应该方便修改,而不是诸如早期的 DreamWeaver 或者 FrontPage 这样的工具。

而与此同时,由于面向的开发人员水平不同,我们所需要做的工具也不同:

  1. 支持云构建和调试。

  2. GUI 编程应用。

  3. 代码生成。

  4. 设计系统体系构建。组件库搭建,模板应用创建等。

更难的是,容易让开发人员能接受代码生成。

 

640?wx_fmt=png

服务端

 

对于一个低代码平台而言,它对应的后端应该:

  1. 大量可用的现有服务。身份验证、安全性、推送能力、地图等等。

  2. 快速构建出后端服务。若是有内部 Serverless 或者 FaaS 方案,可以说是再好不过了。

  3. 方便与第三方服务集成。

  4. 灵活性。支持多语言等。

统一的后端服务 API,对于后端服务来说,我们需要一个通用的范式。所有的 API 应该按照这样的范式来设计。不过,作为一个 API 的消费方,我们可能没有这么大的权力,但是我们可以采用装饰器模式,即封装第三方 API 成统一的方式。为此,我们采用的方式,仍然是:

  • 契约。诸如 Swagger UI,它可以直接创建一个简易可用的服务。

  • BFF。即我们一一去按我们的需要,去封装这些第三方应用。

  • 查询语言。与自己编写 BFF 相比,更简单的方式是采用:GraphQL 这样的后端查询语言,便捷性更高、模式更加灵活。

在开发前的设计期里,我们需要首先设计出对应的领域模型。

 

640?wx_fmt=png

领域语言设计

 

低代码环境使用(图形)建模语言来指定整个系统、产品的行为。它意味着:

  1. 将数据结构、领域模式应用到程序的各个层级中。

  2. 将业务规则、决策融入到应用中(层级)。

这也就意味着,我们需要设计一个模型语言。而它对于我们而言,实际上是领域特定语言(DSL)。如下是一个简单的 DSL 示例,用于描述使用到的组件:

 
 

{'style''','id': 2,'blocks'
    [{'content': {'content''content','title''hello'},'type':'card'}]
 }

除此,我们还需要设计对应的布局 DSL,诸如于:

 
 

H:[circle1(circle1.height)] // set aspect-ratio for circle1
HV:[circle2..5(circle1)] // use same width/height for other circles
H:|[circle1]-[circle2]-[circle3]-[circle4]-[circle5]|
V:|~[circle1..5]~| // center all circles vertically

最后,我们还需要将流代码,转换为真实的项目代码。三种类型的 DSL 结合下来,都不是一个轻松的工具。

 

640?wx_fmt=png

原型设计

 

写好现有的组件,通用型接口。如常见的登录接口,对于使用登录接口的业务来说,它们只关心三部分的内容:

  1. 成功登录。

  2. 取消登录。

  3. 登录失败。对于客户端而言,可以视为取消登录。对于服务端来说,则可能是密码错误、用户名不存在、账号被锁定等。

对应于以上情景,又有一些通用的逻辑处理:

  1. 登录成功。保存 Token,并返回历史页面。

  2. 登录失败。弹出一个自定义内容的提示框。

这些代码是相似的。

前端原型

在一些简单的前端应用里:

  • 模板。只是在使用这些模板,再为这些模板设置相应的属性,绑定对应的值。

  • 数据。其过程都只是在各种保存变量的值,并 CRUD 这些变量的路上。为此,我们需要一个数据处理的管道架构设计,用于处理这些值。

  • 函数。事实上,我们的所有函数都只是一些管理函数,只用于处理这些对应的逻辑。

这些常见的功能都可以做成一些组件,它们对于某些应用来说,代码相应的重复。

  • 无限加载页面。只需要绑定上 API,再控制一下元素的显示与隐藏即可。

  • 表单。定义好字段即类型,对应的前后台逻辑都有了。除此,我们还需要为它们自定义好常见的规则,如正则表达式。而一旦表单之间有联动,那么这个组件的设计就更加麻烦了。

  • 卡片式元素。

  • 表单和表格展示。

  • 常见图表。事实上,已经有一系列的图表工具了,我们只是在它们在基础上,进行了二次封装而已——使得它们可以变成领域语言的形式。

  • 高级的响应式布局。与每个应用独立开发布局不同的是,低代码平台需要提供一套强大的自定义、响应式布局设计——即要满足移动端的通用模式,还要满足桌面版的通用模式。如对于大量数据来说,桌面端使用的是 Pagination,移动端使用的是无限滚动。

后端原型

事实上,对于后端来说,低成本平台意味着,代码生成及服务生成。而服务本身是有限的,既然是业务上发生了一些变化,后端服务也可能并不会发生变化。

它也意味着:

  • 微服务化。每个后端服务要尽可能的小。

  • API 规范化。即采用统一的 API 格式,接受统一的权限管理

  • 大量的 API 服务。

  • 快速集成第三方服务方案。集成第三方服务是开发应用不可避免的情况。为了应对这个问题,我们需要做准备好对应的创建服务逻辑,传入第三方服务所需要的参数,便可以直接生成我们的转发服务。

那么,问题来了,既然如此,我们是否能提供一个定制的工具呢?让每个人可以创建自己的组件流?

答案,显然是可以的。

 

640?wx_fmt=png

概念证明

 

于是乎,在我最近设计的 PoC (概念证明)里,采用的是 Anguar 框架。相应的基本思想如下:

  1. 使用 Material Design 作为组件库,使用 CDK 的 Drag 来实现拖拽功能。每个拖拽的组件,称为 Element(元素),由 ElementDispatcher 由根据数据生成对应的组件。可拖拽的部分由两部分组成:布局 + 元素。

  2. UI 构建完后,生成对应的 DSL,目前采用的是 JSON。毕竟数据结构是最简单的领域特定语言。

  3. 借由 Angular Schematics 解析这部分的 DSL,来生成相应的项目代码。

 

相关开源项目:

拖拽式 Web 建造工具:https://grapesjs.com/

基于 Flow 的编程工具:https://noflojs.org/

DSL 布局生成器:https://github.com/ijzerenhein/autolayout.js/

可视化数据流编辑器:https://github.com/Gregwar/blocks.js

基于 React 的内容生成器:https://github.com/vigetlabs/colonel-kurtz

参考资料:

https://www.process.st/low-code/

https://medium.com/@stefan.dreverman/decisions-to-take-for-your-low-code-architecture-c0768b606f

https://medium.com/@stefan.dreverman/analyzing-coinmarketcap-data-with-neo4j-4930ba0068e1

https://www.outsystems.com/blog/what-is-low-code.html

https://medium.com/@stefan.dreverman/starting-a-low-code-application-architecture-13170fcd6fc7

https://www.quora.com/What-is-low-code

作者简介:黄峰达(Phodal),ThoughtWorks Senior Consultant,CSDN 博客专家。长期活跃于 GitHub、CSDN,专注于物联网和前端领域。出版著作《自己动手设计物联网》,以及《Growth:全栈增长工程师指南》等六本电子书,并译有《物联网实战指南》。

本文经授权转自作者公众号「Phodal」。

人工智能学习路线+实战训练

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

【End】

640?wx_fmt=jpeg

 热 文 推 荐 

 极客头条

☞ 技术头条

☞ 携号转网艰难走到了第九个年头,究竟如何从技术上攻克?

☞ 为什么说要注销 QQ 的,都是君子呢?

☞ 2019年技术盘点微服务篇(一) | 程序员硬核评测

☞ 如何将TensorFlow Serving的性能提高超过70%?

☞ 如何教小朋友编写第一个程序?

☞ 大数据杀熟时代, 隐私被扒光的你毫无自由可言, 而隐私币就是你的那根救命稻草!

☞ 现实!程序员只有跳槽才能涨薪吗?

 

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

易语言是一门以中文作为程序代码编程语言,其以“易”著称,创始人为吴涛。易语言早期版本的名字为E语言。其最早的版本的发布可追溯至2000年9月11日。创造易语言的初衷是进行用中文来编写程序的实践,方便中国人以中国人的思维编写程序,并不用再去学习西方思维。易语言的诞生极大的降低了编程的门槛和学习的难度。从2000年以来,易语言已经发展到一定的规模,功能上、用户数量上都十分可观。诞生背景 中国计算机应用的发展在经过操作系统汉化显示环境,中文输入法的两次较大跨越后,正经历一个重要的历史时期:中文化编程已成为当务之急。   英文编程软件只能使用英文输入程序代码,并且需要用户掌握大 易语言认证与推广照片 易语言认证与推广照片(17张) 量专业英文术语。   而且国人的述事习惯与外国人的语法习惯还有很大区别,如外国人表示"按从小到大顺序排",而中国人的表达方式为:"按从大到小方式顺序排"或简称"按降序排"。外国人的语法大多数是与中国人不同的,再加上英文有多种语态,有时间动词,有不同的复数形式,这在中国人学习外语上都不能很好的适应。更何况英文编程中大多数用大写缩写的方法表示一个概念、定义和变量,因此如果不了解的人是无从知道,而中文几个字即可简单表示了。中文具有比较明确的归类表达方式,如公交车、小汽车、自行车、吉普车均是行走的车辆,都与车有关,而英语每个事物都有一个不同的名词,不容易记忆,如BUS公交车,CAR小汽车,BIKE自行车,JEEP吉普车。因此这种方式如果套用到编程上,那么每个变量均用不同的代表,那样要记忆的词汇量就非常巨大了,有个对比,中国人只要掌握3000个字就能读名著,而外国人必须掌握30000个以上单词才能看明白报纸。因此小的记忆量可以适合在编程中只考虑方法,而不必过多地考虑语法、变量的名称等。而且由于中文是方块字,包含的信息量也大,能够见文知义。 通过以上,东西方文化的差异造成对编程学习上的很大区别,中文文化背景决定了中国人还是学自己的编程语言好。 [1] 市场推广 2004年易语言获得《科技查新报告》,《科技项目鉴定测试报告》 培训推广图册 培训推广图册(20张) ,《科技项目技术经济评议书》的认可。“易语言汉语编程环境”成功通过国家鉴定,易语言获2004年《大连市科学技术进步奖》二等奖。 2004年易语言正式走上讲台“吉林市计算机专业骨干教师培训班”,2004年7月11日至17日,在吉林市教育局的大力支持下,应吉林市教育学院职教部的邀请,易语言公司培训教师史世恒老师前往吉林,做为期七天的“吉林市计算机专业骨干教师培训班”教学活动。这是易语言与中等专业教育学校的首次合作,同时也为易语言走进教育事业迈向了可喜的一步! 2004 年7月28日-31日易语言参加软交,大连大有吴涛易语言软件开发有限公司参加中国国际软件和信息服务交易,展台位置在大连星海展中心东22号门旁边,届时易语言将携简体中文版、繁体中文版、英文版、日文版向全世界展示! 2005年3月出版发行《易语言编程系统》由易语言公司组织、易语言教材编委编写。本书按易语言4.0编写。 2005年4月21日中国教育学中小学信息技术教育专业委员和各专家领导参与的易语言在中小学项目的推介与申报项目议在北京招开。 2005年8月3日,“易语言汉语编程环境”国家火炬计划证书已颁发,国家科学技术部火炬高技术产业开发中心颁发“易语言汉语编程环境”国家火炬计划证书。5月由该公司申报的“易语言汉语编程环境”项目已被立项。 2005年8月22日至2005年8月26日全国中小学计算机教育研究中心北京部主持易语言全国首次高级培训,大连大有吴涛软件开发有限公司承办的易语言全国首次培训在大连举行。 2005年12月26日,易语言在中小学实验与推广项目教师培训在美丽的 易语言在宁夏和云南 易语言在宁夏和云南(17张) 株洲隆重开题。 2005年易语言在中小学实验与推广项目已全面启动, 由中国教育学中小学信息技术教育专业委员(北京,普教系统)组织,易语言公司提供技术支持的"易语言在中小学实验与推广项目"已全面启动。 2006年1月10日-15日在浙江省首次举行中小学骨干教师开题培训。绍兴市中小学信息技术教育中心、绍兴县教师发展中心、绍兴柯桥中学承办了本次培训工作。 2006年由宁夏教育厅教研室和山东教育出版社编写的《初中信息技术·第3册下》已出版发行,全文讲解了易语言的程序设计方法。本教材已在宁夏的所有初中学校中使用。 2006年9月1日易语言公司参加南京软博。公司随大连展团为期四天,参加在南京市举办的第2届中国(南京)国际软件产品博览。 2006年10月26日-31日云南省易语言开题培训召开。全国中小学计算机教育研究中心“易语言在中小学实验与推广项目”在云南省首次举行中小学以及职业高中骨干教师培训。 2006年12月14日,“易语言”项目培训工作在宁夏大学教育科学学院网络实验机房顺利举行。 2007年3月28日-4月1日1“易语言在中小学实验与推广项目”在大连市开题培训,全国中小学计算机教育研究中心“易语言在中小学实验与推广项目”于,在大连教育学院举行首次初中骨干教师培训。 十大自主创新产品奖 十大自主创新产品奖 2007年6月21日,中国软件自主创新论坛暨中国软件自主创新排行榜颁奖典礼在大连举行。“易语言汉语编程环境”获2007中国”十大自主创新软件产品奖。大连大有吴涛易语言软件开发有限公司的“易语言汉语编程环境”以软件自主开了一款全中文、全可视、跨平台的编程语言,在易语言及其编译器的设计与实现、可视化汉语编程的构建、提供多种语言版本等方面具有创新,在技术上居于国内领先地位,达到了当前同类产品的国际先进水平的原因被评为中国 “十大自主创新软件产品奖”。 2008年6月易语言第一部系统的视频学习教程《易语言百集教程》由世恒老师完成并发布。 2010年12月3日易语言运行时环境通过计算机病毒防治产品检验中心的安全检验,检验依据为:GA243-2000《计算机病毒防治产品评级准则》,检测结果:均未发现病毒。 [2] 语言组成编辑 支持库 易语言支持库类似于普通的程序的DLL文件。 这个支持库是易语言专用的,别的程序调用不了的,扩展名有fnr、fne、npk三种。 fnr、fne都是制作好的DLL文件,例如系统核心支持库、应用接口支持库。该类支持库一般由用户使用C++或Delphi制作,具体可以看易语言支持库开发手册。 npk属于易语言COM包装支持库,该支持库是引用COM包装库生成的,例如WebBrowser、Windows媒体播放器。该扩展名格式支持库可用记事本、写字板打开。该支持库可以由用户制作,制作方法:在易语言上点击工具--“类型库或OCX组件→支持库”命令。 模块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值