这里有一些稍微冗长的抱怨。
计算机语言实际上与人类语言并没有太大不同。两者都用通用理解的术语来表达想法和概念。虽然不同的人类语言有句法差异,但是你可以用每种语言表达相同的事情(这是否意味着人类语言是图灵完备的? :))。有些语言比其他语言更适合表达某些内容。
例如,尽管技术上不完全正确,因纽特语似乎非常适合描述各种雪。在我看来,日语非常适合表达自己的感受和心境,因为它在这方面拥有大量简洁的词汇。德语由于具有明确的语法而非常精确。
不同的编程语言也有不同的专长,但它们主要区别在于表达所需的详细程度。人类语言和编程语言之间的重大区别主要在于编程语言缺乏许多词汇,并且具有极少的“语法”规则。通过库,您可以扩展语言的词汇量。
例如:
给我做咖啡。
对于人类来说非常容易理解,但这仅因为我们知道每个词的含义。
coffee :一种由热带灌木的烘焙和研磨豆状种子制成的饮料
drink :可被吞咽的液体
swallow :使或允许通过喉咙
…等等
我们都能记住这些定义,但我们必须在某个时候学会它们。
同样地,计算机也可以“学习”“理解”单词。
Coffee::make()->giveTo($me);
这在计算机语言中是一种完全有效的表达方式。如果计算机“知道”
Coffee
、
make()
和
giveTo()
的含义,并且
$me
已经定义,那么它表达了与英语句子相同的意思,只是使用了不同、更严谨的语法。
在不同的环境中,为了达到相同的结果,你需要说出略微不同的话。例如,在日本,你可能会说:
コーヒーを作ってもらっても良いですか?
Kōhī o tsukuttemoratte mo ii desu ka?
大致翻译为:
if ($Person->isAgreeable('Coffee::make()')) {
return $Person->return(Coffee::make());
}
同样的思路,同样的结果,但是
$me
是隐含的,如果你不先检查
isAgreeable
,你可能会得到运行时错误。在计算机术语中,这有点类似于Ruby隐含返回最后一个表达式的结果("语法特征"),并首先检查可用内存(环境必需品)。
如果你和一个词汇量很小的人交谈,你可能需要更详细地解释:
去厨房。
拿一个锅。
把锅里装满水。
...
就像汇编语言一样。:o)
无论如何,重点是,编程语言实际上就像人类语言一样。它们的语法不同,并专门针对问题领域(逻辑/数学)和“听者”(计算机),但它们只是传达想法和概念的方式。
编辑:
关于“为听者优化”的另一个观点是,编程语言尝试消除歧义。例如,“给我冲杯咖啡”可能从技术上讲被理解为“把我变成咖啡”。人类可以直观地判断意图,计算机则不能。因此,在编程语言中,通常每件事都只有一种意义。如果不是这样,你可能会遇到问题,JavaScript中的“
+
”操作符就是一个常见的例子。
1 + 1 -> 2
'1' + '1' -> '11'