从学校图书馆借的《深入理解计算机系统》(Computer System:A Programmer’s Prospective)已经翻了一遍了,读这本书的时候确实不像我之前读C++ Primer Plus那么仔细了。只能找个借口安慰下自己:最近招聘会笔试太多,要用的太急,只能囫囵吞枣看个大概。
从我第一遍读这本书的角度来谈谈个人理解吧。首先是这本书太“厚”,一方面是700页的书,看起来就很大一块头;另一方面就是这本书涵盖的东西实在太多,哪怕仅仅都是讲的浅显的基础知识。
从结构上来看,这本书分成了两个大的部分:程序结构和执行和在系统上运行程序。从字面上就可以理解,前一部分讲的是一个程序的结构是怎样,计算机是如何执行这个程序的 ,主要是以程序的机器级表示和计算机体系结构为主;第二部分则讲的是我们所熟知的在操作系统上怎么跑一个写好的程序,主要是涉及系统级的调用知识。
其实这样看来,这本书的内容是十分清晰的,也是一个循序渐进的过程。但是涉及到程序的机器级表示,说白了就是汇编语言,让我看的比较懵。并不是书中的知识太过深奥,作者反复强调现在程序员并不要求会写汇编,但会看懂汇编是程序员的优秀品质。事实上,我们熟悉的变成语言比如控制分支结构,对应为汇编还是挺好理解的,但是当一个程序进行过程调用,并用栈帧来存储对应信息的时候,我的理解就有点跟不上了。随后的计算机结构体系,指令集体系结构更是让我迷失在了海量信息里面,进一步在机器级别优化程序性能更是云里雾里了。好在随后的存储器层次结构又能与自己已有的知识体系挂上钩,我又有了再学习新知识而不是看天书的感觉。
好在第二部分在系统上运行程序,就是我们平常正常的写程序并运行,加上我之前有看过并跟着做过一个linux的网络编程项目,对linux下的编程也熟悉了点,我在看这部分的时候还是比较顺利的。
快速看完书确实让我懂了不少以前不知道的知识,但是随之而来的也有快速学习的弊端,基础掌握的不扎实。由于大部分内容都只是通过看知识点去学习,宏观上来看,有助于快速将我的知识体系穿起来,比如从更加底层的视角去看待程序的运行状态,让我更加理解程序的本质,对编写程序也有了一个新的理解。但是没有经过练习,这些