我的书单

目录

1 存储

1.1 Designing Data-Intensive Applications

中文翻译版本《设计数据密集型应用》。五星推荐好书,涉猎了存储的各方面。每一章后面的论文索引也非常棒。论文索引有一个Github仓库:https://github.com/ept/ddia-references.

2 并发编程

3 编程语言

3.1 Assembly - 汇编语言程序设计/Professional Assembly Language

3.2 C语言/C language

3.2.1 C程序设计语言(第二版)/The C Programming Language(2nd)

C程序设计语言作者Brian KernighanDennis M. Ritchie(C语言之父)。本书缩称K&R。

3.2.2 C语言接口与实现-创建可重用软件的技术/C Interfaces and Implementations-Techniques for Creating Reusable Software

3.2.3 C和指针/Pointers on C

3.2.4 C缺陷与陷阱/C Traps and Pitfalls

3.2.5 C专家编程/Expert C Programming

3.2.6 C: A Reference Manual

3.2.7 C in a nutshell

3.2.8 GCC - Using the GNU Compiler Collection

3.2.9 GCC - The Complete Reference

3.3 C++语言/C++ language

3.3.1 Effective Modern C++

4 编程基础能力

4.1 UNIX环境高级编程/Advanced Programming UNIX Environment

UNIX环境高级编程,简称APUE,被称为UNIX编程圣经。

作者W.Richard Stevens(1951/2/5-1999/9/1),因滑翔意外英年早逝。他同时是网络编程圣经TCP/IP详解三卷本、UNIX网络编程两卷本的作者。同时参与RFC 2581 TCP拥塞控制等 5个RFC标准化文档。

4.2 深入理解计算机系统/Computer Systems - A Programmer's Perspective

从程序员的视角阐述计算机系统,业界最伟大的计算机教材之一,参见CMU对本书的介绍

2015年推出本书第三版。作者Randal E. BryantDavid R. O'Hallaron。Randal是麻省理工博士,卡内基-梅隆计算机科学学院院长、教授,ACM院士、IEEE院士,美工工程院院士。David是弗吉尼亚大学计算机科学博士学位,现为Intel匹兹堡实验室主任,卡内基-梅隆大学计算机科学副教授。

本书分三大部分,第一部分讲述信息编码与表示、程序机器表示(格式、算法与逻辑操作、控制、过程、访问)、CPU体系结构、性能优化、存储器层次,第二部分讲解链接、异常控制与虚拟内存,第三部分讲解程序交互与通信。本书第一部分知识很难在其他书籍中看到如此翔实完整的表述,第二三部分倒是有更多书籍可供选择,比如讲解链接的有俞甲子等人的《程序员的自我修养——链接、装载与库》,讲解虚拟内存的有深入Linux内核架构

4.3 编程匠艺-编写卓越的代码/Code Craft - The Practice of Writing Excellent Code

4.4 程序设计实践/The Practice of Programming

Brian W. Kernighan(UNIX之父)与Rob Pike合著,内容共9章:代码风格、算法与数据结构、设计与实现、接口、调试、测试、性能、可移植性、注记。

5 操作系统

5.1 操作系统精髓与设计原理(第6版)/Operating Systems - Internals and Design Principles

6 系统架构与设计

6.1 Computer Architecture: Concepts and Evolution

6.2 Preliminary discussion of the logical design of an electronic computing instrument

6.3 Research in Design Thinking

6.4 an analysis of the engineering design process in an industrial context

6.5 writing effective use cases

7 算法

7.1 算法导论/Introduction to Algorithms

算法导论/Introduction to Algoriothms是知名的计算机算法教材, 通常被简称为CLRS, 这是四位作者的首字母. 这四位作者分别是Thomas H. Cormen, Charles E. Leiserson, Clifford Stein, Ronald Rivest. Cormen就职于达特茅斯学院(学校主页), Stein是哥伦比亚大学IEOR计算机科学的教授. Leiserson与Rivest是麻省理工的教授.

本书是基础算法领域最权威、最详细的著作之一. 很多国际知名大学用本书作为计算机算法课的教材. 很多论文将其列入参考文献中.

