Design of Computer Programs CS212 Udacity by Peter Norvig