计算机类学科推荐书单

本人从小喜欢编程,本科和研究生都念的软件工程专业,这么些年下来,也算是读了不少书。近日不少同学想让我给推荐一些书,拉个书单。本考虑到自己才疏学浅,好读书不求甚解,并且实践经历又极少,难免会有疏漏或者偏颇,但是耐不住要我推荐书的同学越来越多,姑且写这么个推荐书单,希望能对大家有所帮助。

下面这些书有的我读过,有的我只读了一部分章节,有的我想读但是没有读。对其评论可能有所偏颇,希望大家能够补充或者纠正。

算法

算法概论Algorithms:这本书言简意赅,仅从算法的设计本身讲述了一些常用算法,书比较薄。其内容的组织形式比较利于学习算法的设计和思想,能够带来一些本质性的理解。建议至少读两遍。

算法导论Introduction to Algorithms:这是一本经典教材,内容详尽、丰富。中文版不少插图有错误,强烈建议购买英文版,然后自行比对出版商提供的errata。书后的练习题也很多,有些难度很大,建议有选择性的做。这本书主线内容有两部分——算法设计和算法性能分析。两者相互影响相互促进,是以一个完全不同于算法概论的视角来解析算法的。建议至少读三遍。

程序员实用算法Practical Algorithms for Programmers:这本书我没有读过。前两本书详尽的介绍了如何去设计一个好的算法。这本书侧重于在工程上如何实现高质量的算法。本书中的一些算法与前两本书中描述的算法并不完全相同,这一点需要特别注意。建议读这本书的时候,同时自己多实现一些算法,对比一下差别。

算法:C语言实现Algorithms in C:这本书比上一本书还要详尽的实现了很多常用算法。同时也不乏对算法的分析和原理的讲述。有些部分,比如红黑树,甚至比算法导论中讲述的还要精彩。

算法艺术与信息学竞赛:上面提到的常规的、通用的算法,还是比较容易理解的,但是你是否真正的理解了其深层次的思想和本质?看看这本书吧,竞赛题基本上总是变态和匪夷所思的,你的任务就是在不可能中去寻找那一丝丝成功的路径。这是一本能够让你大脑超负荷运转的书。看这本书的同时,你可能要参考很多其他的资料。同时,希望你能够多做些ACM题。你会发现,很多问题需要你从不同的角度去看待,你可能会设计出很多算法来解决这一问题,但是经常会有更优秀的算法带来本质上的改变。

编程之美:微软技术面试心得:这本书也是一本难得的好书。书中的每一个问题都由浅入深的给出了多个解决的算法,之后还会进行更进一步的扩展。

代码之美:这本书记叙了很多实践中的代码优化问题,涉及到的语言、设计层次都很多,可能需要读者的知识面比较广,才能够有比较大的收获。

