2018 年没有更新书单,原因有很多。现在与 2019 年一并放出,这两年在做毕业论文和做科研两方面影响下,这两年读的书都偏技术和理论,读得更多的反而是论文(论文清单我们以后有机会再表)。人文类的闲书的数量也大大减少,所以整体读书的时间也大大延长,2018 年几乎没读完几本书,这也是当时没有更新书单的主要原因之一。
这个清单里还有好几本读过的与自己博士研究方向相关的书籍没有列出,也算是延续了以前读书清单的传统:专业相关的书籍不在此列表中。
技术类
理论类
- Communicating Sequential Processes
- The Theory and Practice of Concurrency
- 前两本讲的是 CSP 理论(1985 版),前者是对理论的阐述,后者是对理论更好的解释。读这两本书的主要目的是为了了解 Go 所借鉴的 CSP 并发模式究竟是何方神圣,其次目的还在于希望通过形式逻辑理解并发编程。网上很多人只闻其声不问其人,Rob Pike 提到 Go 受到了 CSP 的启发,其实理论上并没有借鉴 CSP 1985,相反,而是 1978 年的早期论文,早年 CSP 理论还没有提出 channel 这一通讯实体,也是诸多“谣言”之一。
- Concurrent Programming: Algorithms, Principles, and Foundations
- Distributed Algorithms for Message-Passing Systems
- Fault-Tolerant Message-Passing Distributed Systems: An Algorithmic Approach
- 这三本书的作者是同一人,是个法国老头。我最初注意到这个学者是因为第一本书,当时在图书馆闲逛,发现了第一本书。后来顺手读了第一章,感觉写作思路非常流畅,主要讨论的是共享对象的并发编程,前半部分讨论传统的互斥,后半部分讨论的是原子操作。后来借了此书之后又来来回回读了几次,发现这书只是该作者出版过关于分布式系统的系列书籍的一本之一。后来发现了第二本和第三本。第二本讨论的内容基于系统无障碍的假设,因此很多内容在实际实践中并没有提供太多价值,只在理论的完整性上提供了支持。很多分布式领域初学者以为分布式可能比并发编程来得复杂,其实不然,一组互相通信的进程同样组成一个分布式系统,一组进程中的部分进程同样可能面临故障,他们之间的一致性同样需要共识技术。所以第三本书弥补了这个主题的缺失,以系统故障、超时和网络问题为主要场景讨论存在的分布式算法,是我目前发现结合了最新科研成果的一本书了。
- Compilers: Principles, Techniques, and Tools
- 龙书,无须多言。这本书其实早在本科三年级的时候读过很大一部分内容,如今又重新拾起来,发现今年接触的很多技术都在这本书里有或多或少提及,当年没有认真读完,真是惭愧。
- The Garbage Collection Handbook: The Art of Automatic Memory Management
- 垃圾回收届的龙书。没有全书读完,认真读过了关于标记清扫和并发标记清扫等相关内容。这本书是我少有的很遗憾没有在本科时期读到过的书之一,原因可能是本科期间主攻的语言是 C 和 C++,曾对垃圾回收嗤之以鼻,后来写 Obj-C 和 Swift 的时候只接触过引用计数式垃圾回收,了解其局限性,也并没有深入了解过垃圾回收这一主题,现在想来真是无知。
- Scheduling: Theory, Algorithms, and Systems
- 也许是调度届的龙书,暂时没有找到比这本书更加全面的讨论关于调度的书了。没有全书读完,认真读过了一些关于调度算法的分析技巧,并重点读了动态随机实时调度的内容。
- Quantum Computing: A Gentle Introduction
- 本科时期物理课上对量子力学尤其感兴趣,一直想学习量子计算,苦于没有机会。这本书没有读完,前半部分成功让我理解了 Qubit 系统和状态变换的测量理论,整套理论依托于一些基本的概率论假设,书中的例子也是一些非常简单的矩阵变换。确实非常的“Gentle”。
- UNIX Systems for Modern Architectures: Symmetric Multiprocessing and Caching for Kernel Programmers
- Is Parallel Programming Hard, And, If So, What Can You Do About It?
- 这两本书被我归在一起,前者是讨论缓存的具体设计,后者则讨论缓存成为实践中考虑的重要因素之一。当然,后者讨论的主要内容是并行编程,如果说前面的 Concurrent Programming 是纯理论类的书籍,而这本书里则更侧重实践。此外,Parallel 和 Concurrent 并不是同一个概念,因此实际内容也有一定的差异。我很喜欢这本书的写作风格:在一段内容结束后增加多个问题,来确保读者确实已经理解了前面所说的内容。
实践类
我不太喜欢看纯实践类的书籍,所以这里就不详细做评论了,存粹是通勤时候扫读的闲书(并没有说质量不好,相反都是值得一读的书)。
管理类
- Site Reliability Engineering: How Google Runs Production Systems
- 这本书被我归到管理类书籍的主要原因是这本书花了相当大的篇幅讨论团队管理。总的来说这是一本好书,但我并没有太多大规模产品的团队经验,这本书的知识留给以后有机会创业用吧。
- Building Microservices: Designing Fine-Grained Systems
- 领域驱动设计:软件核心复杂性应对之道
- 生产微服务: 在工程组织范围内构建标准化的系统
- Cloud Native: Using containers, functions, and data to build next-generation applications
- 云原生基础架构:构建和管理现代可扩展基础架构的模式及实践
- Building Evolutionary Architectures: Support Constant Change
- Infrastructure as Code: Managing Servers in the Cloud
- 今年读了很多关于微服务和云原生的闲书,主要原因是今年下半年在做一门 Online Multimedia 的课的助教,并受教授的邀请给了一节 Technological Outlook 的 Lecture,虽然标题是技术展望,但其中很大一部分篇幅就在讨论 K8s 和 微服务架构等诸多云原生的基础设施话题。这些书里面的第一本 Building Microservices 其实早在大四就已经读过,只是当时没有任何管理经验,因此对书中的内容完全不知所云,如今积累了一些经验回过头来再看 Conway 定律和微服务所带来的管理挑战,这本书确实是全篇逻辑缜密观点表达相当到位。我在我的 Lecture 中表达了一些主要观点:微服务及其周边技术引出的一系列问题到最后并不是再是纯粹的技术问题,而是管理问题。也算是给这门课的部分媒体信息管理学的学生听众最重要的非技术内容了。
- 企业IT架构转型之道:阿里巴巴中台战略思想与架构实战
- 中台这个词我作为一个长期呆在海外的人,真是完美的错过了它的热潮,以至于当我从曹大的文章中得知它的热度之后还专门买了这本书来读。我贴一下当时读完曹大文章的感想:“想起了ACM 通讯七月刊封面文章 On The Hourglass Model,文中沙漏定理其实理论上严密的证明了“中台” (文中的术语 logical weakness) 对于 dev scalability 的重要性(general 的 dev,不仅仅指软件 dev)。那为什么管理实践会有不同的声音?因 human centered 的东西都是 blabla science 。”
人文类
人文类的书也不详细聊了,我读的书主要有这些类别:科学史、心理学、哲学、纪实文学。这里列出的都是我读过之后觉得还不错的书。最后一本除外,这是一本让我觉得素食主义这一理念变得可以接受的书,并非被“洗脑”,只是早年对素食主义嗤之以鼻,觉得去餐厅吃饭选择吃素简直难以接受。但现在会偶尔主动选择吃素,并开始觉得吃素也不失为一种选择。
- 哥德尔、艾舍尔、巴赫
- UNIX: A History and a Memoir
- The Code: Silicon Valley and the Remaking of America
- 后现代思想的数学根源
- 西方哲学简史
- 乌合之众: 大众心理研究
- Permanent Record
- 日本人为何选择了战争
- 论人类不平等的起源和基础
- 精简写作
- 查令十字街84号
- How Not To Die: Discover the foods scientifically proven to prevent and reverse disease
人文类里面有一本我读了比较后悔的书:
- 后谷歌时代:大数据的没落与区块链经济的崛起
- 这本书没有读懂作者的写作逻辑,把区块链技术吹上了天,但根据我自己近几年对区块链技术的观察,并没有觉得这本书有什么特别有价值的观点值得我吸收。