Fallacies of AI Driven Coding

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

几天前,DeepMind(2014年被Google收购)发布了AlphaCode,并自行发表了一篇论文,解释了他们的人工智能(AI)如何“理解”用英语编写的编程竞赛任务,然后编写出可在大约30%的情况下运行的Python、Java或C++程序。去年年初,OpenAI(2019年由微软注资10亿美元)发布了Codex,并发表了一篇论文,声称他们的AI也可以解决大约30%的编程任务。Wired、Financial Times、The Verge等媒体已经宣布了胜利:AI将取代程序员,我们都将失业。

据我看来,我对AI及其编写代码能力有五种信念,这些信念是基本错误的:

  • AI能够理解自然语言的要求(并不是!)
    它实际上并不理解任何东西。无论是AlphaCode还是Codex都不分析输入的语义。无论它说“画一条绿线”还是“保存一个文件”,AI只看到两个长度分别为17和11的字符序列。它不知道“绿色”意味着什么,也不知道它与“文件”有何不同。它们将文本标记为向量。如果它们使用了CNL,那么就会有理解,但它们没有这样做。

  • AI与人类一起进行配对编程(不是!)
    我们可能期望AI并不完全取代我们程序员,而是帮助我们编写特定的代码块:Copilot(由GitHub在2021年发布)是一个显著的例子,由同一Codex提供支持。几个月前,我获得了对Codex的早期访问权限,并试用了其功能。作为一名程序员,我的印象是它既不能编写整个程序,也不能将它对我的请求产生的代码块合并在一起。它们在语法上是有效的,并实现了所需的功能,但AI在将它们组合起来时存在不足,而我作为人类可能会同意稍后进行维护。

  • AI自动完成,这就是它们能够编写代码的原因(不是!)
    确实,有一些产品使用机器学习来进行代码自动完成,例如CodotaTabnineKite。然而,它们不能处理自然语言。这是两个不同的研究问题:1)如何使用已知功能和已有AST(抽象语法树)来自动完成现有程序,2)如何将自然语言文本转换为AST。据我所知,它们不会重叠,也永远不会重叠。

  • AI只需要时间来成熟(开个玩笑!)
    有些人相信AI将取代程序员,但是”那一天不会很快到来”。然而,在我看来,这不是一个成熟的问题。OpenAI和DeepMind的研究人员试图追求的方向是一条死路。机器学习并不是将非结构化的英文文本转化为能够被C++编译器解析的结构良好的AST的正确工具。为了做到这一点,我们需要AI学习自然语言的语义,然后利用创造力想象力按照正确的顺序创建所有必要的AST元素。我简直不相信机器学习是适合这个任务的正确技术。

总之,机器学习永远不会为我们编写代码,因为…它不适合这项工作。然而,它可能适用于其他方面,比如自动补全、重构、错误修复、优化等等。我对自动重构特别感兴趣:想象一下,将大型遗留代码库交给人工智能,它可以改进其中的某些部分,使代码更快、更安全、更可读或更短。它甚至可以将代码升级到新的框架、SDK和依赖项。这就是机器学习已经在帮助并将继续帮助改进现有的抽象语法树(AST)的地方。

试图将机器学习应用于代码生成是一条毫无出路的道路,只会浪费资源,增加谷歌和微软的股票。

此外,如果程序员主要通过在互联网上查找示例、复制和粘贴来编写代码,这对行业有多大好处?即使没有人工智能,许多程序员已经在这样做了。 Stack Overflow最近进行的分析表明,“用户声誉越高,复制粘贴的次数越少。”技能较低的程序员倾向于复制粘贴。这是一个好趋势吗?我们希望人工智能进一步推动它吗?

人工智能能否通过阅读自然语言需求来编写代码?是的,它可以。当我们发明了人工创造力时。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-15 at 07:16

sixnines availability badge   GitHub stars