算法导论是一本接近1300页的大部头(英文版, 中文版800多页), 读起来比较艰辛. 知乎搜索有大量本书内容和学习方法的研讨. 可以在新浪公开课youtube上查看MIT 算法导论公开课. 我从2011年开始, 投入了大量业余时间在本书研读上. 我在 Github Repo ycc上有本书诸多算法的实现. 我的读书笔记有部分习题的解答.

7.2 算法基础:打开算法之门/Algorithms Unlocked

算法基础作者Thomas H. Cormen, 是算法导论作者之一. 本书只有220页. 包含算法分析, 排序与搜索, 图与最短路径, 字符串操作, 加密, 数据压缩内容.

7.3 计算机程序设计艺术/The Art of Computer Programming

业界称为TAOCP, 作者Donald E.Knuth(高德纳), 斯坦福大学荣誉教授, 1974年图灵奖得主, 计算机科学先驱人物, 创造了算法分析领域, 在计算机科学及数学领域发表了多部具有广泛影响的论文和著作. 高德纳最为人知的事迹是撰写了《计算机程序设计艺术》系列图书, 以及发明的电子排版系统TeX(后扩展有Latex/XeTex).

计算机程序设计艺术系列计划完成7卷:

卷1:基本算法

讲解基本概念和信息结构. 基本概念包括数学准备, MIX汇编和若干程序设计技术. 信息结构包括线性表(栈, 队列, 链表, 数组), 树(二叉树, 树的基本数学性质), 多链结构和动态存储分配. 动态存储分配中讲到最先匹配方法和伙伴系统, 在Linux的内存管理模块Boot Memory AllocatorBuddy System中用到.

卷2:半数值算法

讲解随机数与算术. 随机数包括生成均匀随机数的线性同余法, 统计检验, 随机量和随机序列. 算术部分包括浮点, 多精度, 进制转换, 有理数, 多项式, 幂级数等算术. 卷二充斥着复杂的数学运算与分析.

卷3:排序与查找

排序部分包含组合性质, 内部排序(插入/交换/选择/合并/分布),最优排序(比较次数最少的排序/合并/选择), 外部排序(多路合并, 多阶段合并, 级联合并, 反向读取磁带, 震荡排序, 外部基础排序, 双磁带排序, 磁盘与磁鼓). 查找部分包括顺序查找, 键值比较查找(有序表, 二叉树, 平衡树, 多路树), 数字查找, 散列,辅助键查找. 卷三中的大多算法在操作系统和应用程序中有着广泛应用, 例如进程VMA(虚拟内存区间段)使用RBTree, 文件系统中用到的B+树(多路树).

卷4:组合算法

讲解组合查找与递归. 第4卷涉及范围很大, 分为4A, 4B, 4C三卷出版. 4A讲组合查找, 4B和4C还未发布.

卷5:语法算法
讲解词法分析与语法分析. 未发布.
卷6:语言理论
未发布.
卷7:编译器
未发布.

希望能有闲暇时间, 可细细把玩此套书籍.

7.4 算法分析导论/An Introduction to the Analysis of Algorithms

算法分析导论(第二版)作者Robert Sedgewick, Philippe Flajoet. Robert在普林斯顿大学 计算机科学系就职, 他同时还是多本计算机算法书籍(Algorithms 4th, Algorithms in Java, Algorithms in C++, Algorithms in C)作者. Philippe于2011年3月22日逝世.

7.5 算法设计与分析基础/Introduction to The Design and Analysis of Algorithms

算法设计与分析基础, 作者Anany Levitin, Villanova大学教授. 包括算法基本概念描述, 效率分析基础, 蛮力法, 减治法, 分治法, 变治法, 时空权衡, 动态规划, 贪婪技术, 迭代改进, 算法能力极限与超越算法能力极限, 提供了问题求解的诸多一般性策略.

7.6 算法-C语言实现/Algorithms in C Part 1-4, 5

