DDD是AI编程的未来吗?AI编程的思路

DDD落地AI编程的思路

大家好,我是范钢老师。最近这段时间,我通过20多篇文章,从基础概念的理解,到软件项目的深度落地,给大家深度剖析了DDD领域驱动设计的那些事儿。然而,有朋友提出了不同的意见。他说,现在已经进入AI时代了,再来讲DDD已经没有意义了。未来程序员都要被淘汰了,谁还在学习和研究DDD呢?

对于这样的看法,我却得出了截然相反的结论。我认为,DDD不仅不会过时,还将成为AI时代的大势所趋,重新焕发生机。对于这个结论,可能有同学会感觉莫名其妙,DDD和AI是哪儿跟哪儿啊!怎么就扯到一起了呢?今天,我们就好好探讨一下这个问题。

AI是否取代人类开发软件

2022年,随着ChatGPT的横空出世,LLM大语言模型已经彻底改变了我们的生产生活方式。然而,大语言模型的神奇之处在于他强大的推理能力,能够理解我们的语言,基于我们的自然语言进行推理,进而理解我们说的话,推断我们想要做的事,然后帮助人类一步一步地完成许多复杂的任务。正是因为有这种强大的推理能力,他可以帮助我们编写程序。我们只需要告诉AI我们的需求,他就可以帮助我们咔咔咔地把程序编写出来,然后正常运行。一个经典案例就是,我们告诉AI,用python写一个“贪吃蛇”的游戏,他就麻溜地、自动地完成了一个“贪吃蛇”游戏,并且可以很好地运行起来。

那么,AI是否要取代人类去开发软件呢?No, no, no! 你把事情想简单了。诚然,AI确实可以代替人类,在人类完全不需要干预的情况下,完成一些简单的程序。国外甚至还开发出了Cursor这样的AI编程工具,在人类不干预的情况下,由AI完成很多前端开发的工作。然而,随着我们对AI编程不断深入的应用,许多的弊病却逐渐显现出来。

就像人类早期的软件开发一样,是不是只要程序可以运行,能满足客户的需求,程序无论怎么写都可以呢?起初我们是这样认为的,然而随着系统复杂度的增加、需求的频繁变更,系统的维护与变更将变得越来越困难。痛定思痛,使我们深刻认识到,除了满足客户需求,还要编写高质量的代码,才能保证一个系统的长期持续的维护与变更,否则将难以为继。AI编程同样也是这样。

表面上看,我们只要给AI一个需求,AI就能根据需求,自动完成编码。然而,在不受控制的情况下,AI将趋向于,凭借自己一己之力,去完成这个功能中的所有内容,而不是调用其它已有的代码。譬如,如果这个功能需要访问数据库,那么他就会自己去连接数据库,编写SQL语句去操作数据库,完成需求中所有的功能,而不是复用现有的技术框架。这样的设计,就使得AI编写的代码,代码冗长,缺乏层次,缺乏规范,缺乏复用,更缺乏许多精妙的设计,降低耦合、提高内聚。总之,简单的项目可以让AI这样做,但真正大规模复杂的项目是不可能这样做的。

未来AI编程的出路在哪里

既然AI编程存在着这样的弊病,那么未来AI编程的出路又在哪里呢?首先应当理解一个重要的概念:AI到底是用来替代人类,还是成为人类提高工作效率的有力工具?我认为是后者。我坚信,AI再强大,也不可能替代人类。人类依然是软件开发的主体,但是工作的形式却发生了巨大的变化。人类将不再是码农,码农才是AI真正替代的对象。我们必须要做出改变,逐渐向着需求与设计的方向转变,而将编码的工作彻底交给AI。

首先,从需求端,AI可以帮助我们去探索需求,通过对互联网信息的搜索和整理,有创意地给我们提出需求的建议。然而,AI存在着幻觉,他的意见并不总是对的。AI虽然知识广博,但并不是什么都懂。他常常一本正经的胡说八道,而人必须要去识别真伪,做出判断。所以,未来在需求端,AI会帮助我们去探索需求,提出建议,但我们需要逐一地检查,基于我们深厚的业务知识,做出正确地判断,最终确认软件的需求。AI可以协助我们快速而高效地编写需求文档,但永远不可能代替我们完成需求的确认。

接着,是软件设计。在没有AI的时代,每一个大型软件项目,都首先需要站在全局进行架构设计与规划。这个步骤即使到了AI时代,也需求完全由人(也就是架构师)来完成,而AI仅仅只是作为辅助,检查风险、提出建议。在以上架构设计的基础上,整个系统需要分层、分模块,然后抽象技术架构形成底层平台。最后,基于这个底层平台完成对每个业务的编码与实现。这是一个大型的业务系统软件开发的标准步骤,架构规划、平台建设都是由开发团队来完成,AI编程则是基于以上的内容,按照每个需求来完成最终的编码。

