骑鹿人的计算机科学学习指南

本指南:

基础自学教材、视频

  1. 建议直接从编程入门开始,写出可以跑的东西来,有成就感~
  2. 计算机组成,计算机网络,操作系统是三门重要基础哦~
  3. 英语和数学非常重要~如果对英语感到不适,利用英文视频强迫一下自己~
  4. 实践出真知!
类别 科目 自学书籍(中文版/英文版) 视频课程 学习目标
基础必修 编程入门(三选一) Python编程导论
Introduction to Computation and Programming Using Python
程序设计方法
How to Design Programs
程序语言的应用和解释(在线阅读)
Programming Languages: Application and Interpretation(在线阅读)
麻省理工:计算机科学和Python编程导论(中英字幕)

学会基础的编程方法,拥有使用编程语言和工具解决问题的能力。
计算机架构 计算机组成与设计
Computer Organization and Design
北京大学:计算机组成(中文无字) 基础的硬件知识大局观。理解计算机的结构,便于从机器角度思考分析现实问题。
算法和数据结构 算法
Algorithms
麻省理工学院:算法导论(中英字幕) 培养使用编程工具解决实际问题的能力,理解程序的设计方式和效率。重要程度五颗星~
计算机网络 计算机网络:自顶向下方法
Computer Networking: A Top-Down Approach
斯坦福大学:计算机网络(中英字幕)
重要的知识基础。理解网络通讯的原理,便于多方面分析实际问题。
操作系统 现代操作系统
Modern Operating Systems
加州理工学院:操作系统(英文无字幕)
清华大学:操作系统(中文无字幕)
重要的知识基础。理解并发、资源管理和软件设计中的权衡原则,锻炼分析解决实际问题的能力。
进阶选读 数据库导论 数据库系统基础教程
A First Course in Database Systems
斯坦福大学:数据库导论(英文无字幕) 理解应用对通用存储的需求,提升代码效率。理解数据模型的设计。
高级编程技术 计算机程序的构造和解释
Structure and Interpreter of Computer Programs
计算机程序的构造和解释(中英字幕)
编程还有很多东西要学哦~
深入理解计算机系统
Computer Systems: A Programmer's Perspective
斯坦福大学:编程方法学(中英字幕)

离散数学 离散数学及其应用
Discrete Mathemtaics and Its Application
麻省理工:计算机科学中地数学(英文字幕) 计算机科学通用数学基础。
进阶数学
具体数学
Concrete Mathematics
暂无 分析算法,高级编程和用于解决复杂问题的数学基础。
编译原理 编程语言实现模式
Language Implementation Patterns
编译原理
Compilers
斯坦福大学:编译原理(中英字幕) 理解编程工具,锻炼抽象能力。
分布式系统 分布式系统原理与范型
Distributed Systems: Principles and Paradigms
麻省理工:分布式系统概念(无字幕) 理解分布式系统的应用和规则。此方面涉及很广,远非一本书一门课可以囊括。
编程语言语用学 程序设计语言-实践之路
Programming Language Pragmatics
计算机编程的概念,技术和模型
Concepts, Techniques and Models of Computer Programming
斯坦福大学公开课:编程范式(中英字幕)

更深层次地掌握编程语言。
计算机程序数学基础 软件基础(在线阅读)
Software Foundations(在线阅读)
暂无 更深层次的计算机科学数学基础。
热门领域 人工智能导论 人工智能-一种现代的方法
Artificial Intelligence: An Modern Approach
伯克利:人工智能导论(英文无字幕)
机器学习 机器学习(周志华)
Interpretable Machine Learning
Pattern Recognition and Machine Learning
吴恩达:机器学习(中英字幕)
深度学习 Neural Networks and Deep Learning 李宏毅:深度学习理论(中文无字幕)
自然语言处理 语音与语言处理
Speech and Language Processing
斯坦福深度自然语言处理(中英字幕)
计算机图形学 计算机图形学
Fundamentals of Computer Graphics
上海交通大学:计算机图形学(中文无字幕)
计算机视觉 Computer Vision: Models, Learning, and Inference 斯坦福大学:深度学习与计算机视觉(中文字幕)
自动推理 Certified Programming with Dependent Types 暂无

