使用“自然”语言编写代码会更好吗?

时间:2010-05-01 17:41:18

标签: nlp

我最近看到了一种名为supernova的编程语言,他们在网页上说:

  

超新星编程语言是   一种现代脚本语言和

     

第一个提出了概念   用直接小说编程   说明使用

     

纯粹的人类语言的子集。

您可以编写如下代码:

i want window and the window title is Hello World.
i want button and button caption is Close.
and button name is btn1.

btn1 mouse click. instructions are
   you close window
end of instructions

我的问题不是关于语言本身,而是我们需要这样的语言,是否使编写代码变得更容易?

10 个答案:

答案 0 :(得分:19)

代码可能看起来像一样的自然语言,但它实际上只是具有不同关键字的常规计算机代码。在您的示例中,I want可能与new同义。这并不是说你可以直接使用自然语言而是说make me a window代替(如果可以的话,事情会变得更加丑陋......)。

让我们仔细看看你的代码和语言含义:

i want window and the window title is Hello World. 

i want表示newand表示参数列表的开头。 the <type_name> <member_name> is在正在创建的对象上设置实例变量member_name。请注意,您必须两次编写type_name

i want button and button caption is Close.
and button name is btn1.

.结束陈述。但是,您可以通过使用and启动下一个语句来“链接”对象的方法调用。另外,如何引用名为Close的变量而不是字符串"Close"?哎呀,我们甚至用普通英语来解决这个问题:“说出你的名字”和“说出你的名字”之间的区别是什么?'

btn1 mouse click. instructions are
   you close window
end of instructions

mouse click是包含空格的标识符,应为mouseClickinstructions are定义了一个lambda(请参阅导致问题的isare关键字混淆?)。 you close window来电window.close()end of instructions是lambda的结尾。所有这些都比他们需要的时间更长。

还记得吗?这些只是我对语法的猜测,这可能是完全错误的。看起来还很简单?如果是这样,尝试编写一个更大的程序而不破坏任何那些规则,以及附加规则,你需要定义条件逻辑,循环,类,泛型,继承,或者你需要的任何其他东西。您所做的只是将常规编程语言中的符号更改为“自然语言”等价物,这些等价物难以记忆,不必要的冗长和更模糊。


试试这个翻译:

var myWindow = new Window( title="Hello World" );
myWindow.addButton( new Button( caption="Close", name="btn1" ) );

btn1.onMouseClick = function() {
    myWindow.close();
}

在前面的示例中查看每条线如何映射到其对应部分,但更直接地说明了意图?自然语言可能有利于人类执行,但是对于精确的规范来说,它非常难以使用。

你越努力让英语轻松而清晰地传达这些想法,它就越像我们已经拥有的编程语言。简而言之,编程语言尽可能接近自然语言,而不会失去清晰度和简洁性。 :d

答案 1 :(得分:13)

由于编程的根本困难在于让你的想法足以告诉计算机该做什么,使语言更“自然”是非常不可能让非程序员更容易理解;语言本身从来就不是真正的问题。更重要的是,所有自然语言的混乱都无法帮助任何程序员(值得这个名字)和他们正在做的事情,为什么要添加呢?

或者我们可以拥有一种真正的自然语言编程语言,包括“嗯”,“呃”和“哦,我真的不知道”? : - )

答案 2 :(得分:7)

答案 3 :(得分:5)

您在上面向我们展示的编程语言非常详细(因为它看起来甚至超过了COBOL)。

这有几个问题:

  • 做简单的事需要很长的代码。
  • 代码变得难以维护
  • 需要很长时间才能找到代码

答案 4 :(得分:3)

他们是否更好是意见,但这看起来像COBOL和BASIC的一些变异交叉,这绝对是非常糟糕的。

所以在我看来,没有。我认为仍然使用可读动词/形容词/名称的某些点对点语言更好(C ++,C#,PHP等是我的首选语言)。

有些语言开始变得过于高级和/或冗长,使得实际逻辑如此抽象,很难知道它是什么做的。有些太低级和简短,迫使你明确说出你想做的一切。可读性和简洁性之间的平衡,以及功能和灵活性,是最适合开发的。

答案 5 :(得分:3)

我会很勇敢,并在这里提出略有不同的意见。

除了在问题中提出的内容之外,我还没有看到过这种语言的任何内容,但是看看我不得不说它对于非程序员来说可能更具可读性。另一方面,对于程序员而言,它不会损害可读性,但它也无济于事,因为我们习惯于阅读代码。

在实际的开发方面,我认为必须输入这么多额外的内容是非常可怕的,特别是如果你习惯于简洁的关键字和像我们程序员这样的结构。

但让我们想象一下,语音识别实际上是准确的远期未来。我认为通过与您的计算机交谈,这样的语言将更容易编码,我不想指定每个括号等。不必这样做有助于保持思路。

总结:

  • 非程序员可读性:太棒了。
  • 程序员可读性:没有改进。
  • 可编码性输入:不,只是......没有。
  • 可编码性言论:可能更容易。

答案 6 :(得分:3)

person.eBusiness[text.this.author].like(language.supernova.idea.reverse);
language.English[ambiguous[very]];
person.eBusiness.suggest(create(language.Codetalk));
language.Codetalk.grammar.inspiration=language.programming.grammar;
language.Codetalk[new,better,ambiguous[not]];
if(person.all.use(language.Codetalk)){
    person.all.understand(person.all.communication);
};
question(language.Codetalk.idea[good]);

答案 7 :(得分:2)

在我看来,使用那种“人类语言”并没有什么用处,因为你仍然需要语法和特殊的单词。你必须学习它们,因为这是必要的,学习“编程语言”并不困难,“编程语言”具有很多优点,因为它面向机器的结构,而不是人类的思维方式。 / p>

如果你想编写好的程序,你需要考虑机器的工作方式,而编程语言在表达这种思维方式方面肯定比人类语言更强大。

答案 8 :(得分:1)

这些语言的一个问题是:假设您使用这种语言编写应用程序的重要部分,然后需要不同的人来维护,扩展或以其他方式更改代码。
你打算做谁?街上没有人会知道,其他人会有一个陡峭的学习曲线 我们还假设您有一个关于如何完成任务语言的问题,您在哪里转向?

答案 9 :(得分:0)

完美的编程语言就是英语的精确副本。你可以告诉你的电脑做一些事情,就像你可以订购咖啡或给你的课堂作业一样。但是,这种语言实施起来非常困难(先进的A.I是必要的)。