4

这是我的第一个问题,所以我有点紧张,因为我不确定我是否理解得足够好。无论如何,我们走吧......

每当达到编程的新里程碑时,似乎他们总是有一个共同目标:让程序员更容易编程。

机器语言、操作码/助记符、过程/函数、结构、类 (OOP) 等总是有助于以更自然、更易于理解和更好维护的方式规划、构造和编码程序。

当然,函数式编程绝不是新鲜事物,但近年来它似乎经历了某种复兴。我也相信,当微软将 F# 添加到他们的主流编程语言中时,FP 将得到巨大的推动。

回到我最初的问题,我相信最终编程将使用自然语言(英语)完成,几乎没有限制或规则。编译器将成为 AI/NLP 系统的一部分,该系统从代码中提取信息,或者我应该说文本并将其转换为编译器可以编译的中间语言。

那么,FP 是让编程更接近自然语言编程,还是它是一个障碍,主流 OOP 会引导我们更快地走向自然语言编程?

这个问题不应该用来讨论自然语言编程的可用性或可行性,因为只有未来才能证明。

4

9 回答 9

29

对不起,我完全不同意。代码最终是制作事物(对象)的蓝图,因此它必须非常精确且受规则支配才能可靠地运行。自然语言不会比在餐巾纸上画草图取代机械工程更早取代编程。

于 2008-11-12T23:49:24.407 回答
8

我个人得出的结论是自然语言编程有些破解。

英语并不完全适合完全作为一门编程语言使用,太多的抽象词在编程中没有相关性,比如情感术语和其他在编程中没有地位的抽象概念,所以说编程永远是“自然的”语言”将随之而来,“自然语言”可能是编程,但事实并非如此。

现在,虽然我明白你在说什么,但问题是英语有太多废话和相同事物的重复名称,所以我们将使用甚至不是特定于编程领域的东西,因为编程的任务。

我认为它更适合人们理解编程实际上是一种高度专业化的语言,并用他们的大脑学习用一种语言进行编码,这种语言简单,声明性并且具有一致的定义,不像英语的定义是高度主观的.

一旦你了解了一种语言的来龙去脉,并了解了它的原理图和行为,你就可以将它们结合起来做新的事情。

以 Perl 为例,每个人都痛斥它是线路噪音,但是当你了解许多编程语言时,一旦你克服了“OMG LINE NOISE”的最初障碍,它就会有一定程度的直观性,你可以在其中编造你从未读过的东西about 然后看到它像你预期的那样神奇地工作。

恕我直言,在有针对性的问题解决方面,特定领域的语言胜过口语。

于 2008-11-12T23:51:08.257 回答
3

“那么,FP 是让编程更接近自然语言编程,还是它是一个障碍,主流 OOP 会引导我们更快地走向自然语言编程?”

两者都不。两者都遵循相同的原则,即您必须具体说明您希望计算机做什么。不能有确定性的余地,这两种范式与自然语言无关。他们解决了一个完全不同的问题:管理和构建复杂代码和大型代码库。

自然语言的最大障碍是解析。明确地解析自然语言是不可能的。如果没有大量的上下文信息(面部表情、语调),即使是人类也无法做到这一点,即便如此,我们仍然经常会出错。

OOP 和 FP 只是关于解析后发生的事情。一旦识别和解析了每个语义元素,它的含义就会被分配。

也许有一天我们能够用自然语言进行编程。我怀疑它会在未来几十年内发生,但它可能有一天会发生。但是今天的编程范式既不会加速这个过程,也不会延迟它。他们根本与它无关,也无助于解决解析问题。

于 2008-11-12T23:56:59.167 回答
2

我不认为函数式编程比 OO 编程更接近自然语言编程。函数式编程具有非常面向动词的语法。当您使用 Lisp 或 Scheme 进行编程时,您会花费大量时间来考虑函数以及您希望对数据执行哪些操作。在 OO 编程中,您大部分时间都在考虑对象,因此它看起来非常面向名词。但是,在 Smalltalk、C++ 和 Java 中,您也有一些方法,可以让您将动词应用于所有名词(可以这么说)。

我不认为 OO 编程一定会引导我们走向自然语言编程,但从我的角度来看,它比函数式编程更接近一点。对我来说,函数式编程似乎更接近于数学而不是自然语言。这并不是一件坏事,因为也许数学是我们在编程时应该考虑的语言。

于 2008-11-12T23:55:51.773 回答
2

仅供参考,Inform 7可能是最接近自然语言编程的人。它是一种针对特定领域的语言:编写交互式小说,一种以“冒险游戏”开始的软件。

于 2008-11-13T06:08:13.800 回答
0

当前对函数式编程的兴趣激增主要是由于 C# 3.0 的酷炫新特性基本上是启用并行性并表示向多核计算的转变。恕我直言,我认为我们不能将其视为“自然语言编程”的下一步

于 2008-11-13T01:28:30.120 回答
0

如果您正在寻找编程语言的下一次发展,我会寻找 DSL。DSL 允许高度定制的语言,使复杂的商务用户能够配置系统,而不必担心编码细节,如数据类型、线程和 UI 小部件。

函数式语言将在“高度并行处理”领域占有一席之地。

于 2008-11-13T03:21:30.080 回答
0

您是否认为主观问题会在此处将“Windows Internals the 5th Element”订单添加到数据库并运送到我的地址?如果是这样,自然语言编程将非常接近函数式编程,因为我以某种函数式的方式提出了我的问题。如果不是,那么自然语言编程不会让我的订单发货,是吗?函数式编程可以工作,因为它仍然与自然语言无关。

于 2008-11-13T04:04:43.237 回答
0

不会。函数式编程将使我们更接近于证明编译器。那是编译器可以证明有关您的代码的更多断言。编译器可以为我们证明的越多,软件开发就越接近工程而不是艺术。

NLP 编程语言可能更像是一种“按我的意思做,而不是按我说的做”风格的语言。这可能与函数式语言的发展方向相反。

“所有编程语言都在向 LISP 汇聚。”

于 2008-11-13T05:50:49.140 回答