通过以上分析,可以发现,在AI时代,软件设计的主体依然是人。然而,其变化在什么地方呢?通过AI编程,大量coding的工作被AI替代了,使得程序员的精力逐渐由编码,向着需求与设计转变。随着开发效率的提升,我们不再需要那些只知道编码的程序员,而是更加需要能够理解业务,将业务转换成技术的程序员。这时,编码能力已经变得廉价而不再重要,重要的是如何理解客户的需求、客户的痛点,将其转换成软件的设计,进而满足客户需求。那么,程序员如何完成这样的华丽转身呢?DDD必将成为程序员的最好利器而发扬光大。

除此之外,另外一项重要的技能就是设计的能力。未来我们每个人都将升级成为领导,而AI则成为我们的小弟,人手一个。我们不再需要亲历亲为,亲自去编码,但我们必须学会告诉AI该如何设计。首先,我们要站在顶层告诉AI该如何规划,如何分层分模块,如何抽象底层平台。在这样的基础上,还要告诉AI,每个功能该如何设计,运用什么设计模式,如何进行代码复用。所有这些都对我们的设计能力提出了更高的要求。

记住,AI替代的不是人,而是不会用AI的人。正确地使用AI,不是有手就会,而是必须要学习的技能。那么,在AI的时代,该如何进行AI编程,让AI开发出更加高质量的代码,真正地提高软件研发的水平呢?DDD领域驱动设计制定了一个良好地规范,为我们提供了答案。

基于DDD的AI编程思路

首先,领域驱动设计制定了一个非常规范的开发流程,从需求分析到设计编码,是一环扣一环地开展研发工作。在每个软件项目中,先要通过用例模型来梳理业务需求,然后将其转换成领域模型(正如我前面讲的原文分析法,只是工作的人变成了AI)。我们可以给AI制定一个文档模板,让AI根据先根据模板编写一个初稿。在这个初稿的基础上,由开发团队与AI反复地检查、梳理、修改,最终形成用例模型与领域模型。在这个过程中,因为AI的加入,将大大提升文档的编写效率。

紧接着,按照DDD的开发规范,就可以基于用例模型与领域模型的内容,开展程序设计与数据库设计。在程序设计中,我们会通过分层,将Controller, Repository, Factory都制作成通用程序,放到底层平台中(详见前面DDD架构设计的章节)。这时,AI真正要做的只是按照以上的规范,生成Entity与Service的代码,AI需要编写的代码范围就缩小了,程序也开始变得清爽起来。

通过AI编程,AI可以将领域模型中的对象、属性、方法,非常轻松地转换成Entity、DSL与Service的设计,但每个Service定义的只是空方法,暂时不去实现功能。与此同时,AI通过理解领域模型的内容,为Service中的每个方法编写注释。在此基础上,开发人员就可以去细化每个方法的注释,落实每个方法的操作流程、设计思路,甚至包括使用哪个设计模式。AI基于以上这些注释,逐一地完成每个功能的编码。

AI在编写每个功能时,他总是趋向于将每个功能当成独立的代码进行编写,而不会考虑代码复用的问题,这就为开发人员提出了更高的设计要求。在AI编码的基础上,开发人员要逐一进行检查,然后告诉AI,哪些代码要复用,哪些代码要抽取成方法,甚至抽取成独立的类,进行更加精妙的设计。当然,一些有经验的开发人员会提前给AI制定开发规范,基于这些规范来开发高质量的代码。制定哪些规范而不制定哪些规范,都体现出了开发人员的设计能力与工作经验。因此,同样是AI编程,质量的高与不高,决定因素依然是人,而不是机器。

不仅如此,AI在完成以上工作时,他也不是一个人在工作,而是有一个底层平台在支持。不要让AI试图去完成所有的工作,而是告诉AI,你有哪些API可以调用。通过对底层平台的封装,AI编写的代码将大幅度降低,关键是怎么去告诉AI。有了这样的基础,代码质量将大幅度提升,今后还可以让AI去变更与维护代码,真正完成软件研发的闭环。

总之,基于DDD的AI编程必然成为未来发展的大势所趋。有了AI的加持,DDD也必然会迎来一波全新的发展。然而,这样的AI编程绝对不是有手就行,而是需要大量的学习。我将通过一系列的讲解,让大家全面地拥抱这个全新的技能,敬请期待。

如果对以上内容感觉有用,欢迎关注、点赞、转发!

(待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值