现在的位置: 首页 > 其他 > 正文

计算机编程学习之路好书推荐【转】

2016年04月26日 其他 ⁄ 共 11701字 暂无评论 ⁄ 阅读 885 次
文章目录

作为一个非科班出身的程序员,有时会遇到一些本来很简单但自己怎么也理解不了的东西,这就是基础的匮乏,所以,为了弥补基础,搜索了一些学习方向,作为自己参考的读物。本文转载自:http://www.cnblogs.com/Wen-Man/archive/2011/08/08/2373763.html,另外随时补充一些自己在学习过程中看到或其他人推荐的好书,以供学习参考。

【推荐的原则】

  1. 推荐的来源:
  • 大师的作品。
  • 我看过并且认为不错的。
  • 我看过的书里面经常引用的。
  • 我没看过但是很多人都推荐的。
  1. 选书的原则:
  • 有国外的,不看国产的
  • 有原版的,不看翻译的
  • 看大师的作品
  1. 看书的原则:
  • 不要看 C、C++、JAVA等语言类书籍

不过不要理解错了,不管学什么语言,永远不要忘了语言是做什么用的。语言只是一种工具,它的作用就是完成你的工作。不管把 C 的语法学得如何透彻,也不管把 C 的 trick 用的如何精妙,这并不能表示你会编程。要学会如何分析问题,如何设计程序,如何用一种具体的语言来实现。如果你只会做最后一步,你只是一个编码者(coder),还不是一个程序员(programmer)。做一个 programmer,不要做 coder。总之,不要为了学语言而去学语言(除非你是个语言学家)。

  • 不要放弃对基础知识的学习

所谓基础知识,一般都有一个特点,那就是:它们可能看起来没用,但如果你忽视它们的话,总有一天你会后悔莫及。所以,如果不想以后再后悔的话,就在今天多花点时间。

  • 明确学习目的

不管学什么东西,学之前先弄明白自己要学的是什么东西,它有什么用,在你已经学和以后的发展方向中,它处于什么位值。如果这些都不明白,就好比在茫茫的丛林里面四处乱撞,就算能出去,也一定会走很多弯路。

  • 兼收并蓄

对于软件工程之类的东西,不象 C 语言有着严格的标准,最好的办法就是兼收并蓄,能看的都看,然后(最重要的)在此之上形成自己的思想(不然就什么都白看了)。

  • 尽信书不如无书。

书里写的只不过是写书的人认为正确的观点而已。学习前人的知识和经验,在此基础上形成自己的知识结构、观点和思维方式,才是学习的真正目的。

【计算机基础】

