骑鹿人的计算机科学学习指南
本指南：
 汇集互联网上的优质免费教材、视频资源。
 为在读的计算机系学生，编程爱好者提供系统的学习方案。
 为通过培训班出身和跨领域的IT相关从业者提供知识进阶路线。
 帮助在学习计算机科学中感到迷茫的朋友们寻找兴趣领域。
 破除快餐学习风气和“IT门槛低”偏见。
 学习计算机的硬核小建议。
 去繁求简，避免单纯的平行资料堆叠，只选择最好最值得的资源推荐。
基础自学教材、视频
 建议直接从编程入门开始，写出可以跑的东西来，有成就感～
 计算机组成，计算机网络，操作系统是三门重要基础哦～
 英语和数学非常重要～如果对英语感到不适，利用英文视频强迫一下自己～
 实践出真知！
类别  科目  自学书籍（中文版/英文版）  视频课程  学习目标 

基础必修  编程入门（三选一）  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 TopDown 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： 十分重要。学英语不仅仅是因为编程语言的关键字是英文单词，有以下好处：
 学习“概念”和“专业词汇”时，可以顾名思义，加强理解速度。专业词汇的中文翻译大部分都无法直接理解它的意思，如果读书时时间花在了理解词汇上，效率大打折扣。
 中文翻译的外国教材质量较差。这是一客观事实，是因为计算机书籍销路窄，译者对于英文经典教材的翻译几乎是义务的，无法保证翻译质量。
 中国教材普遍质量极差。这些教材大部分是作者根据相关书籍改写来的，知识讲解不清晰，也比较过时。
 便于查阅论文和研究成果，以及学术交流。 所以，骑鹿人建议在全英文环境中学习。
Q：数学基础？
A： 因人而异。
 学习编程最低限度的数学基础是：二进制、十六进制计算、指数、对数算术，简单的布尔逻辑、命题逻辑以及数学归纳法，在高中数学中已经基本涵盖了。如果有不清楚的地方，可以阅读《程序员的数学》，初中数学水平即可看懂。
 对于以软件开发者和算法工程师为目标进行学习的同学来说，大部分情况下不涉及数学。如果涉及，使用维基百科进行知识补充就够了。
 如果想成为专家、大牛级程序员，或者某领域专家，则很大程度上与数学联系紧密。
Q：如何学习数学？
A: 人生有涯，数学无涯，应避免南辕北辙，丢失学习重点。对计算机科学有兴趣，可以在涉及到数学问题的时候，利用维基百科知识补充（不懂啥搜啥）。一般情况下，不必系统学习（甚至不必学习离散数学、线性代数）。对于数学的历史、数学的证明等，更不需太过重视。一般而言，有以下三门核心基础数学：离散数学，线性代数，概率论与统计学。
Q：如何选择兴趣领域？
A： 在20世纪60年代，计算机科学研究的重点是程序语言，编译器，操作系统，以及这三方面涉及的数学。70年代则以算法的研究最为火热。于今的计算机科学研究更重视“应用”。在自然科学中，观察、收集和存储数据最为关键。在商业中，重要的是对数据的“理解”和“掌控”。这些是计算机科学的传统领域。
这些传统领域地研究已经相对完善。现在计算机科学的研究，集中在获取和处理有效信息，以使计算机解决特定实际问题。机器学习的快速发展是一个例子。一个当前（2019年）流行雇员种类和研究领域的不完全列表如下：
 全栈开发
 人机交互
 机器各种学习（包括深度学习，优化学习，强化学习）
 计算机视觉
 数据科学
 自动推理
 游戏开发
 自然科学对计算机的应用
 专家系统
 …… 多咨询身边的“大牛”，可以让他们为你指路。
Q：应该对编程语言进行研究吗？
A： 对于程序语言和编程方法的研究非常有用。
 编程语言是程序员的工具，理解工具的作用原理和设计原则，可以更深入的理解编程语言，并锻炼编程能力。
 对于编程语言的范式、语用学的学习，可以使编程思维更灵活，编写更易读、易维护的代码。
 然而，并不建议一般同学太过深入研究编程语言和PLT（编程语言理论）。此领域的理论研究已经相对完善，且对于个人而言， “投入产出比”极其小。
Q：计算机科学有哪些神书？怎么读？
A：被神话的书籍很多，比如《计算机程序的构造和解释》（SICP），《深入理解计算机系统》（CSAPP）等。这些书都是名校基础入门教材，并不值得花太多时间研读透彻，而应该主动寻找更深刻的课题。要通过读书提升能力，不是用尽全力把一本书理解到100%，而是在把一本书理解到60%的时候，看一本更深奥的书，并紧密配合实操。这样当你回过头来看第一本书时，对其问题的理解就非常自然轻松了。
Q：实践重要吗？如何实践？
A：实践极其重要，理论知识也很重要，二者相辅相成。实践需要花费很多精力：
 保持编程和思考的习惯。可以在LeetCode上刷题热手，也可以寻找开源项目贡献代码。
 接触新领域，多写“玩具程序”。
 有一定水平之后可以寻找合适自己的项目加入。 应该避免：
 单纯地学习新框架、使用新工具，而不涉及理论补充。
 学而不练。
 “死学”一门，追求“精通”，特别是基础的内容。
Q： 逻辑思维重要吗？
A： 逻辑思维对于初级程序员来说有一定锻炼思维的作用。但是如果工作内容涉及到数理逻辑，那么所谓的逻辑思维就太简单、太非形式化了。逻辑思维和逻辑学是完全不同领域的两个概念。
Q： 数理逻辑？
A： 数理逻辑是和理论计算机科学紧密相连的一科，基础的数理逻辑已由《离散数学及其应用》囊括。数理逻辑主要分支有证明论，模型论，公理化集合论和递归论，其中证明论和递归论与计算机科学的研究相关较密切。然而，不想从事编程语言、自动推理等领域研究的同学们，对此不必太过看重。
支持本网站
 找到错误！找到更好的资源！好的建议！邮箱：akiritsu@outlook.com；QQ群：296867034，性感群主，在线女装。
 Github加星或者关注骑鹿人。
 转载，帮助更多的初学者，也请注明出处（本网站不定期更新）。
免责声明
本指南是骑鹿人一时兴起所为，如果能对大家有一些帮助就很开心了～如果有建议、新的想法，或者找到了本网站的漏误，欢迎给骑鹿人发邮件哦（akiritsu@outlook.com)。本站一部分内容参考了Quora，知乎，teachyourselfcs.com，使用的jekyll主题是BlackDocs，如有侵权立即删除。
 对于资源而言，如果有多个“经典教材”内容或领域重复，只选取综合内容最好、最适合自学的一个，避免单纯地罗列“平行书籍“、“同类资源”。
 本站资源骑鹿人及友人只看过约一半（？），不了解的领域是通过对比CS四大名校的教材和Quora问答给出，可能存在谬误，一经发现骑鹿人会在第一时间修正。
 本站面向的是初学者，迷途小羔羊，爱好者；且对资源的选取和对比比较负责。并不适合各路精英大神，看完再喷～没人是傻X，或者所有人都是傻X～
骑鹿人的156本计算机领域推荐书单
 不要问骑鹿人为什么是英文的～
 书籍侧重点比较个人向，极力避免冗余。
 很多书的意义不在于努力通读学完它，而在于在你遇到问题的时候，有不同的角度和思路，你知道读它可以帮你。这些书骑鹿人大多只读过部分，少数通读。
 推荐书籍仅少数是通读自学教材。每个子学科一般最多保留四类：
 入门自学类，对于本专业人士和研究人员入门该领域最简单最高效的书籍，但不包括过于简单、言之无物，或者非专业人士的入门书籍，如《程序员的数学》，《算法图解》；
 进阶课题类，该领域的进阶分析介绍，或涉及高级及应用，；
 综合性手册，对于该领域内容阐述较全的描述性手册，此类书籍一般用于查阅，不建议通读；
 专用性手册，用于特殊应用和情景的专著，限于个人水平和精力只收集少部分。
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
 Readership: beginners, high school students
 This introduction to programming places computer science at the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process, presenting program design guidelines that show the reader how to analyze a problem statement, how to formulate concise goals, how to make up examples, how to develop an outline of the solution, how to finish the program, and how to test it. Because learning to design programs is about the study of principles and the acquisition of transferable skills, the text does not use an offtheshelf industrial language but presents a tailormade teaching language. For the same reason, it offers DrRacket, a programming environment for novices that supports playful, feedbackoriented learning.
 HTML Verision: https://www.htdp.org/20190224/
Introduction to Computation and Programming Using Python: With Application to Understanding Data, 2nd Edition, John V. Guttag
 Readership: beginners, high school students
 This book introduces the art of computational problem solving using Python and various Python libraries, including PyLab. It provides students with skills that will enable them to make productive use of computational techniques, including some of the tools and techniques of data science for using computation to model and interpret data.
 Topics: Students are introduced to Python and the basics of programming in the context of such computational concepts and techniques as exhaustive enumeration, bisection search, and efficient approximation algorithms. Although it covers such traditional topics as computational complexity and simple algorithms, the book focuses on a wide range of topics not found in most introductory texts, including information visualization, simulations to model randomness, computational techniques to understand data, and statistical techniques that inform (and misinform) as well as two related but relatively advanced topics: optimization problems and dynamic programming. This edition offers expanded material on statistics and machine learning and new chapters on Frequentist and Bayesian statistics.
 Free PDF Copy: https://doc.lagout.org/programmation/python/Introduction%20to%20Computation%20and%20Programming%20using%20Python%20%28rev.%20ed.%29%20%5BGuttag%2020130809%5D.pdf
Programming Languages: Application and Interpretation (PLAI), Version 2007, Shriram Krishnamurthi
 Readership: beginners
 The book differs from most other programming language texts in its attempt to wed two different styles of programming language education: one based on language surveys and another based on interpreters. In the former style, it can be too easy to ignore difficult technical points, which are sometimes best understood by trying to reproduce them (via implementation); in the latter, it can be too easy to miss the highlevel picture in the forest of details. PLAI therefore interleaves the two, using the survey approach to motivate ideas and interpreters to understand them.
 Free PDF Copy: http://cs.brown.edu/~sk/Publications/Books/ProgLangs/20070426/
Structure and Interpretation of Computer Programs (SICP),2nd Edition, 1996, Harold Abelson, Gerald Jay Sussman, Julie Sussman
 Readership: udergraduates
 The book describes computer science concepts using Scheme, a dialect of Lisp. It also uses a virtual register machine and assembler to implement Lisp interpreters and compilers. In the second edition, a new theme has been introduced that emphasizes the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming and lazy evaluation, and nondeterministic programming. There are new example sections on higherorder procedures in graphics and on applications of stream processing in numerical programming, and many new exercises.
 Free PDF Copy: https://web.mit.edu/alexmv/6.037/sicp.pdf
Computer Systems: A Programmers Perspective (CSAPP), 3rd Edition, 2015, Randal E. Bryant, David R. O’Hallaron
 Readership: advanced undergraduates and graduates
 Computer systems: A Programmer’s Perspective explains the underlying elements common among all computer systems and how they affect general application performance. Written from the programmer’s perspective, this book strives to teach readers how understanding basic elements of computer systems and executing real practice can lead them to create better programs. Spanning across computer science themes such as hardware architecture, the operating system, and systems software, the Third Edition serves as a comprehensive introduction to programming. This book strives to create programmers who understand all elements of computer systems and will be able to engage in any application of the field–from fixing faulty software, to writing more capable programs, to avoiding common flaws. It lays the groundwork for readers to delve into more intensive topics such as computer architecture, embedded systems, and cybersecurity.
 Resources: http://csapp.cs.cmu.edu/
