I’ve thought lots about the topic of teaching code since I taught myself a few years ago. My thesis, which still stands, is that the best way to teach people who want to make things to write code is not to teach them about the details, but instead to help them make things. Some of the points in this article about how nobody wants to learn to program pretty much nails it:
But for the casually interested or schoolchildren with several activities competing for their attention, programming concepts like variables and loops and data types aren’t interesting in themselves. They don’t want to learn how to program just for the sake of programming. They don’t want to learn about algorithm complexity or implicit casting. They want to make Super Mario or Twitter or Angry Birds.
I’m also particularly fond of this bit on how new coders are plagiarists:
It’s okay if they don’t completely understand how a program works after they’ve played with it a little. Very few ideas are completely original. The more material you give your students to plagiarize, the wider the range of derivative works they’ll make from them.