Here's another concept from language learning pedagogy (see also Extensive vs. Intensive Learning): the difference between active vs. passive learning, or production vs. recognition. You learn faster and retain knowledge much better when you practice it actively, rather than passively. Okay, sounds kind of obvious, right? But A) the effect is probably more extreme than you think, and B) just about everyone teaching, making educational software, or even trying to communicate ideas in a meeting gets it wrong all the time, so we clearly only passively know that active learning is better. ;)
I'm interested in talking about a focused definition of active and passive learning that goes beyond "doing math problems is better than listening to a lecture on math", about the exact details in which you practice a skill. In language learning, we call it production vs. recognition: actually saying or writing a word vs. just hearing or reading it. We learned the hard way at Skritter that seeing a new Chinese character, even if it's relatively simple and you see it all the time and you know how to write other characters, does not do you any good in terms of knowing how to write that character. You only have a recognition knowledge of it. A hilarious example came from a guy who was pretty good at Chinese who could speak okay and could read over 1600 characters, but never learned to write. He checked out Skritter, tried to write the character 你 (nǐ, which means "you")–something that he's heard, said, and read tens of thousands of times, and he realize he had no idea how to write it!
By that point, we weren't surprised at all, because we had tried many variations of the "let's show you the character first if you have never seen it before", but they never worked–the only thing that worked for people learning new characters was to try to write the character. So in essence, having a flashcard with the character on it was virtually useless. You could see the prompt ("nǐ: you"), flip over the flashcard, and rate whether you "knew" the 你 that you saw, but unless you mentally or physically drew it out, you would never actually learn the character, even in hundreds of tries. Basically, we built the entire Skritter business of the ramifications off the fact that it was very hard for people to make flashcards for Chinese that would let them do active learning.
One non-language-learning example I've heard is a good one: you would know a $5 bill if you saw it, right? Even if it you didn't see the number 5 on it? Not too hard, given the number of times you've seen a $5 bill in your life. But now tell me, what are some of the things on a $5 bill? ... I just tried this and not only did I get the dude wrong, but I couldn't remember any of the other stuff on it. Try for yourself, and then check your result. Recognition and production are almost totally separate skills! And recognition (passive learning) is a horribly inefficient way to learn anything, 'cause you won't remember it.
So of course with CodeCombat, we try to avoid time spent on passive learning / recognition activities and instead have the player focus on producing / actively learning. They're spending almost all their time coding! That's a big part of why players learn a lot faster than with other resources that would rely on a video / lesson / explanatory text talking about how to use code before the player actually gets to try to use code. And don't get me wrong: that stuff has its place, too, just like intensive learning has its place–but it should definitely be a minority of time spent, a distant second to the active learning practice.