读《CSAPP》感

寒假的时候花了一个月把这本CSAPP看完了,把它课程网站上的也lab做了一下。

这本书让人有种相见恨晚的感觉,非常伟大的一本计算机导论书籍,写得实在太好了。它汇集了编译原理,操作系统,计算机组成,数电这些课程中的精华知识,然后作者能把这些东西的框架说清楚,不拘泥与细节,让人完整的了解了计算机系统的运作方式。据我的个人经验,在学校上的这些课程,比如编译原理,操作系统,只见树木不见森林,而这本书把这些孤立的知识点都连接了起来。

这本书理论和实践结合得特别好,好多地方都是以代码的形式来举例和说明问题。让我印象比较深的就是那个tinySercer,作者自己实现了一个简单的server的框架,能处理静态内容请求和通过cgi处理动态内容请求。自己照着书上把代码敲一敲也是件比较有意思的事情。特别要说的是,这本书有几个配套的lab,如果看了这本书而不做这些lab,就像“来杭不见西湖,去京不登长城”,实践性比较强,也比较有趣,最让我印象深的是那个bomb lab,通过对一个binary文件反汇编进行“拆弹”的目的。

这是我做的lab的代码链接

在可读性方面,两位作者的写作功力很高,我看的是英文版,印象中没有一句话表意不清,一开始可能看得比较慢,习惯了书的写作风格以后就看得很顺利了。相比我现在正在看的一本书,Linux Kernel Development, 一本linux内核的入门书,那么csapp真是太好读懂了。所以有能力买到英文版的话,还是建议读英文版吧。

这是第一遍读这本书,肯定没有100%读懂作者想传达的内容,以后有机会会看第二遍。

最后一点,这本书非常基础,着重知识谱图以及知识是怎么连接的和unix程序的框架,如果想深入学习,还是得看专门领域的书籍,不过作者在每章后都会有大量的引用连接,提供了很多深入学习的途径。