MIT 6.S095: Programming for the Puzzled
ocw.mit.edu