Problem Solving
Programming Pearls (PEARLS), 2nd Edition, 1999, Jon Bentley
 Readership: advanced undergraduates and graduates
 The “pearls” in question center not only on choosing the right algorithms (like binary searches, sorting techniques, or sparse arrays) but also on showing how to solve problems effectively. Each chapter frames a particular programming task–such as sorting numbers, creating anagrams, or counting the words in a block of text–many drawn from Bentley’s experiences in his long career as a developer. The book traces the process of arriving at a fast, efficient, and accurate solution, along with code profiling to discover what works best. After refining the correct answer, each chapter enumerates programming principles that you can use on your own. The author also challenges you to think like an engineer, and each chapter ends with about a dozen problems to get you thinking creatively about design issues. (Sidebars on such historical topics as the first computer solutions to computer chess, spellchecking, and even architectural design help create a perspective on successful problem solving and make for a truly educational and enjoyable tour of how to become a better programmer.) Bentley also asks the reader to think analytically about the world with “back of the envelope” estimation techniques drawn from engineering. Appendices list the algorithms and code rules covered in the book, plus some sample solutions.
 Topics: Programming and problemsolving tutorial, sorting algorithms, merge sort, bit vectors, binary searches, program correctness and testing, improving performance, engineering and problemsolving techniques, performance estimates, designing for safety, divideandconquer and scanning algorithms, tuning code, tips for more efficient memory usage, insertion sort, quicksort algorithms, sparse arrays, searching algorithms, binary search trees, heaps, priority queues, searching text, and generating random text.
 Free PDF Copy: https://tfetimes.com/wpcontent/uploads/2015/04/ProgrammingPearls2nd.pdf
Hacker’s Delight, 2nd Edition, 2012, Henry S. Warren, Jr.
 Readership: advanced undergraduates and graduates, researchers
 Prerequisites:: C programming, data structure, algorithm analysis
 In Hacker’s Delight, Second Edition, Hank Warren once again compiles an irresistible collection of programming hacks: timesaving techniques, algorithms, and tricks that help programmers build more elegant and efficient software, while also gaining deeper insights into their craft. Warren’s hacks are eminently practical, but they’re also intrinsically interesting, and sometimes unexpected, much like the solution to a great puzzle. They are, in a word, a delight to any programmer who is excited by the opportunity to improve.
 Resources: https://www.hackersdelight.org/
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
 Readership: beginners
 This book surveys the most important computer algorithms currently in use and provides a full treatment of data structures and algorithms for sorting, searching, graph processing, and string processing–including fifty algorithms every programmer should know.
Data Structures and Network Algorithms, 4th Edition, Robert Endre Tarjan, 1987
 Readership: advanced undergraduates, researchers, software pactitioners
 Four classical problems in network optimization are covered in detail, including a development of the data structures they use and an analysis of their running time. This book attempts to provide the reader with both a practical understanding of the algorithms, described to facilitate their easy implementation, and an appreciation of the depth and beauty of the field of graph algorithms.
 Free PDF Copy: https://doc.lagout.org/Others/Data%20Structures/Data%20Structures%20and%20Network%20Algorithms%20%5BTarjan%2019870101%5D.pdf
Combinatorial Optimization: Theory and Algorithms, 6th Edition, 2018, Bernhard Korte, Jens Vygen
 Readership: advanced undergraduates
 This comprehensive textbook on combinatorial optimization places special emphasis on theoretical results and algorithms with provably good performance, in contrast to heuristics. It is based on numerous courses on combinatorial optimization and specialized topics, mostly at graduate level. This book reviews the fundamentals, covers the classical topics (paths, flows, matching, matroids, NPcompleteness, approximation algorithms) in detail, and proceeds to advanced and recent topics, some of which have not appeared in a textbook before. Throughout, it contains complete but concise proofs, and also provides numerous exercises and references.
Approximation Algorithms, Vijay V. Vazirani
 Readership: graduates, researchers
 Covering the basic techniques used in the latest research work, the author consolidates progress made so far, including some very recent and promising results, and conveys the beauty and excitement of work in the field. He gives clear, lucid explanations of key results and ideas, with intuitive proofs, and provides critical examples and numerous illustrations to help elucidate the algorithms. Many of the results presented have been simplified and new insights provided.
Decision Procedures: an Algorithmic Point of View (DPAPV), 2nd Edition, Daniel Kroening, Ofer Strichman
 Readership: advanced undergraduates and graduates
 Prerequisites:: theoretical computer science foundations including formal proofs, the satisfiability problem, soundness and completeness
 Here, the authors focus on theories that are expressive enough to model real problems, but are still decidable. Specifically, the book concentrates on decision procedures for firstorder theories that are commonly used in automated verification and reasoning, theoremproving, compiler optimization and operations research. The techniques described in the book draw from fields such as graph theory and logic, and are routinely used in industry. The authors introduce the basic terminology of satisfiability modulo theories and then, in separate chapters, study decision procedures for each of the following theories: propositional logic; equalities and uninterpreted functions; linear arithmetic; bit vectors; arrays; pointer logic; and quantified formulas.
 Lecture slides: http://www.decisionprocedures.org/
The Art of Computer Programming (TAOCP), Donald Knuth
 Readership: advanced undergraduates and graduates, researchers
 The first volume in the series begins with basic programming concepts and techniques, then focuses more particularly on information structures—the representation of information inside a computer, the structural relationships between data elements and how to deal with them efficiently. Elementary applications are given to simulation, numerical methods, symbolic computing, software and system design. The section on mathematical preliminaries has been extensively revised to match present trends in research.
 The second volume offers a complete introduction to the field of seminumerical algorithms, with separate chapters on random numbers and arithmetic. The book summarizes the major paradigms and basic theory of such algorithms, thereby providing a comprehensive interface between computer programming and numerical analysis. Particularly noteworthy in this third edition is Knuth’s new treatment of random number generators, and his discussion of calculations with formal power series.
 The third volume is the most comprehensive survey of classical computer techniques for sorting and searching. It extends the treatment of data structures in Volume 1 to consider both large and small databases and internal and external memories. The book contains a selection of carefully checked computer methods, with a quantitative analysis of their efficiency. Outstanding features of the second edition include a revised section on optimum sorting and new discussions of the theory of permutations and of universal hashing.
Foundations of Computer Science, C Edition, Alfred V. Aho, Jeffrey D. Ullman
 Readership: C programmers, advanced undergraduates
 Prerequisites: working knowledge of ANSI C
 This book combines the theoretical foundations of computing with essential discrete mathematics. The book emphasizes three important problemsolving tools:
 Data models, the abstractions used to describe problems. We have already men tioned two models: logic and graphs. We shall meet many others throughout this book.4 COMPUTER SCIENCE: THE MECHANIZATION OF ABSTRACTION
 Data structures, the programminglanguage constructs used to represent data models. For example, C provides builtin abstractions, such as structures and pointers, that allow us to construct data structures to represent complex ab stractions such as graphs.
 Algorithms, the techniques used to obtain solutions by manipulating data as represented by the abstractions of a data model, by data structures, or by other means.
Handbook of Scheduling: Algorithms, Models, and Performance Analysis, 2004, Joseph YT. Leung, James H. Anderson
 Readership: researchers
 Researchers in management, industrial engineering, operations, and computer science have intensely studied scheduling for more than 50 years, resulting in an astounding body of knowledge in this field. Handbook of Scheduling: Algorithms, Models, and Performance Analysis, the first handbook on scheduling, provides full coverage of the most recent and advanced topics on the subject. It assembles researchers from all relevant disciplines in order to facilitate crossfertilization and create new scheduling insights.

Structure:
 Part I introduces materials and notation, with tutorials on complexity theory and algorithms for the minimization of makespan, total completion time, dual objectives, maximum lateness, the number of late jobs, and total tardiness.
 Part II is devoted to classical scheduling problems.
 Part III explores scheduling models that originate in computer science, operations research, and management science.
 Part IV examines scheduling problems that arise in realtime systems, focusing on meeting hard deadline constraints while maximizing machine utilization.
 Part V discusses stochastic scheduling and queueing networks, highlighting jobs that are not deterministic.
 Part VI covers applications, discussing scheduling problems in airline, process, and transportation industries, as well as in hospitals and educational institutions.
 Handbook of Bioinspired Algorithms and Applications, 2005, Stephan Olariu, Albert Y. Zomaya
 Readership: researchers
 A repository of the theory and fundamentals of bioinspired algorithms as well as a manual for practical implementation, this authoritative handbook provides broad coverage in a single source along with numerous references to the available literature for more indepth information.
 Structure: The first section explains the fundamentals of techniques, such as evolutionary algorithms, swarm intelligence, cellular automata, and others. Detailed examples and case studies in the second section illustrate how to apply the theory in actually developing solutions to a particular problem based on a bioinspired technique.
Parallel and Distributed Algorithms
Distributed Algorithms, 1996, Nancy A. Lynch
 Readership: advanced undergraduates and graduates, researchers
 In Distributed Algorithms, Nancy Lynch provides a blueprint for designing, implementing, and analyzing distributed algorithms. She directs her book at a wide audience, including students, programmers, system designers, and researchers.
Parallel Algorithms, 2008, H Casanova, A Legrand, Y Robert
 Readership: advanced undergraduates and graduates, researchers
 Focusing on algorithms for distributedmemory parallel architectures, Parallel Algorithms presents a rigorous yet accessible treatment of theoretical models of parallel computation, parallel algorithm design for homogeneous and heterogeneous platforms, complexity and performance analysis, and essential notions of scheduling. The book extracts fundamental ideas and algorithmic principles from the mass of parallel algorithm expertise and practical implementations developed over the last few decades.
 Free PDF Copy: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.466.8142&rep=rep1&type=pdf
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
 Readership: researchers
 Most books on data structures assume an imperative language such as C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures from the point of view of functional languages, with examples, and presents design techniques that allow programmers to develop their own functional data structures. The author includes both classical data structures, such as redblack trees and binomial queues, and a host of new data structures developed exclusively for functional languages. All source code is given in Standard ML and Haskell, and most of the programs are easily adaptable to other functional languages. This handy reference for professional programmers working with functional languages can also be used as a tutorial or for selfstudy.
Handbook of Data Structures and Applications, 2nd Edition, 2018, Dinesh P. Mehta, Sartaj Sahni
 Readership: researchers
 The Handbook is invaluable for suggesting new ideas for research in data structures, and for revealing application contexts in which they can be deployed. Practitioners devising algorithms will gain insight into organizing data, allowing them to solve algorithmic problems more efficiently.
 Stucture: The handbook begins with a review of introductory material, followed by a discussion of wellknown classes of data structures, Priority Queues, Dictionary Structures, and Multidimensional structures. The editors next analyze miscellaneous data structures, which are wellknown structures that elude easy classification. The book then addresses mechanisms and tools that were developed to facilitate the use of data structures in real programs. It concludes with an examination of the applications of data structures. Four new chapters have been added on Bloom Filters, Binary Decision Diagrams, Data Structures for Cheminformatics, and Data Structures for Big Data Stores.
Algorithm Analysis and Design
Using ideas from algorithm theory to creatively design solutions to real tasks.
Algorithm Design, 2005, Kleinberg Jon
 Readership: advanced undergraduates
 Algorithm Design introduces algorithms by looking at the realworld problems that motivate them. The book teaches students a range of design and analysis techniques for problems that arise in computing applications. The text encourages an understanding of the algorithm design process and an appreciation of the role of algorithms in the broader field of computer science.
 Free PDF Copy: http://www.cs.sjtu.edu.cn/~jiangli/teaching/CS222/files/materials/Algorithm%20Design.pdf
The Algorithm Design Manual, 2008 Edition, Steven S S. Skiena
 Readership: advanced undergraduates
 This book serves as the primary textbook of choice for any algorithm design course while maintaining its status as the premier practical reference guide to algorithms. Free PDF Copy: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.471.4772&rep=rep1&type=pdf
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
 Readership: advanced undergraduates and graduates, researchers
 The longanticipated revision of this bestselling book offers the most comprehensive, uptodate introduction to the theory and practice of artificial intelligence.
 Topics: Intelligent Agents. Solving Problems by Searching. Informed Search Methods. Game Playing. Agents that Reason Logically. Firstorder Logic. Building a Knowledge Base. Inference in FirstOrder Logic. Logical Reasoning Systems. Practical Planning. Planning and Acting. Uncertainty and Probabilistic Reasoning Systems. Making Simple Decisions. Making Complex Decisions. Learning from Observations. Learning with Neural Networks. Reinforcement Learning. Knowledge in Learning. Agents that Communicate. Practical Communication in English. Perception. Robotics.
 Free PDF Copy and Resources: http://aima.cs.berkeley.edu/
Paradigms of Artificial Intelligence Programming: Case Studies in Common LISP (PAIP), 1992, Peter Norvig
 Readership: advanced undergraduates, researchers
 This book teaches how to build and debug robust practical AI systems, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of objectoriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.
 Free PDF Copy: https://pdfs.semanticscholar.org/1ba4/392a83afaa52bb89cdc8dfce08ce9bc7986d.pdf
