i@yujinyan.me

Blog

《编码》读书笔记

😍😍😍😍😓

前几章引人入胜,通俗易懂,很喜欢讲解计算机原理的过程中加入的历史叙事。后半部分关于电路的介绍相当“硬核”。

第一章

了解到一个有趣的轶事:二战期间 BBC 会播放贝多芬第五交响曲开始的那四个音,那个寓意是 Victory。

第二章:Morse Code

Morse code 联想到了霍夫曼码,霍夫曼和 input data 有关,而 Morse 根据西文字母出现的频率经验而来,比如字母 e 出现频率较高,对应的 morse code 也较短。

但 Morse 不像霍夫曼那样 prefix free,所以需要手动加入间隔。不知道 morse 设计成 prefix free 会不会更好些?

📖

A prefix-free code requires there is no whole code word in the system that is a prefix (initial segment) of any other code word in the system.

For example, {9, 55} is a prefix-free code, while {9, 5, 59, 55} is not.

Why do we use Morse code, instead of a prefix-free code, which eliminates the need for the spaces between characters?

Morse 是个非常好的例子,深刻揭示了计算机信息存储的本质即 bits+context,这也是本书书名 Code 所要传达的核心。

第三章:Braille

关于盲文的设计,起初有人设计成字母的样子,没有很好把握住痛点,陷入了思维的局限。

最终还是这位 Louis Braille 虽幼年遭遇不幸失明,但心中求知的光明冲破黑暗,留下来传世的发明。

为了追求编码的精简,一些 contraction 的设计非常有趣。

第四、五、六章:电

电的物质基础是电子的移动,唤醒了一些残存的中学物理的记忆。作者对电的介绍得非常好,深入浅出。

第七、八章:进制

介绍了进制和二进制,第一次看到二进制乘法,记录关于数字的单词:

数字单词
2binary
3ternary
4quaternary
5quinary
6senary
7septenary
8octal
9nonary
10decimal
16hexadecimal

第九章:胶卷、条形码的编码

胶卷的例子感觉有点过时了。另外可以看下二维码。

感受到的这本书的历史轶闻,比如第九章一开始的英军入侵的歌谣以及各位发明家的生平,让人感受到计算机发明的线索和灵感隐匿在人类文明发展历程中。

第十章

用 + 和 × 表示「或」和「与」感觉挺有趣,像 Algebraic Data Type:sum type / product type。

第十一、十二章

介绍了逻辑门和 adding machine (应该就是 ALU)。adding machine 那块感觉一开始还有点难理解 …

从这里开始 code 有点像 Nand to Tetris 这本书了,Nand to Tetris 更加注重动手实践。

第十三章

如何做减法,有点像这两写的 klisp 的考虑,提供哪些 primitive 的操作,比如有了在运行时提供加法了以后,减法以及其他操作是不是可以在 library 实现。

不过为了简单起见,现在四则运算都直接提供了。

回到本章,似乎介绍了两种思路,后一种用 two’s complement 应该更加重要一些。

第十四章:Flip-Flops

简直神(fei)奇(jie)。

第十五章:Bytes and Hex

相对熟悉的内容。

第十六章:内存构造

超级复杂。

第十七

CSAPP 等关于组成原理的书一般从软件这一边看软/硬件接口,这本是似乎是从硬件这边看。

电路部分照旧还是太复杂,很多都跳过去了,作者自己也在开篇就说细节很多,可以跳过一些。

第十八章:计算机发展历史

冯诺依曼的存储程序、半导体的相关知识等。

第十九章:两个经典微处理器

  • 英特尔的 8080 (x86 的先驱)和
  • 摩托罗拉 6800,后者的后代 68000 用在了初代 Mac 上

第二十章

关于字符编码,从 ASCII 到 Unicode。UTF-8 解决了最后说的存储空间翻倍的问题,但书中没有提到,估计是出版时间较早的原因。

补充一下:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

第二十一章

关于电路的内容,跳过了很多

第二十二章:操作系统

从 IO 和文件系统开始讲解。

第二十三章:定点数和浮点数

CSAPP 更加系统细致一点,关于浮点的硬件历史可以看看。

第二十四章:编程语言

可以了解一些古董语言的历史。

第二十五章:多媒体

Object-Oriented language 与 GUI 的关系。