http://web.stanford.edu/class/cs20si/syllabus.html