Synth Daily

跨语言编程:为什么你依然离不开代码

尽管大型语言模型(LLMs)能将自然语言转换为代码,但编程语言对于调试、阅读和理解代码逻辑仍然至关重要,因为它能消除自然语言中固有的歧义。由此,一种“语言无关编程”的未来范式成为可能:LLMs 将代码生成为一种精确的底层语言(如 Rust),但允许程序员使用自己熟悉的语言界面(如 Go 或 Python)来查看和编辑,从而在保证底层精确性的同时,提升开发效率与协作性。

编程语言为何依然必要

近来,许多人声称“英语将是你唯一需要的编程语言”。这种观点认为,既然人工智能(AI)可以将我们的自然语言描述翻译成可运行的代码,我们或许不再需要传统的编程语言。

尽管 AI 在代码生成方面表现出色,但编程的一个核心环节依然不可或缺:调试。无论 AI 变得多么智能,当代码未按预期工作时,我们仍需理解其内部的实际逻辑。为了阅读、追踪和推理代码,编程语言是必需的工具。

编程语言的作用,可能不再是用于编写初始代码,而是为了在出现问题时理解代码。

自然语言的局限性

自然语言充满了歧义,这在编程中是致命的。一个经典的笑话可以说明这一点:

一个程序员的伴侣让他去商店买牛奶,如果看到有鸡蛋,就买十二个。结果,程序员带回了十二瓶牛奶,因为“商店里有鸡蛋”。

对于人类,这种歧义通常能通过上下文和常识来解决。但计算机需要完全明确的指令。编程语言的设计初衷就是为了消除这种歧义。一段 C 语言循环代码的含义是精确且唯一的,而同样逻辑的自然语言描述却可能有数十种不同的表达方式,每一种都可能产生误解。

语言选择的困境

如果我们接受“AI 编写代码,人类用编程语言调试”这一前提,那么一个老问题又浮现了:应该学习哪种编程语言?

“英语是唯一编程语言”这一想法的吸引力,不仅在于它简化了编程的入门门槛,也在于它似乎解决了学习不同语言(如用于 Web 的 JavaScript 或用于系统编程的 C)的复杂性。

语言选择并非只是个人偏好问题,它会显著影响开发过程。例如:

  • 习惯使用 Python 或 JavaScript 等高级语言的开发者,通常不需要关心 C 语言中的手动内存管理或 Rust 的所有权模型。
  • 当被迫使用一门不熟悉的语言时,开发者的生产力会大幅下降。

一种新的可能:语言无关编程

大型语言模型或许能催生一种全新的编程方式。如果 LLMs 能够无缝且准确地在不同编程语言之间进行翻译,那么调试和代码理解或许可以不再局限于任何特定的语言

想象一个这样的未来:

  • 程序由 LLMs 统一生成为一种高度精确的底层语言,例如 Rust,以确保其性能和安全性。
  • 而开发者在阅读或调试这段代码时,可以选择以自己最熟悉的语言界面来查看和编辑它。

例如,一个项目的底层代码是用 Rust 编写的,它精确地处理了内存管理、线程安全和错误。但当我想调试它时,我可以选择将其视为 Go 代码来阅读。同时,我的同事可能更喜欢用 Python 或 Typescript 的界面来与同样的代码库进行交互。

底层的程序保持不变(精确且无歧义),但每个开发者都通过自己偏好的语言界面与之互动。虽然这存在技术挑战,比如如何用 Python 表达 Rust 的所有权模型,但通过精心的工具设计,许多问题是可以解决的。

未来的模式

在这种新模式下,工作流程将变为:

  • AI 系统直接根据自然语言描述,生成一种精确、安全且高效的底层代码。
  • 需要阅读或调试代码的程序员,可以选择他们偏好的编程语言界面
  • AI 负责在底层代码和各种语言界面之间进行翻译,确保语义在所有视图中保持一致

这种方法不仅能进一步普及编程,还能让开发者用自己最舒适的语言工作,从而极大地促进团队的协作和新成员的融入。