年更系列(继续保持一年一次的更新频率 o_O)
六年之前,我写了 程序员必读书单 这篇文章,两万五千多字介绍了近 100 本书,覆盖基础理论,编程语言,程序设计等十余个领域。然后从中精选出 30 本书用于入门和提升。
当时写这篇文章的初衷是想写一个不会过时的书单。书单写于 2015,现在 2021,是否还适用呢?
必读书单
先放下 2015 年的书单:
入门书籍
程序设计:
- 基础理论 : 编码:隐匿在计算机软硬件背后的语言
- 编程语言 :
- C : C 和指针
- C++ : C++ 程序设计原理与实践
- Java : Java 核心技术(第9版)
- C# : 精通 C#(第6版)
- JavaScript : JavaScript DOM编程艺术(第2版)
- Python : Python 基础教程(第二版)
- 编程语言理论 : 编程语言实现模式
- 程序设计 : 程序设计方法
- 算法与数据结构 : 算法(第4版)
- 程序调试 : 调试九法——软硬件错误的排查之道
软件开发:
- 编程实践 : 程序设计实践
- 面向对象程序设计 : Head First设计模式
- 重构 : 重构
- 软件测试 : How to Break Software
- 项目管理 : 极客与团队
- 专业开发 : 程序员修炼之道:从小工到专家
- 大师之言 : 奇思妙想:15 位计算机天才及其重大发现
- 界面设计 : 写给大家看的设计书
- 交互设计 : 通用设计法则
个人成长:
- 职业规划 : 软件开发者路线图
- 思维方式 : 程序员的思维修炼:开发认知潜能的九堂课
- 求职面试 : 金领简历:敲开苹果微软谷歌的大门
- 英语写作 : The Only Grammar Book You’ll Ever Need
必读书籍
程序设计:
- 基础理论 : 深入理解计算机系统(第 2 版)
- 编程语言 :
- C : C 程序设计语言(第 2 版)
- C++ : C++程序设计语言(第 4 版)
- Java : Effective Java(第 2 版)
- C# : CLR via C#(第 4 版)
- JavaScript : JavaScript 语言精粹
- Python : Python参考手册(第 4 版)
- 编程语言理论 : 程序设计语言——实践之路(第 3 版)
- 程序设计 : 计算机程序的构造与解释(第 2 版)
- 算法与数据结构 : 编程珠玑(第 2 版)
- 程序调试 : 调试九法——软硬件错误的排查之道
软件开发:
- 编程实践 : 代码大全(第 2 版)
- 面向对象程序设计 : 设计模式
- 重构 : 修改代码的艺术
- 软件测试 : xUnit Test Patterns
- 项目管理 : 人月神话
- 专业开发 : 程序员职业素养
- 大师之言 : 编程人生:15 位软件先驱访谈录
- 界面设计 : 认知与设计:理解UI设计准则(第 2 版)
- 交互设计 : 交互设计精髓(第 3 版)
个人成长:
- 职业规划 : 软件开发者路线图
- 思维方式 : 如何把事情做到最好
- 求职面试 : 程序员面试金典(第 5 版)
- 英语写作 : 风格的要素
回顾
- 我会把 程序员必读书单 改为 程序员书单:去掉 必读 ——没有什么书必须要读,书籍只是一个知识的获取渠道。论文,代码,项目,文档都可能是更好的知识来源
- 删减一些分类,比如 求职面试 和 大师之言:前者现在更依赖与网络上的面经和 OJ ,而非书籍,后者属于 anecdotes,大师的经历大概率对普通人没有适用性,下面会聊下
变动
程序设计:
- 基础理论:没有变化。编码:隐匿在计算机软硬件背后的语言 和 深入理解计算机系统 依然是最好的基础理论入门和进阶读物
- 编程语言:去掉这个分类。
- 入门,书籍只要不是太差,基本没什么区别
- 进阶,官方文档/源码更值得阅读,而非某本书籍
- 2015 年推荐的书籍在 2021 年大多已经有了新版,懒得一个个更新
- 如果非要推荐:K&R 的 The C Programming Language 是必读,其它都可选
- 编程语言理论:没有变化,Programming Language Pragmatics 依然是程序设计语言的绝佳读物
- 程序设计:没有变化。计算机程序的构造与解释 依然是程序设计读物的 paramount
- 算法与数据结构:没有变化。算法 和 编程珠玑 就够用。依然不推荐 CLRS 或是 TAOCP,除非你要当科学家。
- 程序调试:没有变化。
软件开发:
- 编程实践:没有变化。程序设计实践 和 代码大全 依然是最好的编程实践书籍
- 程序设计:略有变化。Head First 设计模式 并不值得推荐,Clean Code 实操更强,加上 Philosophy of Software Design
- 重构:没有变化。
- 软件测试:略有变化。How Google Test Software 也许可以提供一些大公司做测试的 insights
- 项目管理:略有变化。加上 Software Estimation
- 专业开发:略有变化。Effective Engineer 和 Manager’s Path 提供了更多 Senior engineer 的 insights
- 大师之言:去掉这个分类。大师的成长轨迹,对多数人并不适用,可以当成 anecdotes 看着乐一乐,但绝非必读
- 界面设计:去掉这个分类。并非所有开发者都需要 UI 设计知识
- 交互设计:略有变化。通用设计法则 换成 设计心理学
- 系统设计:新增这个分类。系统设计是程序员进阶的必备知识,但由于我的系统设计知识大多源自于阅读代码和项目,这里没有书籍推荐。
个人成长:
- 职业规划:去掉软件开发者路线图(那本书并不适合程序员爬 ladder),换为 Manager’s Path 和 Show Your Work。
- 思维方式:去掉这个分类。励志书籍已经够多了。
- 个人管理:增加这个分类。HBR 的套装很好。尤其是 On Managing Oneself,此外 Andy Groove 的 High Output Management 也值得一看。
- 求职面试:去掉这个分类。程序员求职现在有更好的资源,不需要看书。
- 英语写作:去掉这个分类。写作是必须的技能,但看书可能用处不大。
延伸阅读
之前我在每个分类下都提供了一些延伸阅读。
其实没必要读那么多,一个领域一两本就够用。
所以请直接无视。
现在回想,我当时也只是为了凑够 100 本。
回答一些疑问
Q: 推荐那么多书,你有都看过吗?
A: 并没有。必读书单里面的必读书(30 余本)我都看过,但并没有都读完(读完的大致占 7-8 成)。至于延伸阅读(70 本左右)里面有不少并未读过,6 年前写文章时多少有点装 13 凑数
Q: 读了这么多书,现在应该混的很不错吧?
A: 并没有,我正式工作 8 年,现在还只是在大厂搬砖。原因:
- 书单里面的书大多是我在学生时期读的,所以很多内容并没有吸收,很多知识需要工作后才能理解并运用,然而我并没有重读
- 工作级别和技术能力并不存在直接联系。级别更多需要的是眼光,时机,和个人规划,而这几样我都很欠缺
- 写程序,只是实现公司业务的一个途径。我过去读的书过于偏重具体技术,忽略了人际关系,业务方向等更重要的内容,导致我在相当长时间都在原地打转搬砖
Q: 程序员书单 2.0?
A: 开什么玩笑。工作之后我的阅读量大幅下降,现在的自己也不像 6 年前那般好为人师。所以我既没有能力,也没有动力去写一个新的书单。不过 程序员书单 1.0 绝大多数书籍仍未过时,对在校学生或是刚入门的程序员应该还有帮助。
Q: 为什么不写博客了?
A: 懒。