Winter 2023

Theoretical Foundations of Software Engineering


This course is an introduction to the theoretical foundations of software engineering covering topics in automata theory, computability, and computational complexity

As an aspiring software engineer, the goal of this course is to leave you with a deeper understanding of what we really mean when we talk about computers and computing. We'll delve into the essence of what a computer really is, which will then let us examine different kinds of computational problems. Some of these problems are easy to compute, some are hard to compute, and some cannot even be computed at all.

This course is not about circuits, CPUs, or any hardware in particular, nor is it about about any programming language or program in particular. Rather this course is about exploring the fundamental capabilities and limitations of any computer, and in turn, of the very software you will write through your career.


March 19th
Assignment 4 is available in Gradescope. Because its release was delayed, the deadline has been extended by one week. It is now due March 30th.
Feb 16th
Assignment 3 is available in Gradescope. Reminder, no class next week!
Jan 4th
Winter 2023 website is available. First lecture is Monday, Jan. 9th.