下面这些书有的我读过,有的我只读了一部分章节,有的我想读但是没有读。对其评论可能有所偏颇,希望大家能够补充或者纠正。
算法
算法概论(Algorithms):这本书言简意赅,仅从算法的设计本身讲述了一些常用算法,书比较薄。其内容的组织形式比较利于学习算法的设计和思想,能够带来一些本质性的理解。建议至少读两遍。
算法导论(Introduction to Algorithms):这是一本经典教材,内容详尽、丰富。中文版不少插图有错误,强烈建议购买英文版,然后自行比对出版商提供的errata。书后的练习题也很多,有些难度很大,建议有选择性的做。这本书主线内容有两部分——算法设计和算法性能分析。两者相互影响相互促进,是以一个完全不同于算法概论的视角来解析算法的。建议至少读三遍。
程序员实用算法(Practical Algorithms for Programmers):这本书我没有读过。前两本书详尽的介绍了如何去设计一个好的算法。这本书侧重于在工程上如何实现高质量的算法。本书中的一些算法与前两本书中描述的算法并不完全相同,这一点需要特别注意。建议读这本书的时候,同时自己多实现一些算法,对比一下差别。
算法:C语言实现(Algorithms in C):这本书比上一本书还要详尽的实现了很多常用算法。同时也不乏对算法的分析和原理的讲述。有些部分,比如红黑树,甚至比算法导论中讲述的还要精彩。
算法艺术与信息学竞赛:上面提到的常规的、通用的算法,还是比较容易理解的,但是你是否真正的理解了其深层次的思想和本质?看看这本书吧,竞赛题基本上总是变态和匪夷所思的,你的任务就是在不可能中去寻找那一丝丝成功的路径。这是一本能够让你大脑超负荷运转的书。看这本书的同时,你可能要参考很多其他的资料。同时,希望你能够多做些ACM题。你会发现,很多问题需要你从不同的角度去看待,你可能会设计出很多算法来解决这一问题,但是经常会有更优秀的算法带来本质上的改变。
编程之美:微软技术面试心得:这本书也是一本难得的好书。书中的每一个问题都由浅入深的给出了多个解决的算法,之后还会进行更进一步的扩展。
代码之美:这本书记叙了很多实践中的代码优化问题,涉及到的语言、设计层次都很多,可能需要读者的知识面比较广,才能够有比较大的收获。
计算机程序设计艺术(The Art Of Computer Programming):只看过几十页。怎么说呢,只要你能耐得住寂寞一直看,肯定看得懂。就是内容实在是太详尽,太多了一些。算是算法类的终极读物吧。
数学
组合数学(Introductory Combinatorics):我所遇到的很多算法方面的问题,都是与组合数学有关的。同时,学习组合数学,也为古典概率论的学习打下了基础。这本书虽然只是简略的介绍了组合数学的方方面面,但是每一方面讲的也不会让人觉得不够细致。组合数学中主要讲述了三类问题——组合计数、组合设计、组合优化。这本书比较偏数学一些,和计算机科学的联系并不紧密。
具体数学(Concrete Mathematics):有人认为这本书是组合数学的进阶版本,我不这么认为。我认为这本书是从另一个角度讲述了组合数学,尤其是偏向于计算机科学应用。书中的很多内容十分的精妙,让人赞不绝口。看这本书的时候一定要耐着性子慢慢看,有可能几个小时才看不到 10 页。这本书建议至少读两遍。
陶哲轩实分析:这本书倒是可以视作数学分析的进阶版本。反正一般情况下计算机专业也用不上复分析,好好学学实分析还是很有必要的,尤其是在学习概率论等相关内容的时候。
概率论与数理统计:这方面我看的书比较少,只是觉得考研教材编的也不错。
统计学习方法:这本书我还没有看过。不过我觉得其内容应该与机器学习、数字图像处理、自然语言处理等十分相关。
信息论、推理与学习算法:说实话,我至今也不知道信息论会不会对我今后有所影响。我觉得,如果不做编码、通信、图像处理相关的事情的话,可能信息论能够发挥的作用比较有限。
Types and Programming Languages:与 λ 算子有关的数学理论,如果你了解 Church 和 Turing,以及 Lisp 的话,你一定会对这本书非常感兴趣的。
计算机程序的构造和解释(Structure and Interpretation of Computer Programs):这本书怎么说呢,反正我是看了快两遍了,还是看的很头疼。不过这本书确实揭示了一些与现在流行的用 C 语言来进行基础教学的图书所不同的编程本质。
操作系统
一般性内容
Unix类操作系统
Linux内核完全剖析:针对于早起Linux内核代码的分析,比较简单,易于上手。
UNIX编程艺术(The Art of UNIX Programming):这本书更多的是偏重于UNIX程序的设计原则。
Windows操作系统
深入解析Windows操作系统(Windows Internals):还没看,不过应该算是Bible了吧。
编译原理
现代编译原理(Modern Compiler Implementation in C):虎书,确实要现代一些。
程序设计语言原理(Concepts of Programming Languages):没看呢。
编程语言实现模式(Language Implementation Patterns):没看呢。
链接器和加载器(Linkers and Loaders):这本就主要是和Linux有关。
C语言
C程序设计语言习题解答(The C Answer Book):配套答案。
C专家编程(Expert C Programming):很有启发性。
内存受限系统之软件开发(Small Memory Software):没看呢。但是应该很有启发意义。
C++语言
C++编程规范(C++ Coding Standards):有很多有意义的指导。
Java语言
Java核心技术(Core Java):建议粗看,然后当手册用。
深入理解Java虚拟机(Understanding the JVM):没看呢。
Java并发编程实战(Java Concurrency in Practice):没看呢。
网络编程
UNIX网络编程(UNIX Network Programming):厚,内容详尽。
软件设计
设计模式沉思录(Pattern Hatching):还没看。
软件工程
人件(Peopleware):如果说人月神话关注的是软件开发本身,这本书关注的则是软件开发中的“人”。说实话,看完之后心情很复杂。
观止——微软创建NT和未来的夺命狂奔(Show Stopper!:The Breakneck Race to Create Windows NT and the Next Generation at Microsoft):就当小说看吧^_^
Git权威指南:强烈建议每一个程序员都读这本书,然后将Git作为自己的常备工具。