计算机专业推荐书单

【动机】就计算机这个专业来讲吧,由于我是非科班出身的学生,要从新开始补相应的知识,目前定下来要学习的基础理论知识有:离散数学,数据结构与算法,php

组成原理,汇编,操做系统,网络等等,有的时候以为这里每个知识点要学的深刻的话都是无底洞,不过我又是那种喜欢追根究底的人,好比学习a知识的时候要html

用到b知识,我会停下来学学b知识,而后一直这样下去.....有时候也会以为很累,以为没有一个尽头。最近也看到一个观点:读书应该“不求甚解”,我想了好久linux

,仍是不明白其中的大意。上面我提到的那些知识点要怎样才能达到“知道”的度?通常的,“知道”这个度又是如何掌握的?程序员


--------------------------------------------web

数学算法

--------------------------------------------
离散数学数据库

============================================编程

具体数学:计算机科学基础(英文版.第2版)         
 
【原书名】 Concrete Mathematics A Foundation for Computer Science(Second Edition) 
【原出版社】 Addison Wesley  
【做者】 (美)Ronald L.Graham,Donald E.Knuth,Oren Patashnik  
【丛书名】 经典原版书库  
【出版社】 机械工业出版社  
http://www.china-pub.com/computers/common/info.asp?id=7210缓存

【参考资料】
http://www.cfcs.com.cn/fjas/ebook.htm
http://privatewww.essex.ac.uk/~mpthak/xfiles.htm安全

【评论】
若是认真读这本书,会改变咱们从小已经被糟蹋了的数学思惟。慢慢读,不该该太功利。做者颇有趣。若是认真对待里面的公式,会发现它们很奇妙。一点也不枯


前天收到了本书 , 大师写的就是不同, 是学习计算机方面的绝好的书,文字很幽默并且它教给你的不是金子而是点石成金之术,据说好久之前国内就引进了

也有中文版,庄心谷老师翻译的(中文版:《具体数学》,出版社:西安电子科技大学,这本书的89年版在中国有翻译出版,译者好象是庄心谷
由西安电子科技大学出版社出版,出版时间是1992年。)。我还喜欢一本是RICHARD A.BRUALDI的组合数学,写的很是好
绝对经典的一本好书,“图灵奖”得主Donald E.Knuth撰写《计算机程序设计艺术》第1卷和第3卷的数学基础
做者文风幽默却是确确实实的。书上页边的旁注颇有意思。说是学生们笔记中的旁注。之前的学生的注(或五花八门的评论),能如此大量出如今教科书里,国情

真是大大的不一样。
训练思惟的好书,国内找不到这样的书。看这本书不轻松,要有很好的数学功底,但看懂它能极大的提高你的功力,要想成为真正的牛人这本书不容错过!
历来计算机数学不分家,这本书能够真正的称为计算机的数学基础,出自名家之手,又被斯坦福等大学采用,看后收益不浅,果然与众不同。想学好计算机,这本

书毫不会令你失望。
这本书好就好在让人的思惟为之一变,让人以为原来事情能够这样看啊!~
读过的最好看的数学书。

亚马逊如是说:The material is very dense, and it's not a book I'd recommend for casual reading: this is stuff you only work

through if you're going to need it. But if you *are* going to need it, this book will make it a lot more pleasant.
不能当小说看。可是当须要时,此书将变得乐趣无穷。

--------------------------------------------

算法

--------------------------------------------

数据结构与算法(英文影印版)  
 
【原书名】 Data Structures and Algorithms   
【原出版社】 Pearson Education  
【做者】 Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman  
【丛书名】 大学计算机教育国外著名教材系列(影印版)  
【出版社】 清华大学出版社  
http://www.china-pub.com/computers/common/info.asp?id=14954

【参考资料】

【评论】
本书是20多年前出版的,采用pascal描述。
该书有中译本,书名《数据结构与算法》,唐守文等翻译,1987年科学出版社出版。

Bible!!20年来这本书依然是讲解基本数据结构与算法最清晰、优美、权威的教科书!
aho帮的data structures and algorithms和cormen等introduction to algorithms是学习数据结构与算法最完美的方案!

这本书是做者另外的那本书《Design and Analysis of Computer Algorithms》的前6章的精简版本。
http://www.cocw.net/mit/Electrical-Engineering-and-Computer-Science/6-046JFall-2004/Readings/index.htm
Aho, Alfred V., John E. Hopcroft, and Jeffrey D. Data Structures and Algorithms. Reading, MA: Addison-Wesley, 1983. ISBN:

0201000237. (http://www.china-pub.com/computers/common/info.asp?id=14362)

我以为三位大师的书最大的特色是好懂好学,深刻浅出,解释的例子举得很好,可以让你弄清原理。

这本书很是很是适合做为计算机专业本科生数据结构和算法的教材,至今为止我还没找到比这本书更好的介绍基本数据结构和算法的书。正如aho帮经典的编译原

理书(dragon book)同样,这本书一样经典、权威、优美、清晰!!

============================================


算法引论:一种创造性方法         
 
【原书名】 Introduction to Algorithms: A Creative Approach 
【原出版社】 Addison Wesley/Pearson  
【做者】 (美)Udi Manber  
【译者】 黄林鹏 谢瑾奎 陆首博  
【出版社】 电子工业出版社  
 
本书是国际算法大师乌迪?曼博(Udi Manber)博士撰写的一本享有盛誉的著做,组织结构清晰且易于理解,强调了创造性,具备浓郁特点,时至今日仍有巨大的

价值,适合做为计算机及相关专业算法和高级算法课程的教材。

http://www.china-pub.com/computers/common/info.asp?id=26775 

============================================

算法导论(第二版 影印版)         
  
【原书名】 Introduction to Algorithms(Second Edition) 
【原出版社】 The MIT Press  
【做者】 (美)Thomas H.Cormen Charles E.Leiserson Ronald L.Rivest Clifford Stein  
【出版社】 高等教育出版社 

http://www.china-pub.com/computers/common/info.asp?id=6434

【参考资料】
e-book: 
http://www.cfcs.com.cn/fjas/ebook.htm
http://219.139.240.53/Soft/Soft_12024.htm
http://online.ysu.edu.cn/personal/yyf/weitao/taocp/clrs.htm

本书答案(solutions to the exercises in the book: "Introduction to Algorithms" by Cormen, Leiserson and Rivest.)
http://www.itu.dk/people/beetle
Solutions for the second edition:
http://www.it-c.dk/people/beetle/solution.pdf
http://www.it-c.dk/people/beetle/teaching/solution.pdf

课程的录像
http://18.89.1.101/sma/5503fall2001/index5503fall2001.html

对应该书的rm录像的下载地址:
http://acm.ustc.edu.cn/~algorithm/video/Introduction_To_Algorithm/

对应于录像的麻省理工学院这门课(6.046J / 18.410J 2001秋季课程:算法导论)的“开放式课程网页”: 
http://www.cocw.net/mit/Electrical-Engineering-and-Computer-Science/6-046JIntroduction-to-AlgorithmsFall2001/CourseHome/ 
上面能够下载到完整的pdf版的“课堂讲义”、“习题”、“习题答案”、“做业”、“做业答案”、“试卷”和“试卷答案”,另外还有“教学大纲”、“教学时程”、“相关阅读

资料”等等资料

勘误
http://www.cs.dartmouth.edu/~thc/clrs-2e-bugs/bugs.php


练习题部分答案下载: 
http://ftp.cdaan.com/sy/light/clrs_study.pdf

MIT OpenCourseWare
http://ocw.mit.edu/OcwWeb/index.htm

【评论】
这本书的英文简称或昵称不是ITA,而是CLR(初版)或CLRS(第二版),其实就是几位做者的姓名缩写加在一块儿

百科全书的组织方式,麻省理工的团队做品,经典中之经典,做者刚刚得到去年的图灵奖,国外绝大多数大学算法课的必备教材。

这本书的大部份内容是美国大学的本科教学内容。
这是一本经典,在CiteSeer被引用最多的文章排名中位居第二。http://citeseer.nj.nec.com/articles.html

许多美国大学的研究生院都把这本书做为教材,详细讲解。在《程序员》的算法书排名上位列第二,仅次于大名顶顶的 the art of computer programming

我最初注意到CLR大约是96年,当时看到很多论文后面把它做为参考文献。后来领导安排我教离散数学,这不是个人特长科目,因此备课的时候我找了很多相关的

书籍和文章,其中包括纯数学的,也包括数据结构和算法方面的,由于我更关心学生在作课题的过程当中的实际算法设计和分析能力。我发现最近出的一些数据结构

和算法教材除了把TAOCP做为权威来源之外,也把CLR做为标准参考书。TAOCP的传奇不少人都熟悉,但CLR知道的就很少了。我也是同样无知,因此就在网上找了

一些材料,了解到CLR的一些特色。个人感受是用CLR教研究生是一个不错的选择(咱们教研室教算法的老师以为它比Aho帮的算法设计与分析深度浅,可是我说

CLR更全、更现代、学生更容易接受)。

讲算法讲的比较好的几本书之一。虽然本身英文不是很好,看这本书是看完一节,查一次英汉词典,可是整体来讲,书流畅叙述了对于算法的讲解,总体仍是比较

通俗易懂的。原汁原味的书,看着是种享受。不过读过几遍后,仍是有不懂的地方,有时还要温习一下,又会有不一样的领悟。

做者之一Ronald Rivest是RSA的设计者,于2002年得到图灵奖。

若是不想急功近利,又不想陷入基础理论的浩瀚烟海,那么本书就是你们的最好选择.算法类很优秀的书,通俗易懂,深刻浅出,很适合中初类读者。

<<现代计算机经常使用数据结构和算法>>是CLR 1ed(美国1990年出版),1994年南京大学计算机系潘金贵翻译,书号是ISBN 7-305-02424-4/TP*83,花了两年多时

间1992年翻译出来的,1994南大出版.

既有详细的解说又有严格的数学论证,好书,强烈推荐。 算法书中的经典!内容全面准确,对每一个算法都有理论上的证实,语言严谨流畅,是每一个算法爱好者或程

序设计人员的必备参考书!

按照这本书本身的讲法,它不只适合研究生,也适合本科生,由于书中的材料被组织成相对较小的章节,能够灵活地取舍和组织。对国内的本科生来讲,用英语学

习专业材料一般有必定的问题。主要缘由是不习惯而不是看不懂。这本书的写做风格平实(或者说枯燥),应该不难阅读。可是若是是头一次阅读专业英文教材,

通常会感受到不容易造成摘要。

行文流畅,让人有欲罢不能之感.有些与数据结构重合的部分一对比不知比严蔚敏的相应章节好上多少,真正的大师水准.就我的感受,隐藏在算法背后的设计思想与

设计技术剖析的不细,更多的笔墨放在了证实上,此乃白璧微瑕.

关于这本书和那本《algorithms in C++》的感想:
那本书是用 C++ 代码来描述算法。做者是老师,而不是工程师。这本书是用伪码来描述算法。
那本书偏重算法的实现。这本书偏重算法的证实和分析。
那本书的习题多为“Write a program ...”。这本书的习题多为“Give an algorithm ...”or “Give a proof ...”.
这本书比那本书厚。

内容特色是抽象和形式化,既有严格的理论证实,又具备很强的构造性

算法是程序设计的灵魂,而此书堪称算法分析著做中的“独孤九剑”,故我强烈推荐。

我选的第一本算法教材,本书的确很全面论述了算法的内容,并且对各个层次读者都有考虑,建议买一本读一读,很值。
理论严谨,启发性高,具备大量的图表;对算法一步步的推导,万丈高楼从地起!既适合研究生与科研人员,又适合初学者,看了绝对大有裨益!!

门槛低,适用人群广!想做程序员,算法必须学,这是少有的不打击积极性的书。

绝对的经典!深刻浅出!大量的图表,对算法不是直接给出,而是一步步的推导,让人有知其然而知其因此然的感受!适合各类水平的人看,若是你愿意,甚至可

以把他做为数学书看!!着次地,怎一个爽字了得。

虽说是抽象了点,可是只有这样才可以从最基本的原理出发,获取算法的精髓。这本书既特别适合初学者,对想要更深一层研究算法的也颇有裨益。最适合计算

机算法初学者的名著!

它很厚实,不只在于它的尺寸,更在于它所承载的知识。
外形的厚重与阅读的舒畅使它成为经典的对立统一,就像是一名外形高大的却身怀绝世轻功的武林高手。

几乎全部的算法教科书都把这本《算法导论》列为参考首选。对每一个算法都给出了严格的数学证实,让人看了有种:知其然而知其因此然的感受!!

咱们倾向于把CLR和TAOCP进行对比。
从写做质量上看,二者都是罕见的上品。
从范围上看,TAOCP的整套书比一卷本(很庞大的一卷!)的CLR宏大,可是TAOCP的后几卷还没出来,CLR覆盖的有些内容在TAOCP的前三卷里面没有讨论。
从详尽程度上看,CLR很详尽,而TAOCP极详尽。
从做者的声誉上看,写TAOCP的Knuth是大名家,百年一遇的天才;主笔CLR的Cormen从学术成就还不能说已经很是卓著。固然CLR中的R即Rivest也是个很是人物

,公开秘钥密码算法RSA就是此公的杰做。
有一个现象颇有意思,TAOCP是Knuth在CalTech上研究生的时候就开始写做的,而CLR是Cormen还在MIT作博士生的时候就已经出版了!
从出版后的影响上看,TAOCP出版了三卷后,Knuth就得到了图灵奖,而这三卷书则塑造了计算机科学。CLR目前是算法的标准教材,美国许多名校的计算机系都使

用它,另外许多专业人员也常常引用它。
我以为Knuth的写做有一个标准,那就是成为科学史上的里程碑。咱们会想起欧几里德的“几何本来”,牛顿的“天然哲学的数学原理”。
CLR会达到什么地位,一代人、两代人的标准教材仍是更高?Only time will tell.
从书籍产生的意义讲:AOCP和CLR不能项比较。AOCP在计算机领域是属于开创性的做品,具备学科经典的地位。尔后,有关数据结构和算法的书基本都是对AOCP的

解读、大众化、实用化,同时增长一些改进的、新的算法。CLRS基本也属于此类。只是他的写法较好,理论深度适中。另外,两书的习题都很是丰富。我认为,如

果不作习题,书的价值将减小一半。

但TAOCP给人的感受比较学院派,而ITA则相对来讲较为实用一点。

============================================

编程珠玑(第二版)        

【原书名】 Programming Pearls Second Edition  
【原出版社】 Addison Wesley  
【做者】 Jon Bentley  
【译者】 谢君英 石朝江  
【丛书名】 大师签名系列  
【出版社】 中国电力出版社 

http://www.china-pub.com/computers/common/info.asp?id=16802
http://www.china-pub.com/computers/common/info.asp?id=18348 [英文影印版]

============================================

STL 源码剖析         
 
【做者】 侯捷  
【丛书名】 侯捷译做系列  
【出版社】 华中科技大学出版社 
http://www.china-pub.com/computers/common/info.asp?id=6384

--------------------------------------------

网络

--------------------------------------------
计算机网络(第4版)                
 
【做者】 谢希仁  
【丛书名】 高等学校电子信息类规划教材  
【出版社】 电子工业出版社  
http://www.china-pub.com/computers/common/info.asp?id=12772

【评论】
国内网络书籍绝对的经典之做!

============================================

计算机网络(第4版)(中文版)         
 
【原书名】 Computer Networks, Fourth Edition 
【原出版社】 Pearson Education  
【做者】 Andrew S.Tanenbaum,Vrije Universiteit,Amsterdam,The Netherlands  
【译者】 潘爱民  
【丛书名】 世界著名计算机教材精选  
【出版社】 清华大学出版社

http://www.china-pub.com/computers/common/info.asp?id=19442

http://www.china-pub.com/computers/common/info.asp?id=15894 [英文影印版]

【参考资料】
本书的PPT:
http://authors.phptr.com/tanenbaumcn4/

【评论】

国防科技大学倪鹏云教授关于该书的评论,可参见http://www.china-pub.com/main/sale/renwu/mainb.htm

《计算机网络》这本书有20多年的历史(1980年第1版)和积累,做者有丰富的知识基础和教学经验。本书基本上按照从底向上的思路,内容涉猎很是广,可是并不

深刻,然而做者提供了不少参考资料,因此,这本书既是一本教材,也是一本很好的参考书。实际上,在国外,还有彻底不一样思路的教材也一样很受欢迎,好比

James Kurose和Keith Ross合著的《Computer networking: A top-down approach featuring the Internet》也是一本不错的网络教材,它从应用层

开始讲起,由上至下,由浅入深,适合于做为学习用书。

其实这一版本的书和第三版区别不大,第四版主要是删掉了第三版中讲述ATM的部分,而后是将之前应用层中的安所有分做为第8章重点讲述,其他的差异很小.我的认

为第版仍是至关不错的彻底顺应了历史潮流,ATM做为已经或是将要被淘汰出局的技术,确实不用花太多的时间在上面.做为当前网络研究方面热点的安全问题确实应

该重点讲述.

本书讲解详尽,并尽可能兼顾全面与重点突出之间的均衡,这种内容安排相信能够知足大多数人的需求,应该说该书的特色就是内容全面,并且紧跟潮流,对典型的

技术案例作了重点剖析。

我以为它写的像一本大全类的书,什么都说,结果什么说的不痛不痒,有点像走马观花那样子,像是简介的书那样,不深刻,真的不深刻,我还觉得外国老写的书都是比

较风趣幽默的,不过好像看上去也不怎么风趣幽默!还有失望的是,这么大的一本书,在网络硬件和网络OS这方面的知识却介绍的很少,结果我不少想查找也没找到.
我以为若是是初学者看这本书的话,不见的会很好,由于这里面只是一个简介,忽略了一些细节的问题和各个原理/协议/标准之间在的联系和串通,忽视了一个总体的

网络通讯环境下的通讯的怎么开始,过程是怎么样,结果是怎么样,在这样的一个过程当中,各个原理/协议/标准的执行以及他们的细节问题,
总之我以为这本书是把网络的各个部分分块了,没有从总体上来说网络的实现技术.因此我不建议初学者看着本书,可是当你不是初学者的时候,看这本书对你来讲就

好像是在看网络概论之类的入门书籍了,真是矛盾啊.

人说“一本好书带来一个世界”,可这本书是“一个章节带来一个世界”!做者的知识广博让人敬佩,第二章的傅立叶分析光几句话就把之前学了一个学期信号课也不

甚了了的地方讲清楚了

关于谢老的电子工业出版社的一样名称的书与这本书的对比:
强烈建议初学网络的网友,去看谢老的那本书,谢老的那本书,写做很是严谨,并解释清楚了许多初学者或者是工做多年的仍混淆的基本概念,绝对称得上字字珠

矶。关键在于谢老将一些老的网络技术做了删减,增长了很多当前热门的网络技术,能够说是一本跟得上时代的网络教科书。
Andrew的这本有本身的特点,但我以为在许多方面,比不上谢老的这本国产书。它的内容庞杂,该讲清楚的地方没有讲清楚,初学者容易混淆的地方则一笔带过,

看了这本书的人,也许要将这样的混淆概念带到之后的工做中去。这些方面的例子能够具不少。如:路由器的基本原理,谢老的这本就讲得比较好。TCP协议流量

控制部分也是谢老的这本比较好。谢老的这本还将ALOHA的原理做为附录,从正文中删除了,这也是适应网络发展的要求。最短路径算法若是看Andrew的,你很难

懂,但看了谢老的附录里的算法描述,一看就懂,还能明白Andrew没讲的内容。对于应用层协议,谢老的这本抓住重点,写得简明扼要,由于读者基本接触过或学

到过应用层的一些协议原理。该细的细,该粗的粗。而andrew这本倒是眉毛胡子一把抓,什么都罗列来,什么也没讲明白。特别是关于SNMP部分,没有谢老的这

本条理清楚。
很少讲了,个人意思在于:咱们不要迷信外国做者所谓的畅销书,其实国内做者写的书比他们更好,咱们应该从实际出发,选择适合本身的书。
我看过谢老的前几章,确实讲的很清楚。如发送速率(传输速率)和传播速率。很可贵国内做者的书比国外好的。

我对比了二者,以为仍是谢老师的书更加深刻浅出,道理清楚,概念解释的有针对性;而经典呢,彷佛一会儿难以让人看进去,并且更像是一篇篇论文,并不解释

太多的基础概念和道理,讲解的是技术。因此,我也建议初学者或者向我这样的带着工做中的疑惑去看书的人,仍是买着一本;而有必定水平的固然看经典较好,

也可做为收藏。

这两本书各有侧重点,写书的目的不太同样。谢老的这本书侧重于网络应用,讲述了现有网络的基本原理,侧重于现有网络的基本概念,写得很是流畅,很是适合

有志于网络应用的读者,这也是国内写得最好的一本网络应用教程。
而Andrew的那本书,侧重于讲网络的构成原理,适合于有志于网络设计、网络开发的读者,其理念在于启发你设计一个完整网络所要考虑的问题。这本书不算是最

好的,可是一本百科全书(有点这个意思)。个人朋友在加拿大读书,他们学校用的教材我也看了,比这两本都要好,理论也讲得比较深。
因此这两本书各有侧重点,但都是两本比较好的书,读者应该按照本身的发展方向来选择所用的教材。

讲解的很是详细!对一项技术的优缺点,应用方向,不一样技术,不一样协议之间的比较都做了详细深入讲解!与谢希仁的那本《计算机网络》相比,这本书写的更深

,知识面更广!不过谢老这本知识结构紧凑,每一个概念都给出严格定义,较好的把握了重点!因此我仍是建议两本一块儿看

和你们讨论如下学网络必看的一些书籍
我以为这本和谢老的那本以及tcp/ip详解应该是必看的
不知你们有没有看过
机械工业出版的
计算机网络: 自顶向下方法(原书第3版)  
是否是可列于必看之列
还有高传善翻译的一本网络互连书
这些书都很经典

学网络,要看的书出这本书之外,还有谢希仁的同名的书,固然《TCP/IP祥解:卷一:协议》也是必不可少的。
个人感受是这本书是一个很是好入门及提升阶段,而《TCP/IP祥解:卷一:协议》则是精通必需的。
谢老的书是对这两本书的不错的结合。但深度不及这两本书。

网络是一个很是大的概念,不可能在一本入门教材里讲得很深刻完全。若是您想要了解那些advanced topic背后的基本原理:若是要学习BSD Socket能够看

rstevens的书,要学习Internet协议能够看Stevens写的TCP/IP Illustrated和Comer的TCP/IP网际互联,要学习分布式对象系统能够看《分布式系统原理

》,要学习协议的形式化验证方法能够看林闯的书……等等

Stevens写的TCP/IP Illustrated和Comer的TCP/IP网际互联跟“计算机网络”这本书是互补的。前者针对TCP/IP,后者讲网络原理。

比较经典的计算机网络首先推崇的是Richard Steven的书,tcp/ip illustrator三卷;那个时候还流行过Douglas Comer教授的 "internetworking with

tcp/ip 三卷。


--------------------------------------------

操做系统

--------------------------------------------
现代操做系统 (第2版)          
 
【原书名】 现代操做系统(英文版.第2版) [原书信息]  
【做者】 (荷)Andrew S. Tanenbaum  
【译者】 陈向群 马洪兵  
【丛书名】 计算机科学丛书  
【出版社】 机械工业出版社  
http://www.china-pub.com/computers/common/info.asp?id=25383
http://www.china-pub.com/computers/common/info.asp?id=4802 [英文版]

Andrew S.Tanenbaum ,学界泰斗
五大名著,横跨三个基础领域:
操做系统:设计与实现;分布式操做系统;现代操做系统;计算机网络;结构化计算机组成
思路清晰,以发展为主导,注意启发式引出问题,不只是计算机专家,亦是教育你们

操做系统领域的经典之做,已被国外多所重点大学采用为教材或做为教学参考书。经过学习本书,读者定能对操做系统的功能与实现技术有全面的了解。

《操做系统概念(6)》和《现代操做系统(2)》,这两本书都是很经典的操做系统书籍

两本都是最经典的,可是,我觉的这本内容细一点,虽然操做系统概念容易读些,可是分布式部分太范,且io和文件部分我的觉的内容有些泛了,有些占篇幅了,而这本

是每张都有结合实例,理论也有深度,去掉了分布式。尤为是《操做系统概念》分布式部分,点了又不深刻,分布失算法思想只给了个纲要,拜占庭问题更是粗略,

分布式部分就象《现代操做系统同样》该去掉的!

内容很好,比operating system concept要详细深刻,若是再有本《操做系统设计与实现》2版,参考参考minix实现,那就是绝配了!

因此这本书要比操做系统概念好,为啥不少人看<<操做系统概念>>好呢,那是由于将的比较容易懂,我看<<操做系统概念>>用了5天,看小说同样,它的不少东西都是

点到为止,虽然是有收获,但看完了,还要参考<<现代操做系统>>

这本应该更好些,<操做系统概念>部分讲的并很差,只让人对操做系统结构的总体概念有个了解,深度就比不上modern operating system了,我两本都看了,好比

io,文件等部分,不少的关键数据结构都没有给出来

我是University of Melbourne的。我学OS这门课程时用的就是这本书做为textbook,很是经典。另外,咱们也要阅读:《Operating System Concepts

6th》,《The design of the UNIX Operating System》,《Inside Windows2000》,《The Unix Internals》和《Operating Systems:A Modern

Perspective》等和一些论文。

若是咱们在上个世纪九十年代初就能看到这样的好书,如今世界上就会多出个Chinux也说不定。呵呵,不过此书的确经典。

有了minix的书和《understanding linux kernel》这本书不买也罢,不过有钱和有时间看看仍是值得。总比国内的什么汤的教材好多了。

============================================

--------------------------------------------
数据库

--------------------------------------------
数据库系统概论


============================================


--------------------------------------------

程序设计

--------------------------------------------

计算机程序的构造和解释(原书第2版)

【原书名】 Structure and Interpretation of Computer Programs,Second Edition 
【原出版社】 Massachusetts Institute of Technology  
【做者】 (美)Harold Abelson,Gerald Jay Sussman,Julie Sussman  
【译者】 裘宗燕  
【丛书名】 计算机科学丛书  
【出版社】 机械工业出版社 

http://www.china-pub.com/computers/common/info.asp?id=17992

【参考资料】
相关网站有本书源代码及其余教辅资料,网址为:www-mitpress.mit.edu/sicp/

mitpress公开的在线浏览版本
http://mitpress.mit.edu/sicp/full-text/book/book.html

the homework answer
http://inst.eecs.berkeley.edu/~cs61a/hw/index.html
http://www-inst.eecs.berkeley.edu/~cs61a/sp06/

做者授课录像下载
http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/

UC Berkeley的教学录像(Spring 2004):
http://webcast.berkeley.edu/courses/archive.html?prog=40&group=57

最省事的scheme环境,初学推荐
http://www.drscheme.org/

The Scheme Programming Language, 2nd Edition
?; 1996 Prentice Hall
http://www.scheme.com/tspl2d/

备查
http://www.schemers.org/Documents/Standards/R5RS/

更多关于scheme
http://www.schemers.org/
http://www.swiss.ai.mit.edu/projects/scheme/index.html
http://readscheme.org/
http://dmoz.org/Computers/Programming/Languages/Functional/
http://directory.google.com/Top/Computers/Programming/Languages/Functional/


http://lambda-the-ultimate.org/

http://www.ai.mit.edu/research/publications/publications.shtml

开放式课程计划OOPS
http://www.cocw.net/
  
【评论】 
紫皮书(Purple Book)!巫师书!!SICP!!!TheBook!!!!
四个名字都是这本书的昵称,“紫皮书”是由于书皮是紫的,“巫师书”是由于书皮上印着一男一女两个巫师模样的人,“SICP”就是书名几个单词的首字母,“

TheBook”是由于这本书是在scheme领域内公认的圣经,因此有此昵称

绝对是好书, 很是具备启发性.
把编译器、算法、硬件的的内容用Lisp语言联系起来。


次书是我学习CS的第一本教材(MIT的6.001),很是好。

Its the Best! Its the Worst! Why the split?, May 8, 2000
Reviewer: Peter Norvig (Palo Alto, CA USA) - See all my reviews
    
I think its fascinating that there is such a split between those who love and hate this book. Most reviews give a bell-shaped

curve of star ratings; this one has a peak at 1, a peak at 5, and very little in between. How could this be? I think it is

because SICP is a very personal message that works only if the reader is a computer scientist (or willing to become one). So

I agree that the book's odds of success are better if you read it after having some experience.
To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are

built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate SICP are

the ones who just want to know how to drive their car on the highway, just like everyone else.
if you want to be a real professional, you should read this

Donald Knuth says he wrote his books for "the one person in 50 who has this strange way of thinking that makes a programmer".

I think the most amazing thing about SICP is that there are so FEW people who hate it: if Knuth were right, then only 1 out

of 50 people would be giving this 5 stars, instead of about 25 out of 50. Now, a big part of the explanation is that the

audience is self-selected, and is not a representative sample. But I think part of it is because Sussman and Abelson have

succeeded grandly in communicating "this strange way of thinking" to (some but not all) people who otherwise would never get

there.

Those who hate SICP think it doesn't deliver enough tips and tricks for the amount of time it takes to read. But if you're

like me, you're not looking for one more trick, rather you're looking for a way of synthesizing what you already know, and

building a rich framework onto which you can add new learning over a career. That's what SICP has done for me. I read a draft

version of the book around 1982 and it changed the way I think about my profession. If you're a thoughtful computer scientist

(or want to be one), it will change your life too.

Some of the reviewers complain that SICP doesn't teach the basics of OO design, and so on. In a sense they are right. The

book doesn't directly tell you how to design and write an object-oriented program using the subset of object-oriented

principles that show up in the syntax of Java or C++. Rather, the book tells you what those principles are, how they came to

be selected as worthwhile, how they can be implemented from the ground up, and how a different combination of principles

might be more appropriate for a particular problem. This approach requires you to understand the range of possibilities, and

to think about trade-offs as you go through the design process. Programming is a craft that is subject to frequent failure:

many projects are started and abandoned because the designers do not have the flexibility, experience and understanding to

come up with a suitable design and implementation. SICP gives you an approach that will succeed, but it is an approach based

on principles and wisdom, not on a checklist. If you don't understand the principles, or if you are the kind of person who

wants to be given a cookbook of what to do rather than to think creatively, or if you only want to work on problems that are

pretty much like the problem you worked on last time, then this approach will not work for you. There are other approaches

that will be more reproducible for a limited range of simple problems, but there is no better way than SICP to learn how to

address the truly hard problems.

The Classic, May 20, 2000
Reviewer: paul graham (Cambridge, MA United States) - See all my reviews 
This is one of the great classics of computer science. I bought my first copy 15 years ago, and I still don't feel I have

learned everything the book has to teach.
I have learned enough to write a couple books on Lisp that (currently) have four to five stars. Yet SICP, which is pretty

much the bible of our world, has only three? How can this be?

Reading the reviews made it clear what happened. An optimistic professor somewhere has been feeding SICP to undergrads who

are not ready for it. But it is encouraging to see how many thoughtful people have come forward to defend the book.

Let's see if we can put this in terms that the undergrads will understand -- a problem set:

1. Kenneth Clark said that if a lot of smart people have liked something that you don't, you should try and figure out what

they saw in it. List 10 qualities that SICP's defenders have claimed for it.

2. How is the intention of SICP different from that of Knuth? Kernighan & Ritchie? An algorithms textbook?

3. Does any other book fulfill this purpose better?

4. What other programming books first published in the mid 1980s are still relevant today?

5. Could the concepts in this book have been presented any better in a language other than Scheme?

6. Who is al? Why is his name in lowercase?

读书时曾经读过William R. Cook的文章《Object-oriented programming versus abstract data types》,当时对文章中的观点有些疑惑,当我读到

2.4抽象数据的多重表示时,顿时豁然开朗,做者谈及数据导向的程序设计和可加性时给出的图2-22复数系统的操做表与William R. Cook文中的观点很是接近。

确实是好书。好书慢慢读,如品茶、品酒,耐人寻味。

若是想对书中所用的Scheme语言作进一步了解的话,能够在 http://www.drscheme.org/  下载DrScheme解释/编译器。Scheme语言虽然另类及实际用途有

限,但却有较高的“可玩性”,主要表如今它对几类编程语言范例(paradigm) -- 过程型/面向对象型/函数型/逻辑型 -- 都能作出良好表达。

提及Comp.Sci.的读物,其实除了TAOCP、CLR外还有一本经典叫做 SICP (Structure and Interpretation of Computer Programs,俗称“紫皮书”或“巫

师书”)。MIT和UCBerkeley两大学府都指定这本书做为计算机科目的入门教材。它涉及的不是具体的数据结构和算法,而是对“计算机程序”这个概念自己的解构

/解读。“程序即思惟表达”是此书传递的一个意念。因为涉及的是程序设计的抽象层面,批评者会认为这本书不够实用(这在amazon.com上读者书评中的分歧可

见一斑),但事实上不少顶尖的程序设计师都认为正是这本书帮他们“开了窍”,是一本具备高度启发性的经典。

我很喜欢SICP,可是要说推荐给出版社我却很犹豫。缘由是虽然这本书追问编程的本质,对有科学探索气质的人颇有吸引力,可是对于大部分忙碌的程序员来讲,

恐怕以为没有时间慢慢体会它的好处。这本书用LISP的变体SCHEME语言讲事,国内对于主流语言趋之若骛的大多数人恐怕不买账。
    对于曲高和寡的著做,出版社引进就会蚀本。好在有在线版本,喜欢的人自能够免费阅读。

============================================

程序设计语言--实践之路(图书馆必藏经典,程序员必修秘笈,全球上百所大学列为标准教材和首选参考书)         
 
【原书名】 Programming Language Pragmatics  
【原出版社】 Morgan Kaufmann  
【做者】 Michael L.Scott  
【译者】 裘宗燕  
【出版社】 电子工业出版社 

http://www.china-pub.com/computers/common/info.asp?id=22979

【参考资料】
做者主页:
http://www.cs.rochester.edu/u/scott/
http://www.cs.rochester.edu/u/scott/pragmatics/adopters.html
  
On-line Resources:
http://www.cs.rochester.edu/u/scott/pragmatics/
  
原书图片资源下载:
http://www.cs.rochester.edu/u/scott/pragmatics/figures/

勘误表:
http://www.is.pku.edu.cn/~qzy/books/pragmatics/errata.htm

【评论】

创新性地将程序设计语言的设计与实现和编译器设计有机结合的实用教本。国外大受好评的程序设计语言教本,被全球上百所大学、学院列为标准教材和首席参考

书目 !这是一本颇有特点的计算机程序设计方面的教材,它的核心是讨论程序设计语言如何工做的问题,它是程序设计语言和编译的传统教科书的混合,再加上一

些有关汇编层体系结构的材料,或以知足那些没有学过计算机组织的学生和须要。它不是综述性语言的教科书,没有列举不一样语言的细节,而集中经过各类语言的

例子阐释其基础概念。本书也没有解释如何构造一个编译器,只是解释编译器如何工做,它对源程序作了什么,以及为何要那样作。 本书在美国使用已有十余年

,用于讲授一门名为“软件系统”的课程,适合高年级的本科生和一年级的研究生使用,书的内容对专业程序员也颇有价值。

------------------------
王咏刚《接受程序设计语言的再教育》
http://www.china-pub.com/computers/ebook20001-25000/22979/wz1.doc
再教育?没错。依我的愚见,大多数中国程序员都须要接受一次有关程序设计语言的再教育,而Michael L.Scott所著的《程序设计语言??实践之路》则能够成

为此次再教育中的最好读本之一。 
  对于那些没时间重温大学课程的上班族来讲,这种补习最好从《程序设计语言??实践之路》开始。即使不能把这本八九百页的“大部头”所有读完,你也至少能

在阅读过程当中明白三个看似浅显、实则微妙的“大道理”: 
  其一,语言必须与环境相结合,才能发挥出最大的功用。这里所说的“环境”一般包括编译环境、运行环境和应用环境三个方面。举例来讲,若是你打算仿照着

某些开源框架的作法,使用控制反转和依赖注入技术消除代码中某些让人生厌的依赖关系,你必定会认真研习实现相似技术的语法特征,但你未必会主动思考如下

几个问题:在编译层面,使用了这些语法特征的代码是否会影响到最终生成的目标代码质量?在运行层面,该如何组织这些语法特征,才能让使用了相关技术的可

执行程序在支持废料收集的并发环境下有不俗的表现?在应用层面,这些旨在消除依赖关系的技术会不会破坏新、旧模块间的平衡关系,以致于咱们必须花上大量

时间改写原有的代码或接口才能保证系统的平滑升级?全面思考这些与环境相关的问题并不必定会改变你的抉择,但它却能够帮助你找到效率、可靠性和可用性之

间的最佳平衡点。在此方面,《程序设计语言??实践之路》一书所使用的,将程序设计语言与编译原理、面向对象等知识综合起来、融会贯通的作法不但能够节省

咱们分类学习的大量时间,还能够训练咱们从总体出发、多角度思惟的方式与方法,其价值不言而喻。 
  其二,程序设计语言自己所具备的多样性能够成为咱们提升软件开发水平的最佳指南。说到这里,我又想起了那些充斥在各大技术网站的,题为“某某语言比某

某语言更强大”或“某某语言已死,某某语言必胜”的帖子。发表这些帖子的帖主也许并不懂得,程序设计语言的世界原本就是一个多样化的、五彩缤纷的世界,每

一种成功进入应用、教学或科研领域的程序设计语言都有它值得学习和借鉴的地方。若是仅仅根据我的的喜爱或是响应时尚的号召,就盲目地吹捧某一种语言并贬

低其余全部语言,这样的帖子和那些频繁出如今Fans网站上的“爱死某某某,恨死某某某”的帖子有什么本质的不一样?更为重要的是,若是咱们可以在《程序设计语

言??实践之路》的指下,真正懂得了函数式语言、数据流语言、逻辑式语言、冯?诺伊曼语言、面向对象语言等不一样的语言类型在语法设计、编译器设计和运行环

境设计方面的异同,咱们就会惊讶地发现:Scheme语言的lambda表达式能够在C 语言中优雅、高效地解决诸如面向契约设计之类的复杂问题;Ada95语言中提供

的同步和保护机制能够为那些使用Java编写的多线程应用提供重要的参考;Smalltalk语言与编译和运行环境的紧密结合则能够为咱们设计可扩展的JavaScript

宿主提供最好的借鉴……从这个意义上说,学习一种语言的意义毫不在于为本身增添一种求职和谋生的手段??真正善于学习的人总能从每种语言的设计和实现中找到

许多可用于提升编程水平的关键特征。 
  其三,使用特定语言编写出来的代码是否优雅、可靠,这主要取决于程序员对各类基本理念和基本原则的认知程度,而不取决于程序员记住了多少复杂的语法

特征或学会了多少流行类库的用法。正如《程序设计语言??实践之路》所说的那样,“典型的C 程序员都极少使用联合、多重继承、变更个数的参数,或者. 运算

符”,可是,若是你了解了隐藏在这些复杂语法特征背后的东西??如内存空间的分配和寻址方式,复本式继承和共享式继承之间的关系,参数传递和求值顺序,动

态方法约束和成员查找,等等??你就能够在须要使用这些语法特征的时候满怀信心地告诉本身:“嘿,这不过是某某原则或某某技术在C 语言中的表现形式罢了,

我能搞定它!”反之,若是你不晓得与数据结构和算法相关的代码在编译、运行时必然存在的各类均衡与折中问题,即使你把C 语言的标准文档背得倒背如流,即

便你能够默写出System.Collections命名空间中的全部属性和方法,你也会在体验过本身开发的软件与成熟软件之间的差异后大发感慨:“一样是使用C 语言,

为何我写的程序总会从头到脚散发着‘业余’的气味儿呢?” 
  关于程序设计语言的本质,Michael L.Scott是这样说的:“就像天然语言限制着人们解释和论述的方式同样,程序设计语言也限定了什么能够表达,什么不

能表达,并对程序员可以怎样思考问题有着深入而微妙的影响。”既然如此,咱们还犹豫什么呢?与其后悔在学校中虚度了光阴,还不如立刻捧起《程序设计语言?

?实践之路》这本书,接受一次有关程序设计语言的再教育呢!

Yupo:
这本书的做用有限,并非全部编程的人都必须看的书。对于非计算机专业的人而言,彻底能够不看此书。对于通常的计算机应用程序(指比较高层的应用)的开

发者而言,只须要知道如何使用程序设计语言编程就足够了。此书评的做者用不做为了抬高此书而这样来贬低他们。这样贬低他们只能说明本身的无知。程序设计

语言只不过是一种工具,就像天然语言是用来交流的工具同样。应用程序的编写者有本身的专业,他须要的只是如何使用编程语言来实现本身的设计,而不须要去

深究语言的实现机制。好比说,用Fortran语言编写科学计算程序的人,并不须要知道语法分析、代码生成等编译过程,同样能很好地实现本身的设计。这些东西

对他们而言是额外的知识,而不是必须的知识。
本书评做者经过贬低不懂编译实现机制或底层实现机制的人来抬高此书实在没有必要。若是真有谁曾“试用了28种开源框架和69种eclipse插件”,我想他必定不是

等闲之辈,也必定不会“仍不清楚本身眼前的垃圾代码该如何“重构””。在工做中或研究中能作到这样的人,必定是一个认真的人,他确定不会须要进行这么多尝试

便早以解决好了本身的问题。反过来,我也没有看到“28种开源框架和69种eclipse插件”与学习本书之间有什么必然的联系。也不懂“本身眼前的垃圾代码该如何“

重构””这句话的含义。既然是“垃圾代码”还要“重构”干什么,这里的“重构”又是什么?莫名其妙。
编写应用程序的人在写程序时是没法本身决定如何使“语言与环境相结合”的,这不是程序设计者的任务,而是编译器的实现者的任务。书评者对着假想的一群应用

程序设计者,给他们规定绝不相干的任务,而后极力推荐他们看此书,搞错了对象。真有点可笑。
要写书评也要写在点子上。不要在本身还未懂得书中的内容时(我相信他根本就没有好好看过此书),就盲目地炒做。

《程序设计语言??实践之路》一书讲述的核心内容是程序设计语言的“语用学”,它的重点既不是语言,也不是编译。这里所谓的“语用”是指编程语言变成能够在计

算机上真正运行的程序所须要的环境、它的实现机制以及原理。与天然语言中的语用学讨论的问题是相似的,只不过涉及的“世界”不一样。可是,因为将源程序变成

可执行程序须要由编译器来实现,所以其中的不少问题都与编译器有关。可是,它关心的不是特定的编译算法和编译器的实现方法,而是程序设计语言与底层计算

机体系结构的对应关系。例如,程序设计语言中的做用域和存储绑定、数据类型、过程调用、控制流等概念在计算机中是用什么方法来表示的?如用栈表示局部做

用域,用堆来实现动态申请的空间。为此,编译器要适当组织符号表正确地实现这种从概念到实例之间的映射。又如与函数调用相关的概念是若是实现的?例如,

形式参数如何与实在参数相结合?如何实现从一个函数的内部访问在该函数以外声明的变量?如何实现导入、导出的访问?等等。为了在计算机上正确实现这些概

念,编译器必须遵循特定机器的有关调用约定,如寄存器使用约定、参数传递约定,栈帧的布局约定,等等。这些问题均可以抛开编译器而单纯从实现机制上来讨

论。事实上,它们都是编译器的设计者在实现一个编译器以前,必须在头脑中事先便明白的知识。学习这本书,对于深入理解程序设计语言的行为实质是颇有帮助

的。不论你专一于计算机的哪一个方面,网络、应用仍是底层的系统软件,这本书都会对你有好处。对于有兴趣研究编译器的人而言,则更是必备的知识。
  本书并不深奥,讲的都是基本的东西,学起来应当不难。
  另外要补充一点的是,我认为书名译得不是太好,这个名字没有突出“语用学”,而事实上“语用学”是本书的重点。其实就翻译成《程序设计语言语用学》就能够

,不要搞华而不实的标题,并且尚未点中要点。更为不当的是封面设计,将“程序设计语言”用了那么大的字体,搞不清楚的还觉得是专门讲程序设计语言的书。


-----------------------

其实本书很大程度上就是 编译原理 的教材;而我学过编译原理,用的是 龙书 ,而且实现了一个小型的编译器;书不错,但对编译原理学的很好的读者并不适合,重

复了,深度上不如 龙书.

书的价值之所在:创新性地将语言设计与编译原理两门课程的内容融合在一块儿,将两门在传统上分割开来的学科融会贯通,完全打破咱们在学习中产生的不连贯性

国外教改,国内现状:美国ACM和IEEE/CS最新制定的《Computing Curricula 2001》课程体系,反映当代计算机科学与技术学科发展水平和计算机科学技术的

新进展、新技术。编译器的编写曾是计算机学科中的核心课程, 但如今愈来愈多的人认为并不是每个计算机专业的学生都须要具有设计编译器的能力, 这项工做应

属于编译器的设计专家. 去除了这项课程后, 能够在课程表中填充以下内容, 如软件工程、 数据库工程或其余一些关于计算机科学技术实际应用的课程。但,

cc2001中也明确指出,学校有必要开设一门关于程序设计语言原理的课,主要讲授各类常见语言的设计。本书就是这样一本讲编译原理嵌入到程序设计语言的各类

设计方案的佳做。她的每一章讲授一种设计方案,同时结合一种典型语言。另外她加入了计算机底层的东东,确实不错。国内不少院校都取消了编译原理课,取而

代之的是程序设计语言概论。

常常看书买书的,都知道裘老师的翻译质量是没的挑,博文的出版编辑也是十分负责。本书保留了索引,这对于书迷的重要性我就很少说了。

真心但愿以本书为契机,多多引进国外的优秀教材,把先进的设计理念带入国内。同时也但愿咱们能有本身的精品图书品牌,多出版优秀国内原创,提升国内教学

和技术水平。

这本书中的内容能够说覆盖面很广,可是却很浮浅,有些甚至是聊聊数语带过。对于语言机制、哲学、分类、数学基础的介绍也不深入。充其量也就是一本语言分

类学的概观和浅显介绍。所谓馆藏精品以及接受再教育实在是言过其实了。
这本书就是一本典型的程序设计语言概论性的书,其中虽然涉及了一些编译方面的知识,但只是从程序设计语言的角度来较为深刻地探讨其实现,与编译原理不是

一个概念。

这是一本知识浓缩度至关高的教材,它所覆盖的知识面至关的普遍,它能够做为自动机原理、汇编语言、编译原理、数据结构、计算机组成原理等计算机专业课程

程的参考书,也能够为电子信息工程、通讯工程和信息技术等专业的学生提供帮助。本书并无具体的讲解某种程序设计语言,但其讲述的通常原理,是任何一种

程序设计语言都必不可少的。本书从计算机的硬件、设计、原理和实现上都作了详细的阐述,是一本可贵的综合教材。因为本书综合的内容比较多,在具体的某些

方面讲得不是很细,可是对于做为教材来说,确实是一本经典之做。特别适合研一的学生来阅读。

程序涉及语言的书,这几年各出版社出了一批:
Ravi Sethi 的《程序设计语言:概念和结构》;
Robert W. Sebesta的《程序设计语言原理》;
Kenneth C. Louden的《程序设计语言??原理与实践》;
Terrence W.Pratt和Marvin V.Zelkowitz的《程序设计语言:设计与实现》。
这些书的做者从各个角度介绍程序设计语言,相信你们看了后定会大有收获。这些书中的有些已有2、三十年的历史,出了5、六版,及时反映程序设计语言。这

些书没有哪本标榜“图书馆必藏经典,程序员必修秘笈,全球上百所大学列为标准教材和首选参考书”。特别是提到“程序员必修秘笈”,好像让人获得武功秘籍同样

,令人反感。这世界没有万灵药,没有哪本书标榜本身怎样怎样的,只不过是一本书而已。不一样的做者有不一样的观点,不一样的书有不一样的写法,各取所需。
遗憾的是,你们查不到高教去年出的John C.Mitchell的《程序设计语言概念(影印版)》,你们若是看了该书后自会有另一种感觉。做者的网站为

http://theory.stanford.edu/people/jcm/

这本书创新性地将语言设计与编译器原理融合在一块儿,让学习者能够更清楚地明白二者之间的关联,是可贵的优秀教本。推荐有兴趣深刻学习程序设计语言的人士

研究一下。

本书号称创新性的将程序语言设计与编译器的设计有机结合.
可是,我以为此书中关于[编译器的设计]仅仅是些编译原理的基础知识,并且还不够详细,[程序语言的设计]更是泛泛而谈.诸如[深刻理解计算机系统]对这种大而

空洞的主题都有所阐述;[C++的设计与演化]才是探讨某专门语言设计的典范.
译者和著者都不错,书的内容也很规矩;但说是经典就有些勉强

其中牛校少了点,像MIT、Stanford、UCBerkeley、CMU、UIUC等一等一的都没有。不过这个做者的确是本领域的大拿。

这本书结合编译系统,很好的探讨了设计程序设计语言中须要考虑到的不少问题。是一本不错的书。

这本主要仍是集中在语言方面。你说的《深刻计算机系统》其实与博文视点要出版的另一本 Write Great Code Vol.1(The Art Of Assembly Language

做者最新系列杰做) 有必定的类似性。:-)

