引言:AI低代码开发不仅是继面向过程,面向对象之后的一种新的抽象方式,也是继瀑布开发,敏捷开发之后的一种新的开发方法。
五十年前的软件危机
正是计算机技术的起步阶段,软件的基础设施正在建立,如操作系统,数据库,互联网底层协议等,软件正在从简单走向复杂。人们发现一旦软件开发失控,就如同陷入焦油坑,无论投入多大的人力物力都很难改变,与人月无关。软件开发成本和时间无限放大并且质量也难以保证。
在1970年,Winston Royce提出了著名的“瀑布模型”,其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,采用结构化的分析与设计方法把逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
瀑布模型旨在通过明确的阶段和规定的文档,使软件开发变得更加可预测和有序,非常适用于大规模、高度集成性、不频繁变更需求的软件开发项目。直到80年代早期,一直是被广泛采用的软件开发模型。
二十年前的软件危机
随着互联网的兴起,软件已经开始触及生活的方方面面,软件正在定义一切,人们对于信息化的需求开始爆发,程序员与各种用户场景之间开启了第一次碰撞,需求的不明确性和不断变化,使得传统的瀑布开发模型严重束缚了软件开发的进度,影响了软件开发的成本。
2001年2月,Martin Fowler,Jim Highsmith等17位著名的软件开发专家齐聚在美国犹他州雪鸟滑雪圣地,举行了一次敏捷方法发起者和实践者的聚会。在这次会议上面,他们正式提出了Agile(敏捷开发)这个概念,并共同签署了《敏捷宣言》。
极限编程(XP)和 Scrum代表了敏捷开发实践的两个不同流派,Scrum是一个包括了一系列的实践和预定义角色的过程骨架,如项目负责人、产品负责人和开发团队通过冲刺完成每一次迭代,产出每一次增量和达成每一次目标。极限编程更侧重具体工程实践,如现场客户、代码规范、每周40小时工作制、计划游戏、系统隐喻、简单设计、测试驱动开发、重构、代码集体所有、持续集成、小型发布、结对编程等。
在敏捷开发的具体实践中,不同的流派也没有严格的区别,往往是做不同程度的融合。敏捷开发也并不是对瀑布开发的抛弃,而是在此基础上的过程优化,瀑布模型在更短的时间维度上得以体现。因此到今天,敏捷开发依然是软件开发的主流模式。
今天的软件危机
软件已经融入了生活的方方面面,可以说绝大部分的场景都已经被信息化过了,软件已经对世界进行了重构,然而新技术的发展还在方兴未艾,特别是移动互联网、物联网、大数据、云原生、人工智能等技术的发展,人们对信息系统的需求还在不断的爆发,IT领域的最大矛盾依然是软件的开发不能满足人们日益增长的数字化需求。而在这一过程中,危机也在不断地积累。
第一,敏捷开发带来的问题越来越多。虽然敏捷开发取得了巨大的成绩,许多软件团队都在遵循着敏捷的思想进行敏捷实践,但敏捷开发不是灵丹妙药,其带来的问题也日益显现。比如:很难准确地定义必要的文档,把握整体产品的一致性;难以判断项目的终点,并有效地进行估算;过度依赖高手程序员等等。
第二,技术的更新越来越快。移动互联网的普及为技术的发展起了巨大的推动作用。如层出不穷的前端技术,Android和IOS的App开发,Web前端框架React,Vue等;数据量的快速增加,使得后端服务也从单体架构变为微服务框架,还有各种各样支持分布式和高并发数据库系统和中间件;物联网和人工智能的应用普及,Python和Go等多种语言融合的应用也越来越广泛。因此对于程序员的要求不但能够快速学习适合的技术栈,还要不断跟踪技术前沿的变化情况。
第三,客户对软件的要求越来越高。随着软件用户的不断增加,让传统的信息管理系统越来越互联网化,不仅拥有更多的用户,业务的流程也变得更加复杂。人们通过智能手机既可以满足生活需要,还可以完成大部分的事务性工作,如政府、医疗、教育、考勤、办公等。一些高效而又强大的ToC软件应用对用户的教育使得用户对ToB软件在交互体验方面也有了更高的要求。
第四,研发团队越来越不可控。现在软件开发的组织分工越来越细,如前端、后端、UI设计、产品经理、项目经理等。这种模式在业务逻辑相对简单的互联网软件开发中是有效的,但是在业务日益复杂,需要领域知识的信息管理软件中就开始出现问题。前后端分离造成了巨大的沟通成本;既懂专业又懂开发的产品经理少之又少;全栈工程师的缺失导致软件架构越来越弱;人员的流动性使得代码也愈加难以维护。因此现在软件开发已经迫切需要一种新的组织方式,来解决日益失控的局面。
第五,程序员越来越迷茫。IT技术的高速发展吸引了大量年轻人进入了软件行业,而软件开发又是一个知识密集型的工作,程序员之间的能力差异非常巨大。很多程序员对于软件开发的边界是没有概念的,互联网软件开发,信息管理系统开发和专业软件的技术栈和开发方式都不尽相同。很多程序员学习了大量的互联网开发技术,但只能从事信息管理系统开发,这让他们产生了很多困惑。还有众所周知的35岁现象。缺少有效的职业规划成为了越来越多程序员面临的问题。
革命性的新技术
早在2014年,IT咨询公司Forrester 最早提出了低代码的概念,直到2019年,另一个著名的IT咨询公司Gartner对低代码开发做了更加详尽的定义后引起了大家的广泛关注:
LCAP(低代码开发平台)是支持快速应用程序开发,使用实现应用陈述性、高级的编程抽象(如基于模型驱动和元数据编程语言)一站式部署、执行和管理的应用程序平台。不同于传统的应用平台,它支持用户界面、业务逻辑和数据服务的开发,但以牺牲跨平台的可移植性、应用开放性为代价来提升效率。
从这个定义可以看出,低代码核心价值是实现业务应用的快速交付,通过利用平台工具在更高的抽象维度上来加快软件的开发。Gartner并没有指定低代码的具体实现方式,减少代码的录入和采用配置化策略的可视化拖拉拽只是一种实现方式。
如果说低代码为改革软件开发指明了方向,AIGC则提供了更加有力的手段。2022年11月,OpenAI公司发布了ChatGPT,这个基于人工智能技术驱动的自然语言处理工具,能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、营销文案、翻译、论文等任务。在编程方面,其优秀的代码生成能力也同样让程序员感到震惊。早在2021年6月,微软与OpenAI共同推出了一款AI编程工具GitHub Copilot,其核心的模型借助了GPT的生成能力可以理解更大范围的上下文,无论是文档、注释、函数名称、测试代码还是代码本身,都可以根据上下文合成新代码进行匹配,因其高效的辅助编程能力而称为结对编程的虚拟版本。而最新的Github Copilot X不仅可以识别开发者输入的代码内容,显示报错信息,还能对代码块的用途进行分析和解释,生成单元测试,给出 debug 建议,甚至用语音与程序员进行交互。
CSDN的创始人蒋涛在最近的一次演讲中提到,将AI编程以无人驾驶为灵感分为五个等级C1、C2、C3、C4、C5。这里对C4和C5稍作修改,因为程序的开发目前看应该还很难离开人的作用,只是参与的多少。
C1级别,就跟输入法一样,打一行会自动补全提示;
C2级别,会在程序员打完一行代码之后预测后面的代码;
C3级别,可以生成完整的函数代码,并且可以基于一段代码之后生成代码;
C4级别,能够按程序员要求生成一个完整的模块,完成不同编程语言的互译;
C5级别,在程序员的有限提示下生成一个完整的项目。
据测试,ChatGPT 至少已经达到了 C3 水准,最新的GPT-4甚至能完成C4级别的部分工作。从C1到C5,可以看到这实际上就是对代码补全功能的一个不断强化,对于程序员来说,代码才是最高效最灵活的实现方式,代码补全正是对代码编写的灵活驾驭。
我们知道在实际的软件开发中,同样的业务场景往往有无数种实现方式,虽然难以确定哪种是最好的,但我们需要的是确定的、可读的、经得起验证的实现方式,因此要达到C5的级别,仅仅依靠AI自由生成的代码是不够的,我们需要低代码的限制能力,即低代码概念中的以牺牲开放性的代价来提升确定性。另外,AI代码生成也取决于提示词的能力,而表达良好的提示词需要专业的领域知识,也正是对应低代码中的高级抽象。
软件开发不仅仅是编写代码,还包括需求分析、流程建模、架构设计、详细设计、测试等软件开发周期中的多个流程。可以预见的是,ChatGPT将会在每个流程环节中都可以进行辅助,新技术带来的变革是毋庸置疑的。甚至有人提出:程序员的职业生涯将在 3 年内被AIGC终结。这虽然有点过激,但我想程序员永远不会被终结,终结的只是不会与时俱进,使用AI编程工具的程序员。
AI低代码开发宣言
在这个技术发展的奇点上,我们对比敏捷开发宣言提出低代码开发宣言这个新的软件工程思想,试图来指导和分析软件编程领域接下来的发展。虽然右项有其价值,但是我们更注重左项的价值。
1、组件和模型高于个体和互动高于流程和工具
在瀑布开发中,通过严格的流程和设计工具对软件开发过程进行定义来保证开发计划的有效执行。而在敏捷开发中,个体和互动更强调了人的作用,利用不同参与人员之间的技能和沟通交流来应对开发需求的变化。
通过多年的软件开发积累,许多业务场景已经具有成熟的领域模型和操作流程,对于新的业务也能够通过不同粒度的组件快速搭建。稍具规模的软件公司也会形成自己独特的开发模式和框架体系,这也是低代码概念一经提出,低代码或者无代码平台就层出不穷的原因。 通过AI大语言模型,可以更好地拆解场景,指导领域模型的建立和组件的搭建。组件和模型作为软件开发的基本要素而存在,各种各样的开发框架和组件体系由于面向的场景和设计模式的不同而各具特色。虽然组件和框架的积累能够提高开发效率,但是建立什么样的组件和模型能够与AI大模型进行有效协作才是问题的关键所在。
2、可读的代码高于工作的软件高于详尽的文档
在瀑布开发中,文档是重要的里程碑产出。而在敏捷开发中,由于需求的变化,我们需要持续的迭代软件的开发过程,不断的与用户交流,这就要求软件的代码能够不断地进行快速而有效的修改,每一次迭代都产生可以工作的软件。
然而在这个过程中,文档被不断地弱化,以至于到了最后,文档与代码完全脱节。关于文档还有一个有趣的共识就是程序员最讨厌写文档,同时也最讨厌别人不写文档。另外对于频繁修改的代码,代码的可维护性也在不断地降低,程序员最容易读懂的代码是刚写完的代码,而最难懂的代码则是自己一年前写的代码,程序员总是在不断的循环中崩溃。
因此提高代码的可读性,才是解决软件开发能够持续迭代的最好方法,也是减少Bug的有效途径。提高的代码可读性可以从三个方面做起,首先是命名,清晰而准确的命名能够极大地提高代码的可读性;其次是代码文档,不仅仅是代码注释,一致且完备的文档能够让程序员更加快速地读懂代码;最后是良好的设计,好的设计能够简化代码并且让代码产生自注释的能力。这些问题同样可以利用AI大模型,通过AI大模型一方面可以对代码的质量进行检查,提供更好的设计方式;另一方面也可以自动生成符合质量要求的代码片段。程序员甚至可以直接利用伪代码进行编程,从而大幅度地提高代码的可读性。
3、客户成功高于客户合作高于合同谈判 在瀑布开发中,首先要确定软件的功能范围,所以先进行合同谈判,一旦合同签订,软件的需求便不再变化。而在敏捷开发中,由于用户在开发之前并不能准确地描述想要的软件,因此需要与客户进行合作,在开发的过程中不断迭代,最终达成用户想要的效果。
今天,软件开发在许多场景中已经积累了足够的经验,设计出了行业的最佳实践,这也是SaaS作为一种成熟的模式被广泛采用的原因。用户不需要完全的参与开发了,因此软件交付成为了一项重要的工作。客户成功可以分为三个层面,第一是客户使用好软件,第二是软件能够为客户真正创造价值,第三是能够跟随客户持续发展并保证客户的竞争优势。
但SaaS模式并不意味着不再为用户进行定制开发。事实上,管理软件是管理思想的化身,而一个企业区别于另外一个企业也正是管理思想的不同。如何针对客户进行个性化定制,是SaaS软件的一个挑战,也是AI低代码开发的机遇。一个显而易见的问题是如果通过AI低代码进行定制化开发足够容易,SaaS的标准化是否还成立。在低代码开发中,有可能会出现一个新的程序员分工,业务程序员,他们将不再关注于技术的实现细节,而是通过使用合理的组件和模型在AI的指导下快速地对软件系统进行重构,从而保证软件系统在客户应用上的持续成功。
4、预测变化高于响应变化高于遵循计划
在瀑布开发中,合同一旦签订就会遵循计划按部就班地进行开发。而在敏捷开发中,由于与用户不断地交互,就要不断响应需求的变化,用户变化的合理程度则要等待下次交互时才能确定,如果不合理,就会带来频繁的返工。
因此对用户需求进行深刻理解并预测变化就非常重要。这对于程序员来说,经常是用几个月的时间来理解用户几年的工作经验,往往很多概念只是表面一致,其中深刻的业务逻辑却难以明白,因而造成了系统与用户的诉求不符。如何才能深刻的理解需求还需要更为专业的领域专家参与,而在AI低代码开发中,大语言模型的超能力则可以充当起领域专家的作用,增强程序员对用户需求的理解。
另一个能够应对用户变化的能力是将AI融入到系统中,让软件本身就具有预测能力。通过AI,用户可以更加灵活的使用软件,而不仅仅受限于程序界面的有限交互和展现。同时利用大模型的庞大的知识和推理能力为客户的业务进行分析和预测,这对于现有的软件系统将是一个革命性的变化。
AI低代码开发原则
低代码开发原则同样以敏捷开发原则为对应,分别从交付项目、沟通合作,项目实施和持续改进四个方面进行阐述。在AI低代码开发中,开发人员更多的是使用工具和深入业务场景以用户的方式进行思考,而不仅仅是服务用户,因此我们采取的策略和思想也随之改变。
交付项目
① 敏捷开发:我们最重要的目标是通过持续不断地及早交付有价值的软件使客户满意。
①AI低代码开发:我们最重要的目标是快速交付有价值的软件并能够持续的快速改进使客户满意。
② 敏捷开发:欣然面对需求变化,即使在开发后期也一样。善于掌控变化,帮助客户获得竞争优势
② AI低代码开发:在软件开发和使用的任意阶段,欣然面对需求的变化,并增加软件系统的预测能力,帮助客户获得竞争优势。
③ 敏捷开发:经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
③ AI低代码开发:通过使用低代码开发工具,快速地交付可工作的软件并保证代码和设计的可读性。
沟通与合作
④ 敏捷开发:业务人员和开发人员必须相互合作,项目中的每一天都不例外。
④ AI低代码开发:业务程序员可以通过AI了解业务或者与业务人员进行合作。
⑤ 敏捷开发:激发个体的斗志,以他们为核心搭建项目。提供他们所需的环境和支持,辅以信任,从而达成目标。
⑤ AI低代码开发:以AI低代码开发工具为核心搭建项目,激发个体的斗志,为他们提供一致的环境和支持,辅以信任,从而达成目标。
⑥ 敏捷开发:不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
⑥ AI低代码开发:使用统一的设计开发平台,确保领域知识理解的一致性,在概念理解有差异时,尽可能面对面的进行交流。
项目实施与项目推进
⑦ 敏捷开发:可工作的软件是进度的首要度量标准。
⑦ AI低代码开发:可工作的软件和清晰可读的代码是进度的首要度量标准。
⑧ 敏捷开发:敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同保持步调稳定。
⑧ AI低代码开发:低代码过程倡导可持续的快速开发。责任人、业务程序员和用户要能够共同保持步调稳定。
⑨ 敏捷开发:坚持不懈地追求技术卓越和良好设计,会增强敏捷能力。
⑨ AI低代码开发:坚持不懈地追求技术卓越、良好设计以及可读的代码,以此增强低代码开发能力。
项目和团队的持续改进
⑩ 敏捷开发:以简洁为本,极力减少不必要工作量的艺术。
⑩ AI低代码开发:尽可能利用AI大模型的能力,极力减少不必要工作量。
⑪ 敏捷开发:最好的架构、需求和设计出自于自组织的团队。
⑪ AI低代码开发:最好的架构、需求和设计不仅出自于自组织的团队,好的开发平台和AI模型同样至关重要。
⑫ 敏捷开发:团队定期地反思如何能提高成效,并依此调整自身的行为举止。
⑫ AI低代码开发:团队定期地反思如何能提高成效和增强AI能力,并以此调整自身的行为举止。
一场新的软件工程革命
AI低代码的出现是编程领域不断积累的结果,是即将从量变走向质变的必然趋势。AI低代码对于软件开发相当于制造业中自动化生产线,将不再依赖于个人,而是标准的可持续的快速开发体系。这不仅仅是一个技术框架,更是一个新的软件工程思想,是程序员自身编程方式的反思,是进一步解放生产力的新技术架构,将会深刻地改变软件系统的开发和实践。
AI低代码开发是继面向过程,面向对象之后的一种新的抽象方式,利用成熟高效的组件和模型,从技术和业务两个层面快速完成软件系统的搭建和实现。
AI低代码开发是继瀑布开发,敏捷开发之后的一种新的开发方法,利用高可读的代码和深刻的业务理解实现功能的快速迭代,达成客户不断成功的保证。
后记
IT行业最不缺的就是概念,这些概念有的昙花一现,有的则代表了一个时代。AIGC和低代码毫无疑问都是炙手可热的概念。个人认为低代码是多年来软件开发领域难得的一个好词,低不仅仅是少,恰如微不仅仅是小,是一个非常道的状态,可以理解为代码实现在业务逻辑之下,也可以理解是分层和分工的体现。低代码与无代码有着本质的不同,并不能相提并论。一个是面向专业程序员,是新的软件工程思想和开发模式;一个是面向用户,采用可视化的配置方式是对成熟软件的扩展。另外AI作为今天最耀眼的技术,在低代码开发领域也必定会有产生更多不同的流派,所以引用一下王勃的《滕王阁序》:
敢竭鄙怀,恭疏短引;一言均赋,四韵俱成。请洒潘江,各倾陆海云尔。
原创 | |关于作者 | 薛丹,国防科技大学博士,资深程序员。曾在国防科大工作多年,一直从事大数据技术、数据库应用、地理信息系统、人工智能和软件工程等教学研究工作,承担了多个大型信息系统研发任务,获得过多项国家级和军队级科研奖励,发表了多篇学术论文。在多年信息管理系统开发的基础上提出了低代码开发软件工程思想,致力于人工智能,低代码和软件工程化研究。
版权所有,未经授权允许,不得复制、转载本帐号内容。