作为程序员,面对日新月异的技术,我们必须不断的坚持学习来拓展知识面,加深技术理解,提高自身竞争力。但是技术相关的书籍浩如烟海,如何选择成为摆在我们眼前的问题?今天我从编程语言、算法与数据结构、数据库、网络编程、软件开发等5个方面聊下有哪些经典书籍值得我们仔细阅读。在最后我也总结了所有书籍的pdf版本,大家可以直接下载阅读。
1. 编程语言
C和C++
《C程序设计语言》
C语言的设计者之一DennisM.Ritchie 和著名的计算机科学家 BrianW.Kernighan 合著的一本介绍C语言的经典著作。这本书在短小的篇幅的范围做到真正的深入浅出,如果你以前对 C 语言或者大部头的书有些恐惧,看完这本书让你发现 C 语言是那么简单。
《 C和指针》
学习过C语言的都知道,C语言里最难的概念就是指针,初学者一不小心可能就会陷入各类指针异常中,本书通过对指针的基础知识和高级特性的探讨,帮助程序员把指针的强大功能融入到自己的程序中去。
《C++ Primer中文版》
这本书可以说是最详尽的C++书籍,无论是初学者入门,或是中、高级程序员提升,本书均为不容置疑的首选。另外书中的例子均采用C++ 11的标准进行了改写,方便大家在阅读的过程中熟悉C++的新特性。
《Effective C++》
这本书可以看成上面C++ Primer的补充,更加侧重于实战技巧的分享,通过里面讲述的一些实际套路和原理,会让你看完有一种恍然大悟的感觉,非常推荐。
《STL源码剖析》
学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。这本书详细介绍了vector、list、heap、deque、Red Black tree、hash table、set/map等常见数据结构的实现;以及各种算法(排序、查找、排列组合、数据移动与复制技术)的实现。认真研究理解,有助于加深对C++的理解,提升编程的内功。
Java
《Java核心技术·卷I》
这本书非常适合新手入门,一步步学习Java基础知识,Java类库,同时也提供了很多Java高级特性,包括面向对象程序设计、反射与代理、接口与内部类、异常处理、泛型程序设计、集合框架、事件监听器模型、图形用户界面设计和并发。
《Effective Java中文版》
经典之作,侧重实战,如果在学完Java基础之后,想进一步提升自己的实力,这本书绝对不要错过。作者是Java API的设计者,考虑得不仅仅是如何才能够使Java API实现效率更高,还包括如何让客户端更具灵活性、如何从架构的设计上,减少客户端犯错误的机会。它包含大量的优秀Java编程实践,并对泛型和并发这两个充满陷阱的 Java 特性给出了充满洞察力的建议,学习理解这本书介绍的例子,会让你深刻掌握Java的设计理念。
《深入理解Java虚拟机(第2版)》
优秀且难得的国产佳作,系统的介绍了 Java 虚拟机和相关工具,并给出了一些调优建议。整本书围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。
Python
《Python基础教程(第2版)》
这本书偏重基础,跟着一章章学习下来,就能掌握Python开发的所有基本技能。
《流畅的Python》
这本书是给入门Python语言之后,想进一步学习Python的同学准备的。难能可贵的是,本书花了大量篇幅,通过许多例子深入讲解了文本编码、迭代器与生成器,协程,并发程序设计,元编程等诸多实用且对新人有难度的知识点,需要读者反复阅读理解相关章节。
2. 算法与数据结构
《算法》
普林斯顿的算法教材,算法领域的经典参考书,内容相对简单。使用更为容易的Java语言作为教学语言;覆盖所有常用的数据结构和算法,并均给出其完整实现;包含大量的图示用于可视化算法——事实上这是我读过的图示最为丰富形象的书籍,这也是我称其为最好的算法入门书籍的原因。
《数据结构与算法分析》
和上面的《算法》互为补充,主要侧重讲述数据结构,其中排序、二叉树的部分都相当精彩,跟着一步步研究每个算法的细节,会很有成就感。
《Cracking the Coding Interview - 程序员面试金典》
无数程序员推荐的面试必读书,包括了面试的前期准备,189 道算法的分析以及行为问题的解答,获得国内外一众求职者的好评。
《剑指Offer》
结合作者在多家名企的经验,从面试官视角剖析考题构思、现场心理、题解优劣与面试心得。从谷歌、微软等知名IT企业的海量面试题中精心筛选出80余道精华题目,提供多角度解题辅导。由于本书流传甚广,这些题已被大量企业真实采用,参考价值颇高。
《编程珠玑(第2版)》
一本少见的实践型算法书籍——它并非一一介绍数据结构/算法的教材,而是实践性极强的算法应用手册。尽管编程珠玑既有深度,又有广度,但我会推荐任何计算机水平的人去读:『在校学生可以从前几章学到算法和数据结构的知识;工程师可以从中学到程序设计理念和代码调优;营销号可以从中学到各种段子(放鸽子只是其中一个)』。
3. 数据库
《MySQL必知必会》
整本书非常薄!非常适合 MySQL 新手阅读,很棒的入门教材。书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。
《高性能MySQL》
绝对是从浅入深的 MySQL 领域的经典之作,拥有广泛的影响力。涵盖了 MySQL 8.0 版本的新特性,也讲述了关于固态盘、高可扩展性设计和云计算环境下的数据库相关的新内容,原有的基准测试和性能优化部分也做了大量的扩展和补充。
《MySQL技术内幕》
由国内资深MySQL专家亲自执笔,作为国内唯一一本关于InnoDB的专著,从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,能帮助你系统而深入地掌握InnoDB。
《MySQL是怎样运行的》
这本书可以作为上面几本书的补充,内容主要涵盖了使用MySQL的同学在求职面试和工作中常见的一些核心概念。作者真的是很用心设计本书的章节顺序,从现有场景引出可能出现的问题再到解决方案设计,循序渐进的揭开mysql 的内部实现细节,每一章的知识就是那么水到渠成,非常推荐。
《Redis设计与实现》
本书系统而全面地描述了 Redis 内部运行机制,包括大部分Redis单机特征,以及所有多机特性。一方面, 这本书可以作为数据结构的补充,讲述了像ziplist、intset、skiplist、bit array等数据结构课程当中没有提到的内容, 以及Redis对string、hash、list实现上的优化(如两类load factor, 渐进式rehash, 以及各类数据结构实现上的转化)。另一方面, 还可以作为数据库存储引擎实现的入门读物: 如command-table、 事务的实现、数据落盘(RDB、AOF)、事件处理、slowlog、sort的实现(by & get类似传统SQL数据库当中的多表关联查询)。不仅如此,这本书还可以作为分布式学习的入门指导: 如复制、sentinel、集群是对Raft、Gossip协议的实现。
4. 网络编程
《图解TCP/IP(第5版)》
讲解了网络基础知识、TCP/IP基础知识、数据链路、IP协议、IP协议相关技术、TCP与UDP、路由协议、应用协议、网络安全等内容,引导读者了解和掌握TCP/IP,营造一个安全的、使用放心的网络环境。整体偏基础,非常适合入门新手。
《TCP/IP详解 卷1:协议》
主要讲述TCP/IP协议,结合大量实例讲述TCP/IP协议族的定义原因,以及在各种不同的操作系统中的应用及工作方式,可以结合上面的图解TCP/IP一起学习。
《Linux内核设计与实现(原书第3版)》
作者Robert Love是一位Linux内核核心开发人员,他分享了在开发Linux2.6内核过程中颇具价值的知识和经验。本书的主题包括进程管理、进程调度、时间管理和定时器、系统调用接口、内存寻址、内存管理和页缓存、VFS、内核同步、移植性相关的问题以及调试技术;总体来讲,东西不多不少,有些部分点到为止,但仍然是最好的内核入门书籍。
《UNIX环境高级编程(第3版)》
本书被誉为Unix编程圣经,介绍了UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了众多应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。
5. 软件开发
《代码整洁之道》
本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。
《Head First 设计模式(中文版)》
相当赞的一本设计模式入门书籍。用实际的编程案例讲解算法设计中会遇到的各种问题和需求变更,并以此逐步推导出良好的设计模式解决办法。推荐给所有软件开发人员。
《深入理解计算机系统(原书第3版)》
CMU把这本书作为“Introduction to Computer System”课程的教材,是面向计算机专业低年级学生的“计算机系统介绍(导论)”。这些学生只是刚刚了解如何使用一门高级语言,对于计算机系统的工作方式等话题可谓一点都没有接触过,而CSAPP对读者的背景也只要求是“一些编程经验”而已。这本书的话题覆盖面很广,从计算机的基本组成,二进制数据表示方式,到机器级别的指令,CPU工作方式,存储结构和优化,操作系统的虚拟内存管理,程序运行方式,I/O,网络、到(较底层)程序性能优化和并行程序开发等等。所以,它其实覆盖了“计算机组成原理”,“操作系统”等许多课程的内容,其中的许多话题都能再次展开,继续深入,都能再变成一本,甚至N本经典。
《人月神话》
《人月神话》的主要贡献是对软件开发过程的几个重要关键点,提出了独到的见解。 这几个关键内容就是:提倡外科手术式的团队组织;软件项目的核心概念要由很少的人来完成,以保证概念的完整性; 软件开发过程中必要的沟通手段; 如何保持适度的文档;在软件开发的过程中,只有适度改进,没有包治百病的银弹。
《程序员修炼之道》
本书由一系列独立的部分组成,涵盖的主题从个人责任、职业发展,知道用于使代码保持灵活、并且易于改编和复用的各种架构技术,利用许多富有娱乐性的奇闻轶事、有思想性的例子及有趣的类比,全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。
《代码大全》
这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。 代码大全用通俗清晰的语言覆盖了软件构建(Software Construction)中各个层次上 所有 的重要概念——从变量命名到类型设计,从控制循环到代码结构,从测试和调试到构建和集成, 可谓无所不包,你可以把这本书看作为程序员的一站式(Once and for all)阅读手册。
《重构》
这本书主要告诉你如何改进代码质量,作者是世界软件开发大师,ThoughtWorks的首席科学家。他是一位作家、演说者、咨询师和泛软件开发领域的意见领袖。他致力于改善企业级的软件设计,对优秀的设计以及支撑优秀设计的工程实践孜孜以求。他在重构、面向对象分析设计、模式、XP和UML等领域都有卓越贡献。
后记:千里之行始于足下
我已经为大家整理好了所有的书籍,具体获取方法看最后一张图即可,书在于精不在多,多读经典,提高内功,永保核心竞争力。
关注公众号【码老思】,最快获取最通俗易懂的原创技术干货。