程序员必读书单 1.0 -- 六年后的回顾

年更系列(继续保持一年一次的更新频率 o_O)

六年之前,我写了 程序员必读书单 这篇文章,两万五千多字介绍了近 100 本书,覆盖基础理论,编程语言,程序设计等十余个领域。然后从中精选出 30 本书用于入门和提升。

当时写这篇文章的初衷是想写一个不会过时的书单。书单写于 2015,现在 2021,是否还适用呢?

必读书单

先放下 2015 年的书单:

入门书籍

程序设计:

  1. 基础理论 : 编码:隐匿在计算机软硬件背后的语言
  2. 编程语言 :
    • C : C 和指针
    • C++ : C++ 程序设计原理与实践
    • Java : Java 核心技术(第9版)
    • C# : 精通 C#(第6版)
    • JavaScript : JavaScript DOM编程艺术(第2版)
    • Python : Python 基础教程(第二版)
  3. 编程语言理论 : 编程语言实现模式
  4. 程序设计 : 程序设计方法
  5. 算法与数据结构 : 算法(第4版)
  6. 程序调试 : 调试九法——软硬件错误的排查之道

软件开发:

  1. 编程实践 : 程序设计实践
  2. 面向对象程序设计 : Head First设计模式
  3. 重构 : 重构
  4. 软件测试 : How to Break Software
  5. 项目管理 : 极客与团队
  6. 专业开发 : 程序员修炼之道:从小工到专家
  7. 大师之言 : 奇思妙想:15 位计算机天才及其重大发现
  8. 界面设计 : 写给大家看的设计书
  9. 交互设计 : 通用设计法则

个人成长:

  1. 职业规划 : 软件开发者路线图
  2. 思维方式 : 程序员的思维修炼:开发认知潜能的九堂课
  3. 求职面试 : 金领简历:敲开苹果微软谷歌的大门
  4. 英语写作 : The Only Grammar Book You’ll Ever Need

必读书籍

程序设计:

  1. 基础理论 : 深入理解计算机系统(第 2 版)
  2. 编程语言 :
    • C : C 程序设计语言(第 2 版)
    • C++ : C++程序设计语言(第 4 版)
    • Java : Effective Java(第 2 版)
    • C# : CLR via C#(第 4 版)
    • JavaScript : JavaScript 语言精粹
    • Python : Python参考手册(第 4 版)
  3. 编程语言理论 : 程序设计语言——实践之路(第 3 版)
  4. 程序设计 : 计算机程序的构造与解释(第 2 版)
  5. 算法与数据结构 : 编程珠玑(第 2 版)
  6. 程序调试 : 调试九法——软硬件错误的排查之道

软件开发:

  1. 编程实践 : 代码大全(第 2 版)
  2. 面向对象程序设计 : 设计模式
  3. 重构 : 修改代码的艺术
  4. 软件测试 : xUnit Test Patterns
  5. 项目管理 : 人月神话
  6. 专业开发 : 程序员职业素养
  7. 大师之言 : 编程人生:15 位软件先驱访谈录
  8. 界面设计 : 认知与设计:理解UI设计准则(第 2 版)
  9. 交互设计 : 交互设计精髓(第 3 版)

个人成长:

  1. 职业规划 : 软件开发者路线图
  2. 思维方式 : 如何把事情做到最好
  3. 求职面试 : 程序员面试金典(第 5 版)
  4. 英语写作 : 风格的要素

回顾

  1. 我会把 程序员必读书单 改为 程序员书单:去掉 必读 ——没有什么书必须要读,书籍只是一个知识的获取渠道。论文,代码,项目,文档都可能是更好的知识来源
  2. 删减一些分类,比如 求职面试 和 大师之言:前者现在更依赖与网络上的面经和 OJ ,而非书籍,后者属于 anecdotes,大师的经历大概率对普通人没有适用性,下面会聊下

变动

