组成原理,汇编,操作系统,网络等等,有的时候觉得这里每一个知识点要学的深入的话都是无底洞,不过我又是那种喜欢追根究底的人,比如学习a知识的时候要
用到b知识,我会停下来学学b知识,然后一直这样下去.....有时候也会觉得很累,觉得没有一个尽头。最近也看到一个观点:读书应该“不求甚解”,我想了很久
,还是不明白其中的大意。上面我提到的那些知识点要怎样才能达到“知道”的度?一般的,“知道”这个度又是如何掌握的?
--------------------------------------------
数学
--------------------------------------------
离散数学
============================================
具体数学:计算机科学基础(英文版.第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的《程序设计语言:设计与实现》。
这些书的作者从各个角度介绍程序设计语言,相信大家看了后定会大有收获。这些书中的有些已有二、三十年的历史,出了五、六版,及时反映程序设计语言。这
些书没有哪本标榜“图书馆必藏经典,程序员必修秘笈,全球上百所大学列为标准教材和首选参考书”。特别是提到“程序员必修秘笈”,好像让人得到武功秘籍一样
,使人反感。这世界没有万灵药,没有哪本书标榜自己怎样怎样的,只不过是一本书而已。不同的作者有不同的观点,不同的书有不同的写法,各取所需。
遗憾的是,大家查不到高教去年出的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.2 硬件方面的内容并不详细,最好结合微机原理一起理解;
1.3 偏软的内容深度显然不足,抄的内容更多,如第3章、第8章、第11-13章,可能这方面比较固定,作者心得也不多,有用内容很少,建议不用看,非看的话
就去看专门介绍的书;
1.4 整书想把硬件原理、编译原理、操作系统、流行软件编程都揉到一起,大而不太精,而且基础性章节讲得不清,如第3章的Linux汇编语言和第7章的链接;
1.5 感觉受益的章节,第5章 优化程序性能、第6章 存储器层次结构、第9章 测量程序执行时间;
二、分章
第3章 程序的机器级表示
基础章节,讲Linux的汇编语言,讲得不清楚,不如看专门的介绍书籍;
第4章 处理器体系结构
(没看)
第5章 优化程序性能
从硬件角度上阐述优化的原理,有例子,很不错,建议细看;
第6章 存储器层次结构
存储原理和利用其特性的优化方法, 优化方法说到底就是局部性问题,用了不少内容简述,建议看;
第7章 链接
当然没有编译原理书介绍得清楚,不如结合起来看;
第8章 异常控制流
介绍UNIX的异常机制,全软,算是转述的内容,也即抄的内容;
第9章 测量程序执行时间
介绍本书推荐的方法,基于得到的测量数据进行的k次统计拟合得到的时间测量方程式,最后找到稳定的方程式参数值,然后再使用这些值来测量执行时间(个
人的总结和理解)
第10章 虚拟存储器
操作系统原理,不如看Windows操作系统原理的书,算是搬过来的内容;
第11~~13章 系统级I/O,网络编程,并发编程
纯软件的内容,建议不用看,基本全抄,要看去看专门的书。
三、结束
因此,本书没有那么神,尽管角度新颖但不能保证它的所有内容都是作者的全部心得。如果你有微机原理、操作系统、编译原理、软件编程等基础,这本书真正
值得看的不过小几章。而如果你没有上述的理论基础,可以看这本书,但最好不要看,因为不系统,还是去看系统介绍的书好。
------------------------
我仍然认为它对于想学好计算机(不管是偏软还是偏硬,当然更偏软一些)的人来说是一个非常大的帮助。它对信息在计算机中的表示,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的量化,但是浅多了。
综合来说这是这个领域不可多得的好书之一。
语言组织也是让人很容易读懂。