人工智能编写代码将使软件工程师更有价值

2020-07-24 00:13:01

随着OpenAI的GPT-3的发布,人工智能编写代码的话题再次成为热门话题。GPT-3是一个自然语言模型,给出了一些例子,它试图为给定的文本输入预测适当的文本输出。因为代码只是文本,所以问题是,是否可以仅根据代码应该做什么的描述来使用它来生成代码。而且,在我们生活的这个令人惊叹的世界里,已经有一些关于这一点的早期技术演示。

对这类演示的一个常见的即兴反应是,这类技术将不可避免地让软件工程师过时,因为如果人工智能或多或少能够生产出他们生产的产品,那么似乎我们就不再需要付钱让他们做这件事了。

这类主张的理由是可以理解的。如果你的前提是软件工程师的工作是描述一些软件应该做什么,并编写代码来实现它,那么将这样的技术视为临时替代是有意义的。

但那是不对的。软件工程师真正要做的是构建软件解决方案来适当地解决问题。这似乎是一个微妙的区别,但它确实是一个非常重要的区别。代码不是解决方案,它是解决方案的实现。解决方案当然需要编写代码,因此需要能够编写代码。但是反过来,编写代码的能力并不意味着能够为问题创建适当的解决方案。

我认为因为编写代码本质上是一项困难的技能,对外人来说是不透明和陌生的,所以看起来构建软件的困难部分实际上就是编写代码。但事实并非如此,这才是关键所在。困难的部分是恰当地解决问题。一旦有了解决方案,在代码中实现它就相对容易了。

这是违反直觉的,我不认为没有自己构建软件的过程就能完全欣赏它。如果没有这种洞察力,看起来确实像是人工智能编写代码打开了通才构建软件的可能性,仅仅通过描述他们的想法。但这并不比雇佣一位经验丰富的幽灵作家为任何有故事想法的人写一部伟大小说打开了可能性。

因此,我从局外人的角度理解这些主张的基础。考虑到它们所依据的前提,它们是合理的。然而,让我有点惊讶的是,似乎来自内部人士-软件工程师自己-的常见反驳。

主要有两种形式。第一个问题是,这永远不会奏效:指出这类事情在实践中的所有技术困难。另一个是无论如何都只是代码:任何超过一定复杂性的软件的自然语言描述都必须结构化和形式化到基本上变成代码的程度。这一概念是:任何软件的自然语言描述都必须经过结构化和形式化,才能基本上变成代码。(译者注:也就是说,任何软件的自然语言描述都必须经过结构化和形式化,才能基本上变成代码。)

我觉得这些反驳令人惊讶,并不是因为它们一定是错的。它们实际上非常实用--在剩下的对话相关之前,这件事必须基本上起作用,毕竟,我们离这还有很长的路要走。我发现他们更令人惊讶,因为他们在自己的层面上满足了要求,似乎含蓄地接受了他们的前提。他们说,这是错误的,因为人工智能赢不了有意义的代码,而不是有意义的代码。这是错误的,因为当人工智能能够有意义地编写代码时,它不仅不会让软件工程师过时,反而会帮助他们。

我预计会有更多的软件工程师持后一种观点的原因是,这里真的没有什么新鲜事。乍一看,使用人工智能来生成代码看起来像是一次巨大的飞跃,但它实际上更像是软件行业从第一天开始就在发生的事情的线性发展-使用软件自动化编写软件。通过自动化越来越多的繁重工作来提高软件构建效率的工具和框架是每个软件工程师都熟悉的,而且他们明白它们无疑是一件好事。为什么编写代码的人工智能应该有什么不同呢?

此外,在这一点上已经确定,这样的工具不会导致对软件工程师的需求减少,因为对要构建的软件的需求没有固定的限制。相反,它们允许更快地构建更多更好的软件,为在以前不经济的地方应用软件解决方案打开了新的机会,促进了软件行业的发展,并实际上增加了构建软件所需技能的价值,同样,这与编写代码的能力不是一回事。

软件工程师应该欢迎带来人工智能工具的每一项进步,这些工具有助于编写更大、更有意义的代码部分。这不是要抵制的东西,而是要推动的东西,因为这些工具不仅不会让软件工程师过时,还会进一步利用他们拥有的最有价值的技能。