什么代码是ChatGPT无法编写的? - datachimp


ChatGPT改变了游戏规则,而且,更广泛地说,这种语言模型可能是我们这一代最重要的开发工具。(承认这一点需要一些谦虚,因为我们正在为数据科学家开发一个开发工具。)

但是,无论是ChatGPT还是一些更大的后代模型,都不可能编写出我们的软件中最困难的部分:所需功能的自然语言描述(功能描述)
以下是我对这一说法的论证,借鉴了Fred Brooks的 "No Silver Bullet "和Eric Evans的《领域驱动设计》中的观点。

1. 构建软件的“难点”是指定它的行为
Fred Brooks 在“No Silver Bullet”中指出了“构建软件的难点”
软件实体的本质是相互关联的概念的构造:数据集、数据项之间的关系、算法和函数调用……我相信构建软件的难点在于这个概念的规范、设计和测试构造,而不是表示它和测试这种表示的保真度的劳动。

通过将英语转换为代码,ChatGPT 帮助我们用编程语言表示软件,但困难的部分首先是用英语表示它

2.我们不能先验地指定这种行为
用英语或其他人类自然语言将需求表述成软件可实现的功能是很难的,一个重要的原因是,在我们看到它之前,我们实际上不知道我们想要什么。
布鲁克斯在这里再次指出了这一点:

......软件建设者为他们的客户所做的最重要的工作是对产品需求的反复提取和细化。因为事实是,客户不知道他们想要什么。他们通常不知道必须回答什么问题,而且他们几乎从来没有考虑过必须指定的细节问题......此外,复杂的软件系统是行动的、移动的、工作的东西。此外,复杂的软件系统是一种行动的东西,是一种运动的东西,是一种工作的东西。这种行动的动态是很难想象的。

我们的软件中最重要和最困难的部分解决的是以前没有解决过的不为人知的问题,而且由于它们的新颖性,很难想象解决方案是什么样子的。如果我们无法想象解决方案,我们当然也就无法用英语来说明它。

(banq:ChatGPT需要被问了一个问题才能回答,但是这个问题怎么问很关键,它也不会,问题域是关键,会问问题的学生才是真正优秀学生,而不是答题高分的学生)

3.自然语言误导了我们对规范的充分性的判断
即使我们对软件的行为有很强的预见性,用英语或其他自然语言来指定这种行为也不是最好的选择。自然语言是混乱的,而这种混乱可以掩盖我们规范中的模糊性。它可以使我们认为我们对所需软件的了解比我们实际了解的更多。

Eric Evans已经在领域驱动设计的背景下观察到了这一点 :

领域模型可以成为一个软件项目的共同语言的核心。该模型是在项目中人们头脑中建立起来的一套概念,其术语和关系反映了领域的洞察力。这些术语和相互关系提供了一种语言的语义,这种语言既适合于领域,又足够精确地用于技术开发......当领域专家在与开发者讨论时或在他们之间使用这种语言时......领域专家(在开发者的帮助下)也会发现基于模型的语言的精确性暴露了他们思维中的矛盾或模糊之处。

因此,用代码来表达我们的规范并不仅仅是将我们的软件愿景变为现实的一种手段。相反,它是准确阐述我们愿景的关键一步。

结论
ChatGPT对构建软件中最难也是最重要的部分没有帮助:
在不甚了解的问题的背景下指定它的行为。它在这里没有帮助,因为它需要对所需软件的行为进行自然语言描述,而生成这种描述既不容易也不可取。
它不容易是因为我们无法从扶手椅上想象我们的软件应该如何表现,它不可取是因为自然语言缺乏充分指定软件所需的精确性。