代码之家  ›  专栏  ›  技术社区  ›  Mohamad Alhamoud

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

nlp
  •  6
  • Mohamad Alhamoud  · 技术社区  · 14 年前

    我最近看到一种叫做 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 回复  |  直到 6 年前
        1
  •  19
  •   Gordon Gustafson    10 年前

    代码可以 就像自然语言一样,但它实际上只是普通的计算机代码,带有不同的关键字。在你的例子中, I want 可能是 new . 你不能直接用自然语言说 make me a window 相反(如果可以的话,事情会变得更糟…)。

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

    i want window and the window title is Hello World. 
    

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

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

    . 结束语句。但是,可以通过使用以下命令启动下一条语句来“链接”对象的方法调用 . 另外,如何引用名为 Close 而不是字符串 "Close" ?哎呀,我们的普通英语也有这个问题:“说你的名字”和“说你的名字”有什么区别?

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

    mouse click 是包含空格的标识符,应为 mouseClick . instructions are 定义lambda(请参见 is VS are 关键词混淆导致麻烦了吗?). 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

        2
  •  13
  •   Donal Fellows    14 年前

    由于编程的根本困难是让你的思想有足够的条理来告诉计算机该做什么,使语言更自然地更容易被非程序员使用;语言本身从来不是真正的问题。更重要的是,所有这些额外杂乱的自然语言对任何程序员(名副其实)都没有帮助,所以为什么要添加它呢?

    或者我们能有一种真正的自然语言编程语言吗,包括__um__、__er__和__哦,我真的不知道__?-)

        3
  •  7
  •   PetrV    6 年前
        4
  •  5
  •   lamas    14 年前

    您上面向我们展示的编程语言是 极其 冗长(似乎比COBOL还要冗长)。

    这有几个问题:

    • 做简单的事情需要很长的代码。
    • 代码增长很快,无法维护
    • 要找出代码的作用需要很长时间
        5
  •  3
  •   ssube    14 年前

    不管他们是好是坏,这看起来像是一些COBOL和BASIC的突变交叉,这绝对是最糟糕的。

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

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

        6
  •  3
  •   NomeN    14 年前

    我会勇敢地提出一个稍微不同的意见。

    除了问题中的内容之外,我没有见过这种语言的任何其他内容,但是考虑到这一点,我不得不说,对于非程序员来说,它可能更易于阅读。另一方面,对于程序员来说,它不会损害可读性,但也不会有帮助,因为我们已经习惯了阅读代码。

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

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

    总之:

    • 非程序员可读性:很好。
    • 程序员可读性:没有改进。
    • 密码输入:不,只是…不。
    • 可编码性演讲:可能要容易得多。
        7
  •  3
  •   aaaaaaaaaaaa    14 年前
    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]);
    
        8
  •  2
  •   user329974    14 年前

    在我看来,使用这种“人类语言”并没有真正有用的优势,因为你仍然需要一种句法和特殊的词汇。你必须同时学习这两种语言,因为这是必要的,所以学习“编程语言”就不难了,因为它面向机器的结构,而不是人类的思维方式,因此具有很多优势。

    如果你想写出好的程序,你需要考虑机器的工作方式,而编程语言显然比人类语言更能表达这种思维方式。

        9
  •  1
  •   Romain Hippeau    14 年前

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

        10
  •  0
  •   user2850249    10 年前

    好吧,完美的编程语言将是英语的精确副本。你可以告诉你的电脑做一些事情,就像你点咖啡或者给你的班级做家庭作业一样。但是,这样的语言将非常难以实现(需要高级的A.I)。