Theoretical Computer Science provides students with an overview of the theoretical underpinnings of computer science, as well as the skills necessary to pursue further research on their own. This course focuses on how abstractions of real-world situations lead to algorithms and mathematical proofs of correctness and efficiency. Students gain a nuanced understanding of the questions “What is a computer, and what can it do?” through the study of theoretical models of computing. Readings provide insight into the image of computer science in broader contexts, including current events articles, science fiction, and research publications.