本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。
优秀的程序员应该具备两方面能力:
良好的程序设计能力:
掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列);
理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络);
熟悉至少两门以上编程语言(例如C++,Java,C#,和Python);
专业的软件开发素养:
具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码;
把握客户需求,按时交付客户所需要的软件产品;
理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。
和其它能力一样,程序设计能力和软件开发素养源自项目经验和书本知识。项目经验因人而异(来自不同领域的程序员,项目差异会很大);但书本知识是相通的——尤其是经典图书,它们都能够拓宽程序员的视野,提高程序员的成长速度。
在过去几年的学习和工作中,我阅读了大量的程序设计/软件开发书籍。随着阅读量的增长,我意识到:
经典书籍需要不断被重读——每一次重读都会有新的体会;
书籍并非读的越多越好——大多数书籍只是经典书籍中的概念延伸(有时甚至是照搬);
意识到这两点之后,我开始思考一个很功利的问题:如何从尽可能少的书中,获取尽可能多的关键知识?换句话说:
优秀的程序员应该掌握哪些关键概念?
哪些书籍来可以帮助程序员掌握这些关键概念?
这即是这篇文章的出发点——我试图通过程序员必读书单这篇文章来回答上面两个问题。
-----------------------------续集开始--------------------------------------
Java平心而论Java核心技术(即CoreJava)并不算是一本特别出色的书籍:示例代码不够严谨,充斥着很多与C/C++的比较,语言也不够简洁——问题在于Java并没有一本很出色的入门书籍,与同类型的Java编程思想相比,Java核心技术至少做到了废话不多,与时俱进(Java编程思想还停留在Java6之前),矮子里面选将军,Java核心技术算不错了。
尽管Java没有什么出色的入门书籍,但这不代表Java没有出色的必读书籍。EffectiveJava是我读过的最好的编程书籍之一,它包含大量的优秀Java编程实践,并对泛型和并发这两个充满陷阱的Java特性给出了充满洞察力的建议,以至于Java之父JamesGosling为这本书作序:“我很希望10年前就拥有这本书。可能有人认为我不需要任何Java方面的书籍,但是我需要这本书。”
延伸阅读:
深入理解Java虚拟机(第2版):非常优秀且难得的国产佳作,系统的介绍了Java虚拟机和相关工具,并给出了一些调优建议;
Java程序员修炼之道:在这本书之前,并没有一本Java书籍系统详细的介绍Java7的新特性(例如新的垃圾收集器,tryusing结构和invokedynamic指令),这本书填补了这个空白;
Java并发编程实践:系统全面的介绍了Java的并发,如何设计支持并发的数据结构,以及如何编写正确的并发程序;
JavaPuzzlers:包含了大量的Java陷阱——以至于读这本书时我说的最多的一个词就是WTF,这本书的意义在于它是一个反模式大全,EffectiveJava告诉你如何写好的Java程序,而JavaPuzzlers则告诉你糟糕的Java程序是什么样子。更有意思的是,这两本书的作者都是JoshuaBloch。
C#可能你会疑问我为什么会推荐这本接近页的“巨著”用作C#入门,这是我的答案:
C#的语言特性非常丰富,很难用简短的篇幅概括这些特性;
精通C#之所以有近页的篇幅,是因为它不但全面介绍了C#语言,而且还覆盖了ADO.NET,WCF,WF,WPF,以及ASP.NET这些.Net框架。你可以把这本书视为两本书——一本多页的C#语言教程和一本多页的.Net平台框架快速上手手册。
尽管标题带有“精通”两字,精通C#实际上是一本面向初学者的C#书籍,你甚至不需要太多编程知识,就可以读懂它。
CLRviaC#是C#/.Net最重要的书籍,没有之一。它全面介绍了.Net的基石——CLR的运行原理,以及构建于CLR之上的C#类型系统,运行时关系,泛型,以及线程/并行等高级内容。任何一个以C#为工作内容的程序员都应该阅读此书。
延伸阅读:
深入理解C#(第3版):C#进阶必读,这本书偏重于C#的语言特性,它系统的介绍了C#从1.0到C#4.0的语言特性演化,并展示了如何利用C#的语言特性编写优雅的程序;
.NET设计规范(第2版):C#专业程序员必读,从变量命名规范讲到类型系统设计原则,这本书提供了一套完整的.Net编程规范,使得程序员可以编写出一致,严谨的代码,
C#5.0权威指南:来自O’Reilly的C#参考手册,严谨的介绍了C#语法,使用,以及核心类库,C#程序员案头必备;
LINQtoObjectsUsingC#4.0和AsyncinC#5.0:LINQ和async分别是.Net3.5和.Net4.5中所引入的最重要的语言特性,所以我认为有必要在它们上面花点功夫——这两本书是介绍LINQ和async编程的最佳读物。
JavaScript尽管JavaScript现在可以做到客户端服务器端通吃,尽管JQuery之类的前端框架使得一些人可以不懂JavaScript也可以编程,但我还是认为学习JavaScript从HTMLDOM开始最为适合,因为这是JavaScript设计的初衷。JavaScriptDOM编程艺术系统的介绍了如何使用JavaScript,HTML,以及CSS创建可用的Web页面,是一本前端入门佳作。
JavaScript语言包含大量的陷阱和误区,但它却又有一些相当不错的特性,这也是为什么DouglasCrockford称JavaScript为世界上最被误解的语言,并编写了JavaScript语言精粹一书来帮助前端开发者绕开JavaScript中的陷阱。和同类书籍不同,JavaScript语言精粹用精炼的语言讲解了JavaScript语言中好的那部分(例如闭包,函数是头等对象,以及对象字面量),并建议读者不要使用其它不好的部分(例如混乱的类型转换,默认全局命名空间,以及奇葩的相等判断符),毕竟,用糟糕的特性编写出来的程序往往也是糟糕的。
延伸阅读:
JavaScript高级程序设计(第3版):详尽且深入的介绍了Javascript语言,DOM,以及Ajax,并针对HTML5做了对应更新;
JavaScript权威指南(第6版):这本书的第5版曾被前端专家DouglasCrockford称之为“唯一靠谱的JavaScript书”。相对于JavaScript高级程序设计,JavaScript权威指南更像是一本案头参考书,当然如果你感兴趣也可以从头读到尾;
编写可维护的JavaScript:书如其名,这本书给出了大量的优秀JavaScript编程实践,使得程序员编写出健壮且易于维护的JavaScript代码;
JavaScript异步编程:和常见的支持并发的编程语言(例如Java和C#)不同,JavaScript本身是单线程的,因此不能把其它语言处理并发的方式照搬到JavaScript。JavaScript异步编程系统的介绍了JavaScript中的并发原理,并阐述了如何使用Promise、Deferred以及Async.js编写出简洁高效的异步程序。
PythonPython的入门书籍很多,而且据说质量大多不错,我推荐Python基础教程的原因是因为它是我的Python入门读物——简洁,全面,代码质量很不错,而且有几个很有趣的课后作业,使得我可以快速上手。
这里顺便多说一句,不要用Python学习手册作为Python入门——它的废话实在太多,你能想象它用了15页的篇幅去讲解if语句吗?尽管O’Reilly出了很多经典编程书,但这本Python学习手册绝对不在其中。
权威且实用的Python书籍,覆盖Python2和Python3。尽管它名为参考手册,但Python参考手册在Python语法和标准库基础之上对其实现机制也给出了深入的讲解,不容错过。
延伸阅读:
Python袖珍指南(第5版):实用且便携的Python参考手册,我会说我在飞机上写程序时用的就是它么-_-#;
PythonCookbook(第3版):非常好的Python进阶读物,包含各种常用场景下的Python代码,使得读者可以写出更加Pythonic的代码;
Python编程实战:运用设计模式、并发和程序库创建高质量程序:Python高级读物,针对Python3,年的Jolt大奖图书,不可错过;
Python源码剖析:少见的国产精品,这本书以Python2.5为例,从源代码出发,一步步分析了CPython是如何实现类型,控制流,函数/方法的声明与调用,类型以及装饰器等Python核心概念,读过之后会大大加深对Python的理解。尽管这本书有些过时,但我们仍然可以按照它分析源代码的方式来分析新版Python。
3.编程语言理论大多数程序员并不需要从头编写一个编译器或解释器,因此龙书(编译原理)就显得过于重量级;然而多数程序员还是需要解析文本,处理配置文件,或者写一个小语言,编程语言实现模式很好的满足了这个需求。它把常用的文本解析/代码生成方法组织成一个个模式,并为每个模式给出了实例和应用场景。这本书既会提高你的动手能力,也会加深你对编程语言的理解。Python发明者GuidovanRossum甚至为这本书给出了“Throwawayyour治疗白癜风的药北京哪个医院治疗白癜风最有效