学习观小问答

本节是关于计算机科学学习观的主观理念,希望可以给你提供对于计算机科学学习的“大菊观”。适用于各路萌新和迷茫的CS学子,不适用CS界精英学子,IOer,各领域大牛和专家。

Q:如何选择大学和专业?
A:如有出国能力,建议去美国学习计算机科学。否则,请直接选择“计算机科学”专业。最新开设的”人工智能“”多媒体“”大数据“等专业都不建议申报,理由是基础课不够充实,杂而不精,没有任何实用意义。

Q:如何自学计算机科学?
A:请使用英文教材、英文翻译教材、官方中文文档,按照正确的顺序配合习题与实践项目进行自学;也可以直接看名校的公开课视频和课件。如W3Cschool菜鸟教程此类资源网站可以帮助理解和整理知识,当作备忘笔记。大部分情况下,请避开中国作者的教材。

Q:学习计算机科学就是学编程吗?
A:绝对不是!编程语言只是基础和工具。绝对不要拘泥于某一门编程语言,也不要神话它。记住,编程语言的使用和学习是轻松写意,自然而然的事情,并不需要苦练数年才能上阵。

Q:系统地进行学习重要吗?
A: 十分重要。对于计算机系统的认知,是提升自身综合能力的第一个“瓶颈”。学会之后可以对问题进行多方位思考、分析,建立对计算机科学的大局观,做一个解决实际问题的人

Q:英语重要吗?
A: 十分重要。学英语不仅仅是因为编程语言的关键字是英文单词,有以下好处:

  1. 学习“概念”和“专业词汇”时,可以顾名思义,加强理解速度。专业词汇的中文翻译大部分都无法直接理解它的意思,如果读书时时间花在了理解词汇上,效率大打折扣。
  2. 中文翻译的外国教材质量较差。这是一客观事实,是因为计算机书籍销路窄,译者对于英文经典教材的翻译几乎是义务的,无法保证翻译质量。
  3. 中国教材普遍质量极差。这些教材大部分是作者根据相关书籍改写来的,知识讲解不清晰,也比较过时。
  4. 便于查阅论文和研究成果,以及学术交流。 所以,骑鹿人建议在全英文环境中学习

Q:数学基础?
A: 因人而异。

  1. 学习编程最低限度的数学基础是:二进制、十六进制计算、指数、对数算术,简单的布尔逻辑、命题逻辑以及数学归纳法,在高中数学中已经基本涵盖了。如果有不清楚的地方,可以阅读《程序员的数学》,初中数学水平即可看懂。
  2. 对于以软件开发者算法工程师为目标进行学习的同学来说,大部分情况下不涉及数学。如果涉及,使用维基百科进行知识补充就够了。
  3. 如果想成为专家、大牛级程序员,或者某领域专家,则很大程度上与数学联系紧密。

Q:如何学习数学?
A: 人生有涯,数学无涯,应避免南辕北辙,丢失学习重点。对计算机科学有兴趣,可以在涉及到数学问题的时候,利用维基百科知识补充(不懂啥搜啥)。一般情况下,不必系统学习(甚至不必学习离散数学、线性代数)。对于数学的历史、数学的证明等,更不需太过重视。一般而言,有以下三门核心基础数学:离散数学,线性代数,概率论与统计学。

Q:如何选择兴趣领域?
A: 在20世纪60年代,计算机科学研究的重点是程序语言,编译器,操作系统,以及这三方面涉及的数学。70年代则以算法的研究最为火热。于今的计算机科学研究更重视“应用”。在自然科学中,观察、收集和存储数据最为关键。在商业中,重要的是对数据的“理解”和“掌控”。这些是计算机科学的传统领域
这些传统领域地研究已经相对完善。现在计算机科学的研究,集中在获取和处理有效信息,以使计算机解决特定实际问题。机器学习的快速发展是一个例子。一个当前(2019年)流行雇员种类和研究领域的不完全列表如下:

Q:应该对编程语言进行研究吗?
A: 对于程序语言和编程方法的研究非常有用。

