《编码》读书心得(上)

以前被人推荐《编码:隐匿在计算机软硬件背后的语言》这本书,一直没有时间拜读,最近花时间读了此书的前半部分,很有感触,便趁热打铁,将感悟写下,作为读书笔记。

1.至亲密友

主要内容:两个住在街道对边的好朋友想要在夜里交流,但苦于没有方便的工具,于是想到了使用手电筒来。刚开始想的是使用手电筒划图形的方式,发现有点复杂,看不太清,就想通过手电筒的开关次数来代表字母,这次好多了,但是要发送一句话要开关手电筒上百次,效率低下,于是就引出了摩尔斯电码,使用短闪(点)和长闪(划)来进行编码。

心得:

  • 编码是用来传递信息的方式,编码就是交流。
  • 编码普遍存在,说话的声音,书写的文字,盲人的手语,布莱叶盲文等
  • 数字、声音、图片和电影等通过计算机能理解的编码形式在计算机里存储和传递

2.编码与组合

主要内容:由于摩尔斯电码发送方发送较为简单,但接收方解析却比较困难,为了解决这个问题,构建了一个编码的树形图表来辅助解析。

心得:

  • 码字的数目=2^编码的位数
  • 摩尔斯电码也被称作二进制码,二元对象和二进制码常常使用2的乘方来进行描述

3.布莱叶盲文与二进制码

主要内容:最初给盲人们印刷的盲文是以突起的字母来表示的,但这种方式效果却很不理想,因为盲人摸字母就像正常人看手电筒划字母一样,非常的费劲。后来一个军官发明一个用突起的点和划的组合来表示文字的文字系统,解决了触摸突起的字母的缺点,但这个文字系统过于复杂。布莱叶改进了这种系统,他使用2*3的凸/平矩阵来一个字母信息,这套标准至今仍在使用,经过改造又产生了二级布莱叶盲文。

心得:

  • 一个伟大事物的产生,可能需要几代人的共同努力
  • 通过切换上下文,可以使同一个东西具有不同的含义

4.手电筒的刨析

主要内容:刨析了手电筒的构成,手电筒内部有一个电路,一个电路就是一个环路,只有整个回路是连通的灯泡才能发光,开关控制回路的开闭。

心得:

  • 所有的电子,不管在哪里都是完全一样的
  • 电压表征了电势能的大下
  • 电流与流经电路的电子数有关
  • 开关的开闭状态也是一种二进制编码

5.绕过拐角的通信

主要内容:当距离更远或者手电筒通信方式受限的时候要怎么交流呢。可以通过使用电源、导线和灯泡在朋友家和自己家构造一个双向的电报系统,只要导线能到的地方,就能正常通信。但随着距离的增长,导线的长度也在增长,导线长度增长后,电阻就会变大,这时为了维持足够的电流就需要加大电压。但只要电压足够强,其实可以采用一端接地一端使用导线的方式来连接电源和灯泡,以此来节省导线。

心得:

  • 使用导线理论上可以构建出不受距离限制的通信系统
  • 不要只满足于初始结果,要不断改进,最后才能得到最好的结果

6.电报机与继电器

主要内容:在19世纪以前,还不能同时做到远距离通信和实时通信。一直以来,为了同时实现这两者,曾做过很多尝试,如雇佣很多人站在山上作为中继,通过使用挥舞旗子来传递信息。后来又发展到使用机械臂代替人进行挥旗,但这些方法效果都不很理想,直到萨缪尔-摩尔斯发明了电报。电磁铁是电报机的基础,在线路的一端断开或闭合开关,可以是电路另一端的电磁铁有所动作。早期的电报机也有一些缺点,但都被一一改进,比如线路过长电阻增大,导致需要的电压变高,但一条电线不能无限延长,电压也不可能无限增大,使用中继站很好的解决了这个问题。中继站又催生出了继电器这个意义非凡的设备,继电器是一个由电流控制的开关,使用继电器甚至可以装配号一台完整的计算机来!

心得:

  • 当一个问题太大不好解决的时候,可以拆分成很多个好解决的小问题,最后把这些小问题的解组合起来就是大问题的解。
  • "偷懒"促进了科技的进步

7.我们的十个数字

主要内容:大多数文明的数字系统都是以10作为基数,是因为早期使用手指来计数。假如人有8根手指,那可能就使用八进制系统了。

心得:

  • 所处的环境造就了我们所使用的工具的特性,或者换句话说,环境影响心智。

8.十的替代品

主要内容:人类使用十进制计数,卡通人物使用八进制,龙虾使用四进制,海豚使用二进制。因为环境的不同催生出了不同的计数系统,但不同的计数系统之间可以互相转换。电线可以表示二进制数字,电线中有电流表示二进制数字1,没有的话就表示二进制数字0。开关、灯泡、继电器都可以表示二进制数字,二进制数与计算机紧密相关,因为计算机本身所处的环境就是如此。

心得:

  • 二进制数与计算机紧密相关

9.二进制数

主要内容:二进制数在现实生活中也是普遍存在的,比如: 是/不是、关门/营业、关闭/打开等。二进制数具有特殊性,其特殊性在于它是人们所能想到的最简单的数字系统,1比特(bit)表示一个二进制数字位,1比特是可能存在的最小的信息量。在通信中,有时候运用冗余能抵消"噪声"的影响。条形码和胶卷卷轴上的方格都是使用二进制进行编码,虽然它们的编码形式并不相同。比特在逻辑学中也很有用,因为真和假同样可以表示为1和0。

心得:

  • 编码数量=2^比特位
  • 文字、图片、声音、电影等都可以使用比特表示

10.逻辑与开关

主要内容:对古希腊人来说,逻辑是在追求真理的过程中的一种分析方法。乔治-布尔找到了一种用数学来描述逻辑的方法,他发明了一种代数使逻辑可以进行运算,并把代数从数的概念中抽离出来而使其更加抽象。在布尔代数中操作数不是数字而是类(class),一个类就是一个事物的群体,它后来也被称为集合(set)。布尔代数里的"+"和"x"表示的意义是并集和交集,"1"表示全集,"0"表示空集,同时交换率、结合律、分配率同样城里,而且加法还可以分配乘法。从布尔代数里可以推导出一个叫做矛盾律的概念:事物不可能既是它本身,同时又是它的对立面。抛开交集和并集的概念,我们可以AND表示交集,OR表示并集,NOT表示全集去掉某些元素,这样就很接近平时所说的话了,我们甚至可以使用电路来模拟这些概念,串联表示AND,并联表示OR。有了这些东西我们离制造一台计算机已经很接近了。

心得:

  • 问题存在很多等价形式
  • 当一个问题不好解决时,可以转换为等价的好解决的问题,然后再把问题的解转换回来