《CSAPP》 Review 1: 起源

769 阅读5分钟

两个月前的一天深夜,熟睡的我被呼啦啦的一声惊醒,正要往床底下钻,透过月光看见散落一地的书——原来是书架塌了。

作为一只租住在10平小单间的北漂儿,只有个简易的塑料书架放书,原本就习惯于等活动囤书,再加上单位时不时发放的购书卡,每次三本两本的,不知不觉就买书如山倒了。知乎、豆瓣里被人推荐过的、叫得出名字的CS经典书籍基本齐全了。

惊魂未定的我看着满地的书,莫名地有些生气,这些书的绝大多数,要么只是偶尔需要时翻两页,要么就是刚买来兴致勃勃地看了目录和第一章就束之高阁了,其中甚至有几本还没拆塑封。

于是跟自己打了个赌:认真读完一本大部头。如果失败了就清空书架把书全卖掉,从此不买纸质书;如果成功了,就奖励自己一个礼物,同时再接再厉持续阅读。

权衡之下选择这本《深入理解计算机系统》作为目标,一是因为它是CS专业的第一门基础课,有益于后续的知识衔接,比如计算机网络、操作系统等;其二难度不大,不管白天工作累不累,都可以坚持下来每天翻看几页;第三是篇幅较多,一鼓作气完成之后,面对其他的大部头可以”一览众山小“,不会被篇幅吓倒。

  • 计划:每周6天,每晚8点开始,1.5-2小时,大约三个月读完。
  • 方法:不拘泥于细节,也不强求完成所有习题,以理解为主地阅读。
  • 实际完成时间:2019/05/08——2019/07/04
    笔记截图

写作本文时,我已经按计划读完了700多页的CSAPP,但并没有想象中的兴奋和成就感,反而有些失落和迷茫。

眼前摆着早就计划好的第二本书《现代操作系统》,但我的方法真的对吗?付出的时间值吗?在读下一本书之前,我必须搞清楚这个问题。

翻看这两个月的笔记,开头的两章就像之前计划的那样,不抄书、不罗列知识点,而是每天读完以后合上书,思考和记录收获和感想。但差不多从第三周开始,笔记内容就逐渐回到了划分内容结构、总结罗列知识点以及自我激励的话。虽然极力克制着没有敷衍,但确实思考得越来越少,完成作业的感觉越来越浓。

将第二本书放回了书架,我决定对CSAPP做一次Review。曾经看到过一句话,最好的学习方法就是教会别人。所以这次我会将笔记发表出来,同样会尽量避免罗列知识点,而是围绕书中的知识进行发散思考,撰写博客而非教程。


书归正传,本书的第一章是全书的导论,基本上每一小节都是后面一大章节的引子,所以读时不必拘泥于细节,从宏观上对程序的执行过程以及计算机系统的组成有个概念性的了解即可。

本书在内容上可以分为三个部分:

  • 第一部分占了全书大半的篇幅,主要从硬件层讲述信息和程序的表示方法、CPU的组成和运行原理以及物理内存技术;
  • 第二部分讲述操作系统对程序的打包、编译、执行和优化过程;
  • 第三部分篇幅最短,但并非是因为简单,而是详细讲述的话内容太过复杂,对于第10章的系统I/O和第12章的多线程,另一本超800页的《Unix环境高级编程》主要讲的就是这两个问题,第11章的网络编程展开就是HTTP协议和Web开发,目前的前后端开发的主要工作都可以归类到其中,更不是一两本书能说完的了。

最后讲讲个人对本书的评价,在读完之后,我越发觉得使用本书作为开始是极为正确的选择,它有自己的侧重点,就是关于底层硬件的分析和设计,讲清楚了计算机从0到1的过程。同时,本书又可以作为计算机专业的一份地图,从底层硬件设计、操作系统原理到应用程序的编写与优化,为整个计算机系统学科做了导论性的阐述,引导读者从1走向无穷。

另外,本书第三版中文翻译绝对过关,可放心使用!讲到翻译要说一个反例,即将阅读的下一本书——《现代操作系统》,我只读了一章就理解了为什么好多人建议读英文原版了,这本书的翻译是真的会影响理解,至少要中英文对照着读。 在CSAPP的笔记更新完成后,接下来会是这本操作系统,大致翻了翻,两本书在内容上有很大的重叠,但侧重点各有不同,可以相互对照着学习。

这才刚刚第一章,就不做太多的下一本预告了。希望能把这本Review完成吧,虽然就12章,也提前读完写了笔记,但真正写博客的时候才体会到向别人讲述有多难。最后,说好的奖励给自己的礼物:

礼物

—— for and by Music Lovers