Q:计算机科学有哪些神书?怎么读?
A:被神话的书籍很多,比如《计算机程序的构造和解释》(SICP),《深入理解计算机系统》(CSAPP)等。这些书都是名校基础入门教材,并不值得花太多时间研读透彻,而应该主动寻找更深刻的课题。要通过读书提升能力,不是用尽全力把一本书理解到100%,而是在把一本书理解到60%的时候,看一本更深奥的书,并紧密配合实操。这样当你回过头来看第一本书时,对其问题的理解就非常自然轻松了。

Q:实践重要吗?如何实践?
A:实践极其重要,理论知识也很重要,二者相辅相成。实践需要花费很多精力:

  1. 保持编程和思考的习惯。可以在LeetCode上刷题热手,也可以寻找开源项目贡献代码。
  2. 接触新领域,多写“玩具程序”
  3. 有一定水平之后可以寻找合适自己的项目加入。 应该避免:
  4. 单纯地学习新框架、使用新工具,而不涉及理论补充。
  5. 学而不练。
  6. “死学”一门,追求“精通”,特别是基础的内容。

Q: 逻辑思维重要吗?
A: 逻辑思维对于初级程序员来说有一定锻炼思维的作用。但是如果工作内容涉及到数理逻辑,那么所谓的逻辑思维就太简单、太非形式化了。逻辑思维和逻辑学是完全不同领域的两个概念。

Q: 数理逻辑?
A: 数理逻辑是和理论计算机科学紧密相连的一科,基础的数理逻辑已由《离散数学及其应用》囊括。数理逻辑主要分支有证明论,模型论,公理化集合论和递归论,其中证明论和递归论与计算机科学的研究相关较密切。然而,不想从事编程语言、自动推理等领域研究的同学们,对此不必太过看重。

支持本网站

  1. 找到错误!找到更好的资源!好的建议!邮箱:akiritsu@outlook.com;QQ群:296867034,性感群主,在线女装。
  2. Github加星或者关注骑鹿人。
  3. 转载,帮助更多的初学者,也请注明出处(本网站不定期更新)。

免责声明

本指南是骑鹿人一时兴起所为,如果能对大家有一些帮助就很开心了~如果有建议、新的想法,或者找到了本网站的漏误,欢迎给骑鹿人发邮件哦(akiritsu@outlook.com)。本站一部分内容参考了Quora,知乎,teachyourselfcs.com,使用的jekyll主题是BlackDocs,如有侵权立即删除。

  1. 对于资源而言,如果有多个“经典教材”内容或领域重复,只选取综合内容最好、最适合自学的一个,避免单纯地罗列“平行书籍“、“同类资源”
  2. 本站资源骑鹿人及友人只看过约一半(?),不了解的领域是通过对比CS四大名校的教材和Quora问答给出,可能存在谬误,一经发现骑鹿人会在第一时间修正。
  3. 本站面向的是初学者,迷途小羔羊,爱好者;且对资源的选取和对比比较负责。并不适合各路精英大神,看完再喷~没人是傻X,或者所有人都是傻X~

骑鹿人的156本计算机领域推荐书单

  1. 不要问骑鹿人为什么是英文的~
  2. 书籍侧重点比较个人向,极力避免冗余。
  3. 很多书的意义不在于努力通读学完它,而在于在你遇到问题的时候,有不同的角度和思路,你知道读它可以帮你。这些书骑鹿人大多只读过部分,少数通读。
  4. 推荐书籍仅少数是通读自学教材。每个子学科一般最多保留四类:
    • 入门自学类,对于本专业人士和研究人员入门该领域最简单最高效的书籍,但不包括过于简单、言之无物,或者非专业人士的入门书籍,如《程序员的数学》,《算法图解》;
    • 进阶课题类,该领域的进阶分析介绍,或涉及高级及应用,;
    • 综合性手册,对于该领域内容阐述较全的描述性手册,此类书籍一般用于查阅,不建议通读;
    • 专用性手册,用于特殊应用和情景的专著,限于个人水平和精力只收集少部分。

Programming and Problem Solving

Programming is the process of designing and building an executable computer program for accomplishing a specific computing task. Programming involves tasks such as: analysis, generating algorithms, profiling algorithms’ accuracy and resource consumption, and the implementation of algorithms in a chosen programming language (commonly referred to as coding)

