Language agnostic 为什么不用英语编程?自然语言和编程语言之间有什么区别? 自然语言(如英语和法语)和C++和Perl?这样的编程语言之间的主要区别是什么?

Language agnostic 为什么不用英语编程?自然语言和编程语言之间有什么区别? 自然语言(如英语和法语)和C++和Perl?这样的编程语言之间的主要区别是什么?,language-agnostic,programming-languages,nlp,Language Agnostic,Programming Languages,Nlp,我对歧义问题很熟悉,但难道不能使用交互式编译器或使用使用严格语法的自然语言子集来解决它,但始终保留语言的本质吗 另一个问题是背景。但律师们有办法解决这个问题。(这个问题并不是为了降低编程的复杂性,而是为了简洁的理由和使用自然语言指导计算机的障碍。) 除了这两个问题之外,还有其他重大问题吗?或者这两个问题的后果比我上面提到的更严重?交互式解决方案和律师语言在编程技术上不可行吗?有三个主要原因 首先,正如Gabe所说,人们通过反复试验发现,用接近英语句子的东西编程只会迫使程序员键入更多无用的粗话。(

我对歧义问题很熟悉,但难道不能使用交互式编译器或使用使用严格语法的自然语言子集来解决它,但始终保留语言的本质吗

另一个问题是背景。但律师们有办法解决这个问题。(这个问题并不是为了降低编程的复杂性,而是为了简洁的理由和使用自然语言指导计算机的障碍。)


除了这两个问题之外,还有其他重大问题吗?或者这两个问题的后果比我上面提到的更严重?交互式解决方案和律师语言在编程技术上不可行吗?

有三个主要原因

首先,正如Gabe所说,人们通过反复试验发现,用接近英语句子的东西编程只会迫使程序员键入更多无用的粗话。(是的,COBOL被明确设计为更“自然”地阅读。)

对于程序员来说

windows++
它的可读性比

You should now increment the number of windows by one.
例如,俄罗斯方块是一个相当容易编码的游戏。如果你能在少于一本短篇小说的篇幅内,为一台计算机(记住,计算机是哑的,所以你必须把它全部拼出来)做出足够详细的英语解释,我会非常惊讶

第二个原因是,计算机知道如何做的事情的范围很小,因此所需的语言结构数量也很有限。相比之下,自然语言需要能够表达人类的全部经验,这确实需要许多语言结构才能实现。例如,“根据他妻子的说法,如果昨天没有下雨,约翰可能会钓到这条鱼”不能用C来表达,也不需要用C来表达


第三,正如你们自己所指出的,确实是模棱两可。在很多地方,软件错误是不允许的。人们用清晰的语言编写了足够多的bug;允许模棱两可将是一场即将发生的灾难。在同一主题上,我们仍然无法很好地解析人类语言——最先进的解析器仍然有令人无法接受的高错误率。

只要使用有限的英语子集,就可以自动解析

作为概念证明,我开发了一种名为的编程语言,它将英语句子翻译成Python源代码

算术运算可以用简单的英语书写:

#print{3 to the power of 2}
#print{3 raised to the power of 2}
#Both of these statements print "9".

print{3 plus (the sum of 1 and 2)}
#This prints "5".
变量也可以用简单的英语初始化:

let x be (x plus 1)
if (x is not equal to 7) :
    print x

这是一个非常有趣的问题,简言之,是的,我们不使用英语编写程序有一些很好的理由

以前有人说过,计算机科学给我们的最大礼物不是与计算机对话的能力,但现在有了描述算法的正式语言,我们现在有了更好的工具来将这些想法传达给其他人。即使不涉及计算机。事实上,最好的软件工程师认为他们的工作主要是编写其他人可读的软件,以便尽可能容易地维护和添加新功能。这在一种语言中是不可能的,这种语言比任何自然语言都大,而且形式自由

模棱两可 一个原因是模棱两可。你有没有看过餐厅的菜单,看到汉堡上有“凉拌卷心菜、薯条或沙拉”?这是什么意思?我可以同时吃凉拌卷心菜和薯条吗?或者另一种选择是单独吃沙拉?还是我总是吃凉拌卷心菜,我必须在薯条和沙拉之间做出选择?英语中充满了这些东西

我曾经教过一门课,我喜欢用一个例子来解释歧义,如下所示。我让学生们写一个一段的故事,结尾是“汤姆问克里斯他是否能帮助他”。大约有一半的情况下,所写的故事表明,学生将这句话解释为汤姆向克里斯寻求帮助。另一半的时间人们认为汤姆愿意帮助克里斯

如果你仔细想想,有很多人确实用英语写程序。他们被称为产品经理,他们使用的编译器是软件工程师。这里的问题是,软件工程师必须注入大量他自己对问题的理解,才能理解描述的真正含义。相信我,这里有很多来回。即使是非常简单的业务需求,我也必须澄清歧义

上下文 我不同意律师有办法解决背景问题。在一些案件中,我们不断地在法庭上就各种法律的含义进行争论,其中包括一些全国受教育程度最高的人。有时,这涉及到对很久以前制定法律的背景的争论。有时,in涉及到将它应用到一个新的、以前不存在的环境中,比如互联网。事实上,我们有数千名律师致力于消除这些问题的歧义,这证明像编译器这样的简单计算机程序无法处理这些问题。这问题太难了

简洁 另一个问题是简洁的能力。很久以前,数学就为数学中的许多不同概念发明了符号,因为如果有一种特殊的语法简洁且含义明确,那么它更容易阅读。数学家知道我说“f(x)=3x+1”的意思。它的意思与“有一个名为f的函数,它有一个参数。将f应用于一个数字的值是给定数字的三倍多。”相同。但是,一旦你学会了语法,前者更容易阅读。事实也是如此