Extensive vs. Intensive Learning
In language learning, there's a slightly obscure but useful concept of "extensive reading" vs. "intensive reading". See this article for more discussion. Basically, if you are reading easy stuff quickly with very few unknown words, you are reading extensively. If you are reading difficult stuff slowly and having to either skip or look up many words, you are reading intensively.
Almost all learning materials tend towards intensive reading, whereas extensive reading is more effective and fun. It's very difficult to get large amounts of foreign language text using words the learner knows that just happen to have very few unknown words, especially in the beginning when the learner doesn't know many words. Thus the textbook. Ain't no one like the textbook. Eventually you can read a translation of Harry Potter, but most students don't get there. Especially in languages like Chinese, where reading is extremely difficult and slow and one can't rely much on cognates for unfamiliar words, learners really only get intensive reading, and their reading speeds stay very slow forever (if they don't give up entirely in frustration).
We can broaden this concept of "extensive reading" beyond reading into "extensive learning". For math, it would be very quickly doing a lot of problems, almost all of which are trivial, like one might do in a brain training game. (In school, math assignments tend to be focusing only on new techniques which are difficult, with problems that take a while to learn and do, and not many review problems.) For history, it would be reading stories about events you already know well, so that the new details are few and easily hung on the tree of your existing history knowledge. (Traditionally, "studying history" is usually about trying to absorb a ton of facts about an entirely new historical scenario, and it's hard to remember afterwards.) So on, so forth–the pattern is that properly paced extensive learning is actually kind of fun, but schools typically have to rely on intensive learning, to the detriment of retention and engagement.
What does extensive learning look like for programming? Writing lots of code you know well many times, with only a few new things here and there, not slowing you down much. CodeCombat was designed to do this as much as possible. I think we have a ways to go before it really feels extensive without being boring for all students, but we are doing a lot better than other learning methods. One key is to keep the players writing familiar code, so the pacing isn't difficult, but to keep it from being boring using gameplay. The other is to never stop long to make learners do something other than coding (like reading too many instructions or watching a long lesson).
If we think of learning programming like learning a foreign language, it's clear that you want to have a lot of extensive conversations with the computer. I think many programmers take a long time to become fluent, and a big reason for that is that they're almost always in intensive mode–writing some code that's difficult and halting, spending more time reading documentation and debugging than actually expressing themselves. CodeCombat is my attempt to save them. Our goal is that our players will be native speakers of code.