Eigenpoll : Compare courses : Introduction to Systematic Program Design 

Introduction to Systematic Program Design
Gregor Kiczales

This course is about learning to program well: building programs that are elegant, well tested and easy to maintain. The course is intended for students with no programming experience, but many former students who already knew how to program have said it made them better programmers.