计算机程序设计艺术(The Art Of Computer Programming:只看过几十页。怎么说呢,只要你能耐得住寂寞一直看,肯定看得懂。就是内容实在是太详尽,太多了一些。算是算法类的终极读物吧。

数学

组合数学Introductory Combinatorics:我所遇到的很多算法方面的问题,都是与组合数学有关的。同时,学习组合数学,也为古典概率论的学习打下了基础。这本书虽然只是简略的介绍了组合数学的方方面面,但是每一方面讲的也不会让人觉得不够细致。组合数学中主要讲述了三类问题——组合计数、组合设计、组合优化。这本书比较偏数学一些,和计算机科学的联系并不紧密。

具体数学(Concrete Mathematics:有人认为这本书是组合数学的进阶版本,我不这么认为。我认为这本书是从另一个角度讲述了组合数学,尤其是偏向于计算机科学应用。书中的很多内容十分的精妙,让人赞不绝口。看这本书的时候一定要耐着性子慢慢看,有可能几个小时才看不到 10 页。这本书建议至少读两遍。

陶哲轩实分析:这本书倒是可以视作数学分析的进阶版本。反正一般情况下计算机专业也用不上复分析,好好学学实分析还是很有必要的,尤其是在学习概率论等相关内容的时候。

概率论与数理统计:这方面我看的书比较少,只是觉得考研教材编的也不错。

统计学习方法:这本书我还没有看过。不过我觉得其内容应该与机器学习、数字图像处理、自然语言处理等十分相关。

信息论、推理与学习算法:说实话,我至今也不知道信息论会不会对我今后有所影响。我觉得,如果不做编码、通信、图像处理相关的事情的话,可能信息论能够发挥的作用比较有限。

自动机理论、语言和计算导论Automata Theory, Languages, and Computation:这本书应该作为编译原理的前提教材。

Software Foundations:形式化方法课程的教材。可以建立起函数式编程思维的基础。

Types and Programming Languages:与 λ 算子有关的数学理论,如果你了解 Church 和 Turing,以及 Lisp 的话,你一定会对这本书非常感兴趣的。

计算机程序的构造和解释Structure and Interpretation of Computer Programs:这本书怎么说呢,反正我是看了快两遍了,还是看的很头疼。不过这本书确实揭示了一些与现在流行的用 C 语言来进行基础教学的图书所不同的编程本质。

编程的本质Elements of Programming:这本书我还正在看。也是一本比较头疼的书。这本书确确实实的是在讲编程的数学本质原理。

操作系统

一般性内容

操作系统概念Operating System Concept:经典教材,没什么多的可说。

现代操作系统Modern Operating Systems:没看过几页。

操作系统:精髓与设计原理Operating Systems, Internals and Design Principles:还没有看过。

编码:隐匿在计算机软硬件背后的语言Code:The Hidden Language of Computer Hardware and Software:还没有看过。

深入理解计算机系统Computer Systems:A Programmer's Perspective:这本书让我觉得真正将操作系统、计算机组成原理和 C 语言联系起来了,非常推荐。另外,我觉得一般可以跳过第四章处理器体系结构。

编程卓越之道第一卷:深入理解计算机(Write Great Code:Understanding the Machine:还没看过。

编程卓越之道第二卷:运用底层语言思想编写高级语言代码(Write Great Code:Thinking Low-level, Writing High-level:还没看过。

Unix类操作系统

UNIX操作系统设计(The Design of the Unix Operating System:还没看,不过应该算是Bible了吧。

Linux内核完全剖析:针对于早起Linux内核代码的分析,比较简单,易于上手。

UNIX编程艺术The Art of UNIX Programming:这本书更多的是偏重于UNIX程序的设计原则。

Windows操作系统

深入解析Windows操作系统(Windows Internals:还没看,不过应该算是Bible了吧。

Windows内核原理与实现:还没看。

Windows编程启示录The Old New Thing:Practical Development Throughtout the Evolution of Windows:这本书解释了很多原本我不能理解的 Windows 的设计,确实很多事情慢慢变得让人费解,都是历史遗留原因。

编译原理

编译原理Compilers:Principles, Techniques, & Tools:龙书,偏重于前端。

现代编译原理(Modern Compiler Implementation in C:虎书,确实要现代一些。

程序设计语言原理Concepts of Programming Languages:没看呢。

编程语言实现模式Language Implementation Patterns:没看呢。

程序员的自我修养:主要是和Windows有关。

链接器和加载器Linkers and Loaders:这本就主要是和Linux有关。

C语言

C程序设计语言The C Programming Language:都是计算机专业的了,就别看谭浩强了。习题非常棒,建议无论如何都要做一下。

C程序设计语言习题解答The C Answer Book:配套答案。

C语言程序设计:现代方法C Programming:A Modern Approach:没看呢。

C语言参考手册C:A Reference Manual:当手册用吧。

C语言接口与实现C Interfaces and Implementations:没看呢。

C专家编程Expert C Programming:很有启发性。

Binary Hacks:一些二进制层面的技巧。

内存受限系统之软件开发Small Memory Software:没看呢。但是应该很有启发意义。

C++语言

C++程序设计语言The C++ Programming Language:Bible不解释。

Accelerated C++中文版:上一本书全倒是全了,不过实在是太厚了,不适合上手,这本书就好多了。

C++语言的设计与演化The Design and Evolution of C++:C++创始人写的,对于了解C语言和C++语言都十分有好处。强烈建议反复阅读。

C++标准程序库The C++ Standard Library:标准库也是C++语言不可分割的一部分。

Boost程序库完全开发指南:Boost中的很多内容将加入到C++1x中。

C++编程规范C++ Coding Standards:有很多有意义的指导。

Java语言

Java核心技术Core Java:建议粗看,然后当手册用。

深入理解Java虚拟机Understanding the JVM:没看呢。

Java并发编程实战Java Concurrency in Practice:没看呢。

网络编程

UNIX网络编程UNIX Network Programming:厚,内容详尽。

软件设计

7周7语言:理解多种编程范型Seven Languages in Seven Weeks:没看呢。不同语言的思维方式不同,能够带来很大启发。

深入浅出设计模式Head First Design Pattern:设计模式的入门书籍。

设计模式:可复用面向对象软件的基础Design Patterns:Gang of Four的书,反正我上手的时候看不懂,建议看完上一本书再看这一本,然后当手册用。

企业应用架构模式Patterns of Enterprise Application Architecture:强烈推荐。尤其是做Web开发的。

设计模式沉思录Pattern Hatching:还没看。

代码整洁之道Clean Code:还没看。

重构Reflectoring:还没看。

软件工程

人月神话The Mythical Man-Month:小说。

人件Peopleware:如果说人月神话关注的是软件开发本身,这本书关注的则是软件开发中的“人”。说实话,看完之后心情很复杂。

观止——微软创建NT和未来的夺命狂奔Show Stopper!:The Breakneck Race to Create Windows NT and the Next Generation at Microsoft:就当小说看吧^_^

程序员修炼之道The Pragmatic Programmer:有一些启迪。

卓有成效的程序员The Productive Programmer:就是讲述如何在开发软件的过程中变得更加高效。

Git权威指南:强烈建议每一个程序员都读这本书,然后将Git作为自己的常备工具。

posted @ 2012-06-18 20:59  HCOONa  阅读(2318)  评论(1编辑  收藏  举报