Principles of Software Construction taken Spring 2014 at CMU