CS相关书籍的书评[转载]
Revisit Computer Science via reading books
【动机】就计算机这个专业来说吧,因为我是非科班出身的学生,要重新开始补相应的
知识,
目前定下来要学习的基础理论知识有:离散数学,数据结构与算法,组成原理,汇编,
操作系统,网络等等,有的时候觉得这里每一个知识点要学的深入的话都是无底洞,不过
我又是那种喜欢追根究底的人,比如学习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
章的精简版本。
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秋季课程:算法导论)的
“开放式课程网页”:
上面可以下载到完整的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 Concepts6th》,《The design of the UNIX
Operating System》,
《Inside Windows2000》,《The Unix Internals》和《Operating Systems:A
ModernPerspective》等和一些论文。
如果我们在上个世纪九十年代初就能看到这样的好书,现在世界上就会多出个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环境,初学推荐
The Scheme Programming Language, 2nd Edition
?; 1996 Prentice Hall
备查
http://www.schemers.org/Documents/Standards/R5RS/
更多关于scheme
http://www.swiss.ai.mit.edu/projects/scheme/index.html
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
【评论】
紫皮书(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 toaddress 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
本书相关资料
有一些内容需要是经过认证的教师才可以
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的量化,但是浅多了。
综合来说这是这个领域不可多得的好书之一。
语言组织也是让人很容易读懂。
======================================
======
—
中国大学生占总人口的比例仅为8%,大大低于世界中、低收入国家24%的平均水平,更不用说美国的35%了,为什么竟会出现这么严重的就业难呢?
排斥大学生的机制是这样发生作用的:为了尽快提高精英阶层的消费水平,中国的消费品产业往往采取了直接从国外进口生产线的方式,结果使中国自身的装备工业 (即生产线的设计制造技术和成套设备技术)由于失去了市场而在整体上陷入困境,大量国企破产倒闭,大量的白领工作岗位也因此丧失。而跨国公司的直接投资和 国外商品的大量涌入,更是连大批民营的民族产业也挤垮了。虽然外资也会带来一些就业机会,但统计显示,外资每在中国每提供一个就业机会,就同时“消灭” 三到四个工作机会。因此可以毫不夸张地说,“全球化”正是造成当前中国大学生就业难的决定性原因。