计算机系统[Randal E. Bryant / David R. O'Hallaron]

Computer Systems : A programmer' s Perspective

本书主要介绍了计算机系统的基本概念,包括最底层的内存中的数据表示、流水线指令的构成、虚拟存储器、编译系统、动态加载库,以及用户应用等。书中提供了大量实际操作,可以帮助读者更好地理解程序执行的方式,改进程序的执行效率。此书以程序员的视角全面讲解了计算机系统,深入浅出地介绍了处理器、编译器、操作系统和网络环境,是这一领域的权威之作。本书适合作为计算机及相关专业的本科生教材,同时也适用于编程人员参考阅读。

模式分类 (第2版)[Richard O. Duda / Peter E. Hart / David G. Stork]

Pattern Classification (Second Edition)

本书的第1版是模式识别领域的奠基性著作。而今,Stork博士又从近年这一领域的最新成果中精选出重要的内容,对模式识别领域的发展进行了新的总结,并指明了对未来30年至关重要的问题。本书简明易读,新增的图表使得许多统计和数学题材非常生动,最终以完美和谐的形式,引导读者深入各种新的主题。

【计算机网络】

计算机网络 (第4版)[Andrew S. Tanenbaum]

Computer Networks (Fourth Edition)

Tanenbaum 的,好书呀...

TCP/IP 详解卷1:协议[W. Richard Stevens]

TCP/IP详解卷2:实现

TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议

TCP/IP Illustrated, Volume 1 : The Protocols

TCP/IP Illustrated, Volume 2 : The Implementation

TCP/IP Illstrated, Volume 3 : TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols

讲解 TCP/IP 协议的书有两套经典的,这一套是 Stevens 的。既然是 Stevens 的,那还有什么好犹豫的,想学就买。要注意的是,第二卷是讲 4.4BSD 的 TCP/IP 实现的,看清楚了是实现哦,很变态的。

TCP/IP 网络互连技术卷1:原理、协议和体系结构 (第3版)[Douglas E. Comer]

TCP/IP 网络互连技术卷2:设计与实现 (第2版)

TCP/IP 网络互连技术卷3:客户服务器编程和应用BSD套接字版 (第2版)

TCP/IP 网络互连技术卷3:客户服务器编程和应用Windows套接字版

Internetworking with TCP/IP Vol I : Principles, Protocols, and Architecture (Third Edition)

Internetworking with TCP/IP Vol II : Design, Implementation, and Internals (Second Edition)

Internetworking with TCP/IP Vol III : Client-Server Programming and Applications, BSD Socket Version (Second Edition)

Internetworking with TCP/IP Vol III : Client-Server Programming and Applications, Windows Sockets Version

另外一套很经典的讲 TCP/IP 协议的书,道格拉斯写的,只要有时间就应该看。据说这套书出新版了,大家买之前多观察观察。

【数学(Mathematics)】

201604个人观点:初学不看,精深后再看。因为数学在新人找工作时实际作用不大,对于基础的Coding看似也没什么用,不过如果你想有一天晋升为大牛,它将为你提供基础,主要学习的方向有:

离散数学

线性代数

概率论

图论

高等数学

离散数学及其应用 (第五版)

Discrete Mathematics and Its Applications (Fifth Edition)[Kenneth H.Rosen]

这本书就凭它是全世界 500 多所大学指定教材的事实就足以说明一切。

具体数学:计算机科学基础 (第2版)[Ronald L. Graham / Donald E. Knuth / Oren Patashnik]

Concrete Mathematics : A Foundation for Computer Science (Second Edition)

如果你打算学“计算机”而不是“电脑”的话,别忘了看这本书,讲述了算法的数学基础。

【数据结构&算法(Data Structures & Algorithms)】

201604个人观点:初学不看,精深后再看,理由同数学一样。

数据结构与程序设计 C 语言描述 (第二版)[Robert Kruse / C.L. Tondo / Bruce Leung]

Data Structures & Program Design In C (Second Edition)

大凡国外的数据结构教科书,都有一个共同的特点,就是他们的第一章都不是讲的数据结构,而是软件工程的基本原则。我个人认为这是十分必要的,特别是对于大多数没有接触过程序设计的同学来说,在数据结构这个可以说是第一次接触程序设计的课程中能学习到基本的软件工程原则,对于以后的学习是十分有好处的。至少,在我看来,写一个乱七八糟的程序出来还不如什么都不写。在我看来,这本书有两个优点:一、将软件工程的基本原则贯穿全书;二、简单,容易理解。

数据结构C++语言描述描述—应用标准模版库 (第二版)[William Ford, William Topp]

Data Structures with C++ Using STL (Second Edition)

这本书的重点是:一、用面向对象的观点解决数据结构问题;二、用 STL 解决数据结构问题。有兴趣的同学可以看看这本书的第一版,看一看不用 STL 的 C++ 数据结构是什么样子的。

算法导论 (第二版)[Thomas H. Cormen / Charles E. Leiserson / Ronald L. Rivest / Clifford Stein]

Introduction to Algorithms (Second Edition)

经典,没什么好说的。我看过的几本离散数学、数据结构、操作系统的书都引用到了这本书的内容。

计算机程序设计艺术[Donald E. Knuth]

第1卷基本算法 (第3版)

第2卷半数值算法 (第3版)

第3卷排序和查找 (第2版)

The Art of Computer Programming, Volume 1 : Fundamental Algorithms (Third Edition)

The Art of Computer Programming, Volume 2 : Seminumerical Algorithms (Third Edition)

The Art of Computer Programming, Volume 3 : Sorting and Searching (Second Edition)

在计算机技术领域,Knuth = The Art of Computer Programming = 一切数据结构和算法问题的答案。这一点就足够了。

【数据库(DataBase)】

数据库系统导论 (第7版)[C. J.Date]

An Introduction to Database Systems (Seventh Edition)

我看过的离散数学等好几本书上都引用了这本书的内容,其影响可见一斑。非常好的书,适合入门。不知道为什么 china-pub 上面没有影印的,我在学府都买到了。

数据库系统概念 (第四版)[Abraham Silberschat / Henry F.Korth / S.Sudarshan]

Database System Concepts (Fourth Edition)

除了 Operating System Concepts,Silberschat 另外一本非常出名的书就是这个了。没看过,大家看着办吧。

【操作系统(Operating System)】

操作系统概念 (第六版)[Abraham Silberschatz / Peter Baer Galvin / Greg Gagne]

Operating System Concepts (Sixth Edition)

另外一本龙书,讲操作系统的非常经典的一本书,优点是阐述概念非常清晰,容易理解。缺点就是纯粹的概念,没有讲实现。在现实中具体的实现往往并不象人们想象的那样。但不要以为我在说这本书的坏话。一般说来,一本好书在它写之前,作者肯定首先确定了这本书要面对的读者群。对你来说没用或者不好的书并不代表对其他人来说也没用(如果你不打算学核物理,这不表示讲核物理的书没用;也不要考上了大学,就鄙视你的小学课本)。如果你以后不打算去写一个操作系统的话,这本书再适合不过。

什么什么?为什么叫龙书呀?去买一本原版的看看封面就知道了...

操作系统:设计及实现 (第二版)[Andrew S. Tanenbaum / Albert S. Woodhull]

Operating Systems : Design and Implementation (Second Edition)

如果你希望看到一个操作系统是如何具体实现的,而你又没有能力马上读懂linux之类的内核源码的话,这本书非常适合你。它除了阐述概念,还结合一个“微型的 UNIX” - MINIX,讲述了如何实现一个真正的操作系统。这个操作系统不大,源码总共只有数万行、2兆多,但却是“麻雀虽小,五脏俱全”,操作系统该有的东西它差不多都有了,而且还遵循 POSIX 规范(当然,它并不能支持所有的 POSIX 规范,只是一部分)。如今风头正劲的 linux,就是以 MINIX 为蓝本和平台开发的。用一个小型的操作系统作为入门平台的好处是你不必牵涉进真正的操作系统的复杂的实现中。除了概念,一个真正的操作系统还要考虑到很多其他的东西。在学习的入门阶段,这些东西不会有什么帮助,只会让人抓狂。

本书的作者 Andrew S. Tanenbaum 博士一生写了好几本书,涉及操作系统、分布式操作系统、计算机网络等很多领域,每一本都在计算机教育领域产生了深远的影响。买书是要看作者的,有几个人写的书,不用看内容,掏钱买就行了。

UNIX系统内幕[Uresh Vahalia]

UNIX Internals : The New Frontiers

讲 UNIX 系统内核的非常经典的一本书。介绍了各个版本的 UNIX 内核以及它们所用的算法。如果你很希望了解 UNIX 内核,这本书就是你想要的。

4.4BSD操作系统设计与实现[Marshall Kirk McKusick / Keith Bostic / Michael J. Karels / John S.Quarterman]

The Design and Implementation of the 4.4BSD Operating System

UNIX 操作系统两大分支,BSD 和 System V,这一本是讲 BSD 内核实现的书。如果你对 BSD UNIX 内核感兴趣,这本是不可不看的。

UNIX操作系统设计[Maurice J.Bach]

The Design of The UNIX Operating System

同上,只不过这本是讲 System V 的。因为 AT&T 的版权问题,作者不能透露源代码,但是书中阐述了大量 System V 的实现算法。

莱昂氏UNIX源代码分析[John Lions]

Lions' Commentary on UNIX 6th Edition with Source Code

知道什么叫旷世奇书吗?这本就是。在当初因为 UNIX 的版权问题而无法发表的情况下,这本书居然流传 20 多年魅力不减,可谓前无古人。不过...再怎么说,UNIX 第六版似乎老了点...

分布式系统:原理与范例[Andrew S.Tanenbaum / Maarten van Steen]

Distributed Systems : Principles and Paradigms

分布式系统我没太大兴趣,但是这本书很经典的。

【编译原理(Compiler)】

编译原理技术与工具[Alfred V. Aho / Ravi Sethi / Jeffrey D. Ullman]

Compilers: Principles, Techniques, and Tools

计算机科学界有几本著名的“龙书”,这是其中一本。作者将读者比喻为一个手握宝剑和盾牌,跟一只恐龙战斗的骑士。除了有趣之外,这本书的质量也是无可挑剔。只是人邮影印的...总是那么贵,真该跟高教好好学学。再怎么说我也是学生嘛...

高级编译器设计与实现[Steven S. Muchnick]

Advanced Compiler Design and Implementation

与“龙书”齐名的另外一本讲编译原理的书。

【C 语言】

C程序设计语言[Brian W. Kernighan / Dennis Ritchie]

The C Programming Language

最经典的 C 语言书。其作者 Dennis Ritchie 就是 C 语言之父,UNIX 两个原作者之一。让我都不知道该怎么评价这本书了...总之,如果之前有一点程序设计基础的话,这本书很快就可以帮你在 C 语言的世界里登堂入室。但是,对于对编程一无所知的数学者来说,这本书还是困难了点。

如果你什么时候碰到了 K&R 的话(基本上,如果你搞计算机,想不碰到很难),那就是指这本书的两个作者。K&R 风格就是这本书里用的编码风格。

还要说的是,给出的链接是进口的,我这个四星会员也要209大洋。清华出的影印本绝版了...

C语言的科学和艺术

The Art and Science of C : A Library-Based Introduction to Computer Science

C程序设计的抽象思维[Eric S.Roberts]

Programming Abstractions in C : A Second Course in Computer Science

两本非常优秀的C入门书。说实话,要推荐一本 C 的入门书还真不容易,原因大概就是讲 C 语言的书实在太多了。幸运的是,在我们国家,能买到的影印版 C 语言教科书就那么寥寥几本,我们还有的选(真不知道是幸运还是不幸,幸好这两本书也是非常优秀,以至于可以忽略其它的存在了)。非常适合初学者。需要注意的是,《The Art and Science of C》为了更好的阐述概念,在书中用了作者自己开发的 C 库函数。在实际的 C 语言开发中,为了最大的标准性和可移植性,必须用 C 标准库。所以看完这本书之后很有必要看一看 K&R 的那本 C。《Programming Abstractions in C》实际上是讲数据结构和算法的,不过这两本书还是应该放在一起看。

C陷阱与缺陷[Andrew Koenig]

C Traps and Pitfalls

很多人推荐的书,虽说我没看过...

【C++ 语言】

C++ Primer (第三版)[Stanley B. Lippman / Josee Lajoie]

C++ Primer (Third Edition)

最好的 C++ 教科书。别看它的书名叫 Primer,实际上它的内容早就超出了一本入门书应有的范围。C++初学者最好的选择。潘爱民翻译的,质量还算有保证。

C++ 程序设计语言 (特别版)[Bjarne Stroustrup]

The C++ Programming Language (Special Edition)

C++ 之父 Bjarne Stroustrup 写的,非常经典的一本书,除了对于初学者来说困难了点。我的经验是,当我有了任何对 C++ 不理解的问题时,总可以在这本书上找到答案。如果你学 C++,这本书必须备着。(这本书好像是计算机系的专业英语阅读教材,看很多人拿着出去卖二手,真不识货...)

深度探索 C++ 对象模型[Stanley B. Lippman]

Inside the C++ Object Model

据说是一本“让很多 C++ 老手崩掉大牙”的书。虽说我没看过,不过既然侯捷都这么说了...

Effective C++ (第二版)[Scott Meyers]

Effective C++ (Second Edition)

More Effective C++[Scott Meyers]

又是 C++ 程序员不得不看的书,能极大的提高 C++ 编码效率。只有翻译的,不过这回是侯捷。

C++编程思想 (第二版)[Bruce Eckel]

Thinking in C++ (Second Edition)

C++编程思想第2卷:实用编程技术[Bruce Eckel / Chuck Alison]

Thinking in C++, Volume 2 : Practical Programming

Eckel 的好几本 Thinking in 系列都是不可多得的好书,也是必须看的(唉,当个 C++ 程序员真苦呀)。

C++沉思录[Andrew Koenig / Barbara Moo]

Ruminations on C++ : A Decade of Programming Insight and Experience

【面向对象(Object-Oriented)】

面向对象分析与设计 (第二版)[Grady Booch]

Object-Oriented Analysis and Design with Applications

本书是UML的创始人Grady Booch的代表作之一,也是此领域公认的不可替代的权威著作,在推动面向对象技术走向现实应用的过程中发挥了重要的作用,曾获得《Software Development》杂志的Jolt图书大奖。

反正是好书,我正在看。

面向对象软件构造 (第二版)[Bertrand Meyer]

Object-Oriented Software Construction (Second Edition)

据说是非常经典的 OO 圣经(一_一!~~哪来那么多圣经呀?),我唯一的感受就是 - 这本书好厚呀,比枕头还高...基于目前 OO 领域的混乱现状,本着兼收并蓄的原则,有时间一定看。

设计模式:可复用面向对象软件的基础

Design Patterns : Elements of Reusable Object-Oriented Software

学OO?那这本书就是必修课了。据作者称,他们在写这本书的时候,也不是很清楚他们到底在做什么(汗...)。据我所知,这种情况下一般只能出现两种结果:要么是一本糟烂到底的书,要么就是旷世奇书。这本是后者...

【软件工程(Software Engineering)】

软件工程 (第6版)[Ian Sommerville]

Software Engineering (6th Edition)

软件工程:实践者之路 (第5版)[Roger S. Pressman]

Software Engineering : A Practitioner's Approach (Fifth Edition)

软件工程:理论与实践 (第二版)[Shari Lawrence Pfleeger]

Software Engineering : Theory and Practice (Second Edition)

据说软件工程历来有理论派(俗称学院派)和实践派之分。不管他们怎么争论的,我在 china-pub 上找到这三本比较适合做教科书的。按我的理解,面向对象和软件工程这些东西,不象 UNIX 什么的有着严格的标准,那最好的学习办法就是兼收并蓄,学习所有人的理论,在此之上逐步形成自己的理解,这才是真正的学习之道。

人月神话[Frederick Phillips Brooks]

The Mythical Man-Month

软件工程领域一本传世之作,自第一版出世以来历经数十年而不朽。这个应该是最近重版的,增加了数篇文章,包括这些年来书中的理论在实践中的应用以及 Brooks 的反思。不可错过。特别要说的是,任何一个写操作系统的人都应该看一看这本书。Brooks 写这本书之前参与了 IBM 的 OS/350 操作系统的设计工作。总体来说,这是一个失败的系统。作者在这本书中详细总结了他的经验,从他艰苦的经历当中得出结论并告诉人们一个操作系统不应该怎么写。很多情况下,知道一件事不应该怎么做就等于知道了一件事应该怎么做。

软件体系结构:一门初露端倪学科的展望[Mary Shaw / David Garlan]

Software Architecture : Perspectives On an Emerging Emerging Discipline

软件体系结构也是一门比较新兴的学科,这本书可以说是这一领域的开山之作,在讨论软件体系结构的文章中,这本书是被引用的最多的。

【UNIX编程(UNIX Programming)】

UNIX 环境高级编程[W. Richard Stevens]

Advanced Programming in the UNIX Environment

Stevens 一生写了六本书(好像是),每一本都是传世经典。让我评价?还是让我跳楼先吧...买吧,反正我全买了~话说回来,搞 UNIX 的有几个不知道 Stevens(您是从火星来的吧?)?数数历史上,有几个人一辈子没有写过一篇攻击计算机的文章,去世后却有全世界的 hacker 撰文哀悼的?

中国所谓的各位 hacker 大爷们,省省吧!你以为利用已经发现的漏洞攻陷了几个计算机,你就是 hacker 了?那叫 cracker,意思是破坏者!再说,hacker 这个名字是自己给自己封的吗?所谓 hacker,是指技术圈里所有的人对于你技术的承认。哪有自己给自己封爵位的?

这本书主要是讲 UNIX 系统调用的。

UNIX 编程环境[Brianw. Kernighan]

The UNIX Programming Environment

据说比 Stevens 那本容易。我没看,反正 Stevens 的也非常容易,前提是你要有一点操作系统知识,以及一些 UNIX 使用经验(连 UNIX 都不会用学什么 UNIX 编程?)。

UNIX 网络编程卷1:套接字联网API (第三版)

UNIX 网络编程卷2:进程间通信 (第2版)

UNIX Network Programming, Volume 1 : The Sockets Networking API (Third Edition)

UNIX Network Programming Volume 2 : Interprocess Communications (Second Edition)

其实这两本书是讲网络编程的。不过鉴于针对的是 UNIX,还是放到这里。总之只要是 Stevens 的书,就没有什么好怀疑的。

UNIX 程序设计艺术[Eric Raymond]

The Art of UNIX Programming

本书是作者封笔30年后历时5年创作而成,是一部难得的软件工程方面的佳作作者首次将哲学、设计模式、工具、文化和传统结合在一起,使得UNIX成为世界上最好且最具创新意义的软件,并展示了如何将其拓展到Linux和当今的开源(open-source)运动中:通过取自最主要的开源项目中的示例,作者向UNIX和Linux编程人员展示了如何更巧妙地创建软件,使其更雅致、更灵巧、更具可重用性且具有更长的生命期。

【UNIX系统管理(UNIX Administration)】

UNIX系统管理技术手册 (第三版)[Evi Nemeth / Garth Snyder]

UNIX System Administration Handbook (Third Edition)

Linux系统管理技术手册[Evi Nemeth / Garth Snyder / Trent R.Hein]

Linux Administration Handbook

据说这两本书,前一本的第一版由 UNIX 之父 Dennis Ritchie 作序,第三版和后一本由 Linux 之父 Linus Torvalds 作序。这这这...还让我说什么好呢???

UNIX 技术内幕 (第四版)[Robin Anderson / Andy Johnston ...]

UNIX Unleashed (Fourth Edition)

本书是由十几位经验丰富的系统管理员编写的,内容涉及系统管理的方方面面,包括如何构建自己的网络入侵侦测系统、身份验证、加密技术、安全及Web服务的建立和维护等。通过阅读本书,能让一名普通的UNIX用户快速成长为一名初中级系统管理人员。也是一本很经典的书。

UNIX操作系统教程[Syed Mansoor Sarwar / Robert Koretsky / Syed Aqeel Sarwar]

UNIX:The Textbook

我看的第一本 UNIX 教程。浅显易懂,不止告诉你如何去做,而且告诉你为什么应该这样,里面都发生了什么事情。适合初学者。

UNIX 备份与恢复[W.Curtis Preston]

Unix Backup & Recovery

如果你不懂的备份和恢复,那你还没有资格做 UNIX 系统管理员...

【Windows 编程(Windows Programming)】

Microsoft Windows 2000 技术内幕 (第3版)[David A.solomon Mark E.Russinovich]

Inside Microsoft Windows 2000 (Third Edition)

虽说我已经暂时不再研究 Windows 下的程序设计了,但我对此还是比较了解的。下面这几本书都是无可置疑的经典之作。

准确的说,这本书不是讲程序设计的,而是讲 Windows 操作系统的。但是显然的,如果你不了解 Windows,那么当你的程序写到一定程度时,你一定会碰到不可逾越的障碍。

Windows 编程 (第5版)[Charles Petzold]

Programming Windows (Fifth Edition)

曾经的 Windows 程序设计圣经(又来一个圣经?)。虽说近些年来 MFC 这些东西的应用让这本书不再像以前那么光彩照人,但如果你打算一探 MFC 的本质的话,这本书就是你的稻草~

Microsoft Windows应用程序设计[Jeffrey Richter]

Programming Applications for Microsoft Windows

和 Petzold 那本一样经典。只不过这本侧重点不同,主要涉及 Windows 下的进程、线程等等比较深层次的东西。

Visual C++.NET 技术内幕 (第6版)[George Shepherd / David Kruglinski]

Programming with Microsoft Visual C++ .NET (Sixth Edition)

微软出版的讲 MFC 的书,前身是 Inside Microsoft Visual C++ (这个都该知道吧)。第四版出版以后,原作者在一次滑翔伞事故中去世,这是别人接着出的。

深入浅出MFC

Dissecting MFC

非常好的一本书,把 MFC 剖开来,看看里面是如何工作的。虽说现代的软件工程思想是封装和隐藏,但大部分情况下如果你知道里面是什么样的话,你可以让它工作得更好。

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?