Ron Rivest
Professor of Electrical Engineering and Computer Science at MIT. Ph.D. Stanford.

Note: the following books are not recommended by Professor Rivest. They are books that have been used as reference texts in one/some courses he has taught.

Nancy Lynch
NEC Professor of Software Science and Engineering, and Professor of Electrical Engineering and Computer Science at Massachusetts Institute of Technology. Ph.D. - MIT.

Note: the following books are not recommended by Professor Lynch. They are books that have been used as reference texts in one/some courses she has taught.

Michael Jordan
Pehong Chen Distinguished Professor at the Department of EECS and Department of Statistics, University of California, Berkeley. Ph.D. University of California, San Diego.

Note: the following books are not recommended by Professor Jordan. They are books that have been used as reference texts in one/some courses he has taught.

Alfred Aho
Lawrence Gussman Professor Emeritus of Computer Science at Columbia University. Ph.D. Princeton.

Note: the following books are not recommended by Professor Aho. They are books that have been used as reference texts in one/some courses he has taught.

Computing is the process of using computers to perform a wide variety of tasks, such as data processing, data analysis, and information management. In computer science, the field of computing encompasses a wide range of sub-disciplines, including algorithms, programming languages, software engineering, and human-computer interaction.

The theory of computation is a branch of theoretical computer science that deals with the study of algorithms and their computational complexity. This field is concerned with understanding the limits of what can be computed and how to design efficient algorithms that can solve problems within these limits.

One of the key concepts in the theory of computation is the concept of an algorithm. An algorithm is a set of instructions that can be followed to solve a particular problem. Algorithms can be designed to run on a variety of different types of computers, from simple calculators to complex supercomputers.

Another important concept in the theory of computation is the concept of computational complexity. This refers to the amount of resources (such as time and memory) that an algorithm requires to solve a problem. The goal of the theory of computation is to understand the limits of what can be computed and how to design efficient algorithms that can solve problems within these limits.

One of the most important contributions of the theory of computation is the classification of problems into complexity classes. These classes are based on the amount of resources that an algorithm requires to solve a problem. Some of the most well-known complexity classes include P (polynomial-time), NP (nondeterministic polynomial-time), and NP-complete (nondeterministic polynomial-time complete).

In addition to studying algorithms and computational complexity, the theory of computation also deals with other areas such as automata theory, formal languages, and complexity theory. Automata theory is the study of abstract machines, which are mathematical models of computation. Formal languages are sets of strings that can be used to represent information, such as programming languages. Complexity theory is the study of the complexity of problems and the power of different types of algorithms.

Overall, the field of computing and the theory of computation play a crucial role in the development of computer science. They provide the foundation for understanding the limits of what can be computed, and for designing efficient algorithms to solve problems within these limits. They also provide the theoretical foundation for many practical applications, such as data processing, data analysis, and information management.