每章最后都有一些复习题和一些更具挑战性的练习。这些练习的特别价值在于引导学生理解各类语言或者技术,其中许多都是他们不大会在其余地方遇到的,或者

不会很快遇到的。我建议程序设计做业用C++或者Java;Scheme、ML或者Haskell;以及Prolog。布置一个有关异常处理的题目也是很是好的想法,它能够用

Ada、C++、Java、ML或者Modula-3写。若是课程里包含了并行性,做业应该在SR、Java、Ada或者Modula-3里给,能够根据本地的条件选择。在附录A里给出

了各类语言实现的资源信息。 
  除了这种小型课题以外(或者在那些但愿的地方),教师还可能但愿学生作一些语言实现方面的工做。因为从空白开始作一个小编译器也是一个学期的工做,

Rochester采用的方式是给学生提供能工做的编译器的代码,要求他们作些修改。对于其中的许多人,这是他们第一次阅读、理解和修改一个大的实在的程序??就

其自己而言也是很是有价值的练习。Rochester的PL/0编译器把一个归功于Wirth[Wir76,307-347页] 的小语言翻译到MIPS I汇编语言,这一汇编语言被普遍

认为是商品的RISC指令集中“最友好的”。威斯康星大学计算机系提供了一个很是好的MIPS解释器(“SPIM”,www.cs.wisc.edu/~larus.spim.html)。编译器

