For many computer science students, skills are taught from a physical perspective. Though there is much to be gained from this practice, it is still necessary to consider computing from a theoretical perspective. This course will cover key principles in both language and computational theory. More specifically we will be exploring computational theory in parts, automata theory and languages, computability theory, and complexity theory. At the conclusion of this course, students will be more capable of "thinking" like a computer. They will be able to apply the content from this course in a way that will better allow them to formulate solutions to real-world problems in their professional careers. Prerequisites: Grade of C or better in Computer Science 110 and Mathematics 166 or WPI. 08/23/2021-12/13/2021 Lecture Monday, Wednesday, Friday 12:00PM - 12:50PM, Room to be Announced