一些免费的计算机科学教科书
以下是计算机科学教科书链接的集合,这些电子书可以在线免费获得,通常是以下几种形式:
- 开放教科书(例如PLAI,SF或HoTT书)
- 一本绝版的旧书,其著作权已归原作者所有(例如TTFP)
- 作者自己的教科书预印本。这包括作者与出版商作出特殊安排以在其首页上保留已出版文本的电子副本而仍保留其印刷本的情况。
下面还列出了一些论文,这些论文被认为是对某些主题的不错的独立介绍,并提供了完整的特殊主题课程的链接列表。
编程语言理论与程序分析(包括自动机)
主题,例如语义,类型,抽象解释……
- 软件基础
- 编程语言的实用基础(草稿)
- Martin-Lof类型理论中的编程
- 证明和类型
- 数学的实用基础
- +编程语言:应用和解释 (正在进行第二版)
- 语义与应用
- 咖喱霍华德同构讲座(草稿)
- +类型理论与函数式编程
- +具有相关类型的认证编程
- Isabelle / HOL:高阶逻辑的证明助手
- 顺序流程沟通
- 编程技巧
- 指称语义:语言发展的一种方法论
- +带类型的Lambda结石
- 带类型的Lambda微积分
- 逻辑与类型系统
- 根据规格进行编程
- 使用Z:规范,细化和证明
- 同伦类型理论
- 部分评估和自动程序生成
- 使用Nuprl证明开发系统实施数学
- 直觉型理论
- 具体语义
- PX:对流逻辑
- 指定系统:适用于硬件和软件工程师的TLA +语言和工具
- + ML类型推断的本质 (手稿,第10章ATTAPL)
- 静态程序分析
- 编程语言原理
- 面向对象程序的别名分析” (《手册》第二章面向对象编程中的别名)
- 指针分析
- 树自动机技术与应用
- 使用状态图建模反应系统:STATEMATE方法
- +认证编译器的程序逻辑
- 程序=证明
- 概率编程的基础
数学逻辑,集合论,模型论,拓扑
这部分不包括类别理论,这是下面的单独部分。
- 现代形式逻辑入门
- 自然逻辑(pdf)
- 代数拓扑
- 代数拓扑简明课程
- 模型论
- 集合论
- 子结构逻辑导论
- 数学模态逻辑:其发展观
- 归一化,删减和证明理论
- 时间与计算的逻辑
- 模态数学
- 模态逻辑与过程代数:双仿真视角
- 线性逻辑讲座
- 动力学,极性和定量
- 非充分集
- 行动逻辑
- 格子的种类
- 模态逻辑中的工具和技术(页面为德语;下载链接为实际的PDF)
- +通用代数和通用构造的邀请
- 代数拓扑简明课程(靠近底部)
- 逻辑与自动机:历史与观点
- 拓扑:一种分类方法
软件工程(理论与实践)
范畴理论与应用
- 抽象和具体类别:猫的喜悦
- 计算类别理论
- 姿势,三元组和理论
- + Topoi:逻辑的分类分析 (也在Euclid项目中)
- 类别,类型和结构
- 高级操作员,高级类别
- 计算科学的分类理论[pdf](Barr的出版物)
- *-自主类别
- 分类逻辑
- 阿伯利亚语分类
- 度量空间,广义逻辑和封闭类别
- 纤维学,拓扑理论,有效拓扑和适度集合的简介
- 分类同伦理论
- 科学家分类理论(手稿)
- 分类代数(技术上是1965年的期刊文章,来自Bull。Amer。Math。Soc。,17(1):40–106,但在Euclid项目上)。
- 高等Topos理论:作者版, arXiv版
- 丰富范畴理论的基本概念
- 在线杂志《分类理论与应用》将一些绝版的分类理论教科书的电子版存档: 《分类理论与应用》的再版
- 程序员的范畴论
- 高级分类和同位代数作者预印本
- 二维类别
- 一阶分类逻辑
- 通用图形及其粘合:函子类别的一种构造方法
- +范畴论
语言实施
系统与网络(包括安全性,体系结构)
- +关于第六版UNIX操作系统(和UNIX v6源代码)的评论
- 分布式系统, van Steen和Tanenbaum撰写的第三版
- 链接器和加载器
- 数据库系统中的并发控制和恢复
- 并行编程难吗?如果是,那么您能做什么?
- 操作系统:三个简单的部分
- TCP / IP指南
- CPSC 465/565关于分布式系统理论的注释(技术注释,但实际上是一本非常好的教科书)
- + Be文件系统的实用文件系统设计
- 计算机系统设计原理(作者在线共享下半部分,上半部分由Elsevier印刷出版)
- 数据库基础
- 安全工程:构建可靠的分布式系统指南
- 电脑网络
- 网络的最新进展,第1卷
- 计算机和通信系统的性能评估
- 网络演算书
- +计算机网络:一种系统方法
- 软件安全性:原则,策略和保护
- 电子设备原理
- NetBSD内部
- 开放式分布式系统
- 分布式共识和区块链的基础
通用CS理论和算法(包括AI,ML,数据科学等)
- 计算机科学基础
- 线性规划:基础和扩展
- 近似算法的设计
- 海量数据集的挖掘
- 基于模型的机器学习
- 数据科学基础
- 思考数据结构
- 贝叶斯思考:简单的贝叶斯统计
- 思维统计
- 算法博弈论
- 强化学习:简介(另,第二版作者预印本的直接PDF此处)
- 强化学习:入门,第二版
- 数据流的机器学习:MOA中的实际示例
- 公平与机器学习
- 深度学习
- 启发式算法
- 眼见理论:概率统计的视觉介绍
- 机器学习数学
- 密码学的喜悦
- 密码学简介
- 应用密码学研究生课程
- 神经网络与深度学习
- 使用Qiskit学习量子计算
- 多主体系统:算法,博弈论和逻辑基础
- 深入学习
- 离散数学:开放介绍,第三版
- 计算模型
- 图论
- +计算复杂性:现代方法(草稿)
- 差异隐私的算法基础
- 语法推断:学习自动机和语法
与CS相关的通用数学(包括统计)
- 应用线性代数导论:向量,矩阵和最小二乘
- 因果推论书
- 统计学习简介及其在R中的应用
- 统计学习的要素:数据挖掘,推理和预测
- 线性代数删节
- 21世纪的统计思维
- 凸优化
- 概率论及其应用概论
- [数值线性代数](https://people.maths.ox.ac.uk/trefethen/text.html)
计算语言学与自然语言处理
- 语言数学(通过作者的主页)
- 句法过程
- 语音和语言处理
- 自然语言处理
- 使用R进行文本挖掘
- 使用Python进行自然语言处理:使用自然语言工具包(NLTK)分析文本
- 语法理论:从转换语法到基于约束的方法。第四修订版和扩展版
- 这本身就是Grammatiktheorie的英语翻译,它是德语,也可以免费获得。
教育
- 并行和分布式计算主题:本科课程并发介绍(预印本)
以语言为中心的计算机科学导论
特定的编程语言
虽然本页上的大多数书籍都侧重于理论/基础主题,但有时您只需要学习编程语言或查看有关特定语言功能的一些参考即可。
- Scala
- OCaml
- Haskell
- +真实世界的Haskell
- Haskell中的并行和并发编程(在O’Reilly Safari上,但无需帐户或订阅即可阅读)
- 向您了解Haskell
- 使用Haskell和Yesod开发Web应用程序
- 标准ML
- 方案和LISP
- Erlang
- JavaScript
- java
- python
- Rust
- Ruby
编程和/或计算机科学导论
其他类别中列出的一些书籍适合希望入门编程和/或计算机科学的人。
有用的工具
简要概述文件
- 抽象解释(经典):抽象解释:通过构造或逼近固定点对程序进行静态分析的统一格模型。Cousot和Cousot,POPL’77。
- 抽象解释(语义):抽象机器抽象。Van Horn和Might,ICFP’10。
- 指称语义:编程语言的指称语义。Tennent,CACM 19(8),1976年。
- 程序综合:程序综合中的维度。古尔瓦尼(PPG’10)。
- 类型理论:类型理论导论。Herman Geuvers,语言工程和严格课程的演讲笔记
- 2009年,ALFA暑期学校进行软件开发。
论文阅读清单,课程和其他
- 马特·梅特的研究生推荐
- 范畴论丛书
- 本杰明·皮尔斯(Benjamin Pierce)的《编程语言巨著》合集
- Karl Crary的《编程语言和逻辑》经典论文
- 帕特里克·库索特(Patrick Cousot)的抽象解释课程(阅读部分)
- Matthias Felleisen的《编程语言史》课程阅读
- Viktor Vafeiadis和Derek Dreyer的并行程序逻辑课程
- 弗兰克·芬宁(Frank Pfenning)的线性逻辑课程
- 迈克尔·舒尔曼(Michael Shulman)的同伦类型理论研讨会
- 鲍勃·哈珀(Bob Harper)的同伦类型理论课程(带视频)