本项目收集最优质的计算机科学学习资料。
收录的依据主要是:在领域内的经典程度、作者权威性、推荐者的数量、推荐者的权威性、豆瓣评分和评价。不放心的同学可以在阅读之前在 Google、豆瓣、知乎 搜索相关的评价。
专治“学习资料不足恐惧症”。
本项目将持续更新。如果这个项目有幸帮助到了你,加个 Star 吧!
在进行全面的资料列举之前,我想提醒读者:“过于丰富”的资料清单可能会造成畏惧或者自满的心态,真正开始学习才是提升自己的第一步。
如果你不想花费时间在挑选和犹豫上,那么本小节为你总结了几本最值得投入精力的书,以便你快速开始:
- 神书:深入理解计算机系统(CSAPP) 理解计算机和编程的本质
- 神书:计算机程序的构造和解释(SICP) 理解计算机如何执行我们编写的程序
- 神书:数据密集型应用系统设计(DDIA) 理解分布式系统设计的原则和权衡
- 算法首选:Algorithms
- 操作系统首选:Operating Systems: Three Easy Pieces
- 计算机网络首选:计算机网络 自顶向下方法
- 最优质的学习资料
- 快速开始
- 目录
- 程序设计思想和编程语言
- 计算机体系结构
- 算法与数据结构
- 操作系统理论
- 计算机网络
- 数据库
- 分布式系统
- 编译原理
- 操作系统实践(Linux 运维)
- UNIX 编程
- 工程化
- 程序员的自我修养
- C/C++
- Python
- 前端
- 机器学习
- 数学基础
- 杂项
建立对计算机和编程的基本认识。
- 计算机程序的构造和解释(SICP) 神书,Scheme 三剑客之一。修炼编程内功,理解计算机和编程的本质。务必完成书中的练习。
- 官方 HTML 版、精校版、习题答案
- SICP 公开课中文化项目有 SICP 课程的中英文资源。
- 语言&编辑器:做练习的时候推荐使用Racket并安装SICP 扩展包。Racket 的 IDE 使用体验比 MIT-Scheme 好很多,并且 Racket 本身也是一门非常年轻优秀的 Scheme 方言。
- 伯克利 cs61a 课程用Python来教 SICP,在课程官网可以找到很多有用的资源。composingprograms是一位伯克利教授做的教学网站,用Python来教 SICP,作为 cs61a 的教科书使用。
- 学习 Lisp 之前可以看看这两篇经典的博文:Lisp 的本质(The Nature of Lisp)、Lisp 的永恒之道。让你提前对 Lisp 的魔法有所了解。
- Essentials of Programming Languages(EOPL) Scheme 三剑客之一,助你看透编程语言的本质。
- Programming Language: Application and Interpretation(PLAI) Scheme 三剑客之一,助你看透编程语言的本质。
- Concepts, Techniques, and Models of Computer Programming 被认为是 SICP 近代继任者,覆盖面稍广于 SICP,但知名度远不及 SICP。带读者领略编程背后的概念和思想。官方网站
- How to Design Programs(HTDP) 正如它的名字所说,它教你如何有条理地设计计算机程序。这本书使用函数式编程语言 Racket (一门非常年轻优秀的编程语言)来讲解,但是它不是一本教你编程语言的书,它所包含的知识是普适的。官网免费阅读。
- 这本书是面向编程入门者的角度来讲解的,所以对于有编程基础的人来说有一些啰嗦,建议跳读。
- Software Foundations 编程语言理论中的圣经。
计算机底层运行机制。计算机如何执行我们编写的程序。
- 深入理解计算机系统(CSAPP) 神书,帮助你理解计算机如何执行我们编写的程序。 CMU 公开课资源。
- 编码 隐匿在计算机软硬件背后的语言 通俗易懂,面向入门者,近乎科普。评价很高,经常被推荐。
- 程序员的自我修养 讲解了一个程序在其生命周期里会碰到的种种事物。国人写的书。经常被推荐。
- 计算机组成与设计 硬件/软件接口,计算机体系结构 量化研究方法这两本书作者是一样的,但内容不一样。只要是推荐这方面的书的问题,少不了这两本。我上计算机组成原理课的时候用的就是前面那本书,虽然内容听起来很可怕,但是英文版读起来真的很好懂(只要你英语过关)。
- 伯克利 cs61c 课程是以这本书为教材的,在课程官网可以找到学习资源。
参考这两个知乎问题:有哪些不错的介绍计算机体系结构的书籍?,计算机体系结构这门课的主要内容是什么? 如何自学?
- 伯克利 cs61c 课程是以这本书为教材的,在课程官网可以找到学习资源。
- Algorithms(算法概论) 相对于 Introduction to Algorithms 和 Algorithms,这本书很薄,但是它的讲解简单优美有趣,适合初学者。
- Algorithms 每个开发者必知必会的数据结构和算法。也是经典教材,评价很高。相比于 Introduction to Algorithms,这本书是从开发者的需要出发,介绍那些实用的算法,相对易懂;而 Introduction to Algorithms 是更加系统、深入地研究算法理论。配套网站中包含了算法精讲以及习题答案。
- Introduction to Algorithms 推荐率最高的算法书。经典、全面、深入。它的难度和容量可能有点大,不适合入门者。不适合以“解决问题”为导向的学习,适合以“算法研究”为导向的学习。
- 编程珠玑。相对较薄的一本书。本书并没有系统地归纳各种算法,而是通过一些精心设计的有趣而又颇具指导意义的程序实例,引导读者理解问题、选择和实现算法。
- 编程之美 面试的经典问题,引发读者思考,领略算法的乐趣。
- 算法竞赛入门经典 与前面的算法书相比,它的实用性非常强,是一本“解题”的教材,适合学生学习算法(刷题)入门。真希望自己在高中阶段就了解到这本书,开启编程(竞赛)的大门。。。
- Operating Systems: Three Easy Pieces(OSTEP) 评价很高的操作系统书。可以在官网免费阅读英文版。中文版。
- Operating Systems: Principles and Practice 多个知名大学将其作为教科书。
相关知乎回答:有没有好的操作系统的书? - 知乎
- 6.828 MIT 的操作系统课程,经常被推荐。按照这个课程安排,阅读讲义、动手实践。
- 计算机网络 自顶向下方法 经典教材,计网入门推荐基本都是这个。官网有补充资料。
- TCP/IP 详解 卷 1:协议 深入讲解 TCP/IP 的内容。不适合入门。如果是相关专业或者岗位的话,需要通过这套书籍来进阶。
- Berkeley CS186 由于数据库学习有很强的商业价值,因此该领域比较少人编写传统教材(牛人都忙着挣钱)。自学数据库,比较适合看这门课程视频入门,然后阅读下面的进阶资料。
- Architecture of a Database System 一篇梗概性论文,提供了独特的对关系型数据库管理系统(RDBMS)如何工作的高层次观点,是后续学习的实用梗概。
- Readings in Database Systems 又称“数据库红书”,数据库领域的经典论文合集。时效性很高。
- 数据库管理系统原理与设计 数据库教材。比较老但是非常经典。
上述数据库经典资料推荐都来自Teach Yourself Computer Science
- 高性能 MySQL 如果你已经在工作实践中使用 MySQL,要深入学习 MySQL、对其进行调优,那么这本书是必读的;否则,还是优先阅读上面的经典资料。
- 数据密集型应用系统设计(DDIA) 分布式领域神书。帮助你理解分布式系统设计的原则和权衡。兼具广度、深度、可读性和严谨性。
- cs143 斯坦福的编译器课程。 这个课程曾经有 Coursera 的版本,但是后来下架了。在最好的编译器课程 - 知乎可以下载 Coursera 版本的视频。
- 编译原理 龙书,领域经典。习题答案。
- Parsing Techniques。编译器前端。
- Engineering a Compiler。偏向编译器后端。
- 高级编译器设计与实现。鲸书。偏向编译器后端。
-
The Linux Command Line(TLCL),官网可下载 PDF,中译本 生动清晰的入门小册,教你通过命令行真正地掌控计算机。非常适合 Linux 入门。在知乎和豆瓣的评价都很高。
-
鸟哥的 Linux 私房菜 - 基础学习篇,鳥哥的 Linux 私房菜 - 基礎學習篇目錄 应该很多人听说过这本书了,知识点详尽。知乎上有人说鸟哥的书讲得“太详细”了,以至于阅读起来有点吃力。
-
The Art of Command Line 命令行的实用技巧。Start 数量惊人。。。
-
Google SRE 来自 Google 的运维书,它讨论如何运维大型软件系统,同时提高可靠性。
-
Docker — 从入门到实践 中文入门 docker 的不二之选。不过入门以后最好看官方文档,更加详细。
- Pro Git Git 官网推荐的书。也可以边用边查Reference。
- 图解 Git 用图片讲解了 Git 的基本操作,适合初学者。
- 廖雪峰的 Git 教程 比较靠谱的中文教程。
这个主题可能更适合拥有一定编程经验以后再阅读,结合自己的编程经验才能有深刻的理解。
- 设计模式 可复用面向对象软件的基础 设计模式,无人不知吧。
- 冒号课堂 编程范式与 OOP 思想 虽然书名起得不好,但是不妨碍它是一本好书,对编程范式和程序设计思想的阐述非常深刻。相对容易理解。
- Stanford CS107 Programming Paradigms(编程范式)
- Clean Architecture:软件架构与设计匠艺
- 领域驱动设计:软件核心复杂性应对之道 (业务)编程的本质是对真实世界的抽象和建模,本书帮助读者理解业务与代码之间的联系,以及如何设计业务代码。
- 黑客与画家 被无数人推荐。
- 哥德尔、艾舍尔、巴赫: 集异璧之大成 视角跨越多个领域的奇书。
- 人类简史
- 浪潮之巅 在科技产业的发展历史中探寻规律。
- 暗时间 作者刘未鹏,他的博客也值得一读。从文章都能感觉到作者是一个善于思考的人,文章经常能给人醍醐灌顶的感觉。
- 经济学原理 权威的经济学科普书籍。不要成为一个只会埋头干活的码农。
更多的资料直接看下面的链接或者上知乎搜索。
- The Hitchhiker’s Guide to Python! google 搜索 Python guide,前四位都是它或它的中文翻译。GitHub 仓库的 Star 数量很多。定位是"Python best practices guidebook"。
- Fluent Python 豆瓣评分最高的 Python 书籍。比较适合进阶。
- The Rust Programming Language Rust 官方推荐教材。详尽涵盖了 Rust 的理论基础。最好结合下面实践资料一起学习。
- Rust by Example Rust 官方出品的在线练习网站,通过练习来巩固这门语言的知识点。
- rustlings Rust 官方出品的小练习,帮助你熟悉 Rust 编程,包括代码读、写,以及 Rust 编译器的使用,实践性教程。
- JavaScript for impatient programmers 它专注于ECMAScript 这门语言,并不涉及Web APIs。它用非常精炼的语言构建了现代 JavaScript 的知识体系(涵盖到 ES2019)。作者Dr. Axel Rauschmayer的博客也值得关注。
- JavaScript 高级程序设计 兼顾了语言和 Web APIs。
- The Modern JavaScript Tutorial 现代 JavaScript 开发教程。包含了 ECMAScript 语言和重要的 Web APIs。个人认为它的主要价值在于对重要 Web APIs 的分类整理与阐释。
- You Don't Know JS 大部分 js 开发者应该都听说过,进阶必读。
- Functional-Light JavaScript。将函数式编程思想应用在 JavaScript 开发中。虽然 JavaScript 很难做到“最纯正”的函数式编程,但是本着实用主义的心态,学习多一种编程范式,对于开发者来说是十分有益的,更何况很多前端框架都借鉴了函数式编程思想。
- Professor Frisby's Mostly Adequate Guide to Functional Programming。同上一本,这两本书应该是 JavaScript 函数式编程书里的首选了。
- Must-watch videos about javascript JavaScript 视频推荐列表,Star 数量很多。不过内容太多,建议选择感兴趣/重要的来观看。太旧的视频也需要斟酌一下。
- JSConf JavaScript 技术会议。同样内容太多,建议选择感兴趣/重要的来观看。太旧的视频也需要斟酌一下。可以按照热度排序。
- How do I get started with V8 development? 作者大姐姐是 V8 的开发者,YouTube 上有很多她的演讲。这篇文章提供了很多进入 V8 源码世界的资料。对于 V8 爱好者,她的博客、讲座都值得关注。
- Vyacheslav Egorov 介绍了很多 V8 底层的原理。作者之前是 V8 开发者,现在已经跳槽了。就算不打算学编译器,js 开发者也应该读一读这两篇文章:Explaining JavaScript VMs in JavaScript - Inline Caches, What's up with monomorphism?。
- Benedikt Meurer's blog Benedikt Meurer 是 V8 的开发者之一。
- How JavaScript works: inside the V8 engine + 5 tips on how to write optimized code 讲解了 V8 优化执行速度的几种基本方式,了解它们有助于我们理解前端框架内部的优化、写出更加 VM-friendly 的代码。以 Angular 为例,Angular 源码利用Monomorphic来优化代码,Angular 编译出的 JavaScript 也是VM-friendly的。
该专栏有更多关于 JavaScript 原理的文章。
- v8-perf 收集了关于 v8 的笔记和资源。
- v8 专题 - 阿里妈妈前端技术周刊 收录了几篇优秀的 v8 文章(中文)。
- 奇舞周刊 每周推荐几篇前端精华文章。
- 前端小密圈 前端文章推荐列表。很多干货,Star 数量也挺高的。
- InterviewMap 针对前端的知识点清单,对于查漏补缺非常有用。
- 当你在浏览器中输入 google.com 并且按下回车之后发生了什么? 经典面试题的完整回答。下次面试被问到这个问题,你能把面试官答到崩溃。英文原版仓库star 数量很高。
- How browsers work 浏览器工作原理。弄懂它是理解前端性能优化的基础。相关中文文章:中文翻译、浏览器的渲染原理简介、浅析前端页面渲染机制。
- Inside look at modern web browser | Google Developers。中文解析。
- 前端性能优化清单:
- Front End Interview Handbook 提供了前端常见面试问题的答案。它只是面试题的集合,而不是系统化的知识总结,因此只适用于准备面试和查漏补缺。
- Front-end development handbook 对于前端的基础知识点,提供了很多优质的资源链接。
- The Super Tiny Compiler,或者它的中文翻译版。 Node、Typescript、Babel 以及大部分现代前端框架都和编译器有着密切的关系,要成为一流的前端必须了解编译器的知识。更何况编译器的知识在各个语言都是基本通用的。
- freeCodeCamp 开源、非盈利的在线学习网站。它的主要内容是前端基础知识。这个网站的最大特点是在线评测,这种即时反馈对于学习者来说是非常有帮助的。该仓库的 Star 数量在 github 上排名第一。
- Web 安全 斯坦福大学的公开课。内容非常贴近实际的 Web 应用。
官方文档就不需要提了,这里只列举用于进阶的资料。
- Angular In Depth 应该是最深入、访问量最大的 Angular 专栏了。经常对 Angular 进行源码级别的剖析。
- Trotyl Yu 知乎里最活跃的 Angular 答主之一(还有雪狼和VTHINKXIE),他的专栏Angular News 禅与摩托车轮子维修艺术都是 Angular 干货。
大佬们都在为什么前端讨论的都是各种 react,vue 源码解析,渲染机制等,没人讨论 angular? - 知乎回答了。
- Angular 资料获取不完全指南 列举了一些有名的博客,经常查找 Angular 资料的同学应该很熟悉这些博客了。
- Angular Articles 作者同上,Angular 文章推荐。
- Angular 设计文档 官方设计文档,但是感觉有点缺乏维护,有一些东西很旧了。不过还是有很多优质的设计文档的,需要挖掘。
- 经常有 Angular 团队成员出席这些会议:
- awesome-angular 很全面的 Angular 学习资源列表。缺点是有点杂。建议先看Angular Connect 小节精选的会议视频。
- Learn Angular from Top Articles for the Past Year (v.2018) 这个专栏专门收集最受欢迎的技术文章、公开课,每个月或每一年更新一次。他们还做了 React、Node.js、python、machine learning 等技术的排行。
- RxJS Marbles 通过交互式动画来学习 Rx Observables。
书籍:
- Artificial Intelligence: A Modern Approach 经典教科书。它的官网有补充资料。
- Pattern Recognition and Machine Learning 领域经典。这是其中的算法实现(matlab)。
- Deep Learning 被誉为“深度学习圣经”。中文版已经出版并且开源。
- Machine learning: a propability perspective 领域经典。
- 机器学习(周志华) 国内首屈一指的机器学习教科书。即使我的老师没有指定过教课书,但是同学们还是不约而同地买了这本书,可见其受欢迎程度。
- The Elements of Statistical Learning : Data Mining, Inference, and Prediction 领域经典。
- 统计学习方法 国内非常有名的机器学习书。虽然内容没有《机器学习(周志华)》那么全面,但是它的算法讲得更深入一些。
- Information Theory, Inference, and Learning Algorithms 深入浅出,将信息论与机器学习联系了起来。读刘未鹏博客的时候了解到的书,搜了一下评价还挺好。
其他机器学习书单:机器学习经典书籍 人工智能入门书单(附 PDF 链接)
课程:
- 吴恩达机器学习 它翻译自 Andrew Ng 2017-2018 年在coursera的公开课。在 cs229 的基础上降低了一些难度,适合入门。
- 中文笔记 文字比视频更加适合复习和查阅。
- cs229 上面这个课程的加强版。这是斯坦福的课程,通过看 course notes 来学习。
- UFLDL Tutorial 斯坦福提供的 Unsupervised Feature Learning and Deep Learning Tutorial,可以作为参考小册。
- cs231n 来自斯坦福的精品课程,先讲解深度学习(卷积神经网络),然后将它应用于计算机视觉。有 course notes 和视频。CS231n 官方笔记授权翻译。
- CS230 吴恩达的深度学习课程,课程内容由coursera上的 5 门课组成:神经网络与深度学习、提升深度神经网络、机器学习项目的策略、卷积神经网络、序列模型。
- 台湾大学李宏毅的课程 在知乎上很受欢迎。中文授课。
- 台大林轩田《机器学习基石》和《机器学习技法》课程
其他机器学习资源合集:
- Awesome Machine Learning 机器学习的 Awesome List,Star 数超高。README 按照语言分类,列举各个语言下的机器学习工具(这个列表是应该是为专业人员建立的),非常完备,但是更适合已经入门者。其他文档分别推荐了博客、书籍、公开课、会议。
- Machine learning Resources 收集机器学习资源的 GitHub 仓库,列举了很多入门资料。
- Deep Learning Papers Reading Roadmap 这个 repository 收集了深度学习各个领域中最基础、重要的研究论文,进阶者可以从这里入手。star 数量很高。
- Distill Distill 是一个期刊平台,使用了交互式、视觉化的用户界面,注重对机器学习研究成果的理解与诠释。
- deeplearning.net 给出了很多基础性的论文。
相关知乎问题:机器学习该怎么入门? - 知乎 普通程序员如何正确学习人工智能方向的知识? - 知乎 深度学习如何入门? - 知乎 YouTube 上有哪些计算机方面的值得推荐的公开课? - 知乎
- deepo 轻松在 Docker 上搭建开发环境。
- Convolution arithmetic 用 动图+论文 详细解释了卷积和逆卷积的过程。
- Introduction to Linear Algebra, Fifth Edition
- Linear Algebra - MIT 公开课 这个是OCW Scholar(Open CourseWare Scholar)版本,专门为自学者收编,除了课堂视频和课堂讲稿以外,还提供了习题讲解视频、作业和答案等资源,更加完备。
- Linear Algebra and Its Applications
- All of Statistics 备受推荐。内容很好地涵盖了机器学习所需,又不至于太臃肿。在官网可以下载 pdf 版本。
- 概率论与数理统计 陈希孺院士的书在豆瓣和知乎都好评如潮。
- 概率论及其应用
深入学习机器学习的同学可能需要关注这个领域。相关推荐里少不了这两本:
- Convex Optimization. Stephen Boyd, 2004, Cambridge university press.
- Numerical Optimization. Nocedal, J. Wright, S. 2006, Springer.
- RegExr 学习、测试正则表达式的神器。
- The Missing Semester of Your CS Education MIT 课程,讲解命令行、vim、git 等编程工具与编程常识,非常实用。
- 快捷键大全 用好手上的工具也是很重要的。
- Teach Yourself Computer Science 阐释计算机科学最重要的 9 个学科,给出了学习建议和学习顺序,并给出了最优质的学习书籍和课程视频。
- System Design Primer 系统设计、架构通识的收集汇总。对每个知识点提供了精炼的讲解以及深入学习的资料链接。
- 掘金翻译计划 翻译了很多优质文章,涉及到各个编程领域。碎片化阅读的资料来源。
- 技术面试必备基础知识 涵盖算法、操作系统、计算机网络、数据库、系统设计、Java 的知识点收集。
- What is the single most influential book every programmer should read? StackOverflow 上一个很火的问题的更新版,里面都是经典书籍。
- MIT 公开课排行榜 选择需要的来学习吧。
- Stanford Engineering Everywhere 斯坦福公开课项目。