Computer Vision
Computer vision is an interdisciplinary scientific field that deals with how computers can be made to gain highlevel understanding from digital images or videos.
Computer Vision: Algorithms and Applications (CVAA), 2011th Edition, Richard Szeliski
 Readership: undergraduates
 Prerequisites:: knowledge in image processing or computer graphics
 Computer Vision: Algorithms and Applications explores the variety of techniques commonly used to analyze and interpret images. It also describes challenging realworld applications where vision is being successfully used, both for specialized applications such as medical imaging, and for fun, consumerlevel tasks such as image editing and stitching, which students can apply to their own personal photos and videos.
 Topics: This book is structured to support active curricula and projectoriented courses, with tips in the Introduction for using the book in a variety of customized courses; presents exercises at the end of each chapter with a heavy emphasis on testing algorithms and containing numerous suggestions for small midterm projects; provides additional material and more detailed mathematical topics in the Appendices, which cover linear algebra, numerical techniques, and Bayesian estimation theory; suggests additional reading at the end of each chapter, including the latest research in each subfield, in addition to a full Bibliography at the end of the book.
 Additional resources: http://szeliski.org/Book/.
Computer Vision: Models, Learning, and Inference, 2012, Simon J. D. Prince
 Readership: advanced undergraduates and graduates
 This modern treatment of computer vision focuses on learning and inference in probabilistic models as a unifying theme. It shows how to use training data to learn the relationships between the observed image data and the aspects of the world that we wish to estimate, such as the 3D structure or the object class, and how to exploit these relationships to make new inferences about the world from new image data. With minimal prerequisites, the book starts from the basics of probability and model fitting and works up to real examples that the reader can implement and modify to build useful vision systems.
 Additional resources: www.computervisionmodels.com.
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
 Readership: advanced undergraduates
 This book focuses on interpretable machine learning models for tabular data (also called relational or structured data) and topics include computer vision and natural language processing tasks.
 Free EBook: https://christophm.github.io/interpretablemlbook/
Pattern Recognition and Machine Learning (PRML), 2011, Christopher M. Bishop
 Readership: advanced undergraduates
 Prerequisites: multivariate calculus, basic linear algebra
 This is the first textbook on pattern recognition to present the Bayesian viewpoint. The book presents approximate inference algorithms that permit fast approximate answers in situations where exact answers are not feasible. It uses graphical models to describe probability distributions when no other books apply graphical models to machine learning. No previous knowledge of pattern recognition or machine learning concepts is assumed. , and some experience in the use of probabilities would be helpful though not essential as the book includes a selfcontained introduction to basic probability theory.
 Free PDF Copy: http://users.isr.ist.utl.pt/~wurmd/Livros/school/Bishop%20%20Pattern%20Recognition%20And%20Machine%20Learning%20%20Springer%20%202006.pdf
Machine Learning, A Probabilistic Perspective (MLAPP), 1st Edition, 2012, Kevin P. Murphy
 Readership: researchers
 Prerequisites:: basic multivariate calculus, probability, linear algebra, MATLAB programming
 This textbook offers a comprehensive and selfcontained introduction to the field of machine learning, based on a unified, probabilistic approach. The coverage combines breadth and depth, offering necessary background material on such topics as probability, optimization, and linear algebra as well as discussion of recent developments in the field, including conditional random fields, L1 regularization, and deep learning. The book is written in an informal, accessible style, complete with pseudocode for the most important algorithms. All topics are copiously illustrated with color images and worked examples drawn from such application domains as biology, text processing, computer vision, and robotics. Rather than providing a cookbook of different heuristic methods, the book stresses a principled modelbased approach, often using the language of graphical models to specify models in a concise and intuitive way. Almost all the models described have been implemented in a MATLAB software package―PMTK (probabilistic modeling toolkit)―that is freely available online. The book is suitable for upperlevel undergraduates with an introductorylevel college math background and beginning graduate students.
 Free PDF Copy: https://doc.lagout.org/science/Artificial%20Intelligence/Machine%20learning/Machine%20Learning_%20A%20Probabilistic%20Perspective%20%5BMurphy%2020120824%5D.pdf
Neural Networks and Deep Learning: A Textbook (NNDL), 2018, Charu C. Aggarwal
 Readership: graduate students, researchers, software pactitioners
 This book covers both classical and modern models in deep learning. The primary focus is on the theory and algorithms of deep learning. The theory and algorithms of neural networks are particularly important for understanding important concepts, so that one can understand the important design concepts of neural architectures in different applications. The book is also rich in discussing different applications in order to give the practitioner a flavor of how neural architectures are designed for different types of problems. Applications associated with many different areas like recommender systems, machine translation, image captioning, image classification, reinforcementlearning based gaming, and text analytics are covered.
 Structure:
 The basics of neural networks: Many traditional machine learning models can be understood as special cases of neural networks. An emphasis is placed in the first two chapters on understanding the relationship between traditional machine learning and neural networks. Support vector machines, linear/logistic regression, singular value decomposition, matrix factorization, and recommender systems are shown to be special cases of neural networks. These methods are studied together with recent feature engineering methods like word2vec.
 Fundamentals of neural networks: A detailed discussion of training and regularization is provided in Chapters 3 and 4. Chapters 5 and 6 present radialbasis function (RBF) networks and restricted Boltzmann machines.
 Advanced topics in neural networks: Chapters 7 and 8 discuss recurrent neural networks and convolutional neural networks. Several advanced topics like deep reinforcement learning, neural Turing machines, Kohonen selforganizing maps, and generative adversarial networks are introduced in Chapters 9 and 10.
 Free PDF Copy: http://static.latexstudio.net/article/2018/0912/neuralnetworksanddeeplearning.pdf
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
 Readership: undergraduates, researchers
 Prerequisites: an elementary background in probability and statistics
 Optimal Learning develops the needed principles for gathering information to make decisions, especially when collecting information is timeconsuming and expensive. This book presents effective and practical policies illustrated in a wide range of applications, from energy, homeland security, and transportation to engineering, health, and business.
 This book covers the fundamental dimensions of a learning problem and presents a simple method for testing and comparing policies for learning. Special attention is given to the knowledge gradient policy and its use with a wide range of belief models, including lookup table and parametric and for online and offline problems.
 Structures: Each chapter identifies a specific learning problem, presents the related, practical algorithms for implementation, and concludes with numerous exercises.
 Fundamentals explores fundamental topics, including adaptive learning, ranking and selection, the knowledge gradient, and bandit problems
 Extensions and Applications features coverage of linear belief models, subset selection models, scalar function optimization, optimal bidding, and stopping problems
 Advanced Topics explores complex methods including simulation optimization, active learning in mathematical programming, and optimal continuous measurements
 Additional Resources: http://optimallearning.princeton.edu/
The Elementes of Statistical Learning: Data Mining, Inference, and Prediction, 2nd Edition, 2016, Trevor Hastie, Robert Tibshirani, Jerome Friedman
 Readership: advanced undergraduates, statisticians
 This book describes the important ideas in a variety of fields such as medicine, biology, finance, and marketing in a common conceptual framework. While the approach is statistical, the emphasis is on concepts rather than mathematics. Many examples are given, with a liberal use of colour graphics. It is a valuable resource for statisticians and anyone interested in data mining in science or industry.
 Topics: supervised learning, unsupervised learning, neural networks, support vector machines, classification trees, boosting
Reinforcement Learning: An Introduction (RLAI), Nov 5, 2017, Richard S. Sutton, Andrew G. Barto
 Readership: advanced undergraduates
 Prerequisites: probability
 This book provide a clear and simple account of the key ideas and algorithms of reinforcement learning. Reinforcement learning, one of the most active research areas in artificial intelligence, is a computational approach to learning whereby an agent tries to maximize the total amount of reward it receives when interacting with a complex, uncertain environment. In this book, Richard Sutton and Andrew Barto provide a clear and simple account of the key ideas and algorithms of reinforcement learning. Their discussion ranges from the history of the field’s intellectual foundations to the most recent developments and applications.
 Structure:
 Part I defines the reinforcement learning problem in terms of Markov decision processes.
 Part II provides basic solution methods: dynamic programming, Monte Carlo methods, and temporaldifference learning.
 Part III presents a unified view of the solution methods and incorporates artificial neural networks, eligibility traces, and planning; the two final chapters present case studies and consider the future of reinforcement learning.
 Free PDF Copy: http://incompleteideas.net/book/bookdraft2017nov5.pdf
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
 Readership: advanced undergraduates
 This text takes an empirical approach to the subject, based on applying statistical and other machinelearning algorithms to large corporations. The authors cover areas that traditionally are taught in different courses, to describe a unified vision of speech and language processing. Emphasis is on practical applications and scientific evaluation. An accompanying Website contains teaching materials for instructors, with pointers to language processing resources on the We
Neural Network Methods for Natural Language Processing, 2017, Yoav Goldberg
 Readership: advanced undergraduates
 Prerequisites:: undergraduate level of probability, algebra, and calculus, as well as basic knowledge of algorithms and data structures
 Neural networks are a family of powerful machine learning models. This book focuses on the application of neural network models to natural language data.
 Structure:
 Parts I and II cover the basics of supervised machine learning and feedforward neural networks, the basics of working with machine learning over language data, and the use of vectorbased rather than symbolic representations for words. It also covers the computationgraph abstraction, which allows to easily define and train arbitrary neural networks, and is the basis behind the design of contemporary neural network software libraries.
 Parts III and IV introduce more specialized neural network architectures, including 1D convolutional neural networks, recurrent neural networks, conditionedgeneration models, and attentionbased models. These architectures and techniques are the driving force behind stateoftheart algorithms for machine translation, syntactic parsing, and many other applications. Finally, we also discuss treeshaped networks, structured prediction, and the prospects of multitask learning.
Robotics
Algorithms for controlling the behaviour of robots.
Modern Robotics: Mechanics, Planning, and Control (MR), 1st Edition, 2017, Frank C. Park, Kevin M. Lynch
 Readership: advaned undergraduates
 Prerequisites: freshmanlevel physics, ordinary differential equations, linear algebra and a little bit of computing background
 This introduction to robotics offers a distinct and unified perspective of the mechanics, planning and control of robots. Modern Robotics presents the stateoftheart, screwtheoretic techniques capturing the most salient physical features of a robot in an intuitive geometrical way. With numerous exercises at the end of each chapter, accompanying software written to reinforce the concepts in the book and video lectures aimed at changing the classroom experience, this is the goto textbook for learning about this fascinating subject.
 Free PDF Copy: http://hades.mech.northwestern.edu/images/7/7f/MR.pdf
Springer Handbook of Robotics, 2nd Edition, 2017, Bruno Siciliano, Oussama Khatib
 Readership: researchers
 The second edition of this handbook provides a stateoftheart cover view on the various aspects in the rapidly developing field of robotics. The contents have been restructured to achieve four main objectives: the enlargement of foundational topics for robotics, the enlightenment of design of various types of robotic systems, the extension of the treatment on robots moving in the environment, and the enrichment of advanced robotics applications. Further to an extensive update, fifteen new chapters have been introduced on emerging topics, and a new generation of authors have joined the handbook’s team.
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
 Readership: advanced undergraduates
 This third edition of Peter Jackson’s bestselling book updates the technological base of expert systems research and embeds those developments in a wide variety of application areas. The earlier chapters have been refocused to take a more practical approach to the basic topics, while the later chapters introduce new topic areas such as casebased reasoning, connectionist systems and hybrid systems. Results in related areas, such as machine learning and reasoning with uncertainty, are also accorded a thorough treatment. The new edition contains many new examples and exercises, most of which are in CLIPS, a language that combines production rules with objectoriented programming. LISP, PROLOG and C++ are also featured where appropriate. Interesting problems are posed throughout, and are solved in exercises involving the analysis, design and implementation of CLIPS programs.
Intelligent Systems for Engineers and Scientists, 3rd Edition, Adrian A. Hopgood
 Readership: researchers
 The book examines the principles of artificial intelligence and their application to engineering and science, as well as techniques for developing intelligent systems to solve practical problems. Covering the full spectrum of intelligent systems techniques, it incorporates knowledgebased systems, computational intelligence, and their hybrids. New edition includes expanded and separated chapters on genetic algorithms and singlecandidate optimization techniques, while the chapter on neural networks now covers spiking networks and a range of recurrent networks. The book also provides extended coverage of fuzzy logic, including type2 and fuzzy control systems. Example programs using rules and uncertainty are presented in an industrystandard format, so that you can run them yourself.
