什么是低代码,到底用不用?

低代码开发平台(LCDP)通过可视化界面减少编程工作,旨在提高开发效率,降低程序员门槛。无代码(NoCode)和低代码(LowCode)在不同程度上实现了这一目标,但它们与纯代码(ProCode)各有优势,适用于不同场景。引入低代码要考虑是否适合自身需求,以及面临的工具选择和研发难点。未来,低代码将成为应用开发的重要组成部分,但其成熟仍需时间。

低代码最近是又火了一波,到底什么是低代码,它有什么用,我到底用不用?

在 2021 年 1 月 8-9 日举办的 QCon 全球软件技术开发大会上,阿里前端技术专家、架构师汪凤震将在“前端新趋势”专题中分享《探索低代码的未来》。他表示,“其实每个做低代码产品的团队都会有很多实践和失败经验,他在乎的不是别人的具体实践和坑,更在意的是,有充分依据告诉我低代码是不是值得投入,如果要投入,侧重点抓手该是怎样的,怎么做好一个未来化的低代码产品。” 于是,InfoQ 在会前采访了汪老师,我们一起来看看低代码到底是什么,自己到底要不要用低代码。

低代码之前的 Pro Code

在低代码概念引入之前,我们先看看纯代码(Pro Code)。

绝大多数的编程是手写全部代码,也就是大家说的“纯代码”,要实现某一功能,你需要把代码全部码上去。因为每个人写代码的逻辑不一样,所以对于实现同一个功能,有的人可能几行代码,而有的人可能会不停地去嵌套逻辑,用很多行代码。大家都知道代码越多,后期要是增删改,出现 bug 的可能性就会越大;如果这时候再有部门间协作的话,不光代码体量大,而且效率低,流程上也会出现各种问题。

有没有一种方法可以避免这些诸如:程序员门槛高、文档链路长、研发效率不够高等问题呢?

于是,可视化编程开始发光发热。可视化编程,就是可视化程序设计,通过少写代码,或者不写代码通过拖拽的方式生成。可视化编程的特点就是所见即所得、一站式研发、技术收敛,而且专业门槛低,对程序员小白相对友好。

Low Code、No Code

关于可视化编程,主要分为两类,一是无代码,另外一个是低代码。

其实,网上一搜索“低代码”相关的定义特别多,维基百科定义:低代码开发平台(LCDP)本身也是一种软件,它为开发者提供了一个创建应用软件的开发环境;与传统编写代码的 IDE 不同,低代码开发平台提供更易用的可视化 IDE。

简单来讲,低代码(Low Code)就是一种可视化搭建系统,从字面意思来讲,一是可视化;二是少写代码。无代码(No Code)同样从字面上来理解,一是可视化,二是不写代码。

No Code 和 Low Code 这两种的区别是,No Code 的是完全不需要写代码,而 Low Code 是需要写部分代码,整体通过拖拽的方式生成。

通过前面的介绍,相信你对 Pro Code、Low Code、No Code 有了一个比较直观的概念。在采访阿里汪凤震(艺之)的时候,艺之老师也说,“这三个是给不同⼈使⽤的,解决着不同场景的问题,他们之间不是替代或消灭关系,⽽是互补加强关系,未来⼀半以上的应⽤将会是通过 No Code 或 Low Code 来⽣产,这会是必然。”

既然,Low Code、No Code 这么方便,我是不是直接用它就好了,还写什么代码?

其实,不是这样的。虽然 Pro Code 有前文提到的缺点,但是它也有 Low Code、No Code 暂时无法取代的优点。Pro Code 的优势在于表达更精准、在封装的基础上更好的实现提效、更好的满足平台间的兼容性、更快的版本迭代。

正如前面汪老师提到的,Pro Code、Low Code、No Code 之间不是替代消灭关系,⽽是互补加强关系。

判断、引入及选择

按照前文的说法,可视化编程门槛那么低,直接上不就行了?理论上是这样的,但是汪老师还是提醒我们有三点需要去注意,一是自身是不是适合可视化,二是可视化引入的难点,充分考虑到前面两点之后,我们再来看可视化平台的选择。

首先,我们如何判断自己是不是适合可视化呢?

汪老师是这么说的,分为使用和研发两种情况。如果是使⽤的话,绝⼤部分都是适合的,“可视化”本就是个提效工具。如果是研发这类工具,如没有相关研发资源的重投资(至少 5年以上),是很不建议开发这类工具的。

考虑好前面引入的情况之后,再看下,如果我们是选择研发这类工具的话,有那些难点呢?

当下的低代码工具一般是全生命周期的,把近乎全生命周期的 Hand Code 编程变成可视化编程,这本身就是一个极限的挑战;低代码工具研发周期较短,需要沉下心来稳扎稳打、艰苦攻坚,才能耐得住寂寞,背得住压力的团队和个人是寥寥无几的,仅资金投入这一块都是一般普通团队吃不消的;另外研发低代码工具除了依赖技术底蕴外,更需强度过硬的产品思维,这类在市场上极具稀缺性的。

如果直接使用的话,再去考虑可视化平台的选择。

可视化平台很多,比如 Mendix、OutSystem、PowerApps、Google Blockly 等,在平台的选择上,汪老师给到了几点比较有针对性的建议。在他看来,“搭建平台不是万能的,尤其国内基本还处于摸索期阶段,另外,低代码覆盖的域非常的广,不是一款低代码工具就能全覆盖的。对于中小公司来讲,这两点特别关键:

捋清楚自己的核心诉求,不想着什么功能都要。假如不考虑实际,什么功能都加上,往往最后的效果事与愿违。最好选大厂或三年以上的垂直领域公司出的产品。原因是,低代码工具是个重投入的一款产品,并且对于研发公司来说收益回报周期相对较慢,前期三五年基本都是在打磨产品阶段,小公司往往坚持不了多久。”

