这份书单涵盖了软件开发各个关键领域的必读书籍,它可以满足绝大多数程序员的学习需求,无论你是初学者,还是进阶者,都可以从中获益。
点击每本书名下方的百度网盘链接,即可跳转到百度网盘下载此书。每本书籍都会尽量提供中文版和英文版。
优秀的程序员应该具备两方面能力:
1.良好的程序设计能力
- 理解计算机科学的核心概念(计算机系统结构、操作系统、编译原理、计算机网络等)
- 熟悉至少两门以上编程语言(Java、 C++、C#、Python等)
- 掌握常用的数据结构和算法(堆、栈、队列、链表、排序、散列等)
2.专业的软件开发素养
- 具备良好的编程实践,能够编写可测试、可扩展、可维护的代码
- 把握客户需求,按时交付客户所需要的软件产品
- 理解现代软件开发过程中的核心概念
与其它能力一样, 程序设计能力和软件开发素养主要来自项目经验和书本知识。
项目经验因人而异,不同领域的程序员,项目差异会很大,但书本知识是相通的——尤其是经典书籍,它们都能够拓宽程序员的视野,加速程序员的成长。
本文档的目的就是让程序员阅读尽可能少的书籍,获取尽可能多的知识。
书籍选择标准遵循以下原则:
- 必读:学习某项技术,无论如何都不能错过的一本书
- 全面:能够覆盖软件开发中的重要概念
- 通用:适用每位程序员,与特定方向无关
按这三个标准,书单可分为基础理论、编程语言、软件设计、和自我修养四类,每类均由若干概念组成。
基础理论
- 计算机原理
- 入门书籍 | 编码:隐匿在计算机软硬件背后的语言
- 必读书籍 | 深入理解计算机系统
- 延伸阅读 | 计算机系统概论
- 操作系统
- 入门书籍 | 鸟哥的Linux私房菜
- 必读书籍 | 现代操作系统
- 计算机网络
- 入门书籍 | 计算机网络:自顶向下方法
- 必读书籍 | 计算机网络(第五版)
- 编译原理
- 入门书籍 | 计算机程序的构造和解释
- 必读书籍 | 编译原理
编程语言
- C
- 入门书籍 | C 和指针
- 必读书籍 | C 程序设计语言(第 2 版)
- 延伸阅读 | C 陷阱与缺陷
- C++
- 入门书籍 | C++ 程序设计原理与实践
- 必读书籍 | C++程序设计语言(第 4 版)
- 延伸阅读 | Effective C++
- Java
- 入门书籍 | Java 核心技术(第9版)
- 必读书籍 | Effective Java(第 2 版)
- 延伸阅读 | Java 编程思想
- JavaScript
- 入门书籍 | JavaScript DOM编程艺术(第2版)
- 必读书籍 | JavaScript 语言精粹
- 延伸阅读 | JavaScript 权威指南(第 6 版)
- Python
- 入门书籍 | Python 基础教程(第二版)
- 必读书籍 | Python参考手册(第 4 版)
- 延伸阅读 | Python 编程实战:运用设计模式、并发和程序库创建高质量程序
软件设计
- 算法与数据结构
- 入门书籍 | 算法(第4版)
- 必读书籍 | 编程珠玑(第 2 版)
- 延伸阅读 | 数据结构与算法分析
- 数据库设计
- 必读书籍 | Oracle Database 9i/10g/11g 编程艺术
- 延伸阅读 | 高性能 MySQL
- 设计模式
- 入门书籍 | Head First设计模式
- 必读书籍 | 设计模式
- 延伸阅读 | 算法导论(第 3 版)
- 前端设计
- 入门书籍 | 写给大家看的设计书
- 必读书籍 | 认知与设计:理解 UI 设计准则
- 延伸阅读 | 界面设计模式(第 2 版)
自我修养
- 代码修养
- 入门书籍 | 程序员修炼之道:从小工到专家
- 必读书籍 | 程序员职业素养
- 延伸阅读 | 暗时间
- 英语能力
- 入门书籍 | 17天搞定GRE单词
- 必读书籍 | GRE&GMAT阅读难句教程
- 延伸阅读 | 经济学人精翻
本章节主要包括计算机原理、操作系统、计算机网络、编译原理等内容,基本涵盖了程序员应该掌握的计算机基础知识。
这本书以极其简单有趣的语言为我们构造了一个计算机的大体轮廓,让我们对于计算机运行原理的理解更加完整且通畅。
百度网盘链接
原书名为《Computer Systems A Programmer’s Perspective》,当前最新版为第3版。
本书最大优点是为程序员描述计算机系统的实现细节,帮助其在大脑中构造一个层次型的计算机系统。从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。通过掌握程序是如何映射到系统,以及程序是如何执行的,你能够更好地理解程序的运行为什么是这样的,以及效率低下是如何造成的。
另一部优秀的计算机系统导论型作品,与《深入理解计算机系统》不同,这本书采用自下而上的方式,从二进制、和数字逻辑这些底层知识一步步过渡到高级编程语言(C),从而以另一种方式理解计算机系统。
这本书会让你对计算机和操作系统,以及 Linux 有一个非常全面的了解,并能够管理或是操作好一个 Linux 系统。
百度网盘链接
这本书是操作系统领域的经典之作,书中集中讨论了操作系统的基本原理,包括进程、线程、存储管理、文件系统、输入/输出、死锁等,同时还包含了有关计算机安全、多媒体操作系统、掌上计算机操作系统、微内核、多核处理机上的虚拟机以及操作系统设计等方面的内容。
这本书采用了独创的自顶向下方法,即从应用层开始沿协议栈向下讲解计算机网络的基本原理,强调应用层范例和应用编程接口,内容深入浅出,注重教学方法,理论与实践相结合,是一本不可多得的教科书。
百度网盘链接
这本书是国内外使用最广泛、最权威的计算机网络经典教材。全书按照网络协议模型自下而上(物理层、数据链路层、介质访问控制层、网络层、传输层和应用层)有系统地介绍了计算机网络的基本原理,并结合 Internet 给出了大量的协议实例。
这本书还与时俱进地引入了最新的网络技术,包括无线网络、3G 蜂窝网络、RFID 与传感器网络、内容分发与 P2P 网络、流媒体传输与 IP 语音,以及延迟容忍网络等。
另外,本书针对当前网络应用中日益突出的安全问题,用了一整章的篇幅对计算机网络的安全性进行了深入讨论,而且把相关内容与最新网络技术结合起来阐述。
这本书中主要证实了很多程序是怎么构造出来的,以及程序的本质是什么。整本书主要是使用 Scheme/Lisp 语言,从数据抽象、过程抽象、迭代、高阶函数等编程和控制系统复杂性的思想,到数据结构和算法,到编译器/解释器、编程语言设计。
百度网盘链接
这本书全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。每章中都提供了大量的系统及参考文献。
编程语言对软件开发至关重要,在此主要选择了 C、C++、Java、Python 及 JavaScript 五门主流编程语言进行介绍。
对于C语言初学者,最难的概念不仅仅是指针和数组,还有指向数组的指针和指向指针的指针,这本书花了大量的篇幅和图示来把这些难懂但重要的概念讲的清清楚楚。
百度网盘链接
这本书不仅用清晰的语言和简练的代码描述了 C 语言全貌,而且也为后来的计算机书籍树立了新的标杆。
书如其名,这本书介绍了 C 语言中常见的坑和一些稀奇古怪的编程技巧,不少刁钻的C语言面试题源自这本小册子。
它面向编程初学者,既包含 C++ 教程,也包含大量程序设计原则,是一本书非常好的编程入门书。
百度网盘链接
它是 C++ 最权威且最全面的书籍。你主要可以看这几点,一个是面向对象的多态,一个是模板和重载操作符,以及一些 STL 的东西。看看 C++ 是怎么玩泛型和函数式编程的。
这本书的内容会随着你经历的丰富而变得丰富,作者的思维方式和不断求真的精神,值得学习。
对于 Java 初学者来说,它是一本非常不错的值得时常翻阅的技术手册。书中有较多地方进行了 Java 与 C++ 的比较。
百度网盘链接
它包含了大量的优秀Java编程实践,并对泛型和并发这两个充满陷阱的 Java 特性给出了充满洞察力的建议,以至于 Java 之父 James Gosling 为这本书作序:“我很希望 10 年前就拥有这本书。可能有人认为我不需要任何 Java 方面的书籍,但是我需要这本书。”
真是一本透着编程思想的书。这本书可以让你从一个宏观角度了解 Java。这本书和 Java 核心技术的厚度差不多,但这本书的信息密度比较大。所以,读起来是非常耗大脑的,因为它会让你不断地思考。对于想学好 Java 的程序员来说,这是一本必读的书。
它系统的介绍了如何使用JavaScript,HTML,以及 CSS 创建可用的 Web 页面,是一本前端入门佳作。
百度网盘链接
它用精炼的语言讲解了JavaScript语言中良好的部分(如闭包,函数是头等对象,以及对象字面量),并建议读者不要使用其它不好的部分(例如混乱的类型转换,默认全局命名空间,以及 奇葩的相等判断符 )。
这本书的第5版曾被前端专家 Douglas Crockford 称之为“唯一靠谱的 JavaScript 书”。它更像是一本案头参考书,当然如果你感兴趣也可以从头读到尾。
Python 的入门书籍很多,选这本书作为Python入门读物,主要是内容简洁,全面,代码质量不错。
百度网盘链接
权威且实用的Python 书籍,覆盖 Python 2和 Python 3,它在 Python 语法和标准库基础之上对其实现机制也给出了深入的讲解。
Python 高级读物,主要针对 Python 3,2014 年的 Jolt 大奖图书。
本章节主要包括算法与数据结构、数据库设计、设计模式、界面设计等部分。
算法领域经典的参考书,不但全面介绍了关于算法和数据结构的必备知识,还给出了每位程序员应知应会的 50 个算法,并提供了实际代码。最不错的是,其深入浅出的算法介绍,让一些比较难的算法也变得容易理解,尤其是书中对红黑树的讲解非常精彩。其中,还有大量的图解,详尽的代码和讲解,也许是最好的数据结构入门图书。
百度网盘链接
写这本书的人是世界著名计算机科学家乔恩·本特利(Jon Bentley),被誉为影响算法发展的十位大师之一。这本书也是很经典的算法书,其中都是一些非常实际的问题,并以其独有的洞察力和创造力,来引导读者理解并学会解决这些问题的方法,也是一本可以改善你思维方式的书。
这本书曾被评为 20 世纪顶尖的 30 部计算机著作之一,作者 Mark Allen Weiss 在数据结构和算法分析方面卓有建树,他在数据结构和算法分析等方面的著作尤其畅销,并广受好评,已被世界 500 余所大学用作教材。
无论是开发人员还是 DBA,它都是必读的书。这本书的作者是 Oracle 公司的技术副总裁托马斯·凯特(Thomas Kyte),他也是世界顶级的 Oracle 专家。
这本书中深入分析了 Oracle 数据库体系结构,包括文件、内存结构以及构成 Oracle 数据库和实例的底层进程,利用具体示例讨论了一些重要的数据库主题,如锁定、并发控制、事务等。同时分析了数据库中的物理结构,如表、索引和数据类型,并介绍采用哪些技术能最优地使用这些物理结构。
这本书是 MySQL 领域的经典之作,拥有广泛的影响力。不但适合数据库管理员(DBA)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,都能从本书中有所收获。
它使用风趣的语言和诙谐的图示讲述了观察者,装饰者,抽象工厂,和单例等关键设计模式,使得初学者可以迅速的理解并掌握设计模式。
百度网盘链接
作为设计模式领域的开山之作,Erich Gamma,Richard Helm,Ralph Johnson等四位作者将各个领域面向对象程序开发的经验总结成三大类23种模式,并给出了每个模式的使用场景,变体,不足,以及如何克服这些不足。这本书行文严谨紧凑(四位作者都是PhD),并且代码源自实际项目,属于设计模式领域的必读之作。
美国的本科生教材,这本书应该也是中国计算机学生的教材。
它覆盖了版式,色彩,和字体这三个设计中的关键元素,并创造性的为版式设计总结出CRAP四大原则(Contrast 对比,Repetition 重复,Alignment 对齐,Proximity 亲密)。全书使用丰富生动的范例告诉读者什么是好的设计,什么是不好的设计,使得即便是对设计一无所知的人,也可以从这本书快速入门。
百度网盘链接
这本书更强调理论,即为什么我们会接受这样的设计而反感那样的设计。如果你想要搞清楚设计背后的心理学知识,但又不想阅读大部头的心理学著作,那么这本书是你的首选。
这本书将用户界面中的常见元素/行为组织成彼此关联的模式,以便读者理解并举一反三,从而将其运用到自己的应用中。
软件开发是一项需要不断强化的技能,训练思维方式可以有效的提升学习能力和学习效率。
为了让更多的人了解你的作品,良好的英语能力必不可少。
这是一本价值极高的程序员成长手册。这本书并不局限于特定的编程语言或框架,而是提出了一套切实可行的开发哲学,并通过程序设计,测试,编程工具,以及项目管理等方面的实例展示了如何应用这套开发哲学,从而使得程序员更加高效专业。
百度网盘链接
它指出了专业程序员应该是什么样子;知道自己在做什么;知道何时说不,何时说是;在正确的时间编写正确的代码;懂得自我时间管理和工期预估;知道如何应对压力。如果你想成为专业程序员,这本书会为你指明前进的方向。
一本关于学习思维方法的文章集,既包含了学习方法的思考,也包含了大量进一步阅读的资源。
书中深入浅出地讲解了一套行之有效的记忆学理论,针对记单词提供了一个科学实用的学习计划。本书适用于所有学习单词的读者。
百度网盘链接
如果已经解决了基本的词汇和语法,这本书绝对可以教会你如何“解剖”长难句,我们可以从作者提供的训练方法中取得快速的进步。当然,不可能一开始就一帆风顺的,反复阅读中,你将慢慢学会如何阅读那些长难句,再也不惧深奥的学术文章。
这是一套《经济学人》杂志的精翻集,里面包含了详细的单词讲解,句型分析,以及晦涩难懂句子的出处,精读一个月,英语阅读内力绝对大增。
全套书籍,可以关注公众号【量子论】,回复「书单」两个字,直接打包下载全部高清电子版。
图一论 图二盘
书籍全部来自网络,如有侵权,请随时联系,我立刻删除,谢谢。
本仓库仅作学习交流分享使用,不作任何商用。