为什么我们需要更复杂的编程语言(是的,您没听错!)

我的女儿正在学习如何阅读。 当我在考虑此博客文章时,我刚走过我的妻子和她,从事一些非常基本的阅读技巧的工作。 教她学习英语和读写英语所需的一切都是相当多的工作。

实际上,要使她实际上能够以任何能力进行读写(至少以我们的成人水平为准),将需要数年的努力。 我们倾向于将语言视为理所当然,但口头和书面语言很难(异常困难)。

即使是成年人,撰写这篇文章也很困难。 这些话从我的脑海中流淌不尽。 我竭力以适当的方式对事物进行措辞并使用适当的标点符号。

但是,即使很难学习书面语言,我们也确保我们的孩子能做到这一点,因为它赋予了他们生活中的高价值。 没有阅读和书写语言的技能,大多数儿童的未来将十分黯淡。

我对这个想法的思考越来越多,我越发意识到将简单的编程语言与书面或口头语言的复杂性进行比较。

为什么我们需要更复杂的编程语言(是的,您没听错!)

更加复杂的论点

具有讽刺意味的是,我争辩着要增加复杂性而不是减少复杂性,但这并不能逃避我,但是即使我努力使复杂性变得简单,有时我们确实确实需要使事情变得更复杂才能获得最佳结果。

我已经考虑了很长时间,并且我相信编程语言就是这种情况。 让我解释。

在我专门学习编程语言之前,让我们从谈论人类语言开始。

我会说英文。 英语被认为是总词汇量最大的语言,也是学习难度最高的语言之一,因为您可以灵活地用它来组成句子。

学习英语非常困难。 幸运的是,我是一个以英语为母语的人,并且长大后会学习英语,但是对于许多非英语母语的人来说,即使他们能说流利的语言,即使他们使用了英语,这仍然是一个挑战。

流利的英语表达能力有很大的好处。 我并不声称自己是外语方面的专家-我本人仅会一点西班牙语,巴西葡萄牙语和日语-但是,我确实知道英语是当今存在的最具表达能力的语言之一。 如果您想用英语说些什么,那么很可能会用一个词来表达。 如果您想传达一种语言的语气或感觉,甚至像我刚才所说的那样,对话的步调,也可以用英语来表达。

如我所说,我不会说其他语言。 但是,在夏威夷生活后,我可以告诉你,夏威夷语是一种很小的语言,很难用这种语言表达自己。 手语是非常小的语言的另一示例,它非常容易学习,但是在它可以传达的内容和方式方面受到限制。

我说这一切只是为了说明一个简单的观点。 一种语言的词汇量越大,语法规则越多,学习该语言就越困难,但是使用该语言的表现力越强。

把东西分解得更小

我保证我会稍微学习一下语言,但是在我开始之前,我想谈谈另一种人类语言概念-字母或符号。

英文字母中有26个字母。 这26个字母代表了我们用来构成单词的大多数声音。 26个字母不是一个小数目的字符,但也不是一个大数目。 对于大多数孩子来说,学习字母表中的所有字母以及他们发出的声音是一项非常容易的任务。

您目前正在阅读的文字是由这些字母组成的,但是您是否考虑过如果字母表中的字母更多,会发生什么情况? 例如,假设有500个字母,而不是26个字母。 假设我们为“ th”,“ sh”,“ oo”等创建了实际符号。 假设我们将“ the”一词变成其自身的符号。

为什么我们需要更复杂的编程语言(是的,您没听错!)

如果我们在字母表中添加更多字母,则学习字母表所需的时间会更长,但是一旦您学会了字母表,您将可以更有效地进行读写。 (尽管,我不希望看到500字母键盘的外观。)

我的观点是,为了表达一些有用的符号,我们可以将其打包成数量有限的符号,从而在表达能力方面进行交易。

在阅读本文时,您可能会认为这正是中文和日文之类的语言-它们使用大量符号而不是小字母。 我对这些语言的了解还不够,无法确定答案,但是我敢打赌,阅读中文或日文报纸要比阅读英文要容易得多,或者至少更快。

我们可以进行相同的练习并将其应用于数字系统。 而不是使用10或在数字系统中使用10个符号,我们可以使用100甚至1000。学习所有数字将花费很长时间,但是我们能够更高效地执行数学运算。 (一个较小的示例就是将您的时间表存储为最大99 x99。想象一下使用该功能可以做什么。)

这一切与编程语言有什么关系?

你真的很急吗? 但是,我想你是对的。 我现在应该达到我的真正目的。

因此,在讨论编程语言之前就提出这两个示例的原因是,我希望您看到一种语言的词汇和语法会极大地影响其表达能力,而书面语言的基本结构会极大地影响其密度。 简洁表达事物的能力。

显然,我们无法将人类书面语言直接映射到编程语言,但是在考虑语言设计时,我们可以得出一些非常有力的相似之处。

我经常思考一个问题,那就是使用包含多个关键字或较少关键字的编程语言是否更好。 但是,我今天意识到这是问题的过度简化。

关键字本身并不能决定语言的表现力。 我认为语言的表现力取决于:

  • 关键字数
  • 语言中陈述和构造的复杂性
  • 标准库的大小

所有这些东西结合在一起使语言更富有表现力,但也更加复杂。 如果我们根据这些因素中的任何一个来加快拨盘的使用速度,就可以用更少的代码来使用该语言来做更多的事情,但同时也会增加学习该语言和阅读用该语言编写的代码的难度。

注意,我没有写语言。 这是因为-假设您已经掌握了该语言,那么当它具有更多的构造时,实际上变得更容易编写。 如果您曾经遇到过Perl的高手,那么您就会知道这是真的。 我见过一些Perl大师可以以比我想象的更快的速度编写Perl,但是几个月后当他们回到自己的代码时,即使他们听不懂。