Introductions to Programming

How To Design Programs (HTDP), 2nd Edition, Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi

Introduction to Computation and Programming Using Python: With Application to Understanding Data, 2nd Edition, John V. Guttag

Programming Languages: Application and Interpretation (PLAI), Version 2007, Shriram Krishnamurthi

Structure and Interpretation of Computer Programs (SICP),2nd Edition, 1996, Harold Abelson, Gerald Jay Sussman, Julie Sussman

Computer Systems: A Programmers Perspective (CSAPP), 3rd Edition, 2015, Randal E. Bryant, David R. O’Hallaron

Problem Solving

Programming Pearls (PEARLS), 2nd Edition, 1999, Jon Bentley

Hacker’s Delight, 2nd Edition, 2012, Henry S. Warren, Jr.

Algorithms and Data Structures

Algorithms

An algorithm is an unambiguous specification of how to solve a class of problems. Algorithms can perform calculation, data processing, automated reasoning, and other tasks.

Algorithms, 4th Edition, 2011, Robert Sedgewick, Kevin Wayne

Data Structures and Network Algorithms, 4th Edition, Robert Endre Tarjan, 1987

Combinatorial Optimization: Theory and Algorithms, 6th Edition, 2018, Bernhard Korte, Jens Vygen

Approximation Algorithms, Vijay V. Vazirani

Decision Procedures: an Algorithmic Point of View (DPAPV), 2nd Edition, Daniel Kroening, Ofer Strichman

The Art of Computer Programming (TAOCP), Donald Knuth

Foundations of Computer Science, C Edition, Alfred V. Aho, Jeffrey D. Ullman

Handbook of Scheduling: Algorithms, Models, and Performance Analysis, 2004, Joseph Y-T. Leung, James H. Anderson

Parallel and Distributed Algorithms

Distributed Algorithms, 1996, Nancy A. Lynch

Parallel Algorithms, 2008, H Casanova, A Legrand, Y Robert

Data Structures

A data structure is a collection of data values, the relationships among them, and the functions or operations that can be applied to the data.

Purely Functional Data Structures, 2009, Chris Okasaki

Handbook of Data Structures and Applications, 2nd Edition, 2018, Dinesh P. Mehta, Sartaj Sahni

Algorithm Analysis and Design

Using ideas from algorithm theory to creatively design solutions to real tasks.

Algorithm Design, 2005, Kleinberg Jon

The Algorithm Design Manual, 2008 Edition, Steven S S. Skiena

Artificial Intelligence

Computer science defines AI research as the study of “intelligent agents”: any device that perceives its environment and takes actions that maximize its chance of successfully achieving its goals.

Artificial Intelligence: A Modern Approach (AIMA), 3rd Edition, 2009, Stuart Russell, Peter Norvig

Paradigms of Artificial Intelligence Programming: Case Studies in Common LISP (PAIP), 1992, Peter Norvig

Computer Vision

Computer vision is an interdisciplinary scientific field that deals with how computers can be made to gain high-level understanding from digital images or videos.

Computer Vision: Algorithms and Applications (CVAA), 2011th Edition, Richard Szeliski

Computer Vision: Models, Learning, and Inference, 2012, Simon J. D. Prince

Machine Learning

Machine learning (ML) is the scientific study of algorithms and statistical models that computer systems use to effectively perform a specific task without using explicit instructions, relying on patterns and inference instead.

See Probability and Statistics for Computer Science for statistics for machine learning,

Interpretable Machine Learning: A Guide for Making Black Box Models Explainable (IML), Feb 21 2019, Christoph Molnar

Pattern Recognition and Machine Learning (PRML), 2011, Christopher M. Bishop

Machine Learning, A Probabilistic Perspective (MLAPP), 1st Edition, 2012, Kevin P. Murphy

Neural Networks and Deep Learning: A Textbook (NNDL), 2018, Charu C. Aggarwal

Optimal Learning, 2012, Warren B. Powell, Ilya O. Ryzhov adaptive learning, information, randing and selection, knowledge gradient, bandit problems, linear belief models, subset selection problems, optimal bidding, stopping problems