作者Robert Sedgewick,斯坦福大学博士,导师高德纳(Knuth),普林斯顿大学教授,Adobe 董事。Algorithms系列书籍作者。

Part 1-4包括算法分析原理和分析方法、基本数据结构、ADT、递归与树、排序(基本、快排、归并、堆排序、基数排序、奇偶排序、外部排序等)、搜索(二叉、平衡树、散列、基数搜索、外部搜索)。Part 5是图算法,包括图介绍、搜索(DFS)、有向图、无环图、最小生成树、最短路径、网络流。

7.7 算法(第四版)/Algorithms(4th edition)

Java算法的入门书籍. 虽购买诸多时日, 却没有仔细翻阅这本书.

7.8 算法设计与应用/Algorithm Design and Applications

英文版全书780页,无中文翻译版。作者Michael T. GoodrichRoberto Tamassia。 Michael是加利福利亚大学尔湾分校总理教授(Chancellor's Professor),Roberto是布朗大学计算机科学Plastech(What's this?)教授。本书包括六部分,分别是数据结构,排序和选择,基础技术,图算法,计算难题,其他主题。数据结构部分包括栈、队列、链表、二叉树、二叉平衡树、优先级队列和堆、Hash表联合体。排序和选择包括归并排序、快速排序、桶排序、基数排序、选择排序。基础技术包括贪婪法(Fractional Knapsack Problem/分数背包问题、Task Scheduling/任务调度、Text Compression and Huffman Coding/文本压缩和哈夫曼编码),生产消费(Recurrences and the Master Theorem/重入与主定理、 Integer Multiplication/整数乘法、Matrix Multiplication/矩阵乘法、Maxima-Set Problem/最值问题),动态规划(Matrix Chain-Products/矩阵链、General Techniques/ 通用技术、Telescope Scheduling、0-1背包问题),图与遍历(图、深度广度、有向图、双连接组件)。图算法包括最短路径、最小生成树、网络流和匹配。计算难题介绍NP不完全问题、逼近/渐近算法。其他主题介绍随机算法、B树和外部存储、多路搜索、计算几何、字符串算法(BM/KMP/Tries等)、加密算法、快速傅立叶变换、线性编程。

Amazon CN
https://www.amazon.cn/gp/product/B077MYFFY2/ref=ox_sc_act_title_1?ie=UTF8&psc=1&smid=A1AJ19PSB66TGU
Amazon EN
https://www.amazon.cn/dp/1118335910/ref=sr_1_2?ie=UTF8&qid=1517025123&sr=8-2&keywords=Algorithm+Design+and+Applications

7.9 算法技术手册/Algorithms in a Nutshell

作者George T. Heineman,伍斯特理工学院副教授(Worcester Polytechnic Institute)。本书从算法介绍开始,引入数学分析和排版表达方式,之后介绍各类排序(插入、中位、快排、选择、堆、计数、桶排序以及选择原则)、搜索(顺序、二分、哈希、二叉)、图算法(深度、广度、单源最短路径、最短路径对、最小生成树)、路径查找、网络流算法、计算几何、渐进算法,以及评测适配方法。

7.10 Algorithms - The Spirit of Computing(3rd)

作者David HarelMIT毕业,就职于以色列Weizmann科学研究所。本书包含引言、方法与分析,限制与健壮性,Relaxing Rules(并行并发、概率、加密),软件工程、人机交互、算法和只能的大图呈现。

Amzaon EN
https://www.amazon.cn/dp/3642441351/ref=sr_1_1?ie=UTF8&qid=1517025090&sr=8-1&keywords=Algorithmics%3A+The+Spirit+of+Computing

7.11 Algorithms and Parallel Computing

作者Fayez Gebali哥伦比亚大学电气工程博士,维多利亚电气与计算机工程系教授。

7.12 Design and Analysis of Distributed Algorithms

作者Nicola Santoro,滑铁卢大学博士,卡尔顿大学教授。这里是他发表的文章。少见的分布式算法专著,学习后编写介绍。

8 UNIX/LINUX系统编程

9 Linux内核

9.1 深入理解LINUX内核/Understanding the Linux Kernel

