三掌门 > 读书成神豪 > 第197章 实验室

第197章 实验室


  收回了思绪,章杉很快就将注意力放在了《Computer  Systems:A  Programmer's  Perspective》

  这本书的中译本为《深入理解计算机系统》

  本书从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性。

  全书共12章,主要内容包括信息的表示和处理、程序的机器级表示、处理器体系结构、优化程序性能、存储器层次结构、链接、异常控制流、虚拟存储器、系统级I/O、网络编程、并发编程等。书中提供大量的例子和练习,并给出部分答案,有助于读者加深对正文所述概念和知识的理解。

  章杉很快就开始了阅读。

  虽然这本书是全英文的,但在章杉面前这点词汇量基本不够看的,完全是小菜一碟。

  通过阅读,章杉发现本书的最大优点是为程序员描述计算机系统的实现细节,帮助其在大脑中构造一个层次型的计算机系统,从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。

  通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好地理解程序的行为为什么是这样的,以及效率低下是如何造成的。

  《Computer  Systems:  A  Programmer’s  Perspective》这本书强调的便是作为一个程序员的基本知识。SICP来自世界顶级学府MIT(SICP即大名鼎鼎的《Structure  and  Interpretation  of  Computer  Programs》,在国内可以买到中译版,即机械工业出版社的《计算机程序的构造与解释》),而《Computer  Systems:  A  Programmer’s  Perspective》也同样出身名门:CMU(卡耐基梅隆大学)。

  虽然没有SICP那么历史悠久,但它被世界几百所大学(幸运的是也包括章杉所就读的复旦大学)用作教材也有好多年了。

  这本书的中译名为“深入理解计算机系统”,章杉非常,十分,以及百分之一百二十地不满意。章杉这么说的原因在于这个译法完全扭曲了书的本意。

  如果直译原书名,应该是类似于“以程序员的视角理解计算机系统”,何来“深入”二字。可能在国内编辑看来,这是讲系统的,用C和汇编语言的,因此很“深入”,但章杉认为这只能说明国内技术氛围的浅薄。因为事实上,这是一本入门级别的书,这本书其实并不“深入”,它谈论的内容还是相对比较浅的。

  但“浅”不代表“浅薄”,写一本面向初学者的好书往往是非常困难的,因此无论是SICP还是《Computer  Systems:  A  Programmer’s  Perspective》,它的作者都是顶尖学府的教授,结合多年教学经验而写出来的。

  CMU把这本书作为“Introduction  to  Computer  System”课程的教材,是面向计算机专业低年级学生的“计算机系统介绍(导论)”,可能这些学生只是刚刚了解如何使用一门高级语言——如Java进行编程,对于计算机系统的工作方式等话题可谓一点都没有接触过,而《Computer  Systems:  A  Programmer’s  Perspective》对读者的背景也只要求是“一些编程经验”而已。

  这本书的话题覆盖面很广,从计算机的基本组成,二进制数据表示方式,到机器级别的指令,CPU工作方式,存储结构和优化,操作系统的虚拟内存管理,程序运行方式,I/O,网络、到(较底层)程序性能优化和并行程序开发等等。所以,它其实覆盖了“计算机组成原理”,“操作系统”等许多课程的内容,其中的许多话题都能再次展开,继续深入,都能再变成一本,甚至N本经典。事实上,在高年级的计算机专业课程设置中,都会有更加纵向的内容出现。

  因此,如果有人说它“底层”,章杉同意。

  但如果说它“深入”,至少章杉不那么赞同。

  “覆盖面广”,其实就是这本书的最大优点。它告诉我们计算机是如何设计和工作的,操作系统有哪些重点,它们的作用又是什么。《Computer  Systems:  A  Programmer’s  Perspective》的目标其实便是要讲清楚原理,但并不会把某个话题挖掘地过于深入,过于细节。例如书中第4章使用了自己“设计”和“实现”的“Y86”处理器架构,便是为了简化X86指令集,使课本内容在能够说明问题的前提下也不至于太复杂。因此,读完(其实也并不一定要读完,说实话章杉也没有读完)这本书后,我们就可以对计算机系统各组件的工作方式有了理性的认识。

  那么,这本书适合什么人阅读呢?对于这个问题章杉也有过犹豫。

  章杉对《Computer  Systems:  A  Programmer’s  Perspective》推崇备至。

  无论是本科生还是打算新上手编程实战的程序员都能从这本书有所收获。

  即便你是一个前端JavaScript程序员,也可以从《Computer  Systems:  A  Programmer’s  Perspective》这本书中获益。如果您是.NET程序员,那么您更加适合看这本书了。

  说一句“豪情万丈”的话:如果不知道XX,YY或ZZ的话,这如何算是一个优秀的程序员?

  这本书和平时的工作可能的确不一样,相比起来“底层”了一些,但是它还是会把“底层内容”控制在一定深度之内,而不会讲某个具体话题挖掘到“事倍功半”的程度。而事实上,虽然在进行.NET开发的时候我们已经在一个较高的抽象上工作了,但是我们的程序还是运行在操作系统上,还是在遵循着某个规律在运行着,了解一些内部的工作机制也有助于我们写出更好的应用程序。

  说来也奇怪,虽然各种语言,框架发展地越来越好,按理来说我们写程序也应该越来越容易。但是现在看来,一些基础性的内容反而也变得越来越重要了,例如在并行计算面前,计算系统的一些细节,如内存一致性模型,线程调度,程序的局部性(Locality)又被提上台面,否则我们很难写出高效的应用程序。同样,一些如函数式编程,Monad等在几年前看起来十分科研型,数学化的事物也离我们越来越近了,如LINQ,Reactive  Framework等等,其实它们都已经是我们身边的事物了。

  《Computer  Systems:  A  Programmer’s  Perspective》这本书覆盖面很广,章杉认为并非要一字不漏地读完才行。

  根据章杉的个人观点,我们应该着重阅读书的第1章“A  Tour  of  Computer  Systems”和第一部分“Program  Structure  and  Execution”(从第2章开始,大约占据了书中一半篇幅),其中包含了数据的机器级别表示方法,汇编语言和执行方式以及CPU架构方面的内容,我们应该关键性地理解其原理。

  如第6章“Optimizing  Program  Performance”提出了许多种机器级别的优化方式,在现在看来,其中的某些方式过于细致,乃至在实际工作过程中已经不再推荐了(如内联一些方法以提高性能),我们要在把握住“为什么”而并不是单纯的吸收“怎么做”。对于书中的第二部分“Running  Programs  on  a  System”主要讲述的是操作系统方面的内容,可以读得略为简单一些,但其中的第10章“Virtual  Memory”,它谈论了操作系统中虚拟内存机制的各个方面,非常关键,需要细读。至于书中的第三部分“Interaction  and  Communication  Between  Programs”便可以更加“选择性”地阅读,章杉只阅读了第13章“Concurrent  Programming”,而其他两章都只是简单地扫过而已。

  作为经典的教材它一定有许多附加资源,例如在它的官方站点给出了一些链接,其中最关键的可能是学习者站点,其中包括这本书所需要的各种工具,参考文档等各种资源。

  章杉读书的过程中又想起来之前某大牛提及两本书,一本是国产书精品《链接、装载与库》。

  这本书主要讲解了编译过程中的“生成文件”的过程,以及应用程序执行时文件是如何被操作系统加载的,并且同时涉及到Linux和Windows两个平台。

  第二本书书是《Windows  Internals  5th  Edition》,人民邮电出版社已经引进了其影印版。

  和章杉现在读的这本“蹭蹭不进去”的书相比,这的确是本“深入”级别的书。

  基本上覆盖了Windows内核的方方面面,包括系统架构,内存管理,线程调度,安全机制,文件系统等各种话题,对于我们Windows平台上的程序员,这方面内容可能更有针对性。

  章杉前不久刚刚购入这本书,更别提仔细阅读了。

  当然所谓购书这个行为,自然是吩咐骆常慧做的~

  现在这种小事章杉根本不太关注,虽然章杉每分钟读书都有收入~

  根本没办法统计好不好,除了特别大段时间读书收入,章杉根本不太在乎这些钱~