The Elementes of Statistical Learning: Data Mining, Inference, and Prediction, 2nd Edition, 2016, Trevor Hastie, Robert Tibshirani, Jerome Friedman

Reinforcement Learning: An Introduction (RLAI), Nov 5, 2017, Richard S. Sutton, Andrew G. Barto

Natural Language Processing

Natural language processing (NLP) is a subfield of computer science concerned with the interactions between computers and human (natural) languages, in particular how to program computers to process and analyze large amounts of natural language data.

Speech and Language Processing, 2nd Edition, 2008, Dan jurasfsky, James H. Martin

Neural Network Methods for Natural Language Processing, 2017, Yoav Goldberg

Robotics

Algorithms for controlling the behaviour of robots.

Modern Robotics: Mechanics, Planning, and Control (MR), 1st Edition, 2017, Frank C. Park, Kevin M. Lynch

Springer Handbook of Robotics, 2nd Edition, 2017, Bruno Siciliano, Oussama Khatib

Expert Systems

Expert systems are designed to solve complex problems by reasoning through bodies of knowledge, represented mainly as if–then rules rather than through conventional procedural code.

See: Fuzzy Logic Theory and Applications: Part I and Part II.

Introduction to Expert Systems, 3rd Edition, Jackson P., Addison Wesley

Intelligent Systems for Engineers and Scientists, 3rd Edition, Adrian A. Hopgood

Fuzzy Expert Systems and Fuzzy Reasoning, 1st Edition, 2004, Willian Siler, James J. Buckley

The Handbook of Applied Expert Systems, 1997, Jay Liebowitz

Knowledge Management

Knowledge management (KM) is the process of creating, sharing, using and managing the knowledge and information of an organisation.

Knowledge Representation, Reasoning and Declarative Problem Solving, 1st Edition, 2003, Chitta Baral

Handbook of Knowledge Representation, 1st Edition, 2008, Frank van Harmelen, Vladimir Lifschitz, Bruce Porter

Constraint Programming

Constraint programming is a powerful paradigm for solving combinatorial search problems that draws on a wide range of techniques from artificial intelligence, computer science, databases, programming languages, and operations research. Constraint programming is currently applied with success to many domains, such as scheduling, planning, vehicle routing, configuration, networks, and bioinformatics.

Essentials of Constraint Programming, 1st Edition, Thom Frühwirth, Slim Abdennadher

Handbook of Constraint Programming, 1st Edition, 2006, Francesca Rossi, Peter van Beek, Toby Walsh

Networking and Security

Networking

Algorithms and protocols for reliably communicating data across different shared or dedicated media, often including error correction.

Computer Networking: A Top-Down Approach (CNTDA), 7th Edition, 2016, Kurose Ross

Computer Security

Practical aspects of securing computer systems and computer networks.

Security Engineering: A Guide to Building Dependable Distributed Systems, 2nd Edition, 2008, Ross J. Anderson

Cryptography

Applies results from complexity, probability, algebra and number theory to invent and break codes, and analyze the security of cryptographic protocols.

Applied Cryptography: Protocols, Algorithms, and Source Code in C, 20th Anniversary Edition, 2015, Bruce Schneier

Computer Architecture

Computer Architecture

The design, organization, optimization and verification of a computer system, mostly about CPUs and Memory subsystem (and the bus connecting them).

Computer Organization and Design (COAD), 5th Edition, 2014, David A. Patterson, John L. Hennessy

Principles of Computer System Design: An Introduction (PCSD), 2009, M. Frans Kaashoek, Jerome H.

Operating Systems

An operating system (OS) is system software that manages computer hardware and software resources and provides common services for computer programs.

Operating Systems: Three Easy Pieces (OSTEP), v1.0, 2018, Remzi H. Arpaci, Andrea C. Arpaci

Modern Operating Systems (MOS), 4th Edition, 2015, Andrew S. Tanenbaum, Herbert Bos

Concurrent, Parallel, and Distributed Systems