自己能够从Rochester获得(ftp://ftp.cs.rochester.edu/pub/packages/plzero/)。它是用C++写的,仔细划分了各个编译阶段,并有很详尽的文档。
--------------------------------------------

计算机体系结构

--------------------------------------------

深刻理解计算机系统(修订版)        

【原书名】 Computer Systems A Programmer's Perspective 
【原出版社】 Pearson  
【做者】 (美)Randal E.Bryant; David O'Hallaron  
【译者】 龚奕利 雷迎春  
【丛书名】 国外经典计算机科学教材系列  
【出版社】 中国电力出版社  
http://www.china-pub.com/computers/common/info.asp?id=18133
http://www.china-pub.com/computers/common/info.asp?id=18384 [英文版]

【参考资料】
Web网站:实验和做业,授课笔记和代码示例
csapp.cs.cmu.edu

Manuscript 
http://csapp.cs.cmu.edu/public/manuscript.html

本书2003年版的勘误
http://csapp.cs.cmu.edu/public/errata.html

中文版勘误:
http://vega.ict.ac.cn/personal/lyc/CSAPP_errata.htm
leiyc@ict.ac.cn

本书相关资料
http://csapp.cs.cmu.edu/
有一些内容须要是通过认证的教师才能够
http://csapp.cs.cmu.edu/public/loginrequest.html

http://mprc.pku.edu.cn/~quning/ComputerSystems.pdf

第4章的SEQ,SEQ+,PIPE模拟器下载
在学生站点:http://csapp.cs.cmu.edu/public/students.html
具体的压缩包的连接为:
源代码:http://csapp.cs.cmu.edu/public/sim.tar
二进制文件:http://csapp.cs.cmu.edu/public/y86binaries/y86-linux.tar
使用说明:http://csapp.cs.cmu.edu/public/simguide.pdf

本书10个实验的资料和源代码下载(2003年后课程不提供实验源代码下载了)
15-213: Introduction to Computer Systems
http://www-2.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15213-f02/
15-349: Introduction to Processor Design
http://www-2.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15349-s02/


【评论】

“我坚信从程序员的角度来看计算机系统对教会学生们计算机的内部结构很是有帮助。” ——Kostas Daniilidis,宾夕法尼亚大学 
“这本书讲述事物的方法不同凡响,可是和我想要的课程进行方式相似。” ——John Greiner,Rice大学 
“这是一项出色的工做,是这一领域教学方法的一次革命。” ——Michael Scott,罗切斯特大学

程序员的视角
本书适合那些想要写出更快、更可靠程序的程序员阅读。经过掌握程序是如何映射到系统上,以及程序是如何执行的,读者可以更好地理解程序的行为为何是这

样的,以及效率低下是如何形成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操做系统及网络互联环境。而经过程序员的视角,读者能够深深地

体会到学习计算机系统的内部工做原理会对他们从此做为计算机科学研究者和工程师的工做有进一步的帮助。它还有助于为进一步学习计算机体系结构、操做系统

、编译器和网络互联打下基础。
本书的主要论题包括:数据表示、C程序的机器级表示、处理器结构、程序优化、存储器层次结构、连接、异常控制流、虚拟存储器和存储器管理、系统级I/O、

网络编程和并发编程。书中所覆盖的内容主要讲述这些方面是如何影响应用和系统程序员的。例如,在讲述数据表示时,本书提出了用来表示数字的表示方法是有

限的,它可以近似地表示整数和实数,可是这种表示方法是有限制的,程序员必须了解。在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响

程序的性能的。在讨论网络互联时,本书描述了并发服务器如何有效地处理来自多个客户端的请求。
?本书被赞誉为价值超过等重量共金的无价资源宝库
?第一本将软件和硬件理论结合讲述的教程
?覆盖计算机导论、体系结构和处理器设计等多门课程

这本书的最大的特点在于它将体系结构,编译,OS结合起来说,令人产生对系统的俯瞰的感受,对于那些想深刻理解计算机内部工做机理的人,这几乎是最佳的一

本书。

深刻理解计算机》是一个桥梁,它帮咱们找到一种途径使上层应用和底层的硬件实现保持一种联系。当你真的很理解《深刻理解计算机系统》中的内容的时候,自

然也就想看更深的内容(也就是说,你该买pattern的书了)。

Randal E. Bryant,是计算机届的一位老前辈,他主写的《深刻理解计算机系统》是他深厚的计算机技术沉淀后的精华,概念浅显易懂。但愿在40岁之前还能碰

到这样一本能让我心动的书。呵呵,40岁之后,本身就要开始学习沉淀了。我我的以为,书的做用能够帮你迅速熟悉一个领域,帮你去了解这个领域的概念。若是

你能经过一本书,去区分混淆的概念,就很是好。要想深刻下去,Paper和Maillist是必不可少的。我是很喜欢读Maillist,那些做者都是一线工做的战士,他

们讨论的问题是书和Paper上没有涉及到的,有时候是会颠覆咱们的固有见解。98年、99年和00年,我就是经过读maillist熟悉Linux kernel的。呵呵,如今

市面上有大量的关于Linux kernel的书,但书上大都告诉你的是“它就是这样设计的”,而不会去讨论“它为何这样设计”。你发现这个现象了吗?因此,即便我

们看完一本Linux Kernel的书,也只是知道一些东西,而不多得到它存在的理由,和别的一些实现选择。
我想说的是在mailinglist中能够找到许多书本中没有的threads,这些threads可能不是很严谨,但确实能告诉咱们他们为何这样设计,他们作了那些考虑,

我以为这很重要。

尤为是第4章和5章的知识,不可能让初学者弄懂  这本书难度系数很高,并非向书上说的只要会点C就能够了的
”深刻理解“  应该仍是恰如其分的。  好比 降到程序连接那块, 不少书里面都讲的不深或干脆不讲。 强烈推荐。

------------------------
(我的观点,仅供参考)
1、整体:
  1.1 本书特点在于不少内容从硬件角度说明,但不适合初学者;
  1.2 硬件方面的内容并不详细,最好结合微机原理一块儿理解;
  1.3 偏软的内容深度显然不足,抄的内容更多,如第3章、第8章、第11-13章,可能这方面比较固定,做者心得也很少,有用内容不多,建议不用看,非看的话

就去看专门介绍的书;
  1.4 整书想把硬件原理、编译原理、操做系统、流行软件编程都揉到一块儿,大而不太精,并且基础性章节讲得不清,如第3章的Linux汇编语言和第7章的连接;
  1.5 感受受益的章节,第5章 优化程序性能、第6章 存储器层次结构、第9章 测量程序执行时间;

2、分章
 第3章 程序的机器级表示
   基础章节,讲Linux的汇编语言,讲得不清楚,不如看专门的介绍书籍;
 
 第4章 处理器体系结构
  (没看)

 第5章 优化程序性能
   从硬件角度上阐述优化的原理,有例子,很不错,建议细看;

 第6章 存储器层次结构
   存储原理和利用其特性的优化方法, 优化方法说到底就是局部性问题,用了很多内容简述,建议看;

 第7章 连接
   固然没有编译原理书介绍得清楚,不如结合起来看;

 第8章 异常控制流
   介绍UNIX的异常机制,全软,算是转述的内容,也即抄的内容;

 第9章 测量程序执行时间
   介绍本书推荐的方法,基于获得的测量数据进行的k次统计拟合获得的时间测量方程式,最后找到稳定的方程式参数值,而后再使用这些值来测量执行时间(个

人的总结和理解)

 第10章 虚拟存储器
   操做系统原理,不如看Windows操做系统原理的书,算是搬过来的内容;

 第11~~13章 系统级I/O,网络编程,并发编程
   纯软件的内容,建议不用看,基本全抄,要看去看专门的书。


3、结束
  所以,本书没有那么神,尽管角度新颖但不能保证它的全部内容都是做者的所有心得。若是你有微机原理、操做系统、编译原理、软件编程等基础,这本书真正

值得看的不太小几章。而若是你没有上述的理论基础,能够看这本书,但最好不要看,由于不系统,仍是去看系统介绍的书好。
------------------------


我仍然认为它对于想学好计算机(无论是偏软仍是偏硬,固然更偏软一些)的人来讲是一个很是大的帮助。它对信息在计算机中的表示,C语言的实现等都有深入而

明了的讲述。能够说,它会给你学习计算机方面知识有一种茅塞顿开的感受。国内同比浙江大学出版社出的一本计算机组成和设计(潘雪增)也是不错的(缺陷是

里面的错误较多,我认为多是出版印刷问题),不过它是用的MIPS指令,而这本书用的是INTEL芯片兼容的IA32。

硬件讲的不太透,比较适合软件程序员

这本书正好补充了某些盲区,每一个致力于计算机科学的人都应该好好的阅读一下本书。

由于我近来正在研究IA32的汇编优化,随便浏览了一下,发现这本书的视点至关的特别,他不是通常的理论书籍那样泛泛而谈,书站在实用的角度介绍了不少有用的东

西,讲得比较的细节和深刻,涉及的一些内容对于提高对系统认知的深刻把握绝对好,算是少见的对于高级读者也适用的实践型理论读物.名字"深刻理解"的英文

Programmer's Perspective才真的体现出他的价值.

简直就是把普通人引向稀有物种的一本书啊!
本书英文版久负盛名,被众多专业人士称为“最伟大的计算机教材”之一,著名的美国卡内基梅隆大学计算机科学系一直将本书做为教材使用,程序员眼中的透彻讲

述计算机系统的扛鼎之做。做者Randal E. Bryant是卡耐基梅隆大学的计算机科学系主任,ACM和IEEE双院士(Fellow),其研究成果屡次得到ACM和IEEE颁发

的大奖。本书共分十三章,分别介绍了信息的表示和处理、程序的机器级表示、处理器体系结构、存储器层次结构、静态和动态连接、虚拟存储器、系统级I/O、

网络编程和并发编程等精彩内容。其目的是解释计算机系统的全部本质概念,并向读者展现这些概念是如何实际地影响应用程序的正确性、性能和实用性。与其余

主要针对系统构造人员的系统类书籍不一样,这本书是写给程序员的,是从程序员的角度来描述的。本书为软件和硬件之间搭起了一个桥梁,它给出了一种帮助读者

分别从硬件和软件的角度去理解一个程序及其行为的途径,这也填补了国内计算机系统教学中的一个空白。本书的最大优势是帮助读者理解概念,让读者很清楚地

在脑海中构造一个层次型的计算机系统,从最低层数据在内存中的表示(如咱们一直陌生的浮点数表示),到流水线指令的构成,到虚拟存储器,到编译系统,到

动态加载库,到最后的用户应用。---http://blog.csdn.net/chinaboson/

对于已经学过微机原理(或其余相似课程)和一门高级语言的朋友,本书是完全理解硬件与高级语言之间关系的一个桥梁。该书深刻浅出地涉及到了从硬件到软件

的全部层面,让你从一个俯瞰的角度全面观察计算机的具体“思惟”和操做过程。
该书不只仅诠释了硬件与高级语言的通常直观关系,它几乎涉及到计算机领域的全部方面。包括计算机体系结构、数据的表示、操做系统的运做过程、编译的原理

和基本过程等方面。它在数据在内存中的存储方式和表示方式对于程序的低层调试(debugging)具备突出的贡献。
在看过这本书后,你就比如把计算机纵横剖开来在看他的运行过程,而其中的二进制就好像是看得见的流动的实体通常,无比生动,让人印象深入!若你想凭着自

己的聪明才智慢慢摸索,那么你可能须要多年时间的知识积累才能得到书中所描述的知识!
总的来讲,这本计算机基础著做是一本上乘之做!

若是没学过微机原理,这本书也包括了计算机基本硬件的描述,其中包括CPU的结构、中断机制等。应该也是能够看懂的

绝对是一本好书!从软件编程的角度来分析计算机的硬件结构和特色,对于编写程序的是不可多得的一本好书。避免了枯燥的理论分析和电路细节,也提出了许多

有趣的算法,如不用第三变量来对两个变量交换。又如 int 变量的unsigned int 变量之间的比较(运算),自动转换带来的 负数 大于 正数问题,很是有趣

(LeiYingChun)
建议多作动手作试验,不要拘泥于书本上的知识点。计算机是一门工程学科,Do it是它的精髓。对基本概念的理解,再多、再详细的文字描述都没有一次亲手的

试验来得深入。站在计算机系统的角度来看,这本书是一个Portal,也是一个桥梁。
计算机一门工程,动手和实验是很是重要的。仅仅去看书,并不能使你充分理解概念。以《编译原理》这门课为例,通常而言,教材会偏重理论一些,没有太多的

实验内容。因此,建议初学者还应该准备一本动手实验的书,如《编译实现》。做为学生,不可能有太多的时间去编写程序,因此,我以为能快速地读程序和修改

程序会更实际一些。如今,开源世界的源码,有很是多,必定会有合适的源码对应各位的需求。
在某个时候,读懂别人的程序要比本身埋头写程序,可能能学习到更多的(在必定的时间以内)。不过,什么样的状况才叫读懂呢?我觉得你能构造出数据结构在

内存的layout(数据结构在内存中的分布)和各个数据变量被改变的条件和改变后的值,才叫初步读懂了。读完之后,能写一篇心得,客观地说明程序的优劣点,

以及用本身的理解去猜想代码的做者为何要那样设计,出于何种的目的?我以为就是彻底读懂了。
能够把读程序看做读书,各类程序读多了,天然本身的能力也就上去了。不过,读到必定的程度,就要开始用心设计和写程序了。不过,那个时候,应该是很轻松

的。
本质上,计算机是一门工程,充满了折中(trade-off),是一门选择折中的艺术。任何一个选择都是在一个严格的范围以内的相对最优的,咱们千万不要忽视前

提和目标,这两个因素严格地限制了选择的余地。
我本人是《JCST》的审稿人,主要是审一些计算机系统领域的研究论文。《JCST》是我国计算机领域的顶级刊物,惟一被SCI检索。打算投到《JCST》的论文,我

想都是一些不错的论文。可是,迄今为止,我手上经过的文章,勉强只有一篇。我感受,那些被我被拒绝的论文做者都没好好作过实现,一些看起来很漂亮的理论

,它是没法在特定的环境下实现的,并且,论文的相关试验也作地很不完全,没法从各个方面去支持做者的论点(我所知道的信息是,一篇好的论文,试验工做都

是以月为单位的。美国人就是这样干的,一篇IEEE的文章要改100多个version,持续三年多)。就我过去的经验而言,想作系统方面的研究,得首先知道系统为

什么是那样的,咱们作的任何改进都必须很是礼貌、谦逊地融入到大的系统。我常常对我身边的人说,系统设计要平和,不要激进,太过激进,会影响到其余部分

的正常运行。若是想知道如何礼貌,你就必须了解系统的style,也就是系统为何是那样的。
个人导师,李国杰曾经对我说过,中国人论文中的公式很漂亮,可是缺少必要的前提。常常是做者本身为了公式推导的须要,本身去假定前提条件,而没有严格的

试验或理论依据去作必要的保证。这样的文章是没有用的。
回到本书,我以为我阅读本书的读者,应该多作试验。经过试验来加深一些概念的理解,和肯定它的边界条件。好比,第8章的“异常控制流”里的信号处理器

(signal handler)的设计。这个概念看起来很简单,任何一本讲Unix编程的人都会说到。但是有多少人会真正去想Signal Handler的存在是由于什么呢?写一

个Signal Handler有什么限制呢?为何有不一样的Signal响应机制呢?这些都是颇有趣的话题。
当我第一眼看到目录和样章的时候,我就知道这是一本能够帮助国内的计算机研究者和爱好者认识计算机系统的一个窗口。相比于美国人,国人对计算机系统的研

究是不多的。计算机系统须要很长时间的积累和深厚的底蕴,它不象你研究某个算法或解决某个具体问题(我在这里举的例子可能不合适),几个月就能有一个结

果。计算机系统的研究须要花费大量的时间来写代码,可能须要一群人花费数年的时间来搭一个平台。有了这个平台,才可能在其上作相应的研究,或者说研究目

的的倾向性很强。
其实,每个搞计算机的人都想知道下层的事。要否则,本身就感受很虚,也没法保证本身写的代码的稳定性。因此,了解计算机系统对于程序员是有必要的。也

许,这种潜移默化的影响会改变程序员看待计算机系统的态度,也许他就加入到轰轰烈烈、又枯燥耗时的系统研究中。研究计算机系统的人多了,中国的计算机系

统的研究水平就会上去,也就会有中国本身的操做系统,等等。

国内的书不少都只讲“是这样设计的”而不讲“为何这样设计”,因此容易给人输灌填鸭的感受,学起来也枯燥无味。我想这一方面是由于现代科技起源于西方,很

多历史国内学者或出书的人不熟悉,另外一方面多是由于做者自己也没有思考过“为何这样设计”的问题。
在书中讲一些典故既能加强书自己的可读性和趣味性,还能加深印象,令人对各类理论的出现缘由和背景更加清楚,知道人们之因此提出这种理论是为了解决哪一种

问题。典型的象莎茨的《Operating System Concepts》、北大物理系所用的高数教材等。

若是个人研究方向是计算机体系结构,那我确定会抱本英文的《计算机体系结构:量化研究方法》来慢慢啃。可是,假设我是一名程序员(尽管实际上我不是),

个人工做是编写好的代码;那么我对计算机的理解并不须要深刻到能够设计CPU,那么大能够弄本《计算机组织与设计:软件/硬件接口》或者这本《深刻理解计算

机系统》(甚至《结构化计算机组成》)来读。这两本书足以有助于我写出更好的程序,并且花不了多少时间。

我的认为这本书适合作一本穿针引线的入门读物。我是把它当成一本链接学过的各自单独的课程的书来读的,因此只要翻译的过得去,我以为就足够了,呵呵。精

读的话就去读操做系统概念,计算机组成和设计,K&R,apue等等的原版。

本书内容很是的深刻和详细,信息量很大,表达清楚明了。做者有很好的写做技巧,不少概念的讲述方法都值得称道。书中的插图感受也是通过精心设计的,对帮

助理解很是有好处。这本书每章的内容都很是好,若是要进一步划分的话,我我的认为,写得最精彩的是第四章,做者带着咱们一步一步地设计了一个简单的流水

线化的处理器,我实在想不出有比这更好的讲授方法了。第六章和第十章的内容也很是精彩。卡内基梅隆大学是计算机名校,从他们的这本教材就可见一斑了。最

后一点体会是,美国的大学用的是这么好的教材,并且这只是人家二年级本科生14周课程的教材呀。咱们的高校呢?......

我读大学那会儿,我所看过的将计算机系统的教科书和参考书,都是从System implement的角度来说,或者说,上来,就试图让你知道一个计算机系统是如何实

现的,实话,学得挺累的,而事实上,咱们当中的,绝大多数,可能更须要从一个程序员的角度来看计算机系统,或者说,这本书的主线基本上是定在“知其因此然

”上的。封面上的那副图就是书中的一个例子,比较性能,从而讲cache体系:
void copyij(int src[2048][2048], int dst[2048][2048])
{
  int i,j;
  for (i = 0; i 〈 2048; i++)
    for (j = 0; j 〈 2048; j++)
      dst[i][j] = src[i][j];
}

void copyji(int src[2048][2048], int dst[2048][2048])
{
  int i,j;
  for (j = 0; j 〈 2048; j++)
    for (i = 0; i 〈 2048; i++)
      dst[i][j] = src[i][j];
}
计算机系统是很复杂的,牵涉到许多领域,就是一个小的生态环境,咱们在外面看到的现象只是冰山一角。过去,咱们学习到的知识是孤立的,造成一个一个的孤

岛,并且咱们仍是雾里看花,并不能彻底理解所学的知识点。
这本书的做用在于帮咱们串联了各个领域的知识,把无序的变成有序的。

本书的做者都是各个领域的牛人,看他们发表的文章就看的出来。
Randy Bryant
http://www-2.cs.cmu.edu/~bryant/ 在eda设计,符号模拟以及形式验证都做出突出贡献。 就这本书而言,启的是承上启下的做用,应该是在学习编译,操做系统 (固然这几门课程不是想国内同样糊弄你们的课程!) 体系结构等课程以前学习。 其实若是对intel的手册比较熟的话,能够发现不少东东都很眼熟。 可是没有几我的能完完整整的熟悉intel-architecture optimize manual. 另外例如编译,连接都来自linux,gcc,elf等。 处理器体系来自patterson的量化,可是浅多了。 综合来讲这是这个领域不可多得的好书之一。 语言组织也是让人很容易读懂。