计算机科学经典著作
1.The Art of Computer Programming 《计算机程序设计艺术》
Author: Donald.E.Knuth 克努特
Book Info: 这部书被誉为20世纪最重要的20部著作之一,与Einstein的<<相对论>>并列,是计算机科学领域的权威著作.全书共分7卷,目前已经出版了3卷,被誉为"计算机程序设计理论的荷马史诗","可与牛顿的<<自然科学的数学原理>>媲美的巨著".作者数学方面的功底造就了本书严谨的风格,虽然本书不是用当今流行的程序设计语言描述的,但这丝毫不损伤它"程序设计史诗"的地位.道理很简单,它内涵的设计思想是永远不会过时的.The Art of Computer Programming 原计划要出七册,但目前只完成了三册.该书有日文,俄文,西班牙文等许多国的版本.其中,中文版由国防大学出版社发行.
Book Reviews:
无数的读者都在谈论Knuth的书所带来的深远影响.科学家惊叹于分析逻辑之透彻严谨,而普通的编程人员也已成功地将书中所列方案运用到他们的日常问题中.所有的人都非常赞赏Knuth在这套书中所表现的精确与风趣,并为其明确性与涉及面之广而感到欣喜.
我无法向你表达这套书在学习和创造性方面所带给我的兴奋与激动,我已经将它们带入了我的生活,就像我的汽车,饭馆,工作,家庭……无所不在.
----Charles Long
无论你的背景怎样,如果你正在进行复杂的计算机编程,你就应该阅读本套书中的每本书,来补充你的专业知识.
当一个问题难以解决,而必须使用Knuth的这套书来解决时,总是一件令人愉快的事情.我发现在计算机方面使用它们会有惊人的效果.
----Jonathan Laventhol
如果你认为你是一名真正优秀的程序员……读Knuth的<<计算机程序设计艺术>>,如果你能读懂整套书的话,请给我发一份你的简历.
----Bill Gates
The Art of Computer Programming, Volume 1: Fundamental Algorithms (3rd Edition)
Author: Donald.E.Knuth
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 卷1为基础运算法则,该书以基本的编程概念和技术为开始,然后讲述信息结构--计算机内信息的表示法,数据元素间的结构关系以及处理它们的有效方法.主要应用于模拟,数字方法,符号计算,软件和系统设计.许多简单和重要的运算法则和技术已添加到前一版本中,精确的初步计算部分已经修改,以适应当前趋势.
The Art of Computer Programming, Volume 2: Seminumerical Algorithms (3rd Edition)
Author: Donald.E.Knuth
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 第2卷对半数值算法领域做了全面介绍,分"随机数"和"算术"两章.本卷总结了主要算法范例及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间的相互联系.第3版中特别值得注意的是Knuth对随机数生成程序的重新处理和对形式幂级数计算的讨论.
The Art of Computer Programming, Volume 3: Sorting and Searching (2nd Edition)
Author: Donald E.Knuth
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 卷3为分拣和搜索,这是本书的第1个修订版,它是对计算机分拣和搜索的一流技术的最全面的研究,它扩展了卷1中数据结构的处理方法,将大小数据库以及内存和外部存储都包含在内.本书包括对计算机方法仔细检查的选择方案,和其效率的大量分析.本书该版的独特之处在于优化了的分拣,以及对通用散列法和排列法的新的理论论述.
作者简介:
Donald.E.Knuth(唐纳德.E.克努特,中文名高德纳)是算法和程序设计技术的先驱者,是计算机排版系统TeX和METAFONT的发明者,他因这些成就和大量创造性的影响深远的著作(19部书和160篇论文)而誉满全球,在计算机科学领域享有崇高的威望,是计算机科学界公认的大宗师.作为斯坦福大学计算机程序设计艺术的荣誉退休教授,他当前正全神贯注于完成其关于计算机科学的史诗性的七卷集.这一伟大工程在1962年他还是加利福尼亚理工学院的研究生时就开始了.Knuth教授获得了许多奖项和荣誉,包括美国计算机协会图灵奖(ACM Turing Award),美国前总统卡特授予的科学金奖(Medal of Science),美国数学学会斯蒂尔奖(AMS Steele Prize),以及1996年11月由于发明先进技术荣获的极受尊重的京都奖(KyotoPrize).现与其妻Jill生活于斯坦福校园内.
Donald.E.Knuth人生最辉煌的时刻在斯坦福大学计算机系渡过,获得了美国计算机协会图灵奖,成为本领域内当之无愧的泰斗.
----------------------------------------------------------------
2.Introduction to Algorithms
Author:Thomas H.Cormen ,Charles E.Leiserson ,Ronald L.Rivest ,Clifford Stein
Amazon Reviews: Amazon.com
Book Info: 简称为CLRS的<<算法导论>>,被称作"计算机算法的圣经".
本书的主要作者来自麻省理工大学计算机,作者之一Ronald L.Rivest 由于其在公开秘钥密码算法RSA上的贡献获得了图灵奖,目前是算法的标准教材,美国许多名校的计算机系都使用它,国内有些院校也将本书作为算法课程的教材.另外许多专业人员也经常引用它.由于TAOCP只出版了3卷,CLRS比较起前者来则显得内容更为全面,基本包含了所有的经典算法.本书程序全部由伪代码实现,这更增添了本书的通用性,使得利用各种程序设计语言的程序员都可以作为参考.语言方面通俗,很适合作为算法教材和自学算法之用.国内的很多作品名为数据结构,从本书中断章取义,把数据结构与算法混为一谈,搞得作者自己都迷迷糊糊.这也是我不十分愿意向大家推荐国内作品的原因.你会发现现在基本上所有的数据结构与算法书籍都会将本书作为参考文献之一,更可以说明一个问题,本书是作为读者进行算法学习的最佳选择.作为本书的补充内容,我愿意向大家推荐下面的学习资料:你可以通过这个地址找到本书的所有练习答案:http://www.itu.dk/people/beetle/ .为了更好的学习本书中的内容,最好的指导当然是来自作者本身讲述本书的课程,读者们可以通过http://18.89.1.101/sma/5503fall2001/index5503fall2001.html获得课程的录像.
----------------------------------------------------------------
3.Data Structure & Algorithm Analysis in C (Second Edition)
Author:Mark Allen Weiss
Published:September 1996
Web site:http://www.cs.fiu.edu/~weiss/
Amazon Reviews: Amazon.com
Book Info: 本书曾被评为20世纪顶尖的30部计算机著作之一,作者Mark Allen Weiss在数据结构和算法分析方面卓有建树.他的数据结构和算法分析的著作尤其畅销,并受到广泛好评.已被世界500余所大学用作教材.
----------------------------------------------------------------
4.Concrete Mathematics A Foundation for Computer Science(Second Edition)
Author:Donald.E.Knuth&Ronald L.Graham
Web site: http://www-cs-faculty.stanford.edu/~knuth/gkp.html
Amazon Reviews: Amazon.com
Book Info: 很令人兴奋的就是这本书的主要作者正是泰斗Donald.E.Knuth以及他的同事Ronald L.Graham.书稿是他们在1970年的时候在计算机系教授研究生本门课程的基础上整理出来的教材.内容上是Knuth的巨著TAOCP第一部的扩展,有些比TAOCP中谈及地又深入了许多.重点放在高级计算机程序设计话题以及算法分析上,涉及了计算机科学领域内几乎所有可能遇到的数学知识.具体数学是离散数学和连续数学的综合,书中这点做得极为出色,介绍的内容涉及到书中许多经典问题的解答比目前广泛流传的解法更易懂.对于提高大家的计算数学修养有很大帮助.之所以TAOCP有的时候读者们读不懂就是因为计算数学基础不是十分扎实,但以我个人经验,若能对本书中内容有一个比较好的理解,会给你阅读如TAOCP这样的旷世巨著带来很大的方便.
----------------------------------------------------------------
5.Discrete Mathematics and Its Applications,Fourth Edition
Author:Kenneth H.Rosen
Amazon Reviews: Amazon.com
Book Info: 本书的价值已经被全世界几百所大学所证实,作为离散数学领域的经典教材,全世界几乎所有知名的院校都曾经使用本书作为教材.以我个人观点看来,这本书可以称之为离散数学百科.书中不但介绍了离散数学的理论和方法,还有丰富的历史资料和相关学习网站资源.更为令人激动的便是这本书少有的将离散数学理论与应用结合得如此的好.你可以看到离散数学理论在逻辑电路,程序设计,商业和互联网等诸多领域的应用实例.本书的英文版(第五版)当中更增添了相当多的数学和计算机科学家的传记,是计算机科学历史不可多得的参考资料.作为教材这本书配有相当数量的练习.每一章后面还有一组课题,把学生已经学到的计算和离散数学的内容结合在一起进行训练.这本书也是我个人在学习离散数学时读的唯一的英文教材,实为一本值得推荐的好书.
----------------------------------------------------------------
6.The C Programming Language 2nd Edition
Author:Brian W.Kernighan and Dennis M.Ritchie
Publisher: Prentice Hall
Published: 1988.
Amazon Reviews: Amazon.com
Book Info: Brian W.Kernighan和Dennis M.Ritchie的传世之作.千千万万程序员和编程爱好者的圣经,每一页都是价值连城的秘诀.不管你从哪一页信手翻起,最终你都会发现自己已经深陷其中而不能自拔.
----------------------------------------------------------------
7.The C++ Programming Language
Author:Bjarne Stroustrap
Amazon Reviews: Amazon.com
Book Info: 由C++之父亲手执笔的<<The C++ Programming Language>>是每个程序员心目中不可动摇的指南-----尽管官方标准还是ISO颁布的另一份文档,由ISO/IEC JTC1/SC22/WG21出版.TCPL是除了C++标准文献之外最权威的C++参考手册.和大多数人的看法不大一样,我认为Bjarne的文字语言并不逊色于他所创建的程序语言,至少我喜欢这种学院气息浓厚的作品.本书对C++语言的描述轮廓鲜明,直截了当.它从C++语言创建者的角度来观察C++,这是任何别的作者和书籍做不到的----没有任何人比Bjarne自己更清楚该怎么来使用C++.
这是一本严肃的著作,以中,高级C++开发人员为目标读者.如果你是一名有经验的C++程序员,需要了解更加本质的C++知识,本书正是为你而写.它不是那种让你看了会不断窃喜的小书,需要用心体会,反复咀嚼.在阅读过程中,请特别留心Bjarne先生强调了什么,又对什么一语带过.我个人比较喜欢这本书的第四部分"使用C++做设计",这样的内容在类似的程序设计语言书籍中很难看到----我甚至认为Bjarne应该将这部分独立出来单独写一本书.
----------------------------------------------------------------
8.The Design and Evolution of C++
Author: Bjarne Stroustrup
Amazon Reviews: Amazon.com
Book Info: D&E是一本关于C++语言设计原理,设计决策和设计哲学的专著.它清晰地回答了C++为什么会成为今天这个样子而没有变成另外一种语言.作为C++语言的创建者,Bjarne淋漓尽致地展示了他独到而深刻的见解.除了广受赞誉的语言特性外,Bjarne没有回避那些引起争议的甚至被拒绝的C++特性,他一一给出了逻辑严密,令人信服的解释.内容涵盖C++的史前时代,带类的C,C++的设计规则,标准化,库,内存管理,多重继承,模板等,对包括异常机制,运行时类型信息和名字空间在内的重要的新特性都分别进行了深入探讨.每一名C++程序员都应该可以从Bjarne的阐释中加深对手中这门语言的认识.这本书知识浓缩,信息量极大,请不要错过Bjarne每一句看似漫不经意的话.
----------------------------------------------------------------
9.Accelerated C++: Practical Programming by Example
Author: Andrew Koenig, Barbara E.Moo
Publisher: Addison-Wesley Professional
Published: January 15, 2000
Amazon Reviews: Amazon.com
Book Info: 和市面上大多数C++教程不同,本书不是从"C++中的C"开始讲解,而是始于地道的C++特性.从一开始就使用标准库来写程序,随着讲述的逐渐深入,又一一解释这些标准库组件所依赖的基础概念.另外,和其他C++教材不同的是,这本书以实例拉动语言和标准库的讲解,对后两者的讲解是为了给实例程序提供支持,而不是像绝大多数C++教材那样,例子只是用作演示语言特性和标准库用法的辅助工具.
作者在C++领域的编程实践,教育培训以及技术写作方面都是世界一流水准.我喜欢这种大量使用标准库和C++语言原生特性的清新的写作风格.在这本教材面前,几乎迄今为止的所有C++教材都黯然失色或显得过时.尽管这本教材也许对于国内的高校教育来说有些前卫,不过我仍然极力向我的同行们推荐.顺带一提,在Bjarne和我最近的一封通信里,他这样评价本书:对于有经验的程序员学习C++而言,这本书可能是世界上最好的一本.
----------------------------------------------------------------
10.C++ Gotchas: Avoiding Common Problems in Coding and Design
Author: Stephen C.Dewhurst
Publisher: Addison-Wesley Professional; 1st edition (November 26, 2002)
Amazon Reviews: Amazon.com
Book Info: Stephen的理论素养和实践经验注定这是一本值得一读的好书.Stephen曾经是贝尔实验室中第一批C++使用者.他已经使用C++成功解决了包括编译器,证券交易,电子商务以及嵌入式系统等领域中的问题.本书汇集了作者来自开发一线的99条编程真知灼见,洞悉它们,你可以避免几乎所有常见的C++设计和编程问题.
我甚至认为,对于C++编程菜鸟而言,阅读这本书会比阅读Scott和Herb的书更能轻松而立竿见影地获得更大的提高.我个人很喜欢这本书的写作风格----Stephen的许多观点看似极端却无可辩驳.当然了,这种自信(以及冷幽默)来自于作者深厚的技术素养,而非自大的偏执.
----------------------------------------------------------------------------------
11.C++ Primer 3rd
Author: Stanley B.Lippman
Amazon Reviews: Amazon.com
Book Info: 这本书的名字多少有点让人误解.尽管作者声称这本书是为C++新手而写,但无论是它的厚度还是讲解的深度都暴露了似乎并非如此.也许说它是一本"从入门到精通"的C++教程会更合适一些.我个人认为它并不适合完全不懂C++的初学者----在阅读这本书之前,你至少应该先有那么一点C或C++的背景知识,或者至少要具有一些其他语言的编程经验.
尽管这本书省略了一些高级C++特性的讨论,但仍然可以称得上是迄今为止最全面的C++学习教程.事实上,如果一名C++初学者能够扎扎实实地读完本书并对照<<C++ Primer Answer Book>>完成全部习题的话,他的水平肯定可以进入职业C++程序员的行列.我个人认为,即使你已经拥有了TCPL,这本书依然有拥有的价值,因为在许多方面它比TCPL来得更详细,更易懂.
----------------------------------------------------------------
12.Essential C++
Author: Stanley B.Lippman
Amazon Reviews: Amazon.com
Book Info: 可以不太严格地认为这本书是<<C++ Primer>>的精简版.本书一一讲述了C++中最具代表性的主题,包括过程式编程,泛型编程,基于对象编程,面向对象编程,模板编程以及异常处理等.Stanley将门槛调低到"具有其他语言程序设计经验"的C++新手所能接受的最基本的层次,使他们能够迅速开始使用C++编程而又免于阅读<<C++ Primer>>那样的大部头.它以实例引导学习,力图使读者在最短的时间内把握C++的精粹.
也许换一个人来概述C++编程范型(paradigm)的方方面面需要好几百页才能说清楚,但这本小书不可思议地做到了这一点.我个人非常喜欢这种满是技术,简明扼要并且"有话好好说"的书.这本书同样具有一个明显的风格:所有程序例子全部采用标准库组件,让人耳目一新.
----------------------------------------------------------------
13.Effective C++: 50 Specific Ways to Improve Your Programs and Design (2nd Edition)
More Effective C++: 35 New Ways to Improve Your Programs and Designs
Author: Scott Meyers
Publisher:Prentice Hall
Amazon Reviews: Amazon.com
Amazon.com
Book Info: 先养成良好的C++设计习惯,这是Scott Meyers的<<Effective C++>>和<<More Effective C++>>带给我们的无穷好处,这两本书是真正的经典,作者对C++的纯熟,使得语言的风格读起来简直是如饴甘甜,就像他站在你对面讲课.如果你已经深刻地理解了<<Effective C++>>和<<More Effective C++>>,那你可以发现,你在众人中已经是鸡群之鹤.
如果说<<Effective C++>>主要讨论C++中一些相对基础的概念和技巧的话,那么<<More Effective C++>>则着重探讨了包括异常处理在内的一系列高级技术.与前者相比,后者具有两大主要区别:其一,它包含很多时新的标准C++的内容;第二,它讨论的主题倾向于"战略化"而非"战术化",并且讨论得更深入,更彻底.尤其是对虚析构函数,智能指针,引用计数以及代理类(proxy classe)等技术和模式论述的深入程度,让人很难想象是出现于这样的一本小书之中.
----------------------------------------------------------------
14.Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions
More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions
Author: Herb Sutter
Book Info: 你自认为是一名C++语言专家吗?读一读ISO C++标准委员会秘书长的这两本书再回答.在这两本书中,Herb采用了"问答"的方式指导你学习C++语言特性.对于每一个专题,Herb首先合理地设想出你的疑问和困惑,接着又猜测出你十有八九是错误的解答,然后给你以指点并提出最佳解决方案,最后还归纳出解决类似问题的普适性原则.
这两本书是典型的深究C++语言细节的著作,很薄,但内容密集,远远超过Scott的那两本书,读起来很费脑筋----我个人认为它们要比Scott的书难懂得多.若要研习这薄薄的两本书所包含的知识,至少需要花费数月的时间!(在Scott的荐序中,他坦陈不止一次陷入GotW问题的陷阱,你应该知道这意味着什么)对于语言细节的深究有什么好处呢?尽管在大多数情况下,我们不必关心C++代码幕后的动作,然而当我们不得不关心时,这两本书可以为我们提供很好的线索,因为它们揭示了C++语言中微妙而又至关重要的东西.
----------------------------------------------------------------
15.Modern C++ Design: Generic Programming and Design Patterns Applied
Author: Andrei Alexandrescu
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 你自认为是C++模板编程高手吗?请看过这本书再回答.这是一本出自天才之手令人敬畏的杰作.泛型模式,无限延伸你的视野,足以挑战任何一名C++程序员的思维极限.
这本书共分为两大部分,第一部分讨论了Loki程序库采用的基础技术以及一些高级语言特性,包括基于策略的类设计,模板局部特化,编译期断言,Typelist以及小型对象分配技术等.第二部分则着重介绍了Loki中的重要组件和泛型模式技术,包括泛化仿函数(Generalization Functor),单件(Singleton),智能指针,对象工厂(Object Factory),抽象工厂(Abstract Factory),访问者(Visitor)以及多方法(Multimethods)等.每一种技术都让人大开眼界,叹为观止.
----------------------------------------------------------------------------------
16.C++ Templates: The Complete Guide
Author: David Vandevoorde, Nicolai M.Josuttis
Amazon Reviews: Amazon.com
Book Info: 有一种老套的赞美一本书的手法,大致是"没有看过这本书,你就怎么怎么地",这里面往往夸张的成分居多.不过,倘若说"没有看过<<C++ Templates: The Complete Guide>>,你就不可能精通C++模板编程",那么这个论断对于世界上绝大多数C++程序员来说是成立的.这本书填补了C++模板书籍领域由来已久的空白.此前,上有<<Modern C++ Design>>这样的专注于模板高级编程技术和泛型模式的著作,下有<<The C++ Standard Library>>这样的针对特定模板框架和组件的使用指南.然而,假如对模板机制缺乏深入的理解,你就很难"上下"自如.鉴于此,我向每一位渴望透彻理解C++模板技术的朋友推荐这本书.
----------------------------------------------------------------
17.The C++ Standard Library: A Tutorial and Reference
Author: Nicolai M. Josuttis
Publisher: Addison-Wesley Professional; 1st edition (August 12, 1999)
Amazon Reviews: [http://www.amazon.com/exec/obidos/tg/detail/-/0201379260/002-5778374-2660009?v=glance]Amazon.com[/URL]
Book Info: 这是一本百科全书式的C++标准库著作,是一本需要一再查阅的参考大全.它在完备性,细致性以及精确性方面都是无与伦比的.本书详细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本地化在内的整个标准库而不仅仅是STL.正如本书副标题所示,它首先适合作为教程阅读,尔后又可用作参考手册.
浅显易懂的写作风格使得这本书非常易读.如果你希望学习标准库的用法并尽可能地发挥其潜能,那你必须拥有这本书.正如网络上所言,这本书不仅仅应该摆在你的书橱中,更应该放到你的电脑桌上.我向每一位职业C++程序员强烈推荐.
----------------------------------------------------------------
18.Effective C++: 50 Specific Ways to Improve Your Programs and Design (2nd Edition)
Author: Scott Meyers
Publisher: Addison-Wesley Professional; 2 edition (September 2, 1997)
Amazon Reviews: Amazon.com
Book Info:
Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
Author: Scott Meyers
Publisher: Addison-Wesley Professional; 1st edition (June 6, 2001)
Amazon Reviews: Amazon.com
Book Info: 读完Scott 的<<Effective C++>>和<<More Effective C++>>的中译本之后,我一直期待这本书的中文版.我从潘爱民先生的个人主页上了解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,可惜至今市面上仍不得见.幸运的是,我们可以看到它的原版.
本书是使用STL的程序员必读之作.在这本书中,Scott向我们讲述STL容器和算法的工作机制以及如何以最佳方式使用它们.和Scott的其他作品一样,这本书的写作风格清晰,精确,具有极佳的可读性.看过这本书以后,我想你也许会和我以及其他C++程序员一样产生这样的想法:Scott什么时候会写出一本"More Effective STL"?
----------------------------------------------------------------
19.Thinking in C++, Volume 1: Introduction to Standard C++ (2nd Edition)
Author: Bruce Eckel
Publisher: Prentice Hall; 2nd edition (April 15, 2000)
Amazon Reviews: Amazon.com
Book Info: <<Thinking in C++>>的第1版于1996年荣获"软件研发"杂志评选的图书震撼大奖.最新推出的第2版对内容进行了大幅改写和调整,以反映C++标准化带来的影响以及近几年面向对象领域最新研究和实践成果."输入输入流","多重继承","异常处理"和"运行时类型识别"等高级主题连同C++标准化以后增加的一些内容则被放入第二卷中.Bruce是一名经验丰富的C++讲师和顾问,其培训和写作经验都是世界一流水准,他的作品比那些"玩票"的技术人员写的东西更能吸引读者.事实上,在同类图书中,对于大多数读者而言,这本书的可读性要超过TCPL和<<C++ Primer>>.
Thinking in C++, Volume 2: Practical Programming (Second Edition)
Author: Bruce Eckel
Publisher: Prentice Hall; 2nd edition (November 1, 2003)
Amazon Reviews: Amazon.com
Book Info:
----------------------------------------------------------------
我坚信从程序员的角度来看计算机系统对教会学生计算机的内部结构非常有帮助.
----Kostas Daniilidis,宾夕法尼亚大学
这本书讲述事物的方法与众不同,但是和我想要的课程进行方式类似.
----John Greiner,Rice大学
这是一项出色的工作,是这一领域教学方法的一次革命.
----Michael Scott,罗切斯特大学