【收集免费好书】关注v  x【书友大本营】推荐你喜欢的小说  领现金红包!

  以章杉现在的生活,哪怕是不作任何改变。

  每天银行里的钱也会带来大量利息,而哪怕不刻意去花钱,日常流水也高的吓人……

  章杉注意到这本书和《C专家编程》有些地方是相通的~

  章杉注意到现在读的这本书里面提到的轶事。

  “20  世纪60年代是大型、复杂操作系统盛行的年代,比如IBM  的  OS/360  和  Honey-  well的  Multics  系统。OS/360是历史上最成功的软件项目之一,而  Multics  虽然持续存在了多年,却从来没有被广泛应用过。贝尔实验室曾经是  Multics  项目的最初参与者,但是因为考虑到该项目的复杂性和缺乏进展而于1969年退出。鉴于  Mutics  项目不愉快的经历,一群贝尔实验室的研究人员--Ken  Thompson、Dennis  Ritchie、  Doug  Mell-  roy和  Joe  Ossanna,从1969年开始在  DEC  PDP-7计算机上完全用机器语言编写了一个简单得多的操作系统。这个新系统中的很多思想,比如层次文件系统、作为用户级进程的shell概念,都是来自于  Multics,只不过在一个更小、更简单的程序包里实现。1970年,BrianKernighan给新系统命名为“Unix”,这也是一个双关语,暗指“Multics”的复杂性。1973年用C重新编写其内核,1974年,Unix开始正式对外发布[93]。

  贝尔实验室以慷慨的条件向学校提供源代码,所以Unix在大专院校里获得了很多支持并得以持续发展。最有影响的工作发生在20世纪  70  年代晚期到  80  年代早期,在美国加州大学伯克利分校,研究人员在一系列发布版本中增加了虚拟内存和  Internet协议,称为Unix4.xBSD(Berkeley  Software  Distribution)。与此同时,贝尔实验宣也在发布自己的版本,称为SystemVUnix。其他厂商的版本,比如Sun  Microsystems  的  Solaris系统,则是从这些原始的  BSD和System  V版本中行生而来。

  20世纪80年代中期,Unix厂商试图通过加入断的、往往不兼容的特性来使它们的程序与众不同,麻烦也就随之而来了。为了阻止这种趋势,IEEE(电气和电子工程师协会)开始务力标准化Unix的开发,后来由Richard  Stallman命名为“Posix”。结果就得到了一系列的标准,称作Posix标准。这套标准涵盖了很多方面,比如Unix系统调用的C语言接口、shell程序和工具、线程及网络编程。最近,一个被称为“标准Unix规范”的独立标准化工作已经与  Posix一起创建了统一的Unix系统标准。这些标准化工作的结果是Unix版本之间的差异已经基本消失”

  章杉敏锐地注意到似乎两本书都提到了一个共同的东西——贝尔实验室~

  1925年1月1日,当时AT&T总裁,华特·基佛德(Walter  Gifford)收购了西方电子公司的研究部门,成立一个叫做“贝尔电话实验室公司”的独立实体,后改称贝尔实验室。AT&T和西方电子各拥有该公司的50%的股权。在二三十年代,贝尔实验室的研究人员推出了远距离电视传输和数字计算机,领导了有声电影和人工喉的开发。两项信息时代的重要发明-晶体管和信息论都是贝尔实验室在40年代研究出来的。贝尔实验室在50和60年代的重大发明有太阳能电池,激光的理论和通信卫星。

  而到今天,贝尔实验室共获得两万五千多项专利,现在,平均每个工作日获得三项多专利。贝尔实验室的使命是为客户创造、生产和提供富有创新性的技术,这些技术使朗讯科技(Lucent  Technologies)公司在通信系统、产品、元件和网络软件方面处于全球领先地位。一共获得8项(13人)诺贝尔奖(其中7项物理学奖,1项化学奖)。

  章杉:???

  咱能不能不要随便一个实验室就这么吓人~


  https://www.3zmwx.cc/files/article/html/23/23928/655461845.html


  请记住本书首发域名:www.3zmwx.cc。三掌门手机版阅读网址:wap.3zmwx.cc