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.
Assignment 4 solutions available in OWL.
Assignment 4 available. Assignment 3 solutions available in OWL.
There will be no class on Wednesday March 13th. By majority class vote we have agreed on the following. The next upcoming lecture on Monday the 11th will be held in the tutorial room (FNB-1250) room from 9:30-11:30am. The tutorial will be held during Wednesdays lecture 8:30am-10:30am.
Assignment 3 is available. Midterms will be returned during the tutorial sessions beginning this Monday March 4th. Midterm solutions will be available in OWL the morning of the coming tutorial.
Assignments 1 and 2 solutions are available in OWL under the RESOURCES tab.
Correction to Assignment 1. The updated PDF now says to solve Q5 in less than THREE DOZEN states.
Assignment 1 is available on the ASSIGNMENTS and EVALUATION page.
Winter 2019 website is available.