文章标题:街头斗殴型计算机科学家的书单
正文:

2025 版。这份书单和你会见到的大多数“程序员最佳书籍”清单大不相同——那些清单上尽是 Code Complete、Clean Code、Wistful Wanking for Practical Wankers 和 Design Slatterns 之类的书名。这些东西你走着走着自然就明白了。这里列的是读了之后能让你拿刀砍人的书。你需要把所有这些都读一遍吗?我猜,只有当你想知道里面的东西时才需要。
入门级街头斗殴
- Stepanov,From Mathematics to Generic Programming 与 The Elements of Programming
- Gustedt,Modern C
- Hanson,C Interfaces and Implementations
- Stroustrup,The C++ Programming Language
- Josuttis,C++ Move Semantics,因为一个需要 200 页篇幅来解释的语言特性值得研究?不,是因为这本书比任何一本讲 Rust 的书都更能证明 Rust 的合理性。
- Klabnik、Nichols 和 Krycho,The Rust Programming Language
你需要用 C 或 C++ 写代码吗?一般不需要。但它们是通用语言(lingua franca),在你将遇到的大多数硬件上都有实现,并且是所有重要操作系统的原生 API 表达方式。Rust 是一门很适合写和读的语言,更不适合整天他妈地谈论它,所以别扯这些淡了。
肉搏战
- Dijkstra,A Discipline of Programming。逐页来看,是整个计算机科学中最美的一本书。
- Knuth,The Art of Computer Programming,尤其是第 1 卷和第 4B 卷,第三版
- Warren,Hacker's Delight。一定要买第二版
- Stevens 和 Rago,Advanced Programming in the UNIX Environment,至少买第二版,最好买第三版
- Stevens,UNIX Network Programming,第二版
- Abelson + Sussman,Structure and Interpretation of Computer Programs,计算机科学教科书里封面最好看的一本,毫无悬念,第二版
- Varghese,Networking Algorithmics
- McKusick,The Design and Implementation of the FreeBSD Operating System
- Kerrisk,The Linux Programming Interface
- Garcia + Widjaja,Communications Networks。哥们,你连 ARQ 都不懂吗?
- Kleinrock,Queueing Systems,尤其是第 1 卷。这就是他们逼你学概率统计的原因。
- Hennessy + Paterson,Computer Architecture: A Quantitative Approach。老版本不会把材料锁在线上不给你看,但就是……比较老。
- Kennedy,Optimizing Compilers for Modern Architectures。如果你想真正实现编译器,一定要把 Muchnik 的 Advanced Compiler Design and Implmentation 也买上
- CLRS,Introduction to Algorithms
- Samet,Metric and Multidimensional Data Structures
- McKenney,Is Parallel Programming Hard, And, If So, What Can You Do About It? 尽管书名荒谬透顶,这本书非常出色,涵盖了你别处找不到的内容。If Naming Books is so Hard for You, Why Didn't You Ask For Help?
- Crochemere 等,Algorithms on Strings。就像它的名字听起来那样法国味十足,一支真正的 force de frappe
- Culler 等,Parallel Computer Architecture
- Ward + Halstead,Computation Structures
- Shriver + Smith,The Anatomy of a High-Performance Microprocessor
- Vazirani,Approximation Algorithms
- Raghaven + Motwani,Randomized Algorithms
- Garey 和 Johnson,Computers and Intractability。当你意识到自己承诺了一个 np-complete 问题的解法时,总是很尴尬。
- Sipser,Introduction to the Theory of Computation。但意识到自己承诺了一个不可判定问题的解法时,比那更尴尬。还有,泵引理!
- Galub + Van Loan,Matrix Computations。这几乎就是一本纯粹的数学教科书,但成群结队、四处游荡的多种族矩阵参与了大量街头斗殴。
进阶街头斗士
- Ahora + Barak,Computational Complexity
- Pierce,Types and Programming Languages
- Okasaki,Purely Functional Data Structures
- Van Roy + Hardidi,Concepts, Techniques, and Models of Computer Programming
- Barendregt, The Lambda Calculus。确实,在刀战的狭窄空间里,λ-cube 很少有用。在经历了一整天的头巾、皮手套和弹簧刀之后,即使是斗殴者最终也必须回家,回到家人、火、食物和 F systems 身边。在紧急情况下,它那耀眼的黄色封面可以晃瞎对手的眼睛。
说到数学,你可能想看看 Axler 的 Linear Algebra Done Right 和 Knuth 的 Concrete Mathematics。你需要把组合数学、概率/统计和线性代数烂熟于心。从微积分到微分方程是必须知道的,但我是一个相当硬核的书呆子,却发现自己并不经常做积分。
现在,去街头战斗吧。我没有列出机器学习,因为我不喜欢机器学习。没有量子书籍,因为量子目前对街头战斗还没有用(我们都期待这种情况会改变)。我没有列出 SIMT/加速器书籍,因为它们都是垃圾。我没有列出信息安全,因为信息安全是 QA 的子领域,不服来辩。没有链接,因为我是个懒惰、懒惰的人。
我听说过 Tim Roughgarden 的算法书的好评,已经放在书架上准备很快阅读,但还不能对它们发表看法。同样,Beej 的网络书也是如此,虽然那看起来有点轻量级。他和 Stevens 都没有深入介绍使用 XDP 和 Io_uring 等技术的现代快速网络。
当然,你也应该阅读 Hacking the Planet with Notcurses,为你的团队和家人购买几本。