The Design Of Computer Programs on Udacity by Peter Norvig is pretty awesome. As someone who's only been seriously programming for a year or two , each problem set went like this :
Write the code here to do X :
I write a messy 4 liner after lots of thinking.
Professor Norvig comes along and does it in a simple functional one liner.
Mind blown.
He teaches good functional style program design one epiphany at a time.