我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
查看源代码

读书:编码

前些天,我花了差不多300元来买了一些书。应该说以前买书一直被坑了很久,当时因为认识的大牛没几个,没人推荐,只能是自己去书店找,找到哪本算哪本。大部分都是坑爹的国产书,不得不说国产书的质量普遍不如国外的——想必能漂洋过海来到中国的书应该都算是经典吧。因为鸟语水平不理想,读不下原著,只好看翻译的,译本的一个问题就是语言非常之僵硬,可以说是“英式中文”,不过有人说这不重要,技术书籍要以严谨为第一要素。

后来我就聪明多了,网购发展起来了,我会在网上买大牛们推荐的经典,顺便对比一下书评,被坑得也少了。
其实两三年来我一直在辽宁省图书馆借书看,免费借,挺划算的。应该说借书和买书还是有很大区别的,在图书馆看到一本书哪怕有10%对我有用,我也会借来看——反正不借白不借。而买书的话我得确定它全书都是值得反复读的才肯掏钱。

这次买的六本书,按对我的难易程度:

  • MongoDB权威指南
  • 程序员的数学
  • 编码——隐匿在计算机软硬件背后的语言
  • 计算机网络——自顶向下方法与Internet特色
  • 深入理解计算机系统(第2版)
  • 程序员的自我修养——链接、装载与库

把这个书单发给龙哥(某奔三十却还没有妹纸的程序员抠脚大叔)的时候,龙哥问我这是要造电脑么。

龙哥给我的印象就是一个躲在微软搭建的华丽城堡里的……嗯——奔三十却还没有妹纸的抠脚大叔。当然,用龙哥的话说,这又有什么关系呢?

我对原理性的细节总是很感兴趣,不仅仅是计算机。霍金的《时间简史》等书我的读过,宇宙如何运行,微观粒子如何作用,可能永远也不会和我发生关系,除了能在和民科对骂的时候加点底气,可能真的没什么用了。

同样我也知道我不可能有机会从三极管开始设计一款芯片,我也不会使用机器指令,手工汇编,甚至我也不大可能使用汇编语言以及C语言。但我觉得这很有趣。

我通常会把书拿来一遍一遍地看,泛读一遍最多几个小时,然后再读一遍,每一次都会理解到新的东西,直到没有新东西了,才算看完了,但过几个月也许我会再捡起来。

《Mongo…》只花了半天就看得差不多了,这只是一本参考性质的工具书,对官网文档的一个中文翻译,当时我看它不贵也就买了。

《编码…》这书我打开看了一遍,其他四本暂时只看了个开头。

《编码…》它自底向上地描述了一台计算机的构造过程,从继电器到逻辑门,加法器,随机存储器(RAM), CPU, 字符终端,汇编器。
从最简单的导线,开关,电磁铁开始,每一步都在使用上一步设计好的零件来组装,看完不由得感叹原来计算机的构造如此简单,只是遵从着几个基本的原理,但其思路却又如此精密。作为第一个示例,本书用了144个继电器(三极管)和十几个开关以及灯泡,实现了一个具有输出和输出的8位加法器。昨天去淘宝看了一下,继电器1元一个,三极管0.1元一个,看来自己造一个加法器也不是没有可能。

我想说这书其实是零基础的,你并不需要有多少基础知识,因为它是自底向上,自成体系的——我真的说不出需要什么基础,仅有的一点电路现学也够了。

在我看来,本书可分为三个部分:

  • 如何将数据编码为计算机可以理解的形式
  • 如何用基本的电路组成芯片实现自动化地计算
  • 如何通过构造更高级的编程语言提高编码效率

第一部分(如何将数据编码为计算机可以理解的形式)除了让我了解到了多一点细节,应该说对我没什么帮助,这部分应该就是面向零基础读者的吧,无非是进制换算,以及将数字和字符编码为二进制。

第二部分(如何用基本的电路组成芯片实现自动化地计算)则让我眼前一亮,把我带进了一个新的世界。其实之前我也知道逻辑门,但很难想象当今复杂的计算机是如何用基本的逻辑门构成的。
所以说抽象是最重要的工具,计算机中每一层都是对上一层的抽象,一开始可能会把逻辑门里的导线都画出来,后面就会用一个方块来代替加法器了。抽象也许是人类最伟大的创造,就好像你不能指望狗把一沓人民币抽象成骨头。

第三部分(如何通过构造更高级的编程语言提高编码效率)则是填补了我很多的知识空白。之前一直对机器指令以及汇编语言的定位很模糊,现在我算是理解了他们的合理性和必要性。
机器指令中需要直接使用操作数的内存地址,而汇编语言使用了助记符代替机器指令的编号,用标识符代替了内存地址,并且可以对地址进行计算。从汇编语言到机器指令的过程就叫汇编,在汇编器出现之前,是需要手工汇编,计算内存地址的。而汇编语言和机器指令都依赖于具体的CPU指令集,所以才有了后来高级编程语言的出现。

计算机可谓人类构造的最精密的系统之一,但我觉得它仍不及网络复杂,因为对芯片而言,大部分行为都是十分确定,可预测的。
而网络则增添了更多变数——事实上网络几乎是围绕着错误处理构造的。

前一阵我想写一篇日志,科普互联网是如何工作的,但写了一半就感觉写不下去了。虽然只是些基础的知识,估计有机会读我日志的各位都知道,但想要写出来,则并不简单。也许正是这样,霍金这等尖端物理学家,却还要写科普书。

与《编码…》不同,《网络…》一书是自顶向下的,内容量比较大,估计要看很久。

不过再难恐怕也比不上《操作系统…》和《链接…》,尤其《链接…》一书差不多已经把程序的每个字节都研究透了。

撰写评论

如希望撰写评论,请发邮件至 jysperm@gmail.com 并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2024-04-08.