---
title: 计算机语言与人类语言
date: '2014-01-04'
slug: comp-human-lang
---

蟒蛇社区雄赳赳气昂昂跨进统计学领域，有人呐喊[一统江湖](http://badhessian.org/2013/11/python-and-pydata-conferences-are-important-for-the-future-of-social-science-research/)，有人拼命[抹黑R语言](http://readwrite.com/2013/11/25/python-displacing-r-as-the-programming-language-for-data-science)（R语言不是语言），我不想讨论战争问题，这里只是谈谈关于计算机语言与人类语言的一些想法。

一门计算机语言容易被人诟病的地方通常是不符合“最小惊讶原则”，或者缺乏一致性。PHP就经常被人黑得没鼻子没脸，例如它的字符串函数名一会儿有下划线，一会儿没有，让人记不清到底有没有。尽管如此，PHP仍然是[最流行](http://langpop.com)的几种语言之一。

如果真的能只有一种语言一统江湖的话，那定是极好的，大家会少去大量的沟通成本，可是这样的事情在计算机世界和人类世界都没有发生。在这两个世界，都是各种语言割据使用者，有时候一种语言甚至还有派生的方言。为什么会有这样的现象？我不知道答案。

如果人类世界有一种语言终将一统江湖，我估计可能会是英语，但这种演进可能需要千万年的时间，尽管现阶段我们能觉察一些趋势。比如年轻一代人喜欢在嘴边挂着英文词汇，越来越多国人涌向英语国家，农村的方言在消逝，等等。作为人类语言，英语有没有最小惊讶的问题呢？想一想这个问题的话，就会发现“最小惊讶”在一定程度上只是一个主观判断，路人甲惊讶的东西路人乙可能觉得本来就该如此。一些例子：

英语中的“你”（You）没有专门的复数形式，即没有专门的“你们”这个词，确切地说是单数复数是同一个词，这让我感到很痛苦，因为当别人说You的时候，你不知道是指一个人还是指一群人。为了修补这个漏洞，美国人只好说You guys，而英国人似乎觉得美国人的这种说法很好笑。

复数本身对中文来说就是一个新概念，中文里一个苹果两个苹果都是用“苹果”这个词而不会说“苹果们”，英文里描述多于一个的（可数的）东西就得用复数形式，这在很多情况下何尝不是冗余表达？既然有数词在前面，后面的词何必再变化形式呢？变化就变化吧，还非得对某些名词作不规则的变化，apple变作apples，potato就得变作potatoes，photo却是photos，person要变成people，要是所有的复数统统都是加上s结尾不行吗？形容词的比较级和最高级、动词的过去时和过去分词都是一样的故事，总是充斥着不规则。高中时我出于叛逆心理经常和同学讲一个不好笑的笑话：good, gooder, goodest。

可数和不可数名词也是一个问题，一个名词是否可数并不取决于它是否真的可以数，例如“水”是一个连续的形态，所以不可数可以理解，但为什么“鱼”不可数呢？为什么不能说one fish, two fishes，明明就是一条一条明确可分的。

中文里的“他”和“她”的发音一样，所以我们口语中用人称代词不会仔细想指代的人的性别，到了英文的世界就很容易犯一个错误，也就是口语中经常he/she不分，说着说着就忘了需要先想清楚性别再发音，不然she is my husband / he is my wife之类的话说出来也挺吓人的。

英文里经常把结果放在条件的前面讲，也就是“什么什么，如果什么什么”，这也是一种奇怪的思维方式，从推理或推导的过程来说，应该是先有条件，再有结果。先讲结果的话，听完这半句则不知该作什么反应，很容易反应过早。

从人类语言的角度来说，没有什么最小惊讶，只有最大熟悉问题。英语这种全是漏洞和不规则性的语言都能流行，上哪儿说理去呢。

<iframe src="https://embed.ted.com/talks/lang/en/suzanne_talhouk_don_t_kill_your_language.html" width="560" height="315" frameborder="0" scrolling="no" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