Fuzzy Expert Systems and Fuzzy Reasoning, 1st Edition, 2004, Willian Siler, James J. Buckley
 Readership: advanced undergraduates and graduates, researchers
 This book presents how to actually write and debug fuzzy expert systems. Coverage is accessible to practitioners and academic readers alike.
 Topics: fuzzy logic, fuzzy set theory, rulebased expert systems, FLOPS system language
The Handbook of Applied Expert Systems, 1997, Jay Liebowitz
 Readership: researchers
 The Handbook of Applied Expert Systems is a landmark work dedicated solely to this rapidly advancing area of study. Edited by Jay Liebowitz, a professor, author, and consultant known around the world for his work in the field, this authoritative source covers the latest expert system technologies, applications, methodologies, and practices. The book features contributions from more than 40 of the world’s foremost expert systems authorities in industry, government, and academia.
 Stucture: The first section explains expert systems technologies while the second section focuses on applied examples in a wide variety of industries.
 Topics: fuzzy systems, genetic algorithm development, machine learning, knowledge representation, and much more.
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
 Readership: graduates, researchers, software pactitioners, knowledge engineers
 Chitta Baral demonstrates how to write programs that behave intelligently by giving them the ability to express knowledge and reason about it. He presents a language, AnsProlog, for both knowledge representation and reasoning, and declarative problem solving.
 Free PDF Copy: https://www.phil.pku.edu.cn/cllct/ann_attachments/chitta.pdf
Handbook of Knowledge Representation, 1st Edition, 2008, Frank van Harmelen, Vladimir Lifschitz, Bruce Porter
 Readership: graduates, researchers, software pactitioners, knowledge engineers
 Handbook of Knowledge Representation describes the essential foundations of Knowledge Representation, which lies at the core of Artificial Intelligence (AI). The book provides an uptodate review of twentyfive key topics in knowledge representation, written by the leaders of each field. It includes a tutorial background and cuttingedge developments, as well as applications of Knowledge Representation in a variety of AI systems.
 Structure:
 Part I deals with general methods in Knowledge Representation and reasoning and covers such topics as classical logic in Knowledge Representation; satisfiability solvers; description logics; constraint programming; conceptual graphs; nonmonotonic reasoning; modelbased problem solving; and Bayesian networks.
 Part II focuses on classes of knowledge and specialized representations, with chapters on temporal representation and reasoning; spatial and physical reasoning; reasoning about knowledge and belief; temporal action logics; and nonmonotonic causal logic.
 Part III discusses Knowledge Representation in applications such as question answering; the semantic web; automated planning; cognitive robotics; multiagent systems; and knowledge engineering.
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
 Readership: graduates, researchers
 The book is a short, concise and complete presentation of constraint programming and reasoning. The use of constraints had its scientific and commercial breakthrough in the 1990s. Programming with constraints makes it possible to model and solve problems with uncertain, incomplete information and combinatorial problems, as they are abundant in industry and commerce, such as scheduling, planning, transportation, resource allocation, layout, design and analysis. The theoretically wellfounded presentation includes application examples from real life. It introduces the common classes of constraint programming languages and constraint systems in a uniform way. Constraint solving algorithms are specified and implemented in the constraint handling rules language (CHR).
Handbook of Constraint Programming, 1st Edition, 2006, Francesca Rossi, Peter van Beek, Toby Walsh
 Readership: advanced undergraduates, graduates, researchers, software pactitioners
 The aim of this handbook is to capture the full breadth and depth of the constraint programming field and to be encyclopedic in its scope and coverage. While there are several excellent books on constraint programming, such books necessarily focus on the main notions and techniques and cannot cover also extensions, applications, and languages. The handbook gives a reasonably complete coverage of all these lines of work, based on constraint programming, so that a reader can have a rather precise idea of the whole field and its potential. Of course each line of work is dealt with in a surveylike style, where some details may be neglected in favor of coverage. However, the extensive bibliography of each chapter will help the interested readers to find suitable sources for the missing details. Each chapter of the handbook is intended to be a selfcontained survey of a topic, and is written by one or more authors who are leading researchers in the area.
 Structure:
 Part I covers the basic foundations of constraint programming, including the history, the notion of constraint propagation, basic search methods, global constraints, tractability and computational complexity, and important issues in modeling a problem as a constraint problem.
 Part II covers constraint languages and solver, several useful extensions to the basic framework (such as interval constraints, structured domains, and distributed CSPs), and successful application areas for constraint programming.
Networking and Security
Networking
Algorithms and protocols for reliably communicating data across different shared or dedicated media, often including error correction.
Computer Networking: A TopDown Approach (CNTDA), 7th Edition, 2016, Kurose Ross
 Readership: beginners, undergraduates
 Unique among computer networking texts, the Seventh Edition of the popular Computer Networking: A Top Down Approach builds on the author’s long tradition of teaching this complex subject through a layered approach in a “topdown manner.” The text works its way from the application layer down toward the physical layer, motivating readers by exposing them to important concepts early in their study of networking. Focusing on the Internet and the fundamentally important issues of networking, this text provides an excellent foundation for readers interested in computer science and electrical engineering, without requiring extensive knowledge of programming or mathematics. The Seventh Edition has been updated to reflect the most important and exciting recent advances in networking.
 Free PDF Copy: http://ce.sharif.edu/courses/9495/2/ce4433/resources/root/Book/fqo47.Computer.Networking.A.TopDown.Approach.6th.Edition.pdf
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
 Readership: undergraduates
 In this indispensable, fully updated guide, Ross Anderson reveals how to build systems that stay dependable whether faced with error or malice. Here’s straight talk on critical topics such as technical engineering basics, types of attack, specialized protection mechanisms, security psychology, policy, and more.
 Free PDF Copy: https://www.cl.cam.ac.uk/~rja14/musicfiles/manuscripts/SEv1.pdf
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
 Readership: undergraduates, researchers
 From the world’s most renowned security technologist, Bruce Schneier, this 20th Anniversary Edition is the most definitive reference on cryptography ever published and is the seminal work on cryptography. Cryptographic techniques have applications far beyond the obvious uses of encoding and decoding information. For developers who need to know about capabilities, such as digital signatures, that depend on cryptographic techniques, there’s no better overview than Applied Cryptography, the definitive book on the subject. Bruce Schneier covers general classes of cryptographic protocols and then specific techniques, detailing the inner workings of realworld cryptographic algorithms including the Data Encryption Standard and RSA publickey cryptosystems. The book includes sourcecode listings and extensive advice on the practical aspects of cryptography implementation, such as the importance of generating truly random numbers and of keeping keys secure.
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
 Readership: undergraduates and graduates
 Computer Organization and Design, Fifth Edition, is the latest update to the classic introduction to computer organization. The text now contains new examples and material highlighting the emergence of mobile computing and the cloud. It explores this generational change with updated content featuring tablet computers, cloud infrastructure, and the ARM (mobile computing devices) and x86 (cloud computing) architectures. The book uses a MIPS processor core to present the fundamentals of hardware technologies, assembly language, computer arithmetic, pipelining, memory hierarchies and I/O.B ecause an understanding of modern hardware is essential to achieving good performance and energy efficiency, this edition adds a new concrete example, Going Faster, used throughout the text to demonstrate extremely effective optimization techniques. There is also a new discussion of the Eight Great Ideas of computer architecture. Parallelism is examined in depth with examples and content highlighting parallel hardware and software topics. The book features the Intel Core i7, ARM CortexA8 and NVIDIA Fermi GPU as realworld examples, along with a full set of updated and improved exercises.
 Free PDF Copy: http://ac.aua.am/arm/public/2017SpringComputerOrganization/Textbooks/ComputerOrganizationAndDesign5thEdition2014.pdf
Principles of Computer System Design: An Introduction (PCSD), 2009, M. Frans Kaashoek, Jerome H.
 Readership: researchers, software practitioners
 Prerequisites:: introductory courses on software and hardware
 Principles of Computer System Design is the first textbook to take a principlesbased approach to the computer system design. It identifies, examines, and illustrates fundamental concepts in computer system design that are common across operating systems, networks, database systems, distributed systems, programming languages, software engineering, security, fault tolerance, and architecture. Through carefully analyzed case studies from each of these disciplines, it demonstrates how to apply these concepts to tackle practical system design problems. To support the focus on design, the text identifies and explains abstractions that have proven successful in practice such as remote procedure call, client/service organization, file systems, data integrity, consistency, and authenticated messages. Most computer systems are built using a handful of such abstractions. The text describes how these abstractions are implemented, demonstrates how they are used in different systems, and prepares the reader to apply them in future designs.
 Free PDF Copy: https://ocw.mit.edu/resources/res6004principlesofcomputersystemdesignanintroductionspring2009/onlinetextbook/part_ii_open_5_0.pdf
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
 Readership: undergraduates
 The book is organized around three concepts fundamental to OS construction: virtualization (of CPU and memory), concurrency (locks and condition variables), and persistence (disks, RAIDS, and file systems). The material, if combined with serious project work and homeworks, will lead students to a deeper understanding and appreciation of modern OSes.
 Free PDF Copy: ostep.org
Modern Operating Systems (MOS), 4th Edition, 2015, Andrew S. Tanenbaum, Herbert Bos
 Readership: advanced undergraduates, researchers
 An uptodate overview of operating systems presented by worldrenowned computer scientist and author, Andrew Tanenbaum.
 Structure:
 Part I covers processes, memory management, file systems, I/O systems, and deadlocks in single operating system environments.
 Part II covers communication, synchronization process execution, and file systems in a distributed operating system environment.
 Study cases including UNIX, Linux, Windows 8 and Android.
 Free PDF Copy: http://stst.elia.pub.ro/news/SO/Modern%20Operating%20System%20%20Tanenbaum.pdf
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: bitlevel, instructionlevel, 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
 Readership: advanced undergraduates and graduates, researchers
 Prerequisites:: hardcore c programming skill
 This book explains the way thinking and reasoning in a parallel way and a 4step parallel program design method: partitioning, communication, agglomeration and mapping. It introduces a rocksolid design methodology with coverage of the most important mpi functions and openmp directives. It also demonstrates, through a wide range of examples, how to develop parallel programs that will execute efficiently on today’s parallel platforms.
CUDA Programming: A Developer’s Guide to Parallel Computing with GPUs, 2012, Shane Cook
 Readership: researchers
 Prerequisites:: C/C++ programming
 CUDA Programming: A Developer’s Introduction offers a detailed guide to CUDA with a grounding in parallel fundamentals. It starts by introducing CUDA and bringing you up to speed on GPU parallelism and hardware, then delving into CUDA installation. Chapters on core concepts including threads, blocks, grids, and memory focus on both parallel and CUDAspecific issues. Later, the book demonstrates CUDA in practice for optimizing applications, adjusting to new hardware, and solving common problems.
Handbook of Parallel Computing: Models, Algorithms and Applications, 1st Edition, 2018, Sanguthevar Rajasekaran, John Reif
 Readership: advanced undergraduates and graduates, researchers
 The ability of parallel computing to process large data sets and handle timeconsuming operations has resulted in unprecedented advances in biological and scientific computing, modeling, and simulations. Exploring these recent developments, the Handbook of Parallel Computing: Models, Algorithms, and Applications provides comprehensive coverage on all aspects of this field.
Handbook of Parallel Constraint Reasoning, 2018 Edition, Youssef Hamadi, Lakhdar Sais
 Readership: advanced undergraduates and graduates, researchers
 This is the first book presenting a broad overview of parallelism in constraintbased reasoning formalisms. In recent years, an increasing number of contributions have been made on scaling constraint reasoning thanks to parallel architectures. The goal in this book is to overview these achievements in a concise way, assuming the reader is familiar with the classical, sequential background. It presents work demonstrating the use of multiple resources from single machine multicore and GPUbased computations to very large scale distributed execution platforms up to 80,000 processing units.
 The contributions in the book cover the most important and recent contributions in parallel propositional satisfiability (SAT), maximum satisfiability (MaxSAT), quantified Boolean formulas (QBF), satisfiability modulo theory (SMT), theorem proving (TP), answer set programming (ASP), mixed integer linear programming (MILP), constraint programming (CP), stochastic local search (SLS), optimal path finding with A*, model checking for lineartime temporal logic (MC/LTL), binary decision diagrams (BDD), and modelbased diagnosis (MBD).
