1.2 ChatGPT对编程的影响
2022年底,ChatGPT横空出世,这是一种基于深度学习的人工智能模型。这种拥有强大文本生成能力和丰富知识的人工智能技术,对软件开发所带来的影响具有革命性,其深度、广度、意义和价值已经远远超过之前出现的技术发展。本节将重点讨论ChatGPT在自然语言处理、文本生成和计算机语言处理方面的一些基础知识,为下一节深入讨论ChatGPT对软件开发模式的影响打好基础。
自然语言是人类用来沟通交流的语言,随意性较强,通常不太结构化,表达方式比较多样化,同时存在歧义和不确定性等问题,这无形中增加了计算机对自然语言理解和文本生成的挑战。自然语言的生成逻辑更加接近人类思维和表达,它需要考虑诸如语法、语义、上下文等因素,从而生成自然语言文本。在自然语言生成文本的过程中,通常会用到自然语言处理技术,包括词法分析、句法分析、语义分析、文本生成等方法。世界上目前大约有7000种自然语言,地球上80亿人口中大约有36%的人在使用汉语、西班牙语、英语、阿拉伯语和印度尼西亚语,如图1-2所示。
图1-2 人类自然语言排行[1]
计算机编程语言是专门用于编写计算机程序的语言。相对于自然语言来说,计算机编程语言更加结构化和规范化,具有明确的语法和语义,而且能够直接转化为计算机可以执行的指令,因此在某种程度上也更加容易被计算机理解和执行。尽管世界上有1000多种计算机编程语言,但是,目前真正常用的主流编程语言只有10~20种。在计算机编程活动中,程序员最常使用的前五种编程语言在所有编程语言使用总量中占63.32%,具体排序见图1-3。
图1-3 计算机编程语言排行榜[2]
自然语言和计算机编程语言都有其特点和复杂性。自然语言因为不规则,所以很复杂;计算机编程语言因为其逻辑可以无限叠加,所以更为抽象。根据外语教学领域的研究,一般认为,外语学习者要达到流利地使用一门母语以外的外语,需要投入数年的时间。而对于计算机编程语言来说,初学者可以在几个月到一年左右的时间内获得基本的编程能力,编写简单的程序和解决简单的问题。两者在难度上相差很远。
ChatGPT是一种基于深度学习的自然语言处理模型,能够对自然语言文本进行理解、生成和转换等操作。由于自然语言的复杂性,ChatGPT也需要具备非常强的语言理解和生成能力,同时需要处理自然语言中存在的歧义和不确定性等问题,因此相对于计算机编程语言来说更加复杂。总的来说,自然语言生成和计算机高级语言编程的逻辑虽然有所不同,但都需要处理复杂的语言和符号系统,理解和遵循各自的规则和范式,以实现特定的功能和任务。
要想真正地了解和评估ChatGPT对软件开发的影响,首先要弄清楚ChatGPT生成计算机代码的原理。作为一种自然语言处理模型,ChatGPT可以生成以人类自然语言书写的文本。虽然ChatGPT本身并没有直接编写计算机程序的功能,但是,人类开发者却可以利用ChatGPT生成的自然语言文本作为编写计算机程序的一种辅助方式。
当ChatGPT生成计算机程序或代码片段时,它是基于在训练数据中看到的代码片段和模式来生成的。GPT模型在训练过程中学习了大量的编程知识和代码示例。当你询问与计算机编程相关的问题时,它会根据训练数据中的知识和经验生成回答。
具体来说,如果需要编写一个计算机程序,我们可以使用自然语言来描述程序的逻辑和功能,然后将这些描述转换成相应的编程语言代码。例如,我们可以使用自然语言描述一个计算平方根的程序逻辑:输入一个数x,计算出x的平方根y,并输出y的值。然后,可以将这段描述转换成如图1-4所示的Python代码。
图1-4 ChatGPT生成代码的原理举例
这样,我们就可以通过自然语言和编程语言之间的转换,利用ChatGPT生成的自然语言文本来编写计算机程序。具体过程如图1-5所示。
图1-5 ChatGPT生成代码的过程
(1)输入需求:用户以自己最熟悉、最能表达自己意图的自然语言输入编程需求的细节,清楚地告诉ChatGPT他们希望的输入数据、处理逻辑和输出结果。特别要明确指明生成哪种计算机语言的程序,例如Go、Java和Python。
(2)预处理:对以自然语言描述的编程需求进行预处理。该处理过程包括清理文本并将其转换为标准格式,然后进行分词、词干提取、去除停用词等操作,从中提取出关键词和短语,包括变量、函数、对象、属性等。
(3)语义分析:使用ChatGPT模型对编程请求文本进行语义分析,以确定其含义和结构。其中包括解析句子结构,理解主语、谓语、宾语等语法成分,捕捉描述中的实体、属性、动作和关系等。
(4)代码生成:ChatGPT模型根据已经理解和掌握的上下文信息,以及前面定义的各种约束条件,生成相应的高级编程语言的代码。这一步可能包括代码模板生成、代码片段组合、逻辑结构生成等。
(5)语法检查:ChatGPT模型根据高级编程语言的语法规则对前一步生成的代码进行词法分析、语法分析和错误处理,以确保所生成的代码符合编程语言的语法规则和标准,避免语法错误导致的编译或者运行时错误。
(6)优化排错:ChatGPT生成的代码可能会有错误或者效率不高。因此,在输出代码之前,需要进行优化和排错,以提高代码质量。代码重构、性能分析和错误排查等可以避免代码错误和性能问题所导致的运行时错误和效率低下。
(7)后处理:在生成代码的过程中,ChatGPT模型会尽可能地保证所生成的代码易于阅读和理解。但是,为了进一步提高代码的可读性和可维护性,还需要进行后处理,包括添加注释、检查需求和代码格式化等。
(8)输出结果:ChatGPT将最终生成的高级编程语言代码以文本形式输出,并将其发送给用户。用户可以将其保存在计算机中,然后运行代码来执行该任务。最终生成的编程语言可以是用户所要求的任何一种,如Go、Java和Python等。
总之,ChatGPT编程就是把以自然语言描述的编程需求提供给ChatGPT,然后经过预处理、语义分析、代码生成、语法检查、优化排错、后处理和输出结果等环节,最终生成计算机编程高级语言代码的过程。
通过上面的过程可以看到,ChatGPT为软件开发的编程环节带来了革命性的变化。程序员不再需要从头到尾靠自己的思考完成代码编写,而是通过定义编程需求依托ChatGPT完成应用代码的编写。这个崭新的过程不仅提高了编码效率,而且因为可以利用ChatGPT自动检查代码的逻辑和语法,减少了代码中出现Bug的机会,所以可以大幅度地提高代码质量。从这个角度讲,在ChatGPT驱动下的编码和测试方式已经出现了根本性的变化。
除此以外,因为ChatGPT拥有人类知识的总和,当然也包括各行各业的业务逻辑和架构设计知识,所以,在软件开发过程中,ChatGPT对用户需求分析、架构设计、代码测试、应用部署和系统维护也都将产生深远的影响。本书将在后续章节展开更加深入的讨论。