并不是所有普遍联系都对我们有意义,在面向对象语言的编程中,我们容易用到属性这个术语。
属性是把两种对象联系起来的方式,举个例子
apple.color = red
这是把apple类与red对象联系起来了。
也可以是
apple.in_the_same_basket = banana
这是把apple类和banana类联系起来了,他们都在同一个篮子里。
那计算机需不需要知道什么是color,什么是in_the_same_basket?
其实是不需要的,这和人理解事物类似,并不需要知道所有的细节才能理解。例如你知道red是什么颜色,但是你可能并不能说出它的频率波段。
人对任何事物都是不可能透彻理解到所有细节的,因为只有宇宙本身有那个能力。
所以我们所说的理解,实际上是把未知的事物与我们已知的事物联系起来了。这样我们就产生了一种掌控感,这种未知事物就可以通过已知事物来操作和表达。
和人脑不同的是,编程语言的属性并不能直接单独使用。
例如在人脑里,颜色、同一个篮子都是独立的节点,后者是稍微抽象的节点或者由节点生成。
人脑知道apple是什么,知道red是什么,单独的color也能使用,人脑甚至知道还有yellow, blue, green等颜色。
相比之下,编程语言中的color本身是无意义的,它只是apple和red的桥梁,本身除了这个作用并无意义。
也就是说,现有编程语言和人脑不同的一点是,编程语言中来表达联系的桥梁总是无意义的,而人脑中联系的桥梁本身可能就是有意义的。
再想想赋值,A = B, 实际上,在编程语言中,=号有特殊的意义,这是说A和B的值相同,在作用域把名字A绑定到对象B。
而在人脑中A = B,= 本身就是个节点,它在不同领域中有不同的意思,可能是数学中的值相同,也可能是模糊语言中的很类似。例如:
你怎么干了这件事,那前面的事等于没做。
编程语言这么设计可能有两种原因:
1 太过注重逻辑性
2 存储能力和计算能力有限
人脑是很注重逻辑性,但那不是全部,还需要模糊思考、统计性思考和分层思考。
当然编程语言在上个世纪设计的时候,如果专门给color创造一个字典,每个程序中的color都和预定义的color建立联系,显然这是不可能的。
即使是现在在大数据的前提下,创造人工智能,是否就要以人类思考的方式来建立,这还有待商榷。
例如,编程语言中的所有关键字,都是英语中的单词,我们想要做一件事,不需要去过多编程,只需要定义。
play a music for me.
人工智能看到这句话,可以像现在手机中,win10中的类似应用一样播放那句话。
可真正的人工智能,一定能理解这句话。它知道什么是play,什么是music,me是谁。它可能去网上找一首音乐给你听,你不需要定义一堆函数教它这么做。
而现在手机或win10中的"人工智能",只是预定义的函数,这种方式是不灵活的,它可能只限于本地的音乐,因为它不理解什么是音乐。
当然,真正的人工智能,并不是不教就会,我们需要像教一个孩子一样,通过数年甚至数十年去教育它。
但它可以真正理解音乐,它知道哪可以找到音乐,音乐的下载权限,音乐的码率,音乐的格式,各种知识之间的联系,它知道这些联系中哪些是最适合我们的。
可能根据个人口味,网速,歌曲的新旧,播放时段来智能选取,这种智能,实际上是调教了数年的结果。
也就是说,最终的人工智能,并不是每个人家里都有一台,而是真正的服务器。这个服务器存储了几乎人类所有的知识,它拥有庞大的容量,超级强大的计算能力。
而我们需要的或许只是一个VR显示器,通过网络和英语(或特定的人工智能语言)去请求我们想要的任何信息 ,再从本地来渲染,而这几十年内就能实现。
而拥有这种庞大能力的服务器供应商,可能是政府或者超级强大的企业,可能会超过人类历史上任何一个组织的力量。
最终编程语言和人类的语言可能合而为一,虚拟现实增强装备也可能变成随身携带的东西。