Limits to Parallel Computation: PCompleteness theory, 1995, R Greenlaw, H Hoover, W Ruzzo
 Readership: researchers
 Free PDF Copy: https://homes.cs.washington.edu/~ruzzo/papers/limits.pdf
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
 Readership: advanced undergraduates and graduates, researchers
 This book covers the principles, advanced concepts, and technologies of distributed systems in detail, including: communication, replication, fault tolerance, and security. This text systematically shows how distributed systems are designed and implemented in real systems.
 Free PDF Copy: http://barbie.uta.edu/~jli/Resources/MapReduce&Hadoop/Distributed%20Systems%20Principles%20and%20Paradigms.pdf
Distributed Systems: An Algorithmic Approach (DSAA), Second Edition, 2014, Sukumar Ghosh
 Readership: advanced undergraduates and graduates, researchers
 Distributed Systems: An Algorithmic Approach, Second Edition provides a balanced and straightforward treatment of the underlying theory and practical applications of distributed computing.
Operating Systems: Concurrent and Distributed Software Design, 2003, Jean Bacon
 Readership: advanced undergraduates and graduates, researchers
 Underlying this book is the premise that distributed systems are now commonplace and a reader is more likely to be using one than a centralized timesharing system. This modern approach therefore avoids the focus on centralized systems, instead placing the operating system within its context and providing an overview of system components and their relationships.
 Structure:
 System Design, covering the basic operating system functions and describing the abstraction and implementation of a system as a community of (possibly distributed) concurrent processes. Distributed systems are introduced and a chapter on system security is included.
 Concurrency Control in Main Memory, focusing on concurrency control in operating systems and applicationlevel systems and exploring interprocess communication (IPC) in the context of (distributed) system design.
 Transactions, demonstrating the general applicability of concurrent composite operations.
 Case Studies, considering different systems in the light of the perspective developed in the book: Classical UNIX; Linux, Solaris and Contemporary Unix; Extensible Systems; Windows 2000; Web Programming; Middleware; and Transaction Processing Systems.The Java language has been used throughout to illustrate objectoriented concepts, concurrent algorithms and distributed programming and the book includes a chapter on system security. The case studies, covering a full suite of professional operating systems, enable the course to be taught as a blend of theory and practice, so that on completion of the course a student is able to adapt and build real operating systems that function within a distributed environment.
Databases
Readings in Database Systems, 4th Edition, 2005, Joseph M. Hellerstein, Michael Stonebraker
 Readership: undergraduates, researchers
 Lessons from database research have been applied in academic fields ranging from bioinformatics to nextgeneration Internet architecture and in industrial uses including Webbased ecommerce and search engines. The core ideas in the field have become increasingly influential. This text provides both students and researchers with a grounding in database research and a technical context for understanding recent innovations in the field. The readings included treat the most important issues in the database area―the basic material for any DBMS professional.
 Free Ebook: http://www.redbook.io/
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
 Readership: beginners
 A Programmer’s Introduction to Mathematics uses your familiarity with ideas from programming and software to teach mathematics. You’ll learn about the central objects and theorems of mathematics, including graphs, calculus, linear algebra, eigenvalues, optimization, and more. You’ll also be immersed in the often unspoken cultural attitudes of mathematics, learning both how to read and write proofs while understanding why mathematics is the way it is. As you learn, we’ll use new mathematical ideas to create wondrous programs, from cryptographic schemes to neural networks to hyperbolic tessellations.
 Related resources: https://gumroad.com/l/pimbook
 Readership: advanced undergraduates and graduates, researchers
 The Software Foundations series is a broad introduction to the mathematical underpinnings of reliable software. The principal novelty of the series is that every detail is one hundred percent formalized and machinechecked: the entire text of each volume, including the exercises, is literally a “proof script” for the Coq proof assistant.
 Original Version: https://softwarefoundations.cis.upenn.edu/
 Chinese Version: https://coqzh.github.io/SFzh/index.html?nsukey=GCe32v18W99ZzBcqbNRg3%2BfkpCQNADG7nUx1%2FRc7aQ7YG%2BR8wbKZp4iwuJRnH9ya2FiSREipj4aDAWB7TIa3wOInIF40m2oENjwVf2bthsgU%2Bp84a0xxXPvUf727McZiXVYGrZ1BA2qO%2BaJ6%2FX3aig%3D%3D
Concrete Mathematics: A Foundation for Computer Science, 2nd Edition, Ronald L. Graham, Donald E. Knuth, Oren Patashnik
 Readership: advanced undergraduates and graduates
 This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its wellknown authors is to provide a solid and relevant base of mathematical skillsthe skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data.
 Topics: sums, recurrences, elementary Number Theory, binomial coefficients, generating functions, discrete probability and asymptotic methods.
Number Theory
An Introduction To The Theory Of Numbers, 6th Edition, 2008, Ivan Niven, Hugh L. Montgomery, Herbert S. Zuckerman
 Readership: beginners
 An Introduction to the Theory of Numbers by G. H. Hardy and E. M. Wright is found on the reading list of virtually all elementary number theory courses and is widely regarded as the primary and classic text in elementary number theory. Updates include a chapter by J. H. Silverman on one of the most important developments in number theory  modular elliptic curves and their role in the proof of Fermat’s Last Theorem – a foreword by A. Wiles, and comprehensively updated endofchapter notes detailing the key developments in number theory. Suggestions for further reading are also included for the more avid reader.
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
 Readership: beginners
 This book covers elementary discrete mathematics for computer science and engineering. It emphasizes mathematical definitions and proofs as well as applicable methods.
 Topics: formal logic notation, proof methods; induction, wellordering; sets, relations; elementary graph theory; integer congruences; asymptotic notation and growth of functions; permutations and combinations, counting principles; discrete probability. Further selected topics may also be covered, such as recursive definition and structural induction; state machines and invariants; recurrences; generating functions.
 Free PDF Copy: https://courses.csail.mit.edu/6.042/spring18/mcs.pdf
Discrete Mathematics and Its Applications (DMIA), 7th Edition, 2017, Kenneth H. Rosen
 Readership: undergraduates, engineers, researchers
 This book is intended for one or twoterm introductory discrete mathematics courses taken by students from a wide variety of majors, including computer science, mathematics, and engineering.
 Free PDF Copy: http://www2.fiit.stuba.sk/~kvasnicka/Mathematics%20for%20Informatics/Rosen_Discrete_Mathematics_and_Its_Applications_7th_Edition.pdf
Probability and Statistics
Probability Theory and Examples, 5th Edition, 2019, Rick Durrett
 Readership: undergraduates
 This lively introduction to measuretheoretic probability theory covers laws of large numbers, central limit theorems, random walks, martingales, Markov chains, ergodic theorems, and Brownian motion. Concentrating on results that are the most useful for applications, this comprehensive treatment is a rigorous graduate text and reference.
Probability and Statistics for Computer Science, 2018, David Forsyth
 Readership: advanced undergraduates
 This textbook is aimed at computer science undergraduates late in sophomore or early in junior year, supplying a comprehensive background in qualitative and quantitative data analysis, probability, random variables, and statistical methods, including machine learning.
 Topics: simple point inference strategies including maximum likelihood and Bayesian inference, classification, regression, principal components analysis, clustering via agglomerative methods and kmeans
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
 Readership: advanced undergraduates
 With this bestknow books on Theory of Computation, you will gain a solid understanding of the fundamental mathematical properties of computer hardware, software, and applications with a blend of practical and philosophical coverage and mathematical treatments, including advanced theorems and proofs.
Introduction to Languages and The Theory of Computation, 4th Edition, John Martin
 Readership: undergraduates
 Introduction to Languages and the Theory of Computation helps students make the connection between the practice of computing and an understanding of the profound ideas that defines it.
The Calculus of Computation: Decision Procedures with Applications to Verification, 2007th Edition, Aaron R. Bradley, Zohar Manna
 Readership: advanced undergraduates and graduates, researchers
 This textbook introduces computational logic from the foundations of firstorder logic to stateoftheart decision procedures for arithmetic, data structures, and combination theories. The textbook also presents a logical approach to engineering correct software. Verification exercises are given to develop the reader’s facility in specifying and verifying software using logic. The treatment of verification concludes with an introduction to the static analysis of software, an important component of modern verification systems.
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
 Readership: advanced undergraduates and graduates
 An Introduction to Formal Languages and Automata, Sixth Edition provides an accessible, studentfriendly presentation of all material essential to an introductory Theory of Computation course. Written to address the fundamentals of formal languages, automata, and computability, the text is designed to familiarize students with the foundations and principles of computer science and to strengthen the students’ ability to carry out formal and rigorous mathematical arguments.
Introduction To Automata Theory Languages, and Computation, 3rd Edition, 2006, John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman
 Readership: advanced undergraduates and graduates
 This classic book on formal languages, automata theory, and computational complexity has been updated to present theoretical concepts in a concise and straightforward manner with the increase of handson, practical applications. This new edition comes with Gradiance, an online assessment tool developed for computer science. Gradiance is the most advanced online assessment tool developed for the computer science discipline. With its innovative underlying technology, Gradiance turns basic homework assignments and programming labs into an interactive learning experience for students.
 Gradiance: www.aw.com/gradiance.
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
 Readership: advanced undergraduates and graduates, researchers
 This beginning graduate textbook describes both recent achievements and classical results of computational complexity theory. Requiring essentially no background apart from mathematical maturity, the book can be used as a reference for selfstudy for anyone interested in complexity, including physicists, mathematicians, and other scientists, as well as a textbook for a variety of courses and seminars. More than 300 exercises are included with a selected hint set.
The Nature of Computation,2011 Cristopher Moore, Stephan Mertens
 Readership: advanced undergraduates and graduates, researchers
 Computational complexity is one of the most beautiful fields of modern mathematics, and it is increasingly relevant to other sciences ranging from physics to biology. But this beauty is often buried underneath layers of unnecessary formalism, and exciting recent results like interactive proofs, cryptography, and quantum computing are usually considered too “advanced” to show to the typical student. The aim of this book is to bridge both gaps by explaining the deep ideas of theoretical computer science in a clear and enjoyable fashion, making them accessible to non computer scientists and to computer scientists who finally want to understand what their formalisms are actually telling. This book gives a lucid and playful explanation of the field, starting with P and NPcompleteness. The authors explain why the P vs. NP problem is so fundamental, and why it is so hard to resolve. They then lead the reader through the complexity of mazes and games; optimization in theory and practice; randomized algorithms, interactive proofs, and pseudorandomness; Markov chains and phase transitions; and the outer reaches of quantum computing.
Computers and Intractability: A Guide to the Theory of NPCompleteness, Michael R. Garey, David S. Johnson, 1979
 Readership: researchers
 This text shows how to recognize NPcomplete problems and offers practical suggestions for dealing with them effectively. It is suitable as a supplement to courses in algorithm design, computational complexity, operations research, or combinatorial mathematics, and as a text for seminars on approximation algorithms or computational complexity.
Mathematics for Data Science
See also: Probability and Statistics.
Foundations of Data Science, Jan 21, 2019, Avrim Blum, John Hopcroft, Ravindran Kannan
 Readership: researchers, data scientists
 This book covers the theories likely to be useful in the next 40 years, while the majority usage of computer currently is to understand and make usable massive data arising in application.
 Topics: highdimensional space, singular value decomposition, ramdom graphs, Markov chains, clustering, belief propagation, topic models, nonnegative matrix factorization, hidden Markov Models and graphical models.
 Free PDF Copy: https://www.cs.cornell.edu/jeh/book.pdf