The terms “concurrent computing”, “parallel computing”, and “distributed computing” have a lot of overlap, and no clear distinction exists between them. In Wikipedia, concurrent computing is a form of computing in which several computations are executed during overlapping time periods—concurrently—instead of sequentially. Parallel computing is a type of computation in which many calculations or the execution of processes are carried out simultaneously. Large problems can often be divided into smaller ones, which can then be solved at the same time. There are several different forms of parallel computing: bit-level, instruction-level, data, and task parallelism. Distributed computing is a field of computer science that studies distributed systems. A distributed system is a system whose components are located on different networked computers, which communicate and coordinate their actions by passing messages to one another.

See: Distributed and Parallel Algorithms, Distributed Systems, Quantum Computing Theory.

Parallel Programming in C with MPI and OpenMP, 1st Edition, 2003, Quinn

CUDA Programming: A Developer’s Guide to Parallel Computing with GPUs, 2012, Shane Cook

Handbook of Parallel Computing: Models, Algorithms and Applications, 1st Edition, 2018, Sanguthevar Rajasekaran, John Reif

Handbook of Parallel Constraint Reasoning, 2018 Edition, Youssef Hamadi, Lakhdar Sais

Limits to Parallel Computation: P-Completeness theory, 1995, R Greenlaw, H Hoover, W Ruzzo

Distributed Systems

Computing using multiple computing devices over a network to accomplish a common objective or task and thereby reducing the latency involved in single processor contributions for any task.

Distributed Systems: Principles and Paradigms (DSPP), Version 3.01, 2017, Maarten van Steen, Andrew S. Tanenbaum

Distributed Systems: An Algorithmic Approach (DSAA), Second Edition, 2014, Sukumar Ghosh

Operating Systems: Concurrent and Distributed Software Design, 2003, Jean Bacon

Databases

Readings in Database Systems, 4th Edition, 2005, Joseph M. Hellerstein, Michael Stonebraker

Data Mining

Study of algorithms for searching and processing information in documents and databases; closely related to information retrieval.

See Pattern Recognition and Machine Learning (PRML) and The Elementes of Statistical Learning: Data Mining, Inference, and Prediction.

Mathematics and Theory of Computation

Mathematical Foundation of Programs

A Programmer’s Introduction to Mathematics, 2018, Jeremy Kun

Software Foundations

Concrete Mathematics: A Foundation for Computer Science, 2nd Edition, Ronald L. Graham, Donald E. Knuth, Oren Patashnik

Number Theory

An Introduction To The Theory Of Numbers, 6th Edition, 2008, Ivan Niven, Hugh L. Montgomery, Herbert S. Zuckerman

Discrete Mathematics

Discrete mathematics is the study of mathematical structures that are fundamentally discrete rather than continuous.

Mathematics for Computer Science (MCS), 2018, Eric Lehman, F Thomson Leighton, Albert R Meyer

Discrete Mathematics and Its Applications (DMIA), 7th Edition, 2017, Kenneth H. Rosen

Probability and Statistics

Probability Theory and Examples, 5th Edition, 2019, Rick Durrett

Probability and Statistics for Computer Science, 2018, David Forsyth

Theory of Computation

The theory of computation is the branch that deals with how efficiently problems can be solved on a model of computation, using an algorithm. The field is divided into three major branches: automata theory and languages, computability theory, and computational complexity theory,

See also: Computablity Theory

Introduction to the Theory of Computation, 3rd Edition, 2012, Michael Sipser

Introduction to Languages and The Theory of Computation, 4th Edition, John Martin

The Calculus of Computation: Decision Procedures with Applications to Verification, 2007th Edition, Aaron R. Bradley, Zohar Manna

Automata Theory

The study of abstract machines and automata, as well as the computational problems that can be solved using them.

An Introduction to Formal Languages and Automata, 6th Edition, 2016, Peter Linz

Introduction To Automata Theory Languages, and Computation, 3rd Edition, 2006, John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman

Computational Complexity Theory

Computational complexity theory focuses on classifying computational problems according to their inherent difficulty, and relating these classes to each other.

Computational Complexity: A Modern Approach, 1st Edition, 2009, Sanjeev Arora, Boaz Barak

The Nature of Computation,2011 Cristopher Moore, Stephan Mertens

Computers and Intractability: A Guide to the Theory of NP-Completeness, Michael R. Garey, David S. Johnson, 1979

