所在的位置: java >> 历史起源 >> 程序员必读书单

程序员必读书单

程序设计1.基础理论

编码:隐匿在计算机软硬件背后的语言这本书其实不应该叫编码——它更应该叫“Petzold教你造计算机”——作者CharlesPetzold创造性的以编码为主题,从电报机和手电筒讲到数字电路,然后利用数字电路中的逻辑门构造出加法器和触发器,最后构造出一个完整的存储程序计算机。不要被这些电路概念吓到——编码使用大量形象贴切的类比简化了这些概念,使其成为最精彩最通俗易懂的计算机入门读物。

深入理解计算机系统(第2版)这本书的全名是:ComputerSystems:AProgrammersPerspective(所以它又被称为CSAPP),我个人习惯把它翻译为程序员所需了解的计算机系统知识,尽管土了些,但更名副其实。

深入理解计算机系统是我读过的最优秀的计算机系统导论型作品,它创造性的把操作系统,计算机组成结构,数字电路,以及编译原理这些计算机基础学科中的核心概念汇集在一起,从而覆盖了指令集体系架构,汇编语言,代码优化,计算机存储体系架构,链接,装载,进程,以及虚拟内存这些程序员所需了解的关键计算机系统知识。如果想打下扎实的计算机基础又不想把操作系统计算机结构编译原理这些书统统读一遍,阅读深入理解计算机系统是最有效率的方式。

延伸阅读:

世界是数字的:KR中的K(BrianKernighan)的近作,这本书源自Brian在普林斯顿大学所教授的计算机基础课程,以通俗易懂的方式讲述了现代人所应了解的计算机知识和网络知识;

图灵的秘密:他的生平、思想及论文解读:CharlesPetzold的另一部作品,这本书以图灵的论文论可计算数及其在判定问题上的应用(OnComputableNumbers,withanApplicationtotheEntscheidungsproblem)为主题,阐述了图灵机(现代计算机的始祖)的构造,原理,以及应用。

计算机系统概论(第2版):另一部优秀的计算机系统导论型作品,和深入理解计算机系统不同,这本书采用自下而上的方式,从二进制,和数字逻辑这些底层知识一步步过渡到高级编程语言(C),从而以另一种方式理解计算机系统。

2.编程语言

编程语言是程序员必不可少的日常工具。工欲善其事,必先利其器。我在这里给出了C,C++,Java,C#,JavaScript,和Python这六种常用编程语言的书单(我个人不熟悉Objective-C和PHP,因此它们不在其中)。

需要注意的是:我在这里给出的是编程语言(ProgrammingLanguage)书籍,而非编程平台(ProgrammingPlatform)书籍。以Java为例,EffectiveJava属于编程语言书籍,而Android编程权威指南就属于编程平台书籍。

C

忘记谭浩强那本糟糕不堪的C程序设计,C和指针才是C语言的最佳入门书籍。它详细但又不失简练的介绍了C语言以及C标准库的方方面面。

对于C语言初学者,最难的概念不仅仅是指针和数组,还有指向数组的指针和指向指针的指针。C和指针花了大量的篇幅和图示来把这些难懂但重要的概念讲的清清楚楚,这也是我推荐它作为C语言入门读物的原因。

尽管C程序设计语言是二十多年前的书籍,但它仍然是C语言——以及计算机科学中最重要的书籍之一,它的重要性不仅仅在于它用清晰的语言和简练的代码描述了C语言全貌,而且在于它为之后的计算机书籍——尤其是编程语言书籍树立了新的标杆。以至于在很多计算机书籍的扉页,都会有“感谢Kernighan教会我写作”这样的字样。

延伸阅读:

C专家编程:不要被标题中的“专家”吓到,这实际是一本很轻松的书籍,它既包含了大量C语言技术细节和编程技巧,也包含了很多有趣的编程轶事;

C陷阱与缺陷:书如其名,这本书介绍了C语言中常见的坑和一些稀奇古怪的编程“技巧”,不少刁钻的C语言面试题都源自这本小册子;

C语言参考手册:全面且权威的C语言参考手册,而且覆盖C99,如果你打算成为C语言专家,那么这本书不可错过;

C标准库:给出了15个C标准库的设计思路,实现代码,以及测试代码,配合C程序设计语言阅读效果更佳;

C语言接口与实现:这本书展示了如何使用C语言实现可复用的数据结构,其中包含大量C语言高级技巧,以至于Amazon上排行第一的评论是“ProbablythebestadvancedCbookinexistance”,而排行第二的评论则是“ByfarthemostadvancedCbookIread”。

C++

作为C++的发明者,没有人能比BjarneStroustrup更理解C++。Bjarne在TexasAM大学任教时使用C++为大学新生讲授编程,从而就有了C++程序设计原理与实践这本书——它面向编程初学者,既包含C++教程,也包含大量程序设计原则。它不但是我读过最好的C++入门书,也是我读过最好的编程入门书。

比较有趣的是,C++程序设计原理与实践直到全书过半都没有出现指针,我想这可能是Bjarne为了证明不学C也可以学好C++吧。

同样是BjarneStroustrup的作品,C++程序设计语言是C++最权威且最全面的书籍。第4版相对于之前的版本进行了全面的更新,覆盖了第二新的C++11标准,并砍掉了部分过时的内容。

延伸阅读:

ATourofC++:如果你觉得C++程序设计语言过于庞大,但你又想快速的浏览一遍新版C++的语言特色,那么可以试试这本小红书;

C++语言的设计与演化:C++的“历史书”,讲述了C++是如何一步一步从CwithClasses走到如今这一步,以及C++语言特性背后的故事;

C++标准库(第2版):相对于其它语言的标准库,C++标准库虽然强大,但学习曲线十分陡峭,这本书是学习C++标准库有力的补充;

深度探索C++对象模型:这本书系统的讲解了C++是如何以最小的性能代价实现对象模型,很多C++面试题(包括被问烂的虚函数指针)都可以在这本书里找到答案;

EffectiveC++和MoreEffectiveC++:由于C++的特性实在繁杂,因此很容易就掉到坑里。Effective系列既讲述了C++的良好编程实践,也包含C++的使用误区,从而帮你绕过这些坑。

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权威指南:来自OReilly的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编写出简洁高效的异步程序。

Python

Python的入门书籍很多,而且据说质量大多不错,我推荐Python基础教程的原因是因为它是我的Python入门读物——简洁,全面,代码质量很不错,而且有几个很有趣的课后作业,使得我可以快速上手。

这里顺便多说一句,不要用Python学习手册作为Python入门——它的废话实在太多,你能想象它用了15页的篇幅去讲解if语句吗?尽管OReilly出了很多经典编程书,但这本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







































白癜风最好医院
白癜风医院去哪家最好



转载请注明:http://www.jiaju1314.com/lsqy/2086.html