Feature Selection for HighDimensional Data (Artificial Intelligence: Foundations, Theory, and Algorithms), 1st Edition, 2005, Verónica BolónCanedo, Noelia SánchezMaroño, Amparo AlonsoBetanzos
 Readership: graduates, researchers, practitioners in the areas of machine learning and data mining
 This book offers a coherent and comprehensive approach to feature subset selection in the scope of classification problems, explaining the foundations, real application problems and the challenges of feature selection for highdimensional data.
 Topics: The authors first focus on the analysis and synthesis of feature selection algorithms, presenting a comprehensive review of basic concepts and experimental results of the most wellknown algorithms. They then address different real scenarios with highdimensional data, showing the use of feature selection algorithms in different contexts with different requirements and information: microarray data, intrusion detection, tear film lipid layer classification and costbased features. The book then delves into the scenario of big dimension, paying attention to important problems under highdimensional spaces, such as scalability, distributed processing and realtime processing, scenarios that open up new and interesting challenges for researchers.
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
 Readership: beginners
 Proof and Disproof in Formal Logic is a lively and entertaining introduction to formal logic providing an excellent insight into how a simple logic works. Formal logic allows you to check a logical claim without considering what the claim means. This highly abstracted idea is an essential and practical part of computer science. The idea of a formal systema collection of rules and axioms, which define a universe of logical proofsis what gives us programming languages and modernday programming. This book concentrates on using logic as a tool: making and using formal proofs and disproofs of particular logical claims. The logic it usesnatural deductionis very small and very simple; working with it helps you see how large mathematical universes can be built on small foundations.
 Structure:
 Part I “Basics” gives an introduction to formal logic with a short history of logic and explanations of some technical words.
 Part II “Formal Syntactic Proof” show you how to do calculations in a formal system where you are guided by shapes and never need to think about meaning. Your experiments are aided by Jape, which can operate as both inquisitor and oracle.
 Part III “Formal Semantic Disproof” shows you how to construct mathematical counterexamples to shoe that proof is impossible. Jape can check the counterexamples you build.
 Part IV “ Program Specification and Proof” describes how to apply your logical understanding to a real computer science problem, the accurate description and verification of programs. Jape helps, as far as arithmetic allows.
 Free PDF Copy: http://homepages.phonecoop.coop/randj/richard/books/ProofandDisproof.pdf
A First Course in Logic: An Introduction to Model Theory, Proof Theory, Computability, and Complexity, 2004, Shawn Hedman
 Readership: beginners
 This text covers the fundamental topics in classical logic in an extremely clear, thorough and accurate style that is accessible to all the above.
 Topics: propositional logic, firstorder logic, and secondorder logic, as well as proof theory, computability theory, model theory
 Free PDF Copy: http://www.maths.sci.ku.ac.th/suchai/02731141/first.pdf
Logic in Computer Science, Modelling and Reasoning about Systems, 2nd Edition, Michael Huth
 Readership: graduates, researchers
 This book provides a clear introduction to formal reasoning relevant to the needs of modern computer science and sufficiently exacting for practical applications. Improvements have been made throughout with many new and expanded text sections. The coverage of modelchecking has been substantially updated and additional exercises are included. Internet support includes worked solutions for teacher exercises and model solutions to some student exercises.
 Free PDF Copy and Resources: http://www.cs.bham.ac.uk/research/projects/lics/
Fuzzy Logic Theory and Applications: Part I and Part II, 2018 Lofti A. Zadeh, Rafik A. Aliev
 Readership: academics, practitioners, advanced undergraduates and graduates
 This unique compendium includes all the principal facets of fuzzy logic such as logical, fuzzysettheoretic, epistemic and relational. Theoretical problems are prominently illustrated and illuminated by numerous carefully workedout and thoughtthrough examples.This invaluable volume will be a useful reference guide for in fuzzy logic and its applications.
Introduction to Lattices and Order, 2002, B. A. Davey
 Readership: undergraduates
 Prerequisites: elementary abstract algebra, the rotation of set theory
 Ordered structures have been increasingly recognized in recent years due to an explosion of interest in theoretical computer science and all areas of discrete mathematics. This book covers areas such as ordered sets and lattices. A key feature of ordered sets, one which is emphasized in the text, is that they can be represented pictorially. Lattices are also considered as algebraic structures and hence a purely algebraic study is used to reinforce the ideas of homomorphisms and of ideals encountered in group theory and ring theory.
Boolean Functions: Theory, Algorithms, and Applications, 1st Edition, 2011, Yves Crama, Peter L. Hammer
 Readership: graduates, researchers
 Prerequisites: discrete mathematics, operations research, computer science, engineering, economics
 Written by prominent experts in the field, this monograph provides the first comprehensive and unified presentation of the structural, algorithmic, and applied aspects of the theory of Boolean functions. The book focuses on algebraic representations of Boolean functions, especially disjunctive and conjunctive normal form representations. It presents in this framework the fundamental elements of the theory (Boolean equations and satisfiability problems, prime implicants and associated short representations, dualization), an indepth study of special classes of Boolean functions (quadratic, Horn, shellable, regular, threshold, readonce functions and their characterization by functional equations), and two fruitful generalizations of the concept of Boolean functions (partially defined functions and pseudoBoolean functions).
Proof Theory
Proof Theory, 2nd Edition, Gaisi Takeuti
 Readership: advanced undergraduates and graduates
 Focusing on Gentzentype proof theory, this volume presents a detailed overview of creative works by author Gaisi Takeuti and other twentiethcentury logicians. The text explores applications of proof theory to logic as well as other areas of mathematics.
 Structure:
 Part I begins with an exploration of first order systems, including a treatment of predicate calculus involving Gentzen’s cutelimination theorem and the theory of natural numbers in terms of Gödel’s incompleteness theorem and Gentzen’s consistency proof.
 Part II, which considers second order and finite order systems, covers simple type theory and infinitary logic.
 Part III address consistency problems with an examination of consistency proofs and their applications.
Structural Proof Theory,1st Edition, Sara Negri, 2008
 Readership: advanced undergraduates and graduates
 Structural proof theory is a branch of logic that studies the general structure and properties of logical and mathematical proofs. This book is both a concise introduction to the central results and methods of structural proof theory, and a work of research that will be of interest to specialists. The book is designed to be used by students of philosophy, mathematics, and computer science. A special feature of the volume is a computerized system for developing proofs interactively, downloadable from the web and regularly updated.
Lectures on the CurryHoward isomorphismElsevier Science, 1st Edition, 2006, Morten Heine Sørensen, Pawel Urzyczyn
 Readership: graudates, researchers
 The CurryHoward isomorphism states an amazing correspondence between systems of formal logic as encountered in proof theory and computational calculi as found in type theory. For instance, minimal propositional logic corresponds to simply typed lambdacalculus, firstorder logic corresponds to dependent types, secondorder logic corresponds to polymorphic types, sequent calculus is related to explicit substitution, etc. The isomorphism has many aspects, even at the syntactic level: formulas correspond to types, proofs correspond to terms, provability corresponds to inhabitation, proof normalization corresponds to term reduction, etc. But there is more to the isomorphism than this. For instance, it is an old idea—due to Brouwer, Kolmogorov, and Heyting—that a constructive proof of an implication is a procedure that transforms proofs of the antecedent into proofs of the succedent; the CurryHoward isomorphism gives syntactic representations of such procedures. The CurryHoward isomorphism also provides theoretical foundations for many modern proofassistant systems (e.g. Coq). This book give an introduction to parts of proof theory and related aspects of type theory relevant for the CurryHoward isomorphism. It can serve as an introduction to any or both of typed lambdacalculus and intuitionistic logic.
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
 Readership: advanced undergraduates and graduates
 What can computers do in principle? What are their inherent theoretical limitations? These are questions to which computer scientists must address themselves. The theoretical framework which enables such questions to be answered has been developed over the last fifty years from the idea of a computable function: intuitively a function whose values can be calculated in an effective or automatic way. This book is an introduction to computability theory (or recursion theory as it is traditionally known to mathematicians).
 Structure: Dr Cutland begins with a mathematical characterisation of computable functions using a simple idealised computer (a register machine); after some comparison with other characterisations, he develops the mathematical theory, including a full discussion of noncomputability and undecidability, and the theory of recursive and recursively enumerable sets. The later chapters provide an introduction to more advanced topics such as Godel’s incompleteness theorem, degrees of unsolvability, the Recursion theorems and the theory of complexity of computation.
Recursion Theory for Metamathematics, 1st Edition, 1993, Raymond M. Smullyan
 Readership: researchers
 This work is a sequel to the author’s Gödel’s Incompleteness Theorems, though it can be read independently by anyone familiar with Gödel’s incompleteness theorem for Peano arithmetic. The book deals mainly with those aspects of recursion theory that have applications to the metamathematics of incompleteness, undecidability, and related topics. It is both an introduction to the theory and a presentation of new results in the field.
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 typetheoretic perspective―has important applications in software engineering, language design, highperformance compilers, and security.
Types and Programming Languages (TAPL), 2002, Benjamin C. Pierce
 Readership: beginners, advanced undergraduates and graduates, researchers
 This text provides a comprehensive introduction both to type systems in computer science and to the basic theory of programming languages. The approach is pragmatic and operational; each new concept is motivated by programming examples and the more theoretical sections are driven by the needs of implementations. Each chapter is accompanied by numerous exercises and solutions, as well as a running implementation, available via the Web. Dependencies between chapters are explicitly identified, allowing readers to choose a variety of paths through the material.
 Topics: untyped lambdacalculus, simple type systems, type reconstruction, universal and existential polymorphism, subtyping, bounded quantification, recursive types, kinds, type operators
Advanced Topics in Types and Programming Languages, 2004, Benjamin C. Pierce
 Readership: advanced undergraduates and graduates, researchers
 The study of type systems for programming languages now touches many areas of computer science, from language design and implementation to software engineering, network security, databases, and analysis of concurrent and distributed systems. This book offers accessible introductions to key ideas in the field, with contributions by experts on each topic. The topics covered include precise type analyses, which extend simple type systems to give them a better grip on the run time behavior of systems; type systems for lowlevel languages; applications of types to reasoning about computer programs; type theory as a framework for the design of sophisticated module systems; and advanced techniques in MLstyle type inference.
Homotopy Type Theory: Univalent Foundations of Mathematics (HoTT), 2013, The Univalent Foundations Program Institute for Advanced Study
 Readership: high school students, advanced undergraduates and graduates, reasearchers
 Homotopy type theory is a new branch of mathematics that combines aspects of several different fields in a surprising way. It is based on a recently discovered connection between homotopy theory and type theory. It touches on topics as seemingly distant as the homotopy groups of spheres, the algorithms for type checking, and the definition of weak ∞groupoids. Homotopy type theory offers a new “univalent” foundation of mathematics, in which a central role is played by Voevodsky’s univalence axiom and higher inductive types. The present book is intended as a first systematic exposition of the basics of univalent foundations, and a collection of examples of this new style of reasoning  but without requiring the reader to know or learn any formal logic, or to use any computer proof assistant. We believe that univalent foundations will eventually become a viable alternative to set theory as the “implicit foundation” for the unformalized mathematics done by most mathematicians.
 Free PDF Copy: https://homotopytypetheory.org/book/
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
 Readership: beginners
 This book provides a straightforward presentation of the basic constructions and terminology of category theory, including limits, functors, natural transformations, adjoints, and cartesian closed categories.
Category Theory: A Gentle Introduction, Peter Smith
 Readership: undergraduates
 This Gentle Introduction is very much still work in progress, so there are chapters at different levels of development and with different degrees of integration with what’s around them. So far, at least in a rough and ready way, we cover the basic notions of elementary category theory – explaining the very idea of a category, then treating limits, functors, natural transformations, representables, adjunctions. The longterm plan is (possibly) to say something about categorial logic, explore categories of sets, and even edge towards some initial themes in topos theory
 Free PDF Copy: https://www.logicmatters.net/resources/pdfs/GentleIntro.pdf
Categories for the Working Mathematician, 1998, Saunders Mac Lane
 Readership: graduates, researchers
 Structure: Starting from the foundations, this book illuminates the concepts of category, functor, natural transformation, and duality. It then turns to adjoint functors, which provide a description of universal constructions, an analysis of the representations of functors by sets of morphisms, and a means of manipulating direct and inverse limits. These categorical concepts are extensively illustrated in the remaining chapters, which include many applications of the basic existence theorem for adjoint functors. The categories of algebraic systems are constructed from certain adjointlike data and characterised by Beck’s theorem. After considering a variety of applications, the book continues with the construction and exploitation of Kan extensions. This second edition includes a number of revisions and additions, including new chapters on topics of active interest: symmetric monoidal categories and braided monoidal categories, and the coherence theorems for them, as well as 2categories and the higher dimensional categories which have recently come into prominence.
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
 Readership: beginners
 An inductory lecture notes on lambdacalculus.
 Free PDF Copy: https://www.cs.utah.edu/~mflatt/pastcourses/cs7520/public_html/s06/notes.pdf
Introduction to Process Algreba, 2000, Wan Fokkink
 Readership: beginners
 utomated and semiautomated manipulation of socalled labelled transition systems has become an important means in discovering flaws in software and hardware systems. Process algebra has been developed to express such labelled transition systems algebraically, which enhances the ways of manipulation by means of equational logic and term rewriting. The theory of process algebra has developed rapidly over the last twenty years, and verification tools have been developed on the basis of process algebra, often in cooperation with techniques related to model checking. This textbook gives a thorough introduction into the basics of process algebra and its applications.