程序设计:

  1. 基础理论:没有变化。编码:隐匿在计算机软硬件背后的语言 和 深入理解计算机系统 依然是最好的基础理论入门和进阶读物
  2. 编程语言:去掉这个分类。
    • 入门,书籍只要不是太差,基本没什么区别
    • 进阶,官方文档/源码更值得阅读,而非某本书籍
    • 2015 年推荐的书籍在 2021 年大多已经有了新版,懒得一个个更新
    • 如果非要推荐:K&R 的 The C Programming Language 是必读,其它都可选
  3. 编程语言理论:没有变化,Programming Language Pragmatics 依然是程序设计语言的绝佳读物
  4. 程序设计:没有变化。计算机程序的构造与解释 依然是程序设计读物的 paramount
  5. 算法与数据结构:没有变化。算法 和 编程珠玑 就够用。依然不推荐 CLRS 或是 TAOCP,除非你要当科学家。
  6. 程序调试:没有变化。

软件开发:

  1. 编程实践:没有变化。程序设计实践 和 代码大全 依然是最好的编程实践书籍
  2. 程序设计:略有变化。Head First 设计模式 并不值得推荐,Clean Code 实操更强,加上 Philosophy of Software Design
  3. 重构:没有变化。
  4. 软件测试:略有变化。How Google Test Software 也许可以提供一些大公司做测试的 insights
  5. 项目管理:略有变化。加上 Software Estimation
  6. 专业开发:略有变化。Effective Engineer 和 Manager’s Path 提供了更多 Senior engineer 的 insights
  7. 大师之言:去掉这个分类。大师的成长轨迹,对多数人并不适用,可以当成 anecdotes 看着乐一乐,但绝非必读
  8. 界面设计:去掉这个分类。并非所有开发者都需要 UI 设计知识
  9. 交互设计:略有变化。通用设计法则 换成 设计心理学
  10. 系统设计:新增这个分类。系统设计是程序员进阶的必备知识,但由于我的系统设计知识大多源自于阅读代码和项目,这里没有书籍推荐。

个人成长:

  1. 职业规划:去掉软件开发者路线图(那本书并不适合程序员爬 ladder),换为 Manager’s Path 和 Show Your Work。
  2. 思维方式:去掉这个分类。励志书籍已经够多了。
  3. 个人管理:增加这个分类。HBR 的套装很好。尤其是 On Managing Oneself,此外 Andy Groove 的 High Output Management 也值得一看。
  4. 求职面试:去掉这个分类。程序员求职现在有更好的资源,不需要看书。
  5. 英语写作:去掉这个分类。写作是必须的技能,但看书可能用处不大。

延伸阅读

之前我在每个分类下都提供了一些延伸阅读。

其实没必要读那么多,一个领域一两本就够用。

所以请直接无视。

现在回想,我当时也只是为了凑够 100 本。

回答一些疑问

Q: 推荐那么多书,你有都看过吗?
A: 并没有。必读书单里面的必读书(30 余本)我都看过,但并没有都读完(读完的大致占 7-8 成)。至于延伸阅读(70 本左右)里面有不少并未读过,6 年前写文章时多少有点装 13 凑数

Q: 读了这么多书,现在应该混的很不错吧?
A: 并没有,我正式工作 8 年,现在还只是在大厂搬砖。原因:

  1. 书单里面的书大多是我在学生时期读的,所以很多内容并没有吸收,很多知识需要工作后才能理解并运用,然而我并没有重读
  2. 工作级别和技术能力并不存在直接联系。级别更多需要的是眼光,时机,和个人规划,而这几样我都很欠缺
  3. 写程序,只是实现公司业务的一个途径。我过去读的书过于偏重具体技术,忽略了人际关系,业务方向等更重要的内容,导致我在相当长时间都在原地打转搬砖

Q: 程序员书单 2.0?
A: 开什么玩笑。工作之后我的阅读量大幅下降,现在的自己也不像 6 年前那般好为人师。所以我既没有能力,也没有动力去写一个新的书单。不过 程序员书单 1.0 绝大多数书籍仍未过时,对在校学生或是刚入门的程序员应该还有帮助。

Q: 为什么不写博客了?
A: 懒。