前些天,我花了差不多300元来买了一些书。应该说以前买书一直被坑了很久,当时因为认识的大牛没几个,没人推荐,只能是自己去书店找,找到哪本算哪本。大部分都是坑爹的国产书,不得不说国产书的质量普遍不如国外的——想必能漂洋过海来到中国的书应该都算是经典吧。因为鸟语水平不理想,读不下原著,只好看翻译的,译本的一个问题就是语言非常之僵硬,可以说是“英式中文”,不过有人说这不重要,技术书籍要以严谨为第一要素。
后来我就聪明多了,网购发展起来了,我会在网上买大牛们推荐的经典,顺便对比一下书评,被坑得也少了。
其实两三年来我一直在辽宁省图书馆借书看,免费借,挺划算的。应该说借书和买书还是有很大区别的,在图书馆看到一本书哪怕有10%对我有用,我也会借来看——反正不借白不借。而买书的话我得确定它全书都是值得反复读的才肯掏钱。
这次买的六本书,按对我的难易程度:
- MongoDB权威指南
- 程序员的数学
- 编码——隐匿在计算机软硬件背后的语言
- 计算机网络——自顶向下方法与Internet特色
- 深入理解计算机系统(第2版)
- 程序员的自我修养——链接、装载与库
把这个书单发给龙哥(某奔三十却还没有妹纸的程序员抠脚大叔)的时候,龙哥问我这是要造电脑么。
龙哥给我的印象就是一个躲在微软搭建的华丽城堡里的……嗯——奔三十却还没有妹纸的抠脚大叔。当然,用龙哥的话说,这又有什么关系呢?
我对原理性的细节总是很感兴趣,不仅仅是计算机。霍金的《时间简史》等书我的读过,宇宙如何运行,微观粒子如何作用,可能永远也不会和我发生关系,除了能在和民科对骂的时候加点底气,可能真的没什么用了。
同样我也知道我不可能有机会从三极管开始设计一款芯片,我也不会使用机器指令,手工汇编,甚至我也不大可能使用汇编语言以及C语言。但我觉得这很有趣。
我通常会把书拿来一遍一遍地看,泛读一遍最多几个小时,然后再读一遍,每一次都会理解到新的东西,直到没有新东西了,才算看完了,但过几个月也许我会再捡起来。
《Mongo…》只花了半天就看得差不多了,这只是一本参考性质的工具书,对官网文档的一个中文翻译,当时我看它不贵也就买了。
《编码…》这书我打开看了一遍,其他四本暂时只看了个开头。
《编码…》它自底向上地描述了一台计算机的构造过程,从继电器到逻辑门,加法器,随机存储器(RAM), CPU, 字符终端,汇编器。
从最简单的导线,开关,电磁铁开始,每一步都在使用上一步设计好的零件来组装,看完不由得感叹原来计算机的构造如此简单,只是遵从着几个基本的原理,但其思路却又如此精密。作为第一个示例,本书用了144个继电器(三极管)和十几个开关以及灯泡,实现了一个具有输出和输出的8位加法器。昨天去淘宝看了一下,继电器1元一个,三极管0.1元一个,看来自己造一个加法器也不是没有可能。
我想说这书其实是零基础的,你并不需要有多少基础知识,因为它是自底向上,自成体系的——我真的说不出需要什么基础,仅有的一点电路现学也够了。
在我看来,本书可分为三个部分:
- 如何将数据编码为计算机可以理解的形式
- 如何用基本的电路组成芯片实现自动化地计算
- 如何通过构造更高级的编程语言提高编码效率
第一部分(如何将数据编码为计算机可以理解的形式)除了让我了解到了多一点细节,应该说对我没什么帮助,这部分应该就是面向零基础读者的吧,无非是进制换算,以及将数字和字符编码为二进制。
第二部分(如何用基本的电路组成芯片实现自动化地计算)则让我眼前一亮,把我带进了一个新的世界。其实之前我也知道逻辑门,但很难想象当今复杂的计算机是如何用基本的逻辑门构成的。
所以说抽象是最重要的工具,计算机中每一层都是对上一层的抽象,一开始可能会把逻辑门里的导线都画出来,后面就会用一个方块来代替加法器了。抽象也许是人类最伟大的创造,就好像你不能指望狗把一沓人民币抽象成骨头。
第三部分(如何通过构造更高级的编程语言提高编码效率)则是填补了我很多的知识空白。之前一直对机器指令以及汇编语言的定位很模糊,现在我算是理解了他们的合理性和必要性。
机器指令中需要直接使用操作数的内存地址,而汇编语言使用了助记符代替机器指令的编号,用标识符代替了内存地址,并且可以对地址进行计算。从汇编语言到机器指令的过程就叫汇编,在汇编器出现之前,是需要手工汇编,计算内存地址的。而汇编语言和机器指令都依赖于具体的CPU指令集,所以才有了后来高级编程语言的出现。
计算机可谓人类构造的最精密的系统之一,但我觉得它仍不及网络复杂,因为对芯片而言,大部分行为都是十分确定,可预测的。
而网络则增添了更多变数——事实上网络几乎是围绕着错误处理构造的。
前一阵我想写一篇日志,科普互联网是如何工作的,但写了一半就感觉写不下去了。虽然只是些基础的知识,估计有机会读我日志的各位都知道,但想要写出来,则并不简单。也许正是这样,霍金这等尖端物理学家,却还要写科普书。
与《编码…》不同,《网络…》一书是自顶向下的,内容量比较大,估计要看很久。
不过再难恐怕也比不上《操作系统…》和《链接…》,尤其《链接…》一书差不多已经把程序的每个字节都研究透了。