# Overview

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.

# Announcements

**IMPORTANT!**The midterm room has changed to

__UCC-37__. This is the weekly tutorial room. The date and time remain as Wed. 28th 9:00-10:00am.

**8:30am-10:30am**in UCC-37. There was a typo on the course info page that incorrectly stated the tutorial began at 2:30pm. This has been corrected.