Peter Norvig is really an impressive teacher.
I have been doing his course "Design of computer programs" (https://www.udacity.com/course/cs212) and it really push me from basic/novice developer to intermediary.
He succeed to explain you things in a natural way. He seems to always start by the basic assumption. Working and thinking around any problems/surprises he/you encounter. So, you have the impression to discover things more than learning them.