深入理解LINUX内核(第三版), 作者Daniel P.BovetMarco Cesati, 翻译陈莉君, 张琼声, 张宏伟. 包含内存寻址, 进程, 中断与异常, 内核同步, 定时测量, 进程调度, 内存管理, 进程地址空间, 系统调用, 信号, 虚拟文件系统, I/O体系结构和设备驱动程序, 块设备驱动程序, 页高速缓存, 访问文件, 回收页框, Ext2与Ext3文件系统, 进程通信, 程序的执行诸多章节.

如果只推荐三本LINUX内核编程必读书籍, 我推荐《深入理解LINUX内核》,《深入LINUX内核架构》,《LINUX设备驱动程序》.

2008年购得此书已接近10年, 偶有翻阅还是心有所得.

9.2 LINUX设备驱动程序/Linux Device Drivers

LINUX设备驱动程序(第三版), 作者Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman. 讲解内核模块加载卸载, 构造和运行, 字符设备驱动程序, 调试技术, 并发和竞态, 高级字符驱动程序操作, 时间、延迟及延缓操作, 分配内存, 与硬件通信, 中断处理, 内核的数据结构, PCI驱动程序, USB驱动程序, LINUX设备模型, 内存映射和DMA, 块设备驱动程序, 网络驱动程序, TTY驱动程序.

2008年购得此书, 当时缺少适当的技术背景, 读此书颇有收获, 并通过此书快速上手模块开发调试. 在研读深入LINUX内核架构一书, 并多年已处理过PCIe驱动, NIC驱动, I2C驱动后, 偶有翻阅已是不再有困惑.

9.3 深入LINUX内核架构/Professional Linux Kernel Architecture

深入LINUX内核架构, 作者Wolfgang Mauerer. 从简介开始, 到进程管理和调度, 内存管理, 进程虚拟内存, 锁与进程间通信, 设备驱动程序, 模块, 虚拟文件系统, Ext文件系统族, 无持久存储的文件系统, 扩展性和访问控制列表, 网络, 系统调用, 内核活动, 页缓存和块缓存, 数据同步, 页面回收和页交换, 审计, 再到附录体系结构, C语言注记, 系统启动, ELF二进制格式, 内核开发过程, 每一个章节, 都收获颇丰.

2012年5月购得此书, 已逾5年. 业余花费小半年完整的啃了一遍, LINUX内核终于不再神秘.

9.4 深入理解Linux®虚拟内存管理/Understanding the Linux® Virtual Memory Manager

  • 近期阅读清单。

9.5 LINUX内核设计与实现/Linux Kernel Development

LINUX内核设计与实现(第3版),作者Robert Love,Google高级工程师,Andriod移动平台内核研发人员。他参与的内核项目包括抢占式内核、进程调度器、内核事件层、通知机制、 VM改进及设备驱动程序。他是《Linux Journal》杂志的编辑。另外还有著作《Linux System Programming》、《Linux In a Nutshell》。

作者在300多页小篇幅中,从GIT、编译构建出发,介绍了进程管理、进程调度、系统调用、内核数据结构、中断处理与下半部机制、内核同步方法、定时器、内存管理、虚拟文件系统、块/IO层、进程地址空间、页高速缓存、设备与模块、调试方法。

10 软件设计

10.1 UNIX编程艺术/The Art Of UNIX Programming

UNIX编程艺术简称TAOUP,从UNIX软件设计哲学(设计理念)入手(比如设计时考虑拼接组合的组合原则),以实际工具软件为例(比如文本化设计的UNIX口令文件格式、基于管道的多道程序组合),讲述设计、语言、重用、可移植与文档化等。对理解UNIX设计理念,养成设计素质有重要作用。

作者Eric S. Raymond(简称ESR),本书同时有UNIX之父Ken Thompson等13位UNIX先锋之贡献。作者ESR同时维护着多个开源软件与文档,参见这里

译者姜宏、何源、蔡晓俊,我并没有搜索到相关主页,CS作者有个人页面还是挺好的。:(

11 Emacs

11.1 Mastering Emacs