这段时期工作稍微忙碌一些,今天终于啃下了大块头,内心也舒坦了许多,腾出一些时间,写写近来的一些心得体会。
和女朋友聊天时,本来想着找一个简单点儿的话题,后来我才发现:任何一个简单的东西深入探讨下去都是无比的复杂。女朋友说她想学习编程,我问她:什么是信息?给信息下个定义。没有经过专业的训练,确实很难能为信息下一个准确的定义。我随后举了个例子,比如我对她说:“我爱你”,她收到了这个信息,知道了我爱她,那么我再重复告诉她“我爱你”,我问她:“我传达给你的信息有没有变化”,她说没有。那么我再重复一次,我问她信息有没有变化,她说没有,我说不一定。如果说双方都建立了“重要的事情说三遍”这种观念,那么当我重复说第三次“我爱你”这句话的时候,其实语言所要传达的信息已经发生了变化,“我爱你”这件事是非常重要的,因此其对应的信息量也就增多了。在没有重复第三次之前,那么第二次的“我爱你”可以被视为重复,或者数据的冗余,除非我们事先为重复两次所要表达的意义做好约定。因此,信息就是用来消除不确定性的东西。
接着,我想应该从数制讲起,因为计算机的底层就是算术和逻辑运算。想到一些人经常会对计算机采用二进制感到困惑,我又觉得有关数字电路的知识也要讲一些,但在之前也要明白二进制这种计数方法。也许是教育的缘故吧,我小时候的数学学习中缺乏有关数学历史的学习,感觉所有的数学知识都是从天而降,有就是有,没有的东西也不会引起我的怀疑。
如今很多人都明白十进制,但对其它进制却有些疑惑。无论十进制、十六机制,还是二进制,其本质上都是一样的。即使他很自信的认为自己会熟练地进行十进制计数的各种运算,如果说不理解二进制,其实是自己根本没搞清楚计数的基本原理。在开始下面阅读之前,我们先在脑海中思考一下:什么是基数和序数?
古埃及人对从1到1000之间的每个数都给出了对应的名字。随着我们要处理的数量越来越多的时候,我们就必须借助规则去减少符号的冗余,因为我们的大脑无法记住这么多东西,但是通过规则我们可以剔除掉非常多的冗余,简化信息的存储方式,因此组合计数就产生了。我们用十进制和十六进制作对比说明:
十进制:0、1、2、3、4、5、6、7、8、9、(10、11、12、13、14、15)
十六进制:0、1、2、3、4、5、6、7、8、9、(a、b、c、d、e、f)
当我们要计数到9的下一个数字时,十进制显然就必须采取组合计数的方式,出现了位的概念:十位和个位,现在我们在十位计1,表示已经在个位累积了十个数,那么个位此时就可以归0,后面的计数从0又可以重复使用0至9这十个符号。因为采取了这种组合计数的规则,那么我们可以实现符号的重复使用,简化我们记忆的负担。而十六进制在数9的下一数字时,采用了a,此时我们还不需要采取组合计数的规则,直到们从a、b、c、d、e数到f时,再继续往下数,就需要考虑组合计数的规则,向上一位进1。
为什么人类普遍采用了十进制,吴军老师在《数学之美》中讲到,概源于人们只有10个手指头吧。但历史上也曾出现过二十进制,这就是玛雅文明所采用的玛雅数字。对于今天的人们来说,二十进制似乎很复杂,这与我们从小到大的训练有关,如果让一个人从小就学习使用二十进制,那么对于他来说二十进制也不是什么复杂的东西。既然我们普遍采用了十进制,因为路径依赖的缘故,其他各个行业的计数算术都采用了十进制,那么后来要重新改变规则,代价是极其昂贵的,除非能够像秦始皇采用强制的手段统一度量衡那样。
组合计数产生之后,也极大推动了我们思维的认知迭代速度。随着后来数学的大部发展,组合计数也开始遭遇瓶颈。面对古希腊繁冗的数字表示方式,阿基米德首创了记大数的方法,突破了当时用希腊字母计数不能超过一万的局限,并用它解决了很多数学难题。科学计数法的产生对于人们的计数产生了革命性的改变,一下子就拓宽了我们人类的认知视野和尺度。只有当我们突破了计数的边界,才会有无穷大和无穷小的产生落地,进而才会产生微积分,这也是事物的基本演化规律。
基数的1、2、3和序数的1、2、3在符号的表示上完全一样,但是它们所记录的信息完全不一样。基数主要是用于计数,是量的累积。计数背后反映的还是人们的抽象思维。对于我们要计数的对象来说,它们肯定是被我们均质化了的东西,不然完全不同的两个事物如何能够被累积计算在一起?就好比你把1只兔子和1只老鼠要累加在一起计算,那么这是2只什么?你可以很轻松地回答:2只动物。对,它们两个合在一起确实可以被计数为2只动物。这就是人们的抽象归纳思维。
序数暗含着一种结构,序数记录的是结构中的某个部分,既可以是时间上的位置关系,也可以是空间上的位置关系,总之使用序数描述时,我们都需要事先建造一个抽象结构。比如电影院第1排从左至右第3个座位,紧接着第3个人之后等等。其实对序数进行深层次的思考之后,我们会发现:序数思维比计数思维要更高一个层次。我们需要在大脑中首先构造一种确定的结构,通过序数来描述结构中的部分。显然这需要更加高层次的抽象思维,序数中携带的信息量要更大。《复杂的引擎》作者约翰·E·梅菲尔德在书中特别提到:
一个对象如果存在比对象本身短(或小)的描述,就具有有序性。
基数和序数背后反映的是人们大脑思维的两个工具,它们在符号上的相同给人们造成了它们都是数字的假象。我们很难知道这种思维是从什么时候开始的,以及它的第一次出现是怎么产生的。总之,我们正是依赖这种抽象归纳的能力,才走上了一条与其他动物貌似全然不同的道路。我有时候会突然的感到震撼,要是没有组合计数、没有科学计数,我们将是多么的辛苦。不过,要是没有它们,我会至于发出这样的感叹吗?这就是蕴含其中的逻辑。
当我们真正的将自己还原到历史的环境中去,将自己的认知保持与当时人们一致,我们才会对自己现在认为是常识和习惯性的东西发出惊叹。因此在感叹历史演化积淀的同时,我告诉自己:耐心的沉淀自己。这个时代的演化之道就是:“小步快跑、即时响应、持续迭代”。
文章开头简要的说了一些关于信息的问题,后面会作深入地探讨,包括信息度量(香农定理)、编码(哈夫曼编码)、校验(CRC校验码)、纠错(海明威纠错码)等内容。欢迎持续关注,让我们一起迭代自我!
网友评论