语言的控制力问题

语言有两个作用:建立逻辑链和沟通。

没有语言就不会有逻辑链,因为一组没有经过抽象的信息根本就无法建立“因-果”关系。一亿个细胞进入另一亿个细胞,然后部分破裂,变成细胞干,你说这是什么因果?更不要说这话本身就是抽象了。只有你说“我吃了两碗饭所以现在吃不下了”,这才有“因果”。

语言让我们可以把一系列的因果组织起来,进行预判,计划,执行,回顾,参考。然后我们可以把逻辑链越过个体,传递给另一方,比如我们要从深圳去广州,我们可以去走去车站,买票,坐车,就到广州了。

我们可以把这个逻辑链的部分细节可以传递给其他实体,比如“我要坐车”,传递给车站。这是沟通,我们通过语言抽象,把部分信息传递到另一个实体上。语言穿越实体实现沟通的能力,可能超出你的想象。它非常高效。

好了,现在是我们要讨论语言控制力的问题了:你能给车站下达什么命令是车站这个模块为你提供的控制力。比如,车站可能给你提供如下指令支持:

在时刻X,坐车到城市Y。
(X可选范围为:每日0:00, 0:30, 1:00...,
Y可选范围为如下广东范围的城市:广州,广州南,佛山,增城,东莞……)

如果你要去北京,这个指令空间就无法支持你的行为了。如果你确实需要北京,你就会觉得“车站”这个模块提供的功能不够用,指令空间不够强大。

但指令空间是不是越大越好呢?就算我们可以无限强化车站的接口,这也不是这样的,比如车站给出的指令空间可以是这样的:

在时刻X(可选每日整分钟的时刻),让司机Y(可选张三/李四),
坐地铁来车站,车上有座就座,就Z(坐着或者站着),
然后开BUS A,到站台B,接上我和C集合的乘客,
双手握持方向盘驾驶BUS到GPS位置dd.dd……

这个指令控制力强,你却不喜欢用。

人们觉得控制力强是随心所欲,不在“心所欲”中的额外要求并不希望进行控制,那个反而变成被别人控制。但“心所欲”并不是一个完备的逻辑,你向另一个实体发出一个心所欲,那个实体不一定能执行或者高效执行你的要求,特别是如果你没有给出建议,被要求的主体无法判断是否错判你的意思。

Linux内核的C接口用的likely和unlikely是一种典型的例子,下面这个逻辑是我的意欲:

if (a>0)
  do_sth();

但编译器(加芯片)无法高效处理这个请求,它希望你告诉它a>0的可能性高还是a<=0的可能性高,这个它执行起来不一样。所以这个程序可能这样写才会高效:

if (likely(a>0))
  do_sth();

这到底算是这个语言的控制力强还是控制力弱呢?它强迫了我提供额外的,非我意欲之内的信息,但其他不提供这种能力的语言,的确不能实现一样的效率。而且这个地方,没有这个信息,(在现在的现实架构下)确实也无法提高这个效率。

这个问题在语言(接口其实也是一种特殊的语言)的控制力(或者很多时候我们说某种语言的语法很强大)上无处不在。丢开我们的需求和提供接口一方的细节,这个问题根本就没有结论。我做一个科学计算,我不关心你的字长,不关心你的精度,希望你给我解释解,但你做不到,说到底还是需要我接受你的语言能力。

说起来,我们把一个接口分解到另一个实体上,关键在于两个实体的名称空间的相似度。你让我识别一张图片,把图片交给我,我保存起来,告诉你这里面什么,这是理智思考。但用深度学习算法识别出这是一只猫在叫春,这里离这个名称空间就远了。这种情况下就会分离出接口,然后就从这里开始分析双方都认可的概念来进行通讯了。

总的来说,不要指望抛开现实和意欲讨论接口,接口能成为怎样,不是接口本身的问题。也不要觉得有了机器学习,逻辑编程就会消失。逻辑编程是人头脑控制的一部分,逻辑要求消失了,人类的控制感就消失了,其存在感也就消失了。

编辑于 2019-12-14 17:44