specifically the trouble I have is getting beginners from the "I understand the syntax and can modify examples" stage to the "I can model problems as programs and apply my knowledge of the language to build these programs" stage. the first stage is pretty easy and most tutorials for beginners are oriented toward that kind of literacy... the second is harder to achieve and harder to teach, and it seems like most people only reach that stage with self-directed practice