计算机底层的原理很复杂,能够把这些复杂的知识用准确,生动,通俗易懂,且具备可操作性的方式写成文字的作者真的很了不起,而我这就有几本这样的书推荐给大家,它们分别是《编码-隐匿在计算机软硬件背后的语言》([美]Charles Petzold著),《汇编语言》(王爽著),《30天自制操作系统》([日]川合秀石著),下面对这几本书做简单的介绍。
《编码-隐匿在计算机软硬件背后的语言》这本书是偏向数字电路的,从硬件这一层面讲解了一些基本电子元器件的工作方式,比如8位加法器,触发器,锁存器等等,然后再进一步将这些电子元期间组合成内存,甚至cpu,简单的说,它就是告诉你“计算机是如何工作的”。可是当提到数字电路的时候,你脑子里首先想到的是什么?是那些跟一座破庙里面的蜘蛛网一样混乱的电路图?晦涩难懂的概念?看似复杂的逻辑?跟枕头一样厚的教科书?我不知道你是怎么想的,反正大学里面的数字电路这门课给我的印象就是这样,当然,我对这门课毫无兴趣。可是当我看完这本书的时候,我才发现,原来数字电路不是用来死记硬背的,复杂的逻辑完全可以从简单的逻辑入手推导过来。作者用导线,电灯泡,开关,这3个家喻户晓的东西拼装出一个个功能各异的元器件,然后再把元器件横向拼装成更复杂的器件,所以整本书的知识结构非常有层次感,在循序渐进的学习过程中,你会觉得一些原本认为复杂难懂的东西是这样“理所当然的简单”。更好玩的是,你完全可以把书上介绍的电路实现一遍,比如去做个内存,甚至cpu出来,你不需要去买二极管,电路板,电焊铁,焊锡丝等等这些工具,只需要下载个《minecraft》(中文名《我的世界》)游戏就行,这是一款模拟现实世界的沙盒游戏,你千万不要被这游戏的低像素给吓跑了,耐心点,你会发现里面有“红石”,“中继器”,“开关”等等元素,你可以用它们模拟出现实中的电路。我当初就在游戏里面实现了一个8位加法器,如下图所示。
这就是输入端了,那9个开关看见没?他可以输入0,1(最右边的开关是控制进位的),而红色的一条条的就是“导线了”。
这是输出端,最左边这位是溢出位,右边8位正常输出,如果石头上面的“火柴”一样的东西亮了,就表明输出是1。
那天晚上花了很长时间才做完这个加法器,这时看到远处太阳升起来,感觉特别美呢!
现在给大家看看别人做的计算器。
《汇编语言》不是列举一堆的汇编指令,告诉你每个指令该怎么用,事实上这是一本指令手册该做的事情。我们知道机器指令(汇编语言和编译器的产物)是和相应的cpu绑定在一起的,而作者挑选了结构简单的8086cpu,通过讲解某些关键指令来深入理解机器工作的基本原理,让读者有底层编程的体验。有意思的是,书里面提的很多问题以及实验都很“边界”,换句话说,就是能很好的考察你到底有没有真的理解。另外,书里面讲解的很多概念,都是操作系统的基础。
《30天自制操作系统》,看到这种N天学会xxx的书,出自本能的反应就是嗤之以鼻,是的,实际上我们很难在30天搞定,但30天不是重点。关键是这本书从0开始到一个完整的操作系统每一步都有源代码,也就是说你完全可以跟着一起敲代码,最后也能做出一个操作系统来,非常具有可操作性。事实上,我觉得最牛逼的“hello word”就是在机器通电后直接在屏幕上显示“hello world”。
这几本书都有一个共性,在传授知识的方式上面很有技巧,他们通过知识屏蔽,循序渐进,类比等方式让一个个复杂的原理变的自然,看的过程中很容易领悟,也很有快感。相反,不恰当的表达方式,完全可以做到把一个人的兴趣扼杀在摇篮里,比如某些大学的教材。