【动机】就计算机这个专业来说吧,因为我是非科班出身的学生,要重新开始补相应的知识,目前定下来要学习的基础理论知识有:离散数学,数据结构与算法,
组成原理,汇编,操作系统,网络等等,有的时候觉得这里每一个知识点要学的深入的话都是无底洞,不过我又是那种喜欢追根究底的人,比如学习a知识的时候要 用到b知识,我会停下来学学b知识,然后一直这样下去.....有时候也会觉得很累,觉得没有一个尽头。最近也看到一个观点:读书应该“不求甚解”,我想了很久 ,还是不明白其中的大意。上面我提到的那些知识点要怎样才能达到“知道”的度?一般的,“知道”这个度又是如何掌握的?
数学 -------------------------------------------- ============================================ 具体数学:计算机科学基础(英文版.第2版) 【参考资料】 【评论】 燥 也有中文版,庄心谷老师翻译的(中文版:《具体数学》,出版社:西安电子科技大学,这本书的89年版在中国有翻译出版,译者好象是庄心谷 真是大大的不同。 书绝不会令你失望。 亚马逊如是说: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. -------------------------------------------- 算法 -------------------------------------------- 数据结构与算法(英文影印版) 【参考资料】 【评论】 Bible!!20年来这本书依然是讲解基本数据结构与算法最清晰、优美、权威的教科书! 这本书是作者另外的那本书《Design and Analysis of Computer Algorithms》的前6章的精简版本。 0201000237. (http://www./computers/common/info.asp?id=14362) 我觉得三位大师的书最大的特点是好懂好学,深入浅出,解释的例子举得很好,能够让你弄清原理。 这本书非常非常适合作为计算机专业本科生数据结构和算法的教材,至今为止我还没找到比这本书更好的介绍基本数据结构和算法的书。正如aho帮经典的编译原 理书(dragon book)一样,这本书同样经典、权威、优美、清晰!! ============================================
价值,适合作为计算机及相关专业算法和高级算法课程的教材。 http://www./computers/common/info.asp?id=26775 ============================================ 算法导论(第二版 影印版) http://www./computers/common/info.asp?id=6434 【参考资料】 本书答案(solutions to the exercises in the book: "Introduction to Algorithms" by Cormen, Leiserson and Rivest.) 课程的录像 对应该书的rm录像的下载地址: 对应于录像的麻省理工学院这门课(6.046J / 18.410J 2001秋季课程:算法导论)的“开放式课程网页”: 资料”等等资料 勘误
MIT OpenCourseWare 【评论】 百科全书的组织方式,麻省理工的团队作品,经典中之经典,作者刚刚获得去年的图灵奖,国外绝大多数大学算法课的必备教材。 这本书的大部分内容是美国大学的本科教学内容。 许多美国大学的研究生院都把这本书作为教材,详细讲解。在《程序员》的算法书排名上位列第二,仅次于大名顶顶的 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++》的感想: 内容特点是抽象和形式化,既有严格的理论证明,又具有很强的构造性 算法是程序设计的灵魂,而此书堪称算法分析著作中的“独孤九剑”,故我强烈推荐。 我选的第一本算法教材,本书的确很全面论述了算法的内容,而且对各个层次读者都有考虑,建议买一本读一读,很值。 门槛低,适用人群广!想作程序员,算法必须学,这是少有的不打击积极性的书。 绝对的经典!深入浅出!大量的图表,对算法不是直接给出,而是一步步的推导,让人有知其然而知其所以然的感觉!适合各种水平的人看,如果你愿意,甚至可 以把他作为数学书看!!着次地,怎一个爽字了得。 虽然说是抽象了点,但是只有这样才能够从最基本的原理出发,获取算法的精髓。这本书既特别适合初学者,对想要更深一层研究算法的也很有裨益。最适合计算 机算法初学者的名著! 它很厚实,不仅在于它的尺寸,更在于它所承载的知识。 几乎所有的算法教科书都把这本《算法导论》列为参考首选。对每个算法都给出了严格的数学证明,让人看了有种:知其然而知其所以然的感觉!! 我们倾向于把CLR和TAOCP进行对比。 ,公开秘钥密码算法RSA就是此公的杰作。 用它,另外许多专业人员也经常引用它。 解读、大众化、实用化,同时增加一些改进的、新的算法。CLRS基本也属于此类。只是他的写法较好,理论深度适中。另外,两书的习题都非常丰富。我认为,如 果不做习题,书的价值将减少一半。 但TAOCP给人的感觉比较学院派,而ITA则相对来说较为实用一点。 ============================================ 编程珠玑(第二版) 【原书名】 Programming Pearls Second Edition http://www./computers/common/info.asp?id=16802 ============================================ STL 源码剖析 -------------------------------------------- 网络 -------------------------------------------- 【评论】 ============================================ 计算机网络(第4版)(中文版) http://www./computers/common/info.asp?id=19442 http://www./computers/common/info.asp?id=15894 [英文影印版] 【参考资料】 【评论】 国防科技大学倪鹏云教授关于该书的评论,可参见http://www./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这方面的知识却介绍的不多,结果我很多想查找也没找到. 网络通信环境下的通信的怎么开始,过程是怎么样,结果是怎么样,在这样的一个过程中,各个原理/协议/标准的执行以及他们的细节问题, 好像是在看网络概论之类的入门书籍了,真是矛盾啊. 人说“一本好书带来一个世界”,可这本书是“一个章节带来一个世界”!作者的知识广博让人敬佩,第二章的傅立叶分析光几句话就把以前学了一个学期信号课也不 甚了了的地方讲清楚了 关于谢老的电子工业出版社的同样名称的书与这本书的对比: 矶。关键在于谢老将一些老的网络技术作了删减,增加了不少当前热门的网络技术,可以说是一本跟得上时代的网络教科书。 看了这本书的人,也许要将这样的混淆概念带到以后的工作中去。这些方面的例子可以具很多。如:路由器的基本原理,谢老的这本就讲得比较好。TCP协议流量 控制部分也是谢老的这本比较好。谢老的这本还将ALOHA的原理作为附录,从正文中删除了,这也是适应网络发展的要求。最短路径算法如果看Andrew的,你很难 懂,但看了谢老的附录里的算法描述,一看就懂,还能明白Andrew没讲的内容。对于应用层协议,谢老的这本抓住重点,写得简明扼要,因为读者基本接触过或学 到过应用层的一些协议原理。该细的细,该粗的粗。而andrew这本却是眉毛胡子一把抓,什么都罗列来,什么也没讲明白。特别是关于SNMP部分,没有谢老的这 本条理清楚。 我对比了两者,觉得还是谢老师的书更加深入浅出,道理清楚,概念解释的有针对性;而经典呢,似乎一下子难以让人看进去,而且更像是一篇篇论文,并不解释 太多的基础概念和道理,讲解的是技术。所以,我也建议初学者或者向我这样的带着工作中的疑惑去看书的人,还是买着一本;而有一定水平的当然看经典较好, 也可作为收藏。 这两本书各有侧重点,写书的目的不太一样。谢老的这本书侧重于网络应用,讲述了现有网络的基本原理,侧重于现有网络的基本概念,写得非常流畅,非常适合 有志于网络应用的读者,这也是国内写得最好的一本网络应用教程。 好的,但是一本百科全书(有点这个意思)。我的朋友在加拿大读书,他们学校用的教材我也看了,比这两本都要好,理论也讲得比较深。 讲解的非常详细!对一项技术的优缺点,应用方向,不同技术,不同协议之间的比较都作了详细深刻讲解!与谢希仁的那本《计算机网络》相比,这本书写的更深 ,知识面更广!不过谢老这本知识结构紧凑,每个概念都给出严格定义,较好的把握了重点!所以我还是建议两本一起看 和大家讨论以下学网络必看的一些书籍 学网络,要看的书出这本书以外,还有谢希仁的同名的书,当然《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 三卷。
操作系统 -------------------------------------------- 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 http://www./computers/common/info.asp?id=17992 【参考资料】 mitpress公开的在线浏览版本 the homework answer 作者授课录像下载 UC Berkeley的教学录像(Spring 2004): 最省事的scheme环境,初学推荐 The Scheme Programming Language, 2nd Edition 备查 更多关于scheme http://www.ai./research/publications/publications.shtml 开放式课程计划OOPS TheBook”是因为这本书是在scheme领域内公认的圣经,所以有此昵称 绝对是好书, 非常具有启发性.
Its the Best! Its the Worst! Why the split?, May 8, 2000 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. 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. 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 learned everything the book has to teach. 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解释/编译器。Scheme语言虽然另类及实际用途有 限,但却有较高的“可玩性”,主要表现在它对几类编程语言范例(paradigm) -- 过程型/面向对象型/函数型/逻辑型 -- 都能做出良好表达。 说起Comp.Sci.的读物,其实除了TAOCP、CLR外还有一本经典叫作 SICP (Structure and Interpretation of Computer Programs,俗称“紫皮书”或“巫 师书”)。MIT和UCBerkeley两大学府都指定这本书作为计算机科目的入门教材。它涉及的不是具体的数据结构和算法,而是对“计算机程序”这个概念本身的解构 /解读。“程序即思维表达”是此书传递的一个意念。由于涉及的是程序设计的抽象层面,批评者会认为这本书不够实用(这在amazon.com上读者书评中的分歧可 见一斑),但事实上很多顶尖的程序设计师都认为正是这本书帮他们“开了窍”,是一本具有高度启发性的经典。 我很喜欢SICP,但是要说推荐给出版社我却很犹豫。原因是虽然这本书追问编程的本质,对有科学探索气质的人很有吸引力,但是对于大部分忙碌的程序员来说, 恐怕觉得没有时间慢慢体会它的好处。这本书用LISP的变体SCHEME语言讲事,国内对于主流语言趋之若骛的大多数人恐怕不买帐。 ============================================ 程序设计语言--实践之路(图书馆必藏经典,程序员必修秘笈,全球上百所大学列为标准教材和首选参考书) http://www./computers/common/info.asp?id=22979 【参考资料】 勘误表: 【评论】 创新性地将程序设计语言的设计与实现和编译器设计有机结合的实用教本。国外大受好评的程序设计语言教本,被全球上百所大学、学院列为标准教材和首席参考 书目 !这是一本很有特色的计算机程序设计方面的教材,它的核心是讨论程序设计语言如何工作的问题,它是程序设计语言和编译的传统教科书的混合,再加上一 些有关汇编层体系结构的材料,或以满足那些没有学过计算机组织的学生和需要。它不是综述性语言的教科书,没有列举不同语言的细节,而集中通过各种语言的 例子阐释其基础概念。本书也没有解释如何构造一个编译器,只是解释编译器如何工作,它对源程序做了什么,以及为什么要那样做。 本书在美国使用已有十余年 ,用于讲授一门名为“软件系统”的课程,适合高年级的本科生和一年级的研究生使用,书的内容对专业程序员也很有价值。 ------------------------ 为这次再教育中的最好读本之一。 在阅读过程中明白三个看似浅显、实则微妙的“大道理”: 某些开源框架的做法,使用控制反转和依赖注入技术消除代码中某些让人生厌的依赖关系,你一定会认真研习实现类似技术的语法特征,但你未必会主动思考以下 几个问题:在编译层面,使用了这些语法特征的代码是否会影响到最终生成的目标代码质量?在运行层面,该如何组织这些语法特征,才能让使用了相关技术的可 执行程序在支持废料收集的并发环境下有不俗的表现?在应用层面,这些旨在消除依赖关系的技术会不会破坏新、旧模块间的平衡关系,以至于我们必须花上大量 时间改写原有的代码或接口才能保证系统的平滑升级?全面思考这些与环境相关的问题并不一定会改变你的抉择,但它却可以帮助你找到效率、可靠性和可用性之 间的最佳平衡点。在此方面,《程序设计语言??实践之路》一书所使用的,将程序设计语言与编译原理、面向对象等知识综合起来、融会贯通的做法不但可以节省 我们分类学习的大量时间,还可以训练我们从整体出发、多角度思维的方式与方法,其价值不言而喻。 某语言更强大”或“某某语言已死,某某语言必胜”的帖子。发表这些帖子的帖主也许并不懂得,程序设计语言的世界本来就是一个多样化的、五彩缤纷的世界,每 一种成功进入应用、教学或科研领域的程序设计语言都有它值得学习和借鉴的地方。如果仅仅根据个人的喜好或是响应时尚的号召,就盲目地吹捧某一种语言并贬 低其他所有语言,这样的帖子和那些频繁出现在Fans网站上的“爱死某某某,恨死某某某”的帖子有什么本质的不同?更为重要的是,如果我们能够在《程序设计语 言??实践之路》的指下,真正懂得了函数式语言、数据流语言、逻辑式语言、冯?诺伊曼语言、面向对象语言等不同的语言类型在语法设计、编译器设计和运行环 境设计方面的异同,我们就会惊讶地发现:Scheme语言的lambda表达式可以在C 语言中优雅、高效地解决诸如面向契约设计之类的复杂问题;Ada95语言中提供 的同步和保护机制可以为那些使用Java编写的多线程应用提供重要的参考;Smalltalk语言与编译和运行环境的紧密结合则可以为我们设计可扩展的JavaScript 宿主提供最好的借鉴……从这个意义上说,学习一种语言的意义绝不在于为自己增添一种求职和谋生的手段??真正善于学习的人总能从每种语言的设计和实现中找到 许多可用于提高编程水平的关键特征。 特征或学会了多少流行类库的用法。正如《程序设计语言??实践之路》所说的那样,“典型的C 程序员都极少使用联合、多重继承、变动个数的参数,或者. 运算 符”,但是,如果你了解了隐藏在这些复杂语法特征背后的东西??如内存空间的分配和寻址方式,复本式继承和共享式继承之间的关系,参数传递和求值顺序,动 态方法约束和成员查找,等等??你就可以在需要使用这些语法特征的时候满怀信心地告诉自己:“嘿,这不过是某某原则或某某技术在C 语言中的表现形式罢了, 我能搞定它!”反之,如果你不晓得与数据结构和算法相关的代码在编译、运行时必然存在的各种均衡与折中问题,即便你把C 语言的标准文档背得滚瓜烂熟,即 便你可以默写出System.Collections命名空间中的所有属性和方法,你也会在体验过自己开发的软件与成熟软件之间的差别后大发感慨:“同样是使用C 语言, 为什么我写的程序总会从头到脚散发着‘业余’的气味儿呢?” 能表达,并对程序员能够怎样思考问题有着深刻而微妙的影响。”既然如此,我们还犹豫什么呢?与其后悔在学校中虚度了光阴,还不如马上捧起《程序设计语言? 实践之路》这本书,接受一次有关程序设计语言的再教育呢! Yupo: 发者而言,只需要知道如何使用程序设计语言编程就足够了。此书评的作者用不作为了抬高此书而这样来贬低他们。这样贬低他们只能说明自己的无知。程序设计 语言只不过是一种工具,就像自然语言是用来交流的工具一样。应用程序的编写者有自己的专业,他需要的只是如何使用编程语言来实现自己的设计,而不需要去 深究语言的实现机制。比如说,用Fortran语言编写科学计算程序的人,并不需要知道语法分析、代码生成等编译过程,一样能很好地实现自己的设计。这些东西 对他们而言是额外的知识,而不是必须的知识。 等闲之辈,也一定不会“仍不清楚自己眼前的垃圾代码该如何“重构””。在工作中或研究中能做到这样的人,一定是一个认真的人,他肯定不会需要进行这么多尝试 便早以解决好了自己的问题。反过来,我也没有看到“28种开源框架和69种eclipse插件”与学习本书之间有什么必然的联系。也不懂“自己眼前的垃圾代码该如何“ 重构””这句话的含义。既然是“垃圾代码”还要“重构”干什么,这里的“重构”又是什么?莫名其妙。 程序设计者,给他们规定毫不相干的任务,然后极力推荐他们看此书,搞错了对象。真有点好笑。 《程序设计语言??实践之路》一书讲述的核心内容是程序设计语言的“语用学”,它的重点既不是语言,也不是编译。这里所谓的“语用”是指编程语言变成可以在计 算机上真正运行的程序所需要的环境、它的实现机制以及原理。与自然语言中的语用学讨论的问题是类似的,只不过涉及的“世界”不同。但是,由于将源程序变成 可执行程序需要由编译器来实现,因此其中的很多问题都与编译器有关。但是,它关心的不是特定的编译算法和编译器的实现方法,而是程序设计语言与底层计算 机体系结构的对应关系。例如,程序设计语言中的作用域和存储绑定、数据类型、过程调用、控制流等概念在计算机中是用什么方法来表示的?如用栈表示局部作 用域,用堆来实现动态申请的空间。为此,编译器要适当组织符号表正确地实现这种从概念到实例之间的映射。又如与函数调用相关的概念是如果实现的?例如, 形式参数如何与实在参数相结合?如何实现从一个函数的内部访问在该函数之外声明的变量?如何实现导入、导出的访问?等等。为了在计算机上正确实现这些概 念,编译器必须遵循特定机器的有关调用约定,如寄存器使用约定、参数传递约定,栈帧的布局约定,等等。这些问题都可以抛开编译器而单纯从实现机制上来讨 论。事实上,它们都是编译器的设计者在实现一个编译器之前,必须在头脑中事先便明白的知识。学习这本书,对于深刻理解程序设计语言的行为实质是很有帮助 的。不论你专注于计算机的哪个方面,网络、应用还是底层的系统软件,这本书都会对你有好处。对于有兴趣研究编译器的人而言,则更是必备的知识。 ,不要搞华而不实的标题,而且还没有点中要点。更为不当的是封面设计,将“程序设计语言”用了那么大的字体,搞不清楚的还以为是专门讲程序设计语言的书。
其实本书很大程度上就是 编译原理 的教材;而我学过编译原理,用的是 龙书 ,并且实现了一个小型的编译器;书不错,但对编译原理学的很好的读者并不适合,重 复了,深度上不如 龙书. 书的价值之所在:创新性地将语言设计与编译原理两门课程的内容融合在一起,将两门在传统上分割开来的学科融会贯通,彻底打破我们在学习中产生的不连贯性 。 国外教改,国内现状:美国ACM和IEEE/CS最新制定的《Computing Curricula 2001》课程体系,反映当代计算机科学与技术学科发展水平和计算机科学技术的 新进展、新技术。编译器的编写曾是计算机学科中的核心课程, 但现在越来越多的人认为并非每一个计算机专业的学生都需要具备设计编译器的能力, 这项工作应 属于编译器的设计专家. 去除了这项课程后, 可以在课程表中填充如下内容, 如软件工程、 数据库工程或其他一些关于计算机科学技术实际应用的课程。但, cc2001中也明确指出,学校有必要开设一门关于程序设计语言原理的课,主要讲授各种常见语言的设计。本书就是这样一本讲编译原理嵌入到程序设计语言的各种 设计方案的佳作。她的每一章讲授一种设计方案,同时结合一种典型语言。另外她加入了计算机底层的东东,确实不错。国内很多院校都取消了编译原理课,取而 代之的是程序设计语言概论。 经常看书买书的,都知道裘老师的翻译质量是没的挑,博文的出版编辑也是十分负责。本书保留了索引,这对于书迷的重要性我就不多说了。 真心希望以本书为契机,多多引进国外的优秀教材,把先进的设计理念带入国内。同时也希望我们能有自己的精品图书品牌,多出版优秀国内原创,提高国内教学 和技术水平。 这本书中的内容可以说覆盖面很广,但是却很浮浅,有些甚至是聊聊数语带过。对于语言机制、哲学、分类、数学基础的介绍也不深刻。充其量也就是一本语言分 类学的概观和浅显介绍。所谓馆藏精品以及接受再教育实在是言过其实了。 一个概念。 这是一本知识浓缩度相当高的教材,它所覆盖的知识面相当的广泛,它可以作为自动机原理、汇编语言、编译原理、数据结构、计算机组成原理等计算机专业课程 程的参考书,也可以为电子信息工程、通信工程和信息技术等专业的学生提供帮助。本书并没有具体的讲解某种程序设计语言,但其讲述的一般原理,是任何一种 程序设计语言都必不可少的。本书从计算机的硬件、设计、原理和实现上都做了详细的阐述,是一本难得的综合教材。由于本书综合的内容比较多,在具体的某些 方面讲得不是很细,但是对于作为教材来讲,确实是一本经典之作。特别适合研一的学生来阅读。 程序涉及语言的书,这几年各出版社出了一批: 些书没有哪本标榜“图书馆必藏经典,程序员必修秘笈,全球上百所大学列为标准教材和首选参考书”。特别是提到“程序员必修秘笈”,好像让人得到武功秘籍一样 ,使人反感。这世界没有万灵药,没有哪本书标榜自己怎样怎样的,只不过是一本书而已。不同的作者有不同的观点,不同的书有不同的写法,各取所需。 这本书创新性地将语言设计与编译器原理融合在一起,让学习者可以更清楚地明白两者之间的关联,是难得的优秀教本。推荐有兴趣深入学习程序设计语言的人士 研究一下。 本书号称创新性的将程序语言设计与编译器的设计有机结合. 空洞的主题都有所阐述;[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./~larus.spim.html)。编译器 本身可以从Rochester得到(http://blog.csdn.net/chief1985/article/details/ftp://ftp.cs./pub/packages/plzero/)。它是用C++写的,仔细划分了各个编译阶段,并有很详尽的文档。 计算机体系结构 -------------------------------------------- 深入理解计算机系统(修订版) 【原书名】 Computer Systems A Programmer's Perspective 【参考资料】 Manuscript 本书2003年版的勘误 中文版勘误: 本书相关资料 http://mprc.pku.edu.cn/~quning/ComputerSystems.pdf 第4章的SEQ,SEQ+,PIPE模拟器下载 本书10个实验的资料和源代码下载(2003年后课程不提供实验源代码下载了)
“我坚信从程序员的角度来看计算机系统对教会学生们计算机的内部结构非常有帮助。” ——Kostas Daniilidis,宾夕法尼亚大学 程序员的视角 样的,以及效率低下是如何造成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统及网络互联环境。而通过程序员的视角,读者可以深深地 体会到学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有进一步的帮助。它还有助于为进一步学习计算机体系结构、操作系统 、编译器和网络互联打下基础。 网络编程和并发编程。书中所覆盖的内容主要讲述这些方面是如何影响应用和系统程序员的。例如,在讲述数据表示时,本书提出了用来表示数字的表示方法是有 限的,它能够近似地表示整数和实数,但是这种表示方法是有限制的,程序员必须了解。在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响 程序的性能的。在讨论网络互联时,本书描述了并发服务器如何有效地处理来自多个客户端的请求。 这本书的最大的特色在于它将体系结构,编译,OS结合起来讲,使人产生对系统的俯瞰的感觉,对于那些想深入理解计算机内部工作机理的人,这几乎是最佳的一 本书。 深入理解计算机》是一个桥梁,它帮我们找到一种途径使上层应用和底层的硬件实现保持一种联系。当你真的很理解《深入理解计算机系统》中的内容的时候,自 然也就想看更深的内容(也就是说,你该买pattern的书了)。 Randal E. Bryant,是计算机届的一位老前辈,他主写的《深入理解计算机系统》是他深厚的计算机技术沉淀后的精华,概念浅显易懂。希望在40岁以前还能碰 到这样一本能让我心动的书。呵呵,40岁以后,自己就要开始学习沉淀了。我个人觉得,书的作用可以帮你迅速熟悉一个领域,帮你去了解这个领域的概念。如果 你能通过一本书,去区分混淆的概念,就非常好。要想深入下去,Paper和Maillist是必不可少的。我是很喜欢读Maillist,那些作者都是一线工作的战士,他 们讨论的问题是书和Paper上没有涉及到的,有时候是会颠覆我们的固有看法。98年、99年和00年,我就是通过读maillist熟悉Linux kernel的。呵呵,现在 市面上有大量的关于Linux kernel的书,但书上大都告诉你的是“它就是这样设计的”,而不会去讨论“它为什么这样设计”。你发现这个现象了吗?所以,即使我 们看完一本Linux Kernel的书,也只是知道一些东西,而很少获得它存在的理由,和别的一些实现选择。 我觉得这很重要。 尤其是第4章和5章的知识,不可能让初学者弄懂 这本书难度系数很高,并不是向书上说的只要会点C就可以了的 ------------------------ 就去看专门介绍的书; 二、分章 第5章 优化程序性能 第6章 存储器层次结构 第7章 链接 第8章 异常控制流 第9章 测量程序执行时间 人的总结和理解) 第10章 虚拟存储器 第11~~13章 系统级I/O,网络编程,并发编程
值得看的不过小几章。而如果你没有上述的理论基础,可以看这本书,但最好不要看,因为不系统,还是去看系统介绍的书好。
明了的讲述。可以说,它会给你学习计算机方面知识有一种茅塞顿开的感觉。国内同比浙江大学出版社出的一本计算机组成和设计(潘雪增)也是不错的(缺陷是 里面的错误较多,我认为可能是出版印刷问题),不过它是用的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) 试验来得深刻。站在计算机系统的角度来看,这本书是一个Portal,也是一个桥梁。 实验内容。所以,建议初学者还应该准备一本动手实验的书,如《编译实现》。作为学生,不可能有太多的时间去编写程序,所以,我觉得能快速地读程序和修改 程序会更实际一些。现在,开源世界的源码,有非常多,一定会有合适的源码对应各位的需求。 内存的layout(数据结构在内存中的分布)和各个数据变量被改变的条件和改变后的值,才叫初步读懂了。读完以后,能写一篇心得,客观地说明程序的优劣点, 以及用自己的理解去猜测代码的作者为什么要那样设计,出于何种的目的?我觉得就是完全读懂了。 的。 提和目标,这两个因素严格地限制了选择的余地。 想都是一些不错的论文。但是,迄今为止,我手上通过的文章,勉强只有一篇。我感觉,那些被我被拒绝的论文作者都没好好做过实现,一些看起来很漂亮的理论 ,它是无法在特定的环境下实现的,而且,论文的相关试验也做地很不彻底,无法从各个方面去支持作者的论点(我所知道的信息是,一篇好的论文,试验工作都 是以月为单位的。美国人就是这样干的,一篇IEEE的文章要改100多个version,持续三年多)。就我过去的经验而言,想做系统方面的研究,得首先知道系统为 什么是那样的,我们做的任何改进都必须非常礼貌、谦逊地融入到大的系统。我经常对我身边的人说,系统设计要平和,不要激进,太过激进,会影响到其他部分 的正常运行。如果想知道如何礼貌,你就必须了解系统的style,也就是系统为什么是那样的。 试验或理论依据去做必要的保证。这样的文章是没有用的。 (signal handler)的设计。这个概念看起来很简单,任何一本讲Unix编程的人都会说到。可是有多少人会真正去想Signal Handler的存在是因为什么呢?写一 个Signal Handler有什么限制呢?为什么有不同的Signal响应机制呢?这些都是很有趣的话题。 究是很少的。计算机系统需要很长时间的积累和深厚的底蕴,它不象你研究某个算法或解决某个具体问题(我在这里举的例子可能不合适),几个月就能有一个结 果。计算机系统的研究需要花费大量的时间来写代码,可能需要一群人花费数年的时间来搭一个平台。有了这个平台,才可能在其上做相应的研究,或者说研究目 的的倾向性很强。 许,这种潜移默化的影响会改变程序员看待计算机系统的态度,也许他就加入到轰轰烈烈、又枯燥耗时的系统研究中。研究计算机系统的人多了,中国的计算机系 统的研究水平就会上去,也就会有中国自己的操作系统,等等。 国内的书很多都只讲“是这样设计的”而不讲“为什么这样设计”,所以容易给人输灌填鸭的感觉,学起来也枯燥无味。我想这一方面是因为现代科技起源于西方,很 多历史国内学者或出书的人不熟悉,另一方面可能是因为作者本身也没有思考过“为什么这样设计”的问题。 问题。典型的象莎茨的《Operating System Concepts》、北大物理系所用的高数教材等。 如果我的研究方向是计算机体系结构,那我肯定会抱本英文的《计算机体系结构:量化研究方法》来慢慢啃。但是,假设我是一名程序员(尽管实际上我不是), 我的工作是编写好的代码;那么我对计算机的理解并不需要深入到可以设计CPU,那么大可以弄本《计算机组织与设计:软件/硬件接口》或者这本《深入理解计算 机系统》(甚至《结构化计算机组成》)来读。这两本书足以有助于我写出更好的程序,而且花不了多少时间。 个人认为这本书适合做一本穿针引线的入门读物。我是把它当成一本连接学过的各自单独的课程的书来读的,所以只要翻译的过得去,我觉得就足够了,呵呵。精 读的话就去读操作系统概念,计算机组成和设计,K&R,apue等等的原版。 本书内容非常的深入和详细,信息量很大,表达清楚明了。作者有很好的写作技巧,很多概念的讲述方法都值得称道。书中的插图感觉也是经过精心设计的,对帮 助理解非常有好处。这本书每章的内容都非常好,如果要进一步划分的话,我个人认为,写得最精彩的是第四章,作者带着我们一步一步地设计了一个简单的流水 线化的处理器,我实在想不出有比这更好的讲授方法了。第六章和第十章的内容也非常精彩。卡内基梅隆大学是计算机名校,从他们的这本教材就可见一斑了。最 后一点体会是,美国的大学用的是这么好的教材,而且这只是人家二年级本科生14周课程的教材呀。我们的高校呢?...... 我读大学那会儿,我所看过的将计算机系统的教科书和参考书,都是从System implement的角度来讲,或者说,上来,就试图让你知道一个计算机系统是如何实 现的,实话,学得挺累的,而事实上,我们当中的,绝大多数,可能更需要从一个程序员的角度来看计算机系统,或者说,这本书的主线基本上是定在“知其所以然 ”上的。封面上的那副图就是书中的一个例子,比较性能,从而讲cache体系: void copyji(int src[2048][2048], int dst[2048][2048]) 岛,而且我们还是雾里看花,并不能完全理解所学的知识点。 本书的作者都是各个领域的牛人,看他们发表的文章就看的出来。 |
|