Theory and algorithms form the mathematical core of computer science. While most areas in computer science study specific concrete systems, the goal of theory and algorithms is to abstract away these details in order to study the question: What sort of computations are possible to do, and possible to do efficiently, by any computer? In this way, discovering a faster algorithm for a problem, or discovering that there is no fast algorithm, is a statement about all computers and all computer programs. By understanding theory and algorithms, computer scientists are able to understand the fundamental abilities and limitations of the computational tools they work with, no matter the tools.