看一些真实的例子

为了使我所说的更加具体,让我们看一些示例。 我将从C#开始,因为它是我非常熟悉的语言。 C#是一种非常有表现力的语言。 它并不是从这种方式开始的,但是随着语言中添加的所有关键字以及基类库的庞大规模,C#变得非常庞大。

C#是一种不断发展的语言。 但是,现在它大约有79个关键字。 (如果我在这里错了,请随时纠正我。)就语言而言,这相当大。 除了关键字之外,C#还具有一些复杂的语句。 Lambda表达式和LINQ表达式立即浮现在脑海。 对于学习C#的人来说,这项任务可能会很困难,但是所得到的回报是,他们可以提高工作效率并编写一些简洁的代码。 (至少与诸如C或C ++等更冗长的语言相比。)Java在大多数方面也非常接近。

但是,请使用Go语言。 Go是只有25个关键字的语言。 它通过具有一些相当复杂的语言结构和一个相当强大的标准库来弥补这一点。 当我第一次学习Go时,大概花了一个星期的时间,我觉得自己对语言有了很好的掌握。 但是,学习如何正确使用Go花费了更长的时间。 (而且我还有很多东西要学。)

在频谱的最末端,我们有BASIC之类的语言。 不同的BASIC实现具有不同的关键字计数,但是大多数关键字的数量都很少,并且语言的结构非常简单。 BASIC是一种非常容易学习的语言。 但是,由于学习BASIC非常容易,而BASIC如此简单,因此普通程序员很快就超过了该语言的功能。 BASIC的表达能力很差,要用几行C#或Go编写相同的内容,需要花费更多的代码行。

要更全面地了解编程语言之间的差异,我建议您使用Programming Language Pragmatics 它详细介绍了许多不同的语言以及它们之间的差异。

什么更复杂的编程语言可以买我们

争论更复杂的事情真的很奇怪,因为此博客的任务是使复杂变得简单,但是在编程语言的情况下,我认为增加复杂性的权衡值得花费额外的学习时间。

考虑一下英语比任何编程语言都复杂得多。 为了能够阅读您现在正在阅读的单词,您必须理解数千个单词的词汇表,识别其中的大部分单词,并了解一套控制语言语法的非常复杂的机制。 甚至没有具体的规则,“正确”或“错误”的大部分内容都是基于上下文的。

但是,即使有这么多的复杂性,您也能够做到—我们的大脑很棒。

为什么我们需要更复杂的编程语言(是的,您没听错!)

现在,想象一下,如果我们认为英语对于某种语言来说太难了,而我们又需要将其愚弄下来,那将会发生什么。 如果我们将词汇量减少到说200个单词,而又摆脱了复杂的规则,该怎么办? 您所拥有的基本上是一本苏斯博士的书或其他一些早期读者的儿童读物。 在这些限制下,我现在很难传达我要传达给您的各种想法。

当您甚至将最复杂的编程语言与英语进行比较时,也无可厚非。 英语比我们想像的任何编程语言都要复杂得多。 我不知道一种编程语言,普通人不能在一年的时间内学得相当好。 但是,如果您想尝试一年内教一个书面英语的人,那么,祝您好运。

如果我们创建更加复杂的编程语言,那么学习曲线将会更大。 但是,作为交换,我们将拥有一门掌握了语言的语言,它将使我们能够以现在甚至无法想象的水平表达算法意图。

我们不仅能够更清楚,更简洁地表达我们的意图,而且还可以大大减少代码的总使用量,并减少软件中潜在的错误。 更少的代码等于更少的错误。

缺点

现在,我只是在这里玩。 我“半”相信我所说的话,因为我只是在探索想法和可能性。 但是,即使在这种思想思考中,如果我们创建的编程语言与书面语言一样复杂,将会发生什么,我也不能忽略其弊端。

显然,最大的缺点是学习如何编程所需的学习曲线。 现在学习编程(至少是如何做得很好)非常困难。 我仍然认为人们使它变得比需要的更加复杂,但是与其他许多职业选择相比,软件开发是一项困难得多的职业。

如果我们创建了更复杂的编程语言,那么在人们甚至不能真正编写代码或理解已经编写的代码之前,我们就必须依靠多年的学习。 仅了解和记住足够多的语言就可以有效使用它,可能需要4到5年的时间。

当然,我们可以在某种程度上与初学者一起使用较简单的语言,并将他们推向更复杂的语言,从而在一定程度上与之抗衡。 (实际上,写这篇文章使我相信这将是当今最好的学习方法。我们不应该以C#或Java来开始开发人员,而应该教给他们非常简单的语言。)

就编程语言而言,我们可能还会*走较小的创新道路。 世界可以支持100多种简单的编程语言,但它不能轻易地支持那么多种复杂的语言。 我们可能最终会得到所有程序员都使用的一种通用语言。 这种大小的语言将非常笨拙,并且难以升级或更改。 由于书面语言自然地发展了数百年,因此首先要花费很大的精力来创建它。

现在足够有趣

写完这篇文章后,我的大脑很痛。 我一直在考虑写这篇文章已有一段时间,但是我不确定我在这个问题上的立场。 老实说,我还是不。 我确实认为,更复杂的编程语言可以为我们提供某些当前编程语言无法提供的好处,但是我不确定这些缺点最终是否值得弥补,甚至不确定更复杂的编程语言的外观是否值得。

那你呢,你觉得呢? 我疯了吗? 我在这里错过了重要的事情吗?


翻译自: https://www.javacodegeeks.com/2014/03/why-we-need-more-complex-programming-languages-yes-you-heard-me-right.html