My kid is 13.

He didn't ask to learn, I suggested it as a possible activity. I stressed that he doesn't have to want to. We'll know whether he's trying to please his old man or not after awhile. So far he's liked the new and foreign concepts.

We did a little bit last summer. Based on that experience I'm changing it up a little, in part by teaching a little more about surrounding concepts like the shell, and what processes are. This video came around at exactly the right time.

I showed him how to set up VirtualBox, create and destroy a VM, take snapshots and why you'd want to, how to install Linux on the box, and the basics of navigating the shell and running programs.

He's learning Python, with Vim and the Python REPL. Last summer I started him on Python 3.0, but this year I've had misgivings about that and he's doing 2.7, because if he does remain interested then any framework or other tool he's likely to use next will be pre-3.0-based.

He's admin on his own VM, because I want him to learn "Dad, how do I do this?" and then do it for himself, rather than "Dad, it says it needs your password again."

Last year we focused on Invent Your Own Computer Games With Python, http://inventwithpython.com/. It's a fine tutorial, and he/we got through as far as the hangman game. This summer I want to take a more broad perspective, so we'll probably work a little more holistically, sometimes focusing on the little things we're doing to get something working. Like, what is this shell that we're using to run things. Whatever book or similar resource we settle in with, I think we'll just dip into it occasionally, rather than it being the focus/curriculum.

Last year, as this, he used Vim, and had no trouble with it at all. I had him go through the first few parts of the Vim tutorial ($ /usr/local/bin/vimtutor), at first sitting next to him until I saw that he understood enough to progress on his own. Just enough to do basic editing. In sessions where we sat together I would notice when he repeated a task inefficiently, and if I saw it enough I would sieze the teachable moment and show him a better way, then get on with whatever we were focusing on. When he has a bit more Vim experience we'll probably have one or two Vim-focused sessions. Same for the shell, and administering his VM.

While the focus is on programming in general and Python more specifically, I'm trying to gradually make him aware of the wider sea that he's swimming in: how to read the python docs, how to learn something about the shell, man pages, focused google searches, what a process is and how to hunt them down and kill them, etc.

It has been surprisingly challenging to teach the idea of variables, types, loops, functions and other basic programming concepts that I take for granted. He's had more algebra in school this past year, and has another year of life behind him, and I think that's made a big difference in his perspective.

Most importantly it's something for us to do together. I think teaching your kid something significant is good for you and your kid. Programming is a useful skill, even if you don't end up being a programmer. But it could just as well be car repair or sewing, it's the experience itself that's the most important.