Mathematics for Data Science

See also: Probability and Statistics.

Foundations of Data Science, Jan 21, 2019, Avrim Blum, John Hopcroft, Ravindran Kannan

Feature Selection for High-Dimensional Data (Artificial Intelligence: Foundations, Theory, and Algorithms), 1st Edition, 2005, Verónica Bolón-Canedo, Noelia Sánchez-Maroño, Amparo Alonso-Betanzos

Mathematical Logic

Mathematical logic is a subfield of mathematics exploring the applications of formal logic to mathematics. It bears close connections to metamathematics, the foundations of mathematics, and theoretical computer science.

Proof and Disproof in Formal Logic: An Introduction for Programmers (PDFL), 2005, Richard Bornat

A First Course in Logic: An Introduction to Model Theory, Proof Theory, Computability, and Complexity, 2004, Shawn Hedman

Logic in Computer Science, Modelling and Reasoning about Systems, 2nd Edition, Michael Huth

Fuzzy Logic Theory and Applications: Part I and Part II, 2018 Lofti A. Zadeh, Rafik A. Aliev

Introduction to Lattices and Order, 2002, B. A. Davey

Boolean Functions: Theory, Algorithms, and Applications, 1st Edition, 2011, Yves Crama, Peter L. Hammer

Proof Theory

Proof Theory, 2nd Edition, Gaisi Takeuti

Structural Proof Theory,1st Edition, Sara Negri, 2008

Lectures on the Curry-Howard isomorphism-Elsevier Science, 1st Edition, 2006, Morten Heine Sørensen, Pawel Urzyczyn

Computability Theory

Computability theory, also known as recursion theory, is a branch of mathematical logic, of computer science, and of the theory of computation that originated in the 1930s with the study of computable functions and Turing degrees.

Computability: An introduction to recursive function theory, 1st Edition, 1980, Nigel Cutland

Recursion Theory for Metamathematics, 1st Edition, 1993, Raymond M. Smullyan

Type Theory

Formal analysis of the types of data, and the use of these types to understand properties of programs — especially program safety. A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of type systems and of programming languages from a type-theoretic perspective―has important applications in software engineering, language design, high-performance compilers, and security.

Types and Programming Languages (TAPL), 2002, Benjamin C. Pierce

Advanced Topics in Types and Programming Languages, 2004, Benjamin C. Pierce

Homotopy Type Theory: Univalent Foundations of Mathematics (HoTT), 2013, The Univalent Foundations Program Institute for Advanced Study

Category Theory

Category theory has practical applications in programming language theory, for example the usage of monads in functional programming. It may also be used as an axiomatic foundation for mathematics, as an alternative to set theory and other proposed foundations.

Basic Category Theory for Computer Scientists, 1991, Benjamin C. Pierce

Category Theory: A Gentle Introduction, Peter Smith

Categories for the Working Mathematician, 1998, Saunders Mac Lane

Models of Computing

Topics including: Computability(Lambda calculus, Turing machines, Recursive functions), Probabilistic computation, Quantum computation theory, Interactive computation, Streaming models, Concurrency(Parallel computing models, Distributed computing models, Process calculi), Timed and hybrid models, Abstract machines

Programming Languages and Lambda Calculi

Introduction to Process Algreba, 2000, Wan Fokkink

An Introduction to the pi-Calculus

The Theory and Practice of Concurrency, 2005, Roscow

Studies in Logic: Formal Systems and Recursive Function, 1965, J.N. DUMMETT M.A.E.

Theory of Formal Systems, Raymond M. Smullyan, 1961

Communicating Sequential Processes, 2004, C. A. R. Hoare

The Pi-Calculus: A Theory of Mobile Processes, 2003, Davide Sangiorgi

Lambda-Calculus and Combinators: an Introduction (LCAC), 2nd Edition, 2008, J. Roger Hindley, Jonathan P. Seldin

The Lambda Calculus: Its Syntax and Semantics (LCISS), 2012, Henk Barendregt

Handbook of Process Algebra, 2001, J.A. Bergstra, A. Ponse, S.A. Smolka

Axiomatic Set Theory