An Introduction to the piCalculus
 Readership: beginners
 An inductory textbook on picalculus.
 Free PDF Copy: http://courses.cs.vt.edu/cs5204/fall09kafura/Papers/PICalculus/PiCalculusIntroduction.pdf
The Theory and Practice of Concurrency, 2005, Roscow
 Readership: undergraduates, researchers
 This book gives you the fundamental grasp of CSP concepts you’ll need to take advantage of those tools.
 Structure:
 Part I provides a detailed foundation for working with CSP, using as little mathematics as possible. It introduces the ideas behind operational, denotational and algebraic models of CSP.
 Parts II and III go into greater detail about theory and practice. Topics include: parallel operators, hiding and renaming, piping and enslavement, buffers and communication, termination and sequencing, and semantic theory.
 Three detailed practical case studies are also presented.
Studies in Logic: Formal Systems and Recursive Function, 1965, J.N. DUMMETT M.A.E.
 Readership: beginners
Theory of Formal Systems, Raymond M. Smullyan, 1961
 Readership: undergraudates, researchers
 This book serves both as a completely selfcontained introduction and as an exposition of new results in the field of recursive function theory and its application to formal systems.
Communicating Sequential Processes, 2004, C. A. R. Hoare
 Readership: researchers
 This book introduces Communicating Sequential Processes (CSP), a formal system on reasoning about concurrency and nondeterminism in programs.
 Free PDF Copy: http://www.usingcsp.com/cspbook.pdf
The PiCalculus: A Theory of Mobile Processes, 2003, Davide Sangiorgi
 Readership: graduates, researchers
 Mobile systems, whose components communicate and change their structure, now pervade the informational world and the wider world of which it is a part. The science of mobile systems is as yet immature, however. This book presents the picalculus, a theory of mobile systems. The picalculus provides a conceptual framework for understanding mobility, and mathematical tools for expressing systems and reasoning about their behaviours. The book serves both as a reference for the theory and as an extended demonstration of how to use picalculus to describe systems and analyse their properties. It covers the basic theory of picalculus, typed picalculi, higherorder processes, the relationship between picalculus and lambdacalculus, and applications of picalculus to objectoriented design and programming.
LambdaCalculus and Combinators: an Introduction (LCAC), 2nd Edition, 2008, J. Roger Hindley, Jonathan P. Seldin
 Readership: undergraduates
 Combinatory logic and lambdacalculus, originally devised in the 1920’s, have since developed into linguistic tools, especially useful in programming languages. The authors’ previous book served as the main reference for introductory courses on lambdacalculus for over 20 years: this longawaited new version is thoroughly revised and offers a fully uptodate account of the subject, with the same authoritative exposition. The grammar and basic properties of both combinatory logic and lambdacalculus are discussed, followed by an introduction to typetheory. Typed and untyped versions of the systems, and their differences, are covered. Lambdacalculus models, which lie behind much of the semantics of programming languages, are also explained in depth. The treatment is as nontechnical as possible, with the main ideas emphasized and illustrated by examples. Many exercises are included, from routine to advanced, with solutions to most at the end of the book.
The Lambda Calculus: Its Syntax and Semantics (LCISS), 2012, Henk Barendregt
 Readership: advanced undergruates and graduates
 The Lambda Calculus, treated in this book mainly in its untyped version, consists of a collection of expressions, called lambda terms, together with ways how to rewrite and identify these. In the parts conversion, reduction, theories, and models the view is respectively ‘algebraic’, computational, with more (‘coinductive’) identifications, and finally settheoretic. The lambda terms are built up from variables, using application and abstraction. Applying a term F to M has as intention that F is a function, M its argument, and FM the result of the application. This is only the intention: to actually obtain the result one has to rewrite the expression FM according to the reduction rules. Abstraction provides a way to create functions according to the effect when applying them. The power of the theory comes from the fact that computations, both terminating and infinite, can be expressed by lambda terms at a ‘comfortable’ level of abstraction.
Handbook of Process Algebra, 2001, J.A. Bergstra, A. Ponse, S.A. Smolka
 Readership: undergraduates
 Process Algebra is a formal description technique for complex computer systems, especially those involving communicating, concurrently executing components. It is a subject that concurrently touches many topic areas of computer science and discrete math, including system design notations, logic, concurrency theory, specification and verification, operational semantics, algorithms, complexity theory, and, of course, algebra.
 This Handbook documents the fate of process algebra since its inception in the late 1970’s to the present. It is intended to serve as a reference source for researchers, students, and system designers and engineers interested in either the theory of process algebra or in learning what process algebra brings to the table as a formal system description and verification technique. The Handbook is divided into six parts spanning a total of 19 selfcontained Chapters.
 Structure:
 Part I, consisting of four chapters, covers a broad swath of the basic theory of process algebra.
 Part II contains two chapters devoted to the subspecialization of process algebra known as finitestate processes.
 The three chapters of Part III look at infinitestate processes, valuepassing processes and mobile processes in particular.
 Part IV, also three chapters in length, explores several extensions to process algebra including realtime, probability and priority.
 The four chapters of Part V examine noninterleaving process algebras.
 Part VI’s three chapters address processalgebra tools and applications.
Axiomatic Set Theory
Introduction to Axiomatic Set Theory, 1982 Edition, Takeuti G. , Zaring W.
 Readership: undergraduates
 In 1963, the first author introduced a course in set theory at the University of Illinois whose main objectives were to cover Godel’s work on the con sistency of the Axiom of Choice (AC) and the Generalized Continuum Hypothesis (GCH), and Cohen’s work on the independence of the AC and the GCH. Notes taken in 1963 by the second author were taught by him in 1966, revised extensively, and are presented here as an introduction to axiomatic set theory. Texts in set theory frequently develop the subject rapidly moving from key result to key result and suppressing many details. Advocates of the fast development claim at least two advantages. First, key results are high lighted, and second, the student who wishes to master the subject is com pelled to develop the detail on his own. However, an instructor using a “fast development” text must devote much class time to assisting his students in their efforts to bridge gaps in the text.
Model Theory
Model Theory: An Introduction, 2002nd Edition, David Marker
 Readership: undergraduates
 An inductory lecture notes on model theroy.
Quantum Computing Theory
Quantum computing is the use of quantummechanical phenomena such as superposition and entanglement to perform computation.
Quantum Computation and Quantum Information, 10th Anniversary Edition, Michael A. Nielsen, Isaac L. Chuang
 Readership: advanced undergraduates and graduates, researchers
 This comprehensive textbook describes such remarkable effects as fast quantum algorithms, quantum teleportation, quantum cryptography and quantum errorcorrection. Quantum mechanics and computer science are introduced before moving on to describe what a quantum computer is, how it can be used to solve problems faster than ‘classical’ computers and its realworld implementation. It concludes with an indepth treatment of quantum information. Containing a wealth of figures and exercises, this wellknown textbook is ideal for courses on the subject, and will interest beginning graduate students and researchers in physics, computer science, mathematics, and electrical engineering.
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
 Readership: advanced undergraduates and graduates
 Free PDF Copy: https://cse.buffalo.edu/faculty/atri/courses/codingtheory/book/
 Lecture Notes: http://madhu.seas.harvard.edu/courses/Spring2017/
Information Theory, Inference, and Learning Algorithms, 2003, David MacKay
 Readership: advanced undergraduates and graduates
 Information theory and inference, often taught separately, are here united in one entertaining textbook. These topics lie at the heart of many exciting areas of contemporary science and engineering  communication, signal processing, data mining, machine learning, pattern recognition, computational neuroscience, bioinformatics, and cryptography. This textbook introduces theory in tandem with applications. Information theory is taught alongside practical communication systems, such as arithmetic coding for data compression and sparsegraph codes for errorcorrection. A toolbox of inference techniques, including messagepassing algorithms, Monte Carlo methods, and variational approximations, are developed alongside applications of these tools to clustering, convolutional codes, independent component analysis, and neural networks. The final part of the book describes the state of the art in errorcorrecting codes, including lowdensity paritycheck codes, turbo codes, and digital fountain codes – the twentyfirst century standards for satellite communications, disk drives, and data broadcast.
Abstract Algebra
Abstract Algebra, The Basic Graduate Year, 2002, Robert B. Ash
 Readership: advanced undergraduates and graduates
 This book covers fundamental algebraic structures, namely groups, rings, fields and modules, and maps between these structures.
 Free PDF Copy: https://faculty.math.illinois.edu/~rash/Algebra.html
Programming Languages
Programming Language Pragmatics
Taxonomy of programming languages, their strength and weaknesses. Various programming paradigms, such as objectoriented programming.
Programming Language Pragmatics (PLP), 4th Edition, 2015, Michael L. Scott
 Readership: undergraduates
 Programming Language Pragmatics, Fourth Edition, is the most comprehensive programming language textbook available today. It is distinguished and acclaimed for its integrated treatment of language design and implementation, with an emphasis on the fundamental tradeoffs that continue to drive software development.
 The book provides readers with a solid foundation in the syntax, semantics, and pragmatics of the full range of programming languages, from traditional languages like C to the latest in functional, scripting, and objectoriented programming. This fourth edition has been heavily revised throughout, with expanded coverage of type systems and functional programming, a unified treatment of polymorphism, highlights of the newest language standards, and examples featuring the ARM and x86 64bit architectures.
Concepts, Techniques and Models of Computer Programming (CTMCP), 1st Edition, 2004, Peter Van Roy, Seif Haridi
 Readership: undergraduates
 This book discusses the science and the technology of programming as a unified discipline that shows the deep relationships between programming paradigms. The book focuses on techniques of lasting value and explains them precisely in terms of a simple abstract machine. The book presents all major programming paradigms in a uniform framework that shows their deep relationships and how and where to use them together. After an introduction to programming concepts, the book presents both wellknown and lesserknown computation models (“programming paradigms”). Each model has its own set of techniques and each is included on the basis of its usefulness in practice. The general models include declarative programming, declarative concurrency, messagepassing concurrency, explicit state, objectoriented programming, sharedstate concurrency, and relational programming. Specialized models include graphical user interface programming, distributed programming, and constraint programming. Each model is based on its kernel language―a simple core language that consists of a small number of programmersignificant elements. The kernel languages are introduced progressively, adding concepts one by one, thus showing the deep relationships between different models. The kernel languages are defined precisely in terms of a simple abstract machine. Because a wide variety of languages and programming paradigms can be modeled by a small set of closely related kernel languages, this approach allows programmer and student to grasp the underlying unity of programming. The book has many program fragments and exercises, all of which can be run on the Mozart Programming System, an Open Source software package that features an interactive incremental development environment.
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
 Readership: beginners
 This book provides students with a deep, working understanding of the essential concepts of programming languages. Most of these essentials relate to the semantics, or meaning, of program elements, and the text uses interpreters (short programs that directly analyze an abstract representation of the program text) to express the semantics of many essential language elements in a way that is both clear and executable. The approach is both analytical and handson. The book provides views of programming languages using widely varying levels of abstraction, maintaining a clear connection between the highlevel and lowlevel views. Exercises are a vital part of the text and are scattered throughout; the text explains the key concepts, and the exercises explore alternative designs and other issues. The complete Scheme code for all the interpreters and analyzers in the book can be found online through The MIT Press web site. For this new edition, each chapter has been revised and many new exercises have been added. Significant additions have been made to the text, including completely new chapters on modules and continuationpassing style.
Concepts of Programming Languages (COPL), 11th Edition, 2015, Robert W. Sebesta
 Readership: undergraduates
 Concepts of Computer Programming Languages introduces students to the fundamental concepts of computer programming languages and provides them with the tools necessary to evaluate contemporary and future languages. An indepth discussion of programming language structures, such as syntax and lexical and syntactic analysis, also prepares readers to study compiler design.
Theories of Programming Languages (TOPL), 1st Edition, 2009, John Reynolds
 Readership: advanced undergraduates, researchers
 Prerequisites: elementary programming
 This textbook is a broad but rigorous survey of the theoretical basis for the design, definition, and implementation of programming languages, and of systems for specifying and proving program behavior. It encompasses imperative and functional programming, as well as the ways of integrating these aspects into more general languages. Basic concepts and their properties are described with mathematical rigor, but the mathematical development is balanced by numerous examples of applications, particularly of program specification and proof, concurrent programming, functional programming (including the use of continuations and lazy evaluation), and type systems (including subtyping, polymorphism, and modularization).
