《深入理解计算机系统》推荐
这本书是我看过的n多教科书级别的书里边儿写的最好的一本,这里强调了一个“教科书”级别,是因为它非常细致严谨覆盖面也比较全面,而且真的有好多学校用它来做教科书。像《编码:隐藏在计算机软硬件背后的语言》这类的好书虽然好,但只是为了给我们深入学习相关知识打开一扇窗,让我们之后遇到难懂概念之后能有一个很直观的理解,它的知识体系并没有构造出来,有一些偏重科普,让我们的之后的学习更加有趣,节省我们面对陌生概念的时间。
视角回到我们今天推荐的这本书。首先,这是一本计算机系统方面的入门书。它的英文原名叫做《Computer Systems: A Programmer's Perspective 》,直译过来是《计算机系统:从程序员的角度》。可能是译者觉得对于计算机软件的开发人员来说,凡是高级语言之下的东东都是“深入”的吧。当我们细细把这本书读完之后,最后会发现,其实它真的只是一本入门书,虽然这本书看起来很厚,但是介绍的东西实在太多,所以均摊到每个部分也就只能很少了,所以只能做一个概述。看完了之后只是有一个程序执行的大致框架,但是里边的好多知识对于使用高级语言的软件开发者来说是有非常多的收益的。
阅读本书之前并不需要有多深的编程功底,只需要了解一些基本的的C语言语法,尤其是对指针的概念有些理解即可。这也是本书牛逼的一个地方,它并不要求读者有关于高级语言之下的任何知识,你学完C语言就可以看了~
这本书的章节安排非常非常合理,并且每一章节的内容非常细致,最最主要的是:对于书中出现的知识点,全部采用娓娓道来的方式向我们讲述。还记得我之前写过一篇叫 关于如何写技术书籍或文章 ,我强调了很重要的一点就是:不要出现逆向引用(也就是不要用一个没解释过的概念去解释另一个新概念),如果必须出现逆向引用的话,尽量向读者说明。这本书在这一点上做得很好。它首先介绍了数制和二进制的运算,然后介绍了基于x64的汇编程序是怎么在计算机上运行的,然后又自己从头设计了一个虚构的Y86-64的指令集,在这个过程中一步步的向读者解释设计指令集过程中遇到的问题和相应的解决方案,从简到难,例子一步步的变得复杂,这个过程很复合我们的认知。在了解了基本的指令集知识后,又开始介绍如何让优化我们的程序,然后介绍存储技术,完整的C语言程序执行流程,如何控制程序中的异常,尤其是中断和信号的使用,虚拟内存和内存使用的若干问题,然后介绍一些高级主题,io、网络和并发(篇幅很短,就是介绍一些API的使用)。
当然,也不是每一章节我都喜欢的,我个人以为啊(再强调一遍:个人以为),这本书的第2、3、4、6、8、9这几章简直是好的非常好,其余的章节就显得有些乏味、无趣。你可能和我看法不一致,如果没看过的话,赶紧整一本呗啦啦啦啦。这本书可以给我们对计算机体系结构的一个清晰的框架,之后我们想认真学习这个框架中的某个地方也就容易多了。
由于书太厚,介绍的概念非常多,如果是头一次接触的话还是很可能感觉到厌烦(毕竟不是谁都像我一样往文章里塞段子),所以静下心来还是很重要滴~ 还有,这本书应该反复多看几遍,然后找一些相关的参考书去看一下书里边某些一笔带过的概念,搭配起来效果更好哦。
对了,有孩子说:我们一个做软件开发的看这些知识工作中也用不到呀!哈,没事儿,等以后要涨工资的时候就会用到了。在此再次感谢春哥想我推荐这本书,啦啦啦。