Introduction to Axiomatic Set Theory, 1982 Edition, Takeuti G. , Zaring W.

Model Theory

Model Theory: An Introduction, 2002nd Edition, David Marker

Quantum Computing Theory

Quantum computing is the use of quantum-mechanical phenomena such as superposition and entanglement to perform computation.

Quantum Computation and Quantum Information, 10th Anniversary Edition, Michael A. Nielsen, Isaac L. Chuang

Coding Theory

Coding theory is the study of the properties of codes and their respective fitness for specific applications. Codes are used for data compression, cryptography, error detection and correction, data transmission and data storage.

Essential Coding Theory, Mar 15 2019, Venkatesan Guruswami, Atri Rudra, Madhu Sudan

Information Theory, Inference, and Learning Algorithms, 2003, David MacKay

Abstract Algebra

Abstract Algebra, The Basic Graduate Year, 2002, Robert B. Ash

Programming Languages

Programming Language Pragmatics

Taxonomy of programming languages, their strength and weaknesses. Various programming paradigms, such as object-oriented programming.

Programming Language Pragmatics (PLP), 4th Edition, 2015, Michael L. Scott

Concepts, Techniques and Models of Computer Programming (CTMCP), 1st Edition, 2004, Peter Van Roy, Seif Haridi

Theory of Programming Language

Design, implementation, analysis, characterization, and classification of programming languages and their individual features.

Essentials of Programming Languages (EoPL), 3rd Edition, Daniel P. Friedman, Mitchell Wand

Concepts of Programming Languages (COPL), 11th Edition, 2015, Robert W. Sebesta

Theories of Programming Languages (TOPL), 1st Edition, 2009, John Reynolds

Practical Foundations for Programming Languages (PFPL), 2nd Edition, Robert Harper

Compiling With Continuations, 2007, Andrew W. Appel

Compilers

Theory of compiler design, based on Automata theory.

See: Automata theory

Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (LIP), 1st Edition, 2010, Terence Parr

Modern Compiler Implementation in Java (Tiger Book), 2nd Edition, 2002, Andrew W. Appel, Jens Palsberg

Compilers, Principles, Techniques, and Tools (Dragon Book), 2nd Edition, 2006, Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman

Advanced Compiler Design and Implementation (Whale Book), 1st Edition, 1997, Steven Muchnick

Formal Semantics

Rigorous mathematical study of the meaning of programs.

Formal Semantics of Programming Languages: An Introduction (FSPL), Glynn Winskel

Foundations for Programming Languages (FFPL), 1996, John.C..Mitchell

Concrete Semantics: With Isabelle/HOL, 2014th Edition, Tobias Nipkow, Gerwin Klein

Software Engineering

Software engineering is the application of engineering to the development of software in a systematic method.

See: Algorithm Analysis and Design.

Introduction to Software Engineering, 2nd Edition, Ronald J. Leach

Software Requirements, 3rd Edition, 2013, Karl Wiegers and Joy Beatty

A Philosophy of Software Design, 2018, John Ousterhout

Formal Methods

In computer science, specifically software engineering and hardware engineering, formal methods are a particular kind of mathematically based technique for the specification, development and verification of software and hardware systems.

See: Logic in Computer Science: modelling and reasoning about systems, Principles of Model Checking, and Formal Verification Surveys

Formal Reasonning about Programs (FRAP), Adam Chlipala

Program Analysis and Verification

The process of automatically analyzing the behavior of computer programs regarding a property such as correctness, robustness, safety and liveness. Program analysis focuses on two major areas: program optimization and program correctness.

Principles of Program Analysis, 2004, Flemming Nielson, Hanne R. Nielson, Chris Hankin

Data Flow Analysis: Theory and Practice, 1st Edition, 2009, Uday Khedker, Amitabha Sanyal, Bageshri Sathe

Principle of Model Checking, 2008,Christel Baier, Joost-Pieter Katoen

Programming Language Tutorial

Python

Java

Javascript

Go

C/C++

R

Matlab

Scala

Kotlin

Rust

Haskell

Idris

Elixir

ML

Scheme

Common Lisp

Coq

Agda

一些值得关注的顶会期刊

待更新~在调查收集呢~