Since I know the codecademy team is always listening, I'll share my feedback through supporting my two friends through codecademy:<p>Firstly they love it. The game mechanics and the reward cycle is a great motivation for them. I think nobody can argue that you've found a great way to get TONS of people to enjoy "learning to program".<p>The second part is a bit tricky... are they really learning to program?<p>IMO the problem with all pragmatic approach is the lack of <i>the need to understand</i>. I know you didn't intend it, but codecademy suffers from the same tired "tutorial" approach. Users follow instructions to win the prize.<p>I will say codecademy is better than the tutorial approach, but it's still a tutorial.<p>The fundamental problem is my two friends <i>need</i> me to teach them how to think in code, how to conceptualize the problem, how to understand that "i am taking this problem, i am working out a solution in my brain, in english, and then i will write this solution in code" They simply do not have the capacity to do that. And they are 5 months in through codecademy.<p>Just yesterday my friend had the idea that when using a for loop, the loop passed all values at the same time to the nested switch statement, upon which the switch statement would evaluate ALL the variables at the same time, using whatever the hell case was the best match.<p>He couldn't pass the level because he did not visualize in his head that the for loop passes each value, one at time. Then it procedurely flows down, <i>line-by-line</i> into the switch statement... and so on.<p>My friends do not have pictures in their head about how code works, why it works that way, and how to use those pictures to draw their own.<p>They don't know how to code.<p>EDIT: sorry one more thing. The only lifeline they have when they get stuck (aside from asking me) is to look at the QA. I have <i>never once</i> seen an answer that explained the answer, nope, it was "here put this magic code in it and that way it will PASS! YAY!" And I mean answer in the sense of "why", not why does javascript require a return here instead of there, or why the "right" answer is to put this code before that code, or the strange reason you need this bracket here instead of there -- I mean why! why? really...why?