为什么ChatGPT不是编程的终点?- Lewis


最近一篇认为 ChatGPT 是“编程的终结”的文章成功地被纳入了 ACM 的通讯:与许多其他文章一样,这篇文章似乎忽略了一个基本要求,即必须为要生成的软件提供一个没有歧义的完整规范。与许多文章不同,它进行了有趣的转折,并认为我们将看到使用编程语言创建程序的终结。相反,作者认为所有软件都将是 AI,而“程序员”将是专门训练这些 AI 的人,而不是专门编写逻辑来解决问题的人。

我看到这个论点有几个问题。

为了支持这一观点,作者提到了过去程序员需要知道的事情,那时所有的东西都是用机器语言或汇编语言编写的,对硬件的深刻理解是一个重要的要求。然后,他认为程序员不再需要知道这些东西了。
他忽略的是,今天许多程序员确实需要知道这些东西。有大量的软件开发人员受雇于对硬件知识很重要的领域。我首先想到的是 "嵌入式软件开发人员",因为这是我在过去十年中从事的一个领域,而且我认识不少人,包括我在亚马逊的部门中的许多人,都是在这个领域工作。几年前,我曾为一个低级总线写过 "字节byte "的代码,我在亚马逊的第一项任务是写代码,把字符串转换成打包的字节。如果认为这种水平的知识并不重要,只是因为前端开发人员没有每天使用它,这表明作者没有考虑到软件开发所需要的全部范围。

第二,我认为这篇文章的作者再次忽略了软件开发的广度到底有多大。认为所有的软件都将用巨大的、训练有素的模型来完成,忽略了许多反面的例子,在这些例子中,软件是用最低限度的工具来开发的,因为这些工具是有效的,超出这些工具的范围就是浪费复杂的。例如,现在的GPU比CPU快得多,不过,我们还没有把所有的软件开发都转移到GPU上,因为大多数软件并没有从中受益,而且要正确地做到这一点也难得多。事实上,很多软件甚至都没有使用CPU上存在的多个核心,因为它根本不需要这样。同样地,当量子计算机变得更加可用时,它们不会被用于所有的软件,它们只会被用于很适合它们的问题。

我预计作者在这点上是正确的:相当多的软件将使用深度学习模型来开发,但只有在它有意义的时候。随着时间的推移,从这种方法中受益的应用程序会越来越多,因为人们会发现用它来做新的事情,但不需要它的软件将不会使用它。

将来如何?
那么,我们到底要去哪里?软件开发在未来会是什么样子?

我的猜测是,随着时间的推移,这些软件编写辅助工具将得到改进并得到更广泛的使用,但由于上述原因,它们不会取代程序员。一种可能性是,它们提出多种可能性,并允许开发者迭代到他们想要的版本。

我们还将看到一类全新的应用程序出现,它们是使用这些深度学习模型创建的,并利用了它们的能力。
但这并不意味着所有的软件开发都会走这条路。基本算法仍将用最适合表达它们的语言来编写。这种语言不是自然语言,也不会通过训练一个大型神经网络来完成一项任务,而这项任务可以通过写出算法来更直接地完成。

相反,这些新的工具和方法将成为软件开发人员工具箱中的另一个工具。它们将开辟出可以开发的全新的应用领域。
我这么说是因为我在计算机科学和软件开发方面学到的基本规则之一是:没有什么东西会完全消失;没有银弹。
没有新的方法能完全取代并使之前的一切都变得过时。

相反,我们不断增加新的东西:新方法、新工具、新技术;但旧的并没有消失。
一般来说,旧的方法在某些层面上仍然需要,而且很可能是在那个层面上工作的最佳方式。
当新的东西出现时,人们通常会高谈阔论,说它将如何取代所有的旧方法,但这从未实际发生。

这并不是说这些新工具不会对软件、软件开发和整个社会产生深远的影响。而是说,它们不会取代之前的一切。

我认为这些工具会对计算机科学和软件开发教学产生特别深远的影响:
因为没有什么会消失,CS课程已经塞满了材料,增加一个新的 "必修课/方法 "其实没有什么帮助。

此外,这些人工智能工具在产生我们要求新手程序员编写的函数/程序类型方面相当出色:当人工智能可以解决某个具体问题时,你如何说服学生自己去学习做某件事?你如何说服学生,人工智能不会解决所有的问题,如果学生在没有人工智能的情况下不能解决简单的问题,他们就没有机会解决更难的问题?同样地,当人工智能能够解决评估中给出的问题时,试图教授计算机科学的人将如何评估他们的学生是否学到了东西?