读《编码》,一本很是硬核的计算机科普书

335 阅读6分钟

《编码》这本书,是一位PM同事在22年年初于朋友圈推荐的,看过他的推荐文字(具体内容已经记不清楚,只记得推荐语是很诚恳很专业的),我将其加入书架。那时候,我还在用《京东读书》看书,到本周读完本书,我已经连续使用《微信读书》9个月了。

写本篇读书笔记前,我先统计了阅读时长:《京东读书》上是19小时,《微信读书》为6小时。如果两个APP的统计时长是没错的,那我读完本书,耗时为25小时。

《编码》并不长,只25.4万字。花如此长时间且跨越一年多才读完的原因来自于我的执着,我对于搞懂内存实现原理的执着。

书中内容是逐渐深入的。

理解摩尔斯电码,让我可以和邻家小伙伴在熄灯后突破物理距离使用手电筒沟通。

有了摩尔斯电码基础,再理解二进制就简单些了。

小伙伴搬了家,我有了新朋友,新朋友的房子并不能被手电筒照到,我们便牵了两根电线,用开关、灯泡沟通:我的开关控制朋友的灯泡,朋友的开关控制我的灯泡。这便是电报系统。

我和朋友的距离越来越远,长电线的电阻越来越大。为了克服更长的距离,我们在电线中间添加进中继系统——继电器。

继电器与二进制天然契合。如果继电器闭合,就代表二进制数字1,如果断开,则代表二进制数字0。

布尔代数,并联、串联,AND、OR……

逻辑门出现了。像让人通过的门一样,逻辑门让电流通过或阻止电流通过,它由继电器串联或并联组合而成。

通过门,我们可以实现简单的二进制加减法。

将继电器稍加改造,有了蜂鸣器,蜂鸣器换一种说法,便是振荡器。振荡器不需要人为干预,完全自发工作,它的输出在0和1之间按照固有规律交替变化,被称之为时钟。

继电器再改造,有了触发器电路,它可以“记住”某些信息,能记住信息的电路被称为锁存器。将锁存器“扩容”,便有了内存。

为了加法能够自动运行,于是前辈们将执行加法的计算操作进行存储让它变成代码,将执行代码的过程进行封装,则构造出微处理器。

有了微处理器、内存、键盘、视频显示器和磁盘驱动器,再搭配上操作系统,一台完整的计算机便出现在了我们面前。按照书中步骤,如果有兴趣且有时间,是完全可以自己组装出一台计算机的。

读完全书,我搞懂了内存实现原理么?我的答案是:“我搞懂过,在将‘存储器组织’相关章节看完第4遍时。”

但如果您再问我:“那可以解释一遍内存实现原理么?”

我的答案是:“距离搞懂日期过去半年,我已经忘记了。”

书中内容,既是如何从零开始搭建一台计算机,也是计算机的发展历史。历史中,既有趣事也有常识:

当我们讨论涉及存储器的相关问题时,通常使用的是字节数而非比特(需要的时候可以通过把字节数乘以8将其转换成比特)。有一种情况下我们会经常用到千比特和兆比特,那就是在描述在线路中流动的数据时,很多句子中经常会出现千比特每秒(kbps)或兆比特每秒(mbps)这些用语。例如,一台56K的调制解调器指的是其数据处理速度为56千比特每秒,而不是56千字节每秒。(这就是为什么我100M带宽的下载速度最高只能到12.5M/s的原因,只是计量单位不同而已。)

赫尔曼·霍尔瑞斯此后一发不可收拾。1896年,他创办制表机公司(Tabulating Machine Company),租借并出售其穿孔卡片设备。到1911年,由于公司的合并,制表机公司更名为计算制表记录公司(Computing-Tabulating-Recording Company),或者叫做C-T-R公司。再到1915年,托马斯 J·华盛顿(Thomas J.Watson,1874-1956)成为C-T-R公司的总裁,他在1924年将公司的名字更改为国际商业机器公司(International Business Machines Corporation),即IBM。(IBM,竟然在1896年就创建了,真正的百年老店!)

1947年发生了一件著名的事故,人们从Mark II计算机的一个继电器中发现了一只飞蛾。格蕾丝·莫瑞·赫柏(Grace Murray Hopper,1906-1992)于1944加入了艾肯的团队,日后成为了计算机编程语言领域非常著名的人物。他将上面提到的那只飞蛾用带子绑在计算机日志(logbook)上,并在其边上注明“第一个被发现的有生命的bug”。(bug的来源,是真的虫子。)

当使用电传打字机上打字,一旦到了一行的末尾时,我们通常会按下一个操作杆或按钮。这个操作其实包括两个动作:第一个动作是,使打印机的滑架回到起始位置,这样打印下一行时可以从纸的最左边开始,这就是回车。第二个动作是,将打印机的滑架移至正在使用中的位置的下一行,这就是换行。(换行与回车的来源。)

本书的推荐语为:“如果您的工种并非是程序员,但很想了解计算机是什么、计算机是如何搭建起来的、计算机有哪些好玩的历史。我会推荐您阅读《编码:隐匿在计算机软硬件背后的语言》。

“《编码》这本书,内容层层递进,由浅入深,既有计算机的搭建方式,也有计算机的发展历史。是很适合对计算机历史感兴趣但不需要写代码读者的。

“当然,如果您是一位程序员,我是强烈推荐阅读《编码》的。书中有内存的构造、处理器的原理,它对计算机原理的剖析,是比CSAPP更底层些的。

“总之,《编码》这本书,无关专业,大家是都能读懂的,强烈推荐。”