[博客翻译]编程何去何从?


原文地址:https://blog.bracha.org/primordialsoup.html?snapshot=AmpleforthViewer.vfuel&docName=WitherProgramming


关于我们离真正的人工智能还有多远,我们何时才能到达那里,它是有意识的还是无意识的,以及它有多危险等问题,有很多争论。不管怎样,机器能够自我编程的时代正在加速到来,而且比我们想象的要快得多。无论是两年、五年还是十年,现在开始思考编程、程序和编程语言的未来都不算太早。

尽管最新的工具在许多方面都很出色,但值得指出的是它们仍然与自然智能有所不同。人类不需要阅读整个互联网就能学会说话。儿童一出生就能接收到立体的视频/音频和触觉、嗅觉和味觉输入。大脑是在多模态数据上进行训练的,这使得它可以以集成的方式关联语言和各种物理现象,并因此建立对现实世界的常识和语义理解。训练和推理的分离,这种分离在人类身上并不存在。我们可以将新的信息转移到长期记忆中,动态地改变网络权重和能量需求。人工智能需要大量的计算资源,即使在推理过程中也是如此(更不用说训练了),而这些计算消耗的能量在地球上的能源生成能力上是无法满足的。

我假设所有这些问题都会得到解决。

那么,编程的未来是什么样子呢?它甚至还有未来吗?

我要把讨论分为短期和长期两个部分。这些都是非常不同的问题。

3.png

短期:程序员的学徒时代即将到来

编程语言和IDE会发生什么变化?LLM有一个固有的准确性问题。因此,它们编写正确程序的能力有限。然而,它们可以提供模板或完成重复任务。此外,如果将它们包含在一个合适的封装架构中,可能会有助于解决这些限制。例如,考虑Hindley-Milner类型系统。如果AI能清楚地解释如何修复类型错误,那会怎么样?更好的是,如果它生成程序并确保其类型安全,通过反复与编译器交互,这样你就无需处理类型了?然后你可以阅读结果代码,看看你是否同意,但不必处理类型。Rust是另一种类型检查器很难使用的语言,但它提供了强大的保证。

沿着这个思路进一步发展,我们可能会考虑形式化验证。证明程序正确性是非常困难的。检查已知程序符合的正式规范可能更容易。另一个可能受益的领域是本地优先级软件。我一直主张为同步提供语言/平台支持。在这个领域,最困难的问题可能是解决合并冲突。也许我们可以让AI查看合并冲突并解决它们。这是值得探索的。或者,一种基于元数据的同步转换工具可能会写入所有的同步代码。总的来说,AI为我们提供了一种强大的新实现技术——人工智能,从而打开了新的语言设计选项。

未来的应用程序和用户界面

这是一个明显的步骤,我们将AI整合到Office、Google Docs等应用中。与之相反的是,我们看到应用程序通过插件的方式被整合到AI接口中。后者的意义更大。一般来说,我们可以看到传统的桌面/图形用户界面(WIMP)中的UI的需求大大减少。随着越来越多的设备控制通过聊天进行,操作系统的重要性也会降低。

长期:向人们提供程序

这更有趣。我预计我们会达到这样一个阶段,即我们用自然语言描述我们的需求,剩下的由AI来完成。我们还没有做到这一点,即使我们做到了,这也将是一个苏格拉底式的对话过程。自然语言本质上是模糊不清的。要么AI提出澄清问题,要么我们得到一个结果并玩弄它来看看我们希望如何修改。所以这不是一个即时的过程;它仍然是编程,只是用自然语言进行的。

然而,程序并没有消失。AI是一种非常昂贵的计算方式,因此只要有可能,我们就希望AI编写一个用于计算的经典程序。那么,UI呢?正如上面所提到的,UI仍然有一定的作用。我设想了一个二维空间,其中包含文本、图片、音频剪辑和执行自然视觉任务或简单重复任务的小部件。换句话说,未来的界面就是一个文档,可以通过自然语言(口头或书面)和/或直接操作进行定制。易于定制是这里的关键点。自然语言是最终的“零代码”解决方案。第一次,非技术人员也可以完全控制他们的数字环境。

真正的意义在于编程民主化。现在,每个人都可以控制他们的数字环境,而不仅仅是经过特殊培训并对像机器一样思考有奇怪天赋的人。在这种情况下,AI是一个独立的应用程序助手,可以运行、定制、编程和集成多个应用程序。理想情况下,AI应该在用户的机器上运行,但如果它不适合,那就只是一个服务。理想情况下,我们想要一个本地优先的AI,可以在本地运行,即使逻辑发生变化,也可能性能下降。当然,我们仍然希望这个文档是可共享的,并且可以跨多个设备同步。事实上,我们仍然想要我在以前的文章中提出的所有属性。

最终,AI可以通过使编程成为一项自然活动,使所有人都能获得权力。我们可以实现Dynabook的愿景。然而,我们必须确保使用的程序是实时的,以便他们能够快速轻松地适应使用它们的人的愿望。然后,我们所知道的编程就会消亡。