One of the nicest things this site illustrates is how to build learning-supportive feedback directly into the doing of the task itself. It's long been shown that context-switching is a mentally inefficient and disorienting task. This UI layout, with the tutorial content right next to (or in some cases, inside) the code environment itself, prevents you from needing to context-switch at all; compare this to a textbook, where you have to rapidly transition between reading about programming and actually doing programming. Lecture is even worse; not only do you have to context-switch constantly, you have no control over when you context-switch and what content is presented to you at what pace (when the teacher talks about a topic, they talk about that topic right then, regardless of whether or not it's what you need to hear).
I've dropped the makers of codecademy a line to see if we can learn more about what they're using for a backend. I'm curious what sort of tools are out there to support good pedagogical techniques, and how flexible/extensible they are for other applications. It doesn't look like it's open source right now, but we'll find out, I hope.