Practical Foundations for Programming Languages (PFPL), 2nd Edition, Robert Harper
 Readership: advanced undergraduates
 This text develops a comprehensive theory of programming languages based on type systems and structural operational semantics. Language concepts are precisely defined by their static and dynamic semantics, presenting the essential tools both intuitively and rigorously while relying on only elementary mathematics. These tools are used to analyze and prove properties of languages and provide the framework for combining and comparing language features. The broad range of concepts includes fundamental data types such as sums and products, polymorphic and abstract types, dynamic typing, dynamic dispatch, subtyping and refinement types, symbols and dynamic classification, parallelism and cost semantics, and concurrency and distribution. The methods are directly applicable to language implementation, to the development of logics for reasoning about programs, and to the formal verification language properties such as type safety.
Compiling With Continuations, 2007, Andrew W. Appel
 Readership: researchers
 This book shows how continuationpassing style is used as an intermediate representation to perform optimizations and program transformations. Continuations can be used to compile most programming languages. The method is illustrated in a compiler for the programming language Standard ML. Prior knowledge of ML, however, is not necessary, as the author carefully explains each concept as it arises. This is the first book to show how concepts from the theory of programming languages can be applied to the production of practical optimizing compilers for modern languages like ML. All the details of compiling are covered, including the interface to a runtime system and garbage collector.
Compilers
Theory of compiler design, based on Automata theory.
See: Automata theory
Language Implementation Patterns: Create Your Own DomainSpecific and General Programming Languages (LIP), 1st Edition, 2010, Terence Parr
 Readership: beginners, advanced graudates
 Learn to build configuration file readers, data readers, modeldriven code generators, sourcetosource translators, source analyzers, and interpreters. You don’t need a background in computer science–ANTLR creator Terence Parr demystifies language implementation by breaking it down into the most common design patterns. Pattern by pattern, you’ll learn the key skills you need to implement your own computer languages. Language Design Patterns identifies and condenses the most common design patterns, providing sample implementations of each.The pattern implementations use Java, but the patterns themselves are completely general. Some of the implementations use the wellknown ANTLR parser generator, so readers will find this book an excellent source of ANTLR examples as well. But this book will benefit anyone interested in implementing languages, regardless of their tool of choice. Other language implementation books focus on compilers, which you rarely need in your daily life. Instead, Language Design Patterns shows you patterns you can use for all kinds of language applications.
Modern Compiler Implementation in Java (Tiger Book), 2nd Edition, 2002, Andrew W. Appel, Jens Palsberg
 Readership: undergraduates
 This textbook describes all phases of a compiler: lexical analysis, parsing, abstract syntax, semantic actions, intermediate representations, instruction selection via tree matching, dataflow analysis, graphcoloring register allocation, and runtime systems. It includes thorough coverage of current techniques in code generation and register allocation, and the compilation of functional and objectoriented languages. The most accepted and successful techniques are described and illustrated with actual Java^TM® classes. This new edition includes more discussion of Java and objectoriented programming concepts such as visitor patterns plus a new MiniJava programming project. A unique feature is the newly redesigned compiler project in Java for a subset of Java itself. The project includes both frontend and backend phases.
 Structrue:
 Part I is suitable for a onesemester first course in compiler design.
 Part II which includes the compilation of objectoriented and functional languages, garbage collection, loop optimization, SSA form, instruction scheduling, and optimization for cachememory hierarchies, can be used for a secondsemester or graduate course.
Compilers, Principles, Techniques, and Tools (Dragon Book), 2nd Edition, 2006, Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
 Readership: beginners, advanced graudates, researchers
 Compilers: Principles, Techniques and Tools, known to professors, students, and developers worldwide as the “Dragon Book,” is available in a new edition. Every chapter has been completely revised to reflect developments in software engineering, programming languages, and computer architecture that have occurred since 1986, when the last edition published. The authors, recognizing that few readers will ever go on to construct a compiler, retain their focus on the broader set of problems faced in software design and software development.
Advanced Compiler Design and Implementation (Whale Book), 1st Edition, 1997， Steven Muchnick
 Readership: graduates, researchers
 This comprehensive, uptodate work examines advanced issues in the design and implementation of compilers for modern processors. Written for researchers and graduate students, the book guides readers in designing and implementing efficient structures for highly optimizing compilers for realworld languages. Covering advanced issues in fundamental areas of compiler design, this book discusses a wide array of possible code optimizations, determining the relative importance of optimizations, and selecting the most effective methods of implementation.
Formal Semantics
Rigorous mathematical study of the meaning of programs.
Formal Semantics of Programming Languages: An Introduction (FSPL), Glynn Winskel
 Readership: beginners, undergraduates
 The Formal Semantics of Programming Languages provides the basic mathematical techniques necessary for those who are beginning a study of the semantics and logics of programming languages. These techniques will allow students to invent, formalize, and justify rules with which to reason about a variety of programming languages. Although the treatment is elementary, several of the topics covered are drawn from recent research, including the vital area of concurency.
 Free PDF Copy: http://59.80.44.98/www.cin.ufpe.br/~if721/intranet/TheFormalSemanticsofProgrammingLanguages.pdf
Foundations for Programming Languages (FFPL), 1996, John.C..Mitchell
 Readership: advanced undergraduates, researchers
 Foundations for Programming Languages uses a series of typed lambda calculi to study the axiomatic, operational, and denotational semantics of sequential programming languages. Later chapters are devoted to progressively more sophisticated type systems. Compared to other texts on the subject, Foundations for Programming Languages is distinguished primarily by its inclusion of material on universal algebra and algebraic data types, imperative languages and FloydHoare logic, and advanced chapters on polymorphism and modules, subtyping and objectoriented concepts, and type inference. The book is mathematically oriented but includes discussion, motivation, and examples that make the material accessible to students specializing in software systems, theoretical computer science, or mathematical logic. Foundations for Programming Languages is suitable as a reference for researchers concerned with programming languages, software validation or verification, and programming, including those working with software modules or objectoriented programming.
Concrete Semantics: With Isabelle/HOL, 2014th Edition, Tobias Nipkow, Gerwin Klein
 Readership: undergraduates
 The book teaches the reader the art of precise logical reasoning and the practical use of a proof assistant as a surgical tool for formal proofs about computer science artifacts. In this sense it represents a formal approach to computer science, not just semantics. The Isabelle formalisation, including the proofs and accompanying slides, are freely available online, and the book is suitable for graduate students, advanced undergraduate students, and researchers in theoretical computer science and logic.
 Stucture:
 Part I of this book is a practical introduction to working with the Isabelle proof assistant. It teaches you how to write functional programs and inductive definitions and how to prove properties about them in Isabelle’s structured proof language.
 Part II is an introduction to the semantics of imperative languages with an emphasis on applications like compilers and program analysers. The distinguishing feature is that all the mathematics has been formalised in Isabelle and much of it is executable.
 Free PDF Copy: http://www.concretesemantics.org/concretesemantics.pdf
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
 Readership: beginners, software engineers
 Introduction to Software Engineering, Second Edition equips students with the fundamentals to prepare them for satisfying careers as software engineers regardless of future changes in the field, even if the changes are unpredictable or disruptive in nature.
Software Requirements, 3rd Edition, 2013, Karl Wiegers and Joy Beatty
 Readership: beginners, software engineers
 A classic guide to software requirements engineering
A Philosophy of Software Design, 2018, John Ousterhout
 Readership: beginners, software engineers and practitioners
 This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first introduces the fundamental problem in software design, which is managing complexity. It then discusses philosophical issues about how to approach the software design process, and it presents a collection of design principles to apply during software design. The book also introduces a set of red flags that identify design problems. You can apply the ideas in this book to minimize the complexity of large software systems, so that you can write software more quickly and cheaply.
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
 Readership: advanced undergraduates and graduates
 This book is about an approach to bringing software engineering up to speed with more traditional engineering disciplines, providing a mathematical foundation for rigorous analysis of realistic computer systems. As civil engineers apply their mathematical canon to reach high certainty that bridges will not fall down, the software engineer should apply a different canon to argue that programs behave properly. As other engineering disciplines have their computeraideddesign tools, computer science has proof assistants, IDEs for logical arguments.
 Free PDF Copy and Resources: http://adam.chlipala.net/frap/
 Courses: https://frap.csail.mit.edu/main
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
 Readership: undergraduates new to program analysis
 Program analysis utilizes static techniques for computing reliable information about the dynamic behavior of programs. Applications include compilers (for code improvement), software validation (for detecting errors) and transformations between data representation (for solving problems such as Y2K). This book is unique in providing an overview of the four major approaches to program analysis: data flow analysis, constraintbased analysis, abstract interpretation, and type and effect systems. The presentation illustrates the extensive similarities between the approaches, helping readers to choose the best one to utilize.
Data Flow Analysis: Theory and Practice, 1st Edition, 2009, Uday Khedker, Amitabha Sanyal, Bageshri Sathe
 Readership: researchers
 This book offers comprehensive coverage of both classical and contemporary data flow analysis. It prepares foundations useful for both researchers and students in the field by standardizing and unifying various existing research, concepts, and notations. It also presents mathematical foundations of data flow analysis and includes study of data flow analysis implantation through use of the GNU Compiler Collection (GCC). Divided into three parts, this unique text combines discussions of inter and intraprocedural analysis and then describes implementation of a generic data flow analyzer (gdfa) for bit vector frameworks in GCC.
Principle of Model Checking, 2008,Christel Baier, JoostPieter Katoen
 Readership: undergraduates
 This book is a comprehensive introduction to the foundations of model checking, a fully automated technique for finding flaws in hardware and software with extensive examples and both practical and theoretical exercises. The book begins with the basic principles for modeling concurrent and communicating systems, introduces different classes of properties (including safety and liveness), presents the notion of fairness, and provides automatabased algorithms for these properties. It introduces the temporal logics LTL and CTL, compares them, and covers algorithms for verifying these logics, discussing realtime systems as well as systems subject to random phenomena. Separate chapters treat such efficiencyimproving techniques as abstraction and symbolic manipulation. The book includes an extensive set of examples (most of which run through several chapters) and a complete set of basic results accompanied by detailed proofs.
Programming Language Tutorial
Python
 Python Crash Course: A HandsOn, ProjectBased Introduction to Programming, Eric Matthes
Java
 Core Java, 9th Edition, Cay S. Horstmann, Gary Cornell
Javascript
 JavaScript Programmer’s Reference, Alexei White
Go
 The Go Programming Language, Alan A. A. Donovan, Brian W. Kernighan
C/C++
 The C Programming Language, Brian W. Kernighan
R
 R for Data Science, Hadley Wickham
Matlab
 MATLAB Primer, Timothy A. Davis
Scala
 Programming in Scala: A comprehensive StepbyStep Scala Programming Guide, Martin Odersky, Lex Spoon, Bill Venners
Kotlin
 Fundamental Kotlin, Miloš Vasić
Rust
 Rust Essentials, Ivo Balbaert
Haskell
 Real World Haskell, Bryan O’Sullivan, John Goerzen, Don Stewart
Idris

Programming in IDRIS, A Tutorial, The IDRIS Community

Typedriven Development with Idris, Edwin Brady
Elixir
 Programming Elixir 1.3, Dave Thomas
ML
 ML for the Working Programmer, Lawrence C. Paulson
Scheme
 How to Design Programs, 2nd Edition, Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
Common Lisp
 Practical Common Lisp, Peter Seibel
 Let Over Lambda, Doug Hoyte, 2008  Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: Common Lisp. Only the top percentile of programmers use lisp and if you can understand this book you are in the top percentile of lisp programmers. If you are looking for a dry coding manual that rehashes commonsense techniques in whatever langue du jour, this book is not for you. This book is about pushing the boundaries of what we know about programming. While this book teaches useful skills that can help solve your programming problems today and now, it has also been designed to be entertaining and inspiring. If you have ever wondered what lisp or even programming itself is really about, this is the book you have been looking for.
Coq
 Software Foundations, Benjamin C. Pierce
 Certified Programming with Dependent Types (CPDT), 2013, Adam Chlipala
Agda
 Verified Functional Programming in Agda, Aaron
一些值得关注的顶会期刊
待更新～在调查收集呢～