查看原文
其他

无责任书评:《深入理解计算机系统》这本神书到底好在哪儿?

码农翻身刘欣 码农翻身 2019-07-11

刘大,我想学Java ,你觉得《Java编程思想》适合入门吗?


刘哥,《深入理解计算机系统》第三版豆瓣评分都快接近10分了, 我想买一本,你觉得怎么样?


刘师傅,学习数据结构和算法,哪本书好?


......


有不少同学问我类似的问题,回答的多了,我就想到干脆总结一下,写成系列书评文章吧, 希望对大家有用,尤其是对初学者。


我把文章标题起名为无责任书评,是向侯捷老师致敬。 没有听说过侯老师的,可以Google下。


正文开始,今天来说说《深入理解计算机系统》这本神书,简称CSAPP。


其实豆瓣评分还是能参考的,但是呢如果不结合自身的实际情况,就会犯教条主义错误


如果你之前没有计算机的基础知识, 刚刚学会Java/Python,能写一点小程序了,就准备把这本书给啃下来,很有可能碰得头破血流,也许能看完第一章的概述,但是一旦进入第二章和第三章,十有八九就要怀疑人生了。


原因很简单,这本书不是手把手教你怎么写程序的,他像一本内功心法,是帮助你修炼内功的。刚刚入门,招式还不熟练,想迅速地把内力提升去,很容易走火入魔。


你看它都讲了些什么:


信息的表示和处理,整数表示和运算,浮点数


程序的机器级表示,即在汇编层面是怎么实现C语言中的if,else, while, 函数调用的。


处理器体系结构,讲述基本的组合和时序逻辑元素,展示这些元素如何在数据通路中实现IA32指令集的一个子集,已经进入了硬件层面。


C语言程序是如何链接的


存储器的层次结构,虚拟存储器


程序的优化。


最后两章相对轻松,讲了网络编程和并发编程。


可以看出,讲述的都是系统级别的知识,全书使用的都是C语言,大量的汇编“充斥”其中,时不时还来一点硬件和数学的知识。


如果你是做系统级软件开发的,比如Linux内核,数据库,Web服务器等,没什么可说的,这本书必看。


但是对于应用软件开发的程序员来说,这本书的用处在哪儿? 不接触这些知识也能完成这些日常的CRUD,完全没有问题。


但是,CRUD做了两年以后,你会发现这本书中的内容早晚都会遇到,想逃都逃不掉。 


举个简单的例子,你在项目中使用了Redis,Redis有个功能叫做RDB持久化,在做持久化的时候Redis会fork出一个进程出来, 这fork是怎么回事? copy-on-write又是怎么回事? CSAPP有详尽的讲解,还有相关的代码展示。


再比如后端程序员经常会遇到并发编程的问题,比如I/O多路复用这个技术,Redis在用,Ngnix在用,Tomcat也在用,那CSAPP讲了基于进程的并发,基于线程的并发,还有I/O多路复用,可惜的是没有讲epoll。


除了可以直接在工作中应用的知识,CSAPP更多地提供了那些让你间接受益的知识。 


例如掌握了程序在汇编层面是怎么运行的,条件分支if else是怎么实现的,循环是怎么实现的,函数调用是怎么实现的,栈帧的用途,你再去看那些Java 虚拟机,Python虚拟机就会简单得多。


理解了存储器的层次结构,知道了CPU,缓存,内存,硬盘,网络等不同层次之间速度的巨大差异,就能理解很多系统软件的设计的初衷,Redis为什么只用一个线程来操作缓存数据,Tomcat用多个线程的优势与弊端,多路复用的巨大威力。


不同于语言和框架的使用,这些是所谓“内功”。内功强的人学习新东西都会很快,一通百通。


这本书有两种读法, 一种是耐心把这本书从头到尾看完,适合有强烈的好奇心,强大的自制力,想在脑海中建立一个程序运行的图景, 想知道计算机在最底层是如何工作的人。“真正吃透这本书的人,会逐渐成为凤毛麟角的'权威'程序员。”


还有一种办法是“功利性”地去读,作为工作中技术知识点的扩展和深挖,看看整数和浮点数的表示(第2章),程序的机器级表示(第3章),存储器的层次结构(第6章),进程和进程控制(第8章),虚拟存储器(第9章),并发编程(第12章)。


不管是那种读法,你会发现和读那些小短文是不一样的,想轻松地掌握是不可能的, 需要死磕、需要深度思考才行


(强势插播一则广告,老刘的知识星球18年搞了一个死磕《深入理解计算机系统》的活动,采用对赌的办法,每个阶段交100元赌资,要求每周输出读书笔记,完不成的就出局,赌资发红包,完成的到期返还100元。 感兴趣的可以到文末看看。)


对于完全没有基础的,尤其是刚从培训班出来的同学,可以先把这本书放下,我建议先读另外一本书《程序是怎么跑起来的》,这本书我觉得很像CSAPP部分内容的一个简化科普版。



码农翻身知识星球的介绍在此:知识星球2018盘点,2019关键词:执行


对于加入知识星球的同学提供特别的福利,即 编程提高群第一季第二季的部分“加餐”视频:


漫谈计算机组成原理和计算机编程语言

程序的机器级表示

漫谈操作系统之虚拟内存

进程和线程

新人在职场

Java 并发编程

如何用 Antlr 实现自定义的简单脚本语言

缓存

BTree 及其在数据库的应用

分布式文件系统 FastDFS


今年会再额外送5个


Web安全

字节码和AOP

Web SSO

微服务入门

漫谈文件系统


相信这些视频就能值回绝大部分票价了


欢迎加入知识星球“码农翻身”,和大家一起扎扎实实地学习。 


原价128元/年, 推广期优惠价:99元

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存