How to teach a person to enjoy programming? I've been teaching programming to my 13-year old son for over a year now. I'm not satisfied with his progress. I think that one of the reasons is his attitude: He wants to learn programming (he said several times that he wants to do something related to programming, technology, and/or game development), he makes some progress (he decomposes the task into smaller ones, he tries things out), but he regards it as work.

One of the secrets to productivity in IT is that many programmers enjoy the process. It's not work and it's not a chore. Sometimes, I turn on good music, take a bottle of liquid happiness, then program for several hours for the fun of it. I'm not accomplishing a task, I'm enjoying the process. Under the right circumstances, you can get into flow from such "work".

What can I do in order for another person to experience the feeling that programming is an activity you can do for fun and recreation?
Meet him where he lives. Take something he's already interested in and use programming to accomplish some goal within that interest. The act of coding is not the end goal, the final "product" is the end goal. Make it about that.

For example, you've said your son is interested in game development. Encourage him to create a simple game using a language like Processing or a tool like Game Maker. The keyword here is simplicity- your son will probably want to make Call of Duty or Minecraft. Encourage him to start with Pong instead, and work his way forward from there.

Maybe participate in a "game jam" like Ludum Dare together. The idea is to spend a weekend creating a game around a theme that's announced on Friday, and you can participate from your own home. The next official event isn't for a couple months but they run "mini jams" every other weekend.

It doesn't have to be game development though. The idea is to use programming within his existing interests so he sees the fun and utility of code naturally. If he's into sports then maybe write a sports simulator. If you travel then maybe have him create a travel log from Google Maps API. If he's into music, create a music visualization. If he's into movies, point him to video processing libraries.

But again, the projects you give him should be simple, so he can make visible progress on them in a short amount of time.

You might also consider being an example: what cool projects are you working on that you can show him? Can you give him a simplified version of something and have him "remix" it by changing variables and logic instead of needing to come up with everything himself?

Related questions:


How can I determine if a student would enjoy or has an aptitude for CS?
Which non-programming skills help make a good programmer?