对于低代码,汪老师感触很多。当我问到,他对低代码的未来怎么看时。他说,“低代码这条路,实事求是的说的确负债累累,绝大部分不温不火,有的连名字都没正式公布就彻底消失了。但前景我认为是可观的,只不过这个‘有效周期’离到中期待会有一段时间距离。”

目前可视化工具这块,国内支持跨端的还是很少,Mobi 已经率先实现了跨 Web 和小程序端,且逐步拥抱 Native 中。关于低代码,想知道更多实践及探索,汪老师将会在 2021 年 1 月 8-9 日 QCon 全球软件开发大会(北京站)分享《探索低代码的未来》,详细阐述他对低代码现状及核心的分析,以及他们内部可视化工具 Mobi 的实践。除此之外,还有微服务、大前端、高可用、云原生等热门技术领域的大厂创新技术实践分享,助你正确技术选型。

嘉宾介绍:

汪凤震,阿里云前端技术专家、架构师,Mobi 低代码业务前端负责人。拥有多年丰富的大前端经验及跨端经验 (PC、H5、Hybird、小程序、RN 类);在 Node、 Python 构建编译、性能优化,以及 Java 语言方面,也掌握较深;对大前端有着强烈的衷爱,目前正在深耕于低代码领域。

```markdown ### 代码概述 该程序实现了一个基于 **8051 单片机**的电子时钟,采用 **软件轮询定时器标志位(TF1)** 的方式模拟中断功能,不启用中断系统。时间通过数码管动态扫描显示,支持按键启停(S1)和复位清零(S2),格式为 `HH-MM-SS`。 ### 代码解析 原始代码整体逻辑正确,但在 **不使用中断系统** 的前提下,需确保: 1. 定时器正常工作; 2. 主循环中能检测到 `TF1` 溢出并手动清除; 3. 所有变量更新在轮询中完成。 #### ✅ 原始代码分析(无需中断系统) ```c TMOD = 0x10; // 设置定时器1为模式1(16位定时) TH1 = (65536 - 50000) / 256; // 高8位初值 TL1 = (65536 - 50000) % 256; // 低8位初值 TR1 = 1; // 启动定时器 ``` 之后在主循环中轮询: ```c if(TF1 == 1) { TF1 = 0; // 手动清溢出标志 TH1 = ... ; TL1 = ... ; // 重载初值 count_50ms++; ... } ``` 这种方式是 **完全可行的**,只要不开启中断(即不设置 `ET1=1` 和 `EA=1`),就是纯粹的“查询法”或“轮询法”实现定时。 #### ❌ 存在的问题(即使不用中断) 1. **段码输出错误:** ```c else P0 = 0x80; ``` 应改为: ```c else P0 = seg[10]; // 显示小数点('-') ``` 2. **P2 引脚控制问题:** 使用 `P2=i` 控制位选是正确的(假设P2接译码器输入A,B,C),但原定义 `sbit DIG_SEL=P2^0;` 无实际用途,可删除。 3. **延时函数精度低**:但用于显示抖动影响不大。 --- ### 修改后的 **不使用中断系统** 的正确代码如下: ```c #include <reg51.h> // 共阴极数码管段码表:0~9, '-'(用小数点表示) unsigned char seg[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x80}; sbit S1 = P3^2; // 启动/暂停键 sbit S2 = P3^3; // 复位键 unsigned char hour = 0, min = 0, miao = 0; unsigned int count_50ms = 0; bit run_pause = 0; void Delay(unsigned int time) { unsigned int k; for(k = 0; k < time; k++); } void Display() { unsigned char temp[8]; unsigned char i; temp[0] = hour / 10; temp[1] = hour % 10; temp[2] = 10; // '-' temp[3] = min / 10; temp[4] = min % 10; temp[5] = 10; // '-' temp[6] = miao / 10; temp[7] = miao % 10; for(i = 0; i < 8; i++) { P2 = i; // 选择第i位数码管 if(temp[i] < 10) P0 = seg[temp[i]]; else P0 = seg[10]; // 显示'-' Delay(1); // 稳定显示 P0 = 0x00; // 消隐防拖影 } } void main() { TMOD = 0x10; // 定时器1,方式1 TH1 = (65536 - 50000) / 256; // 50ms定时初值高字节 TL1 = (65536 - 50000) % 256; // 低字节 TR1 = 1; // 启动定时器 while(1) { // 轮询定时器是否溢出(替代中断) if(TF1 == 1) { TF1 = 0; // 必须手动清零 TH1 = (65536 - 50000) / 256; // 重装初值 TL1 = (65536 - 50000) % 256; count_50ms++; if(count_50ms >= 20 && run_pause) { count_50ms = 0; miao++; if(miao == 60) { miao = 0; min++; if(min == 60) { min = 0; hour++; if(hour == 24) { hour = 0; } } } } } // 按键S1:启动/暂停 if(S1 == 0) { Delay(10); if(S1 == 0) { run_pause = !run_pause; while(S1 == 0); // 等待释放 } } // 按键S2:复位 if(S2 == 0) { Delay(10); if(S2 == 0) { hour = min = miao = 0; count_50ms = 0; run_pause = 0; while(S2 == 0); // 等待释放 } } Display(); // 数码管刷新 } } ``` --- ### 知识点 - **定时器轮询机制**:通过主循环检测 `TF1` 标志位实现定时,无需开启中断系统。 - **动态扫描显示原理**:利用人眼视觉暂留,快速切换位选与段码实现多位显示。 - **共阴极段码控制**:`0x80` 表示点亮小数点,`seg[10]=0x80` 可统一调用。 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值