There was a 2 year period where I gave free classes on programming every week, once a week, with sessions about 4-5 hours long. Over that time, we all learned a lot- my students how to program, and myself about teaching.
In particular, I learned to have:
I recently started teaching again. However, this time, it's 1 on 1.
And I've hit across something that is working really well. I call it "Teaching by Pair Programming."
It works like this:
This has actually turned out to work really well for both of us:
Pair programming is focused programming. Keeping the focus seems to be the most "difficult" part of programming. But it comes effortlessly when you're pair programming.
What strikes me about this, is that it's comparable to the way I learned to program.
When I was 7, there was a magazine called Family Computing. At the back of the magazine, there were programs with games that you could type in.
I just wanted to play games. So I just typed in the programs.
But you type in enough programs, and you start to notice things. You start to diddle with things here and there, and you start to experiment. You make a few programs from scratch, and you start copying techniques that you found in other programs.
The next thing you know, you're programming yourself, reference manuals start to look like gold mines, and things are making sense.
So, I think that "Teaching by Pair Programming" is sort of a more lively version of this. When I was the student, my pair programmer was way far away, who knows where Joey was. (Oh, wow. Just typing in "Joey Family Computing" into google, I found him. I remembered his name from a long time ago, because the coolest programs were always Joey's. Well, turns out he was in SoCal. The Internet knows, that's who.)
I taught myself how to type. I taught myself a little about BASIC and DOS. There's no way to get in the way of your teacher when he's on the other side of a magazine article. And the programs were designed to be relatively short and workable- few pages long, generally.
And learning to program that way is very similar to the learning by pair programming, it seems.
So, I guess it looks like it works.
Things we would like:
We should be able to teach each other, and make meaningful programs, at the same time.
I've decided to get a new laptop. One of the reasons is so I can go to the local Linux meetings and try to talk someone into pair programming with me for a few minutes, right then and there. (Talking someone to come to my house, or letting me go to their house, seems more difficult … and I don't even want to think about trying to explain strangers fiddling around with the computers at work). I'm tempted to get a Mac, just because of SubEthaEdit and what programmers I respect wrote about Wiki:MacOsx .
I plan to install Skype soon. Maybe long-distance pair programming, enabled by Skype and VNC, will give me most of the (hypothetical) benefits of SoftwareBazaar without any of the up-front costs. Color me excited.
Summarized & cleaned out old conversation.
I think it'd be best to join communities that already are working on some software, catch an experienced member in a slack or writer's block moment, and ask them to apprentice you.
The idea is to work towards a real and shared end, rather than just your own personal skills.
Working the other way:
If you are a community working towards some particular software, consider advertising for apprentices: People who are not skilled, but excited about the prospect of helping out.
If you wanted to learn German, say, it may be best to:
If you want to learn to program, find a group of people programming the types of things you are interested in programming. Do the exact same thing.
It should be noted: It is frequently the case where, for whatever reason, a project cannot take on an apprentice. The fault isn't with the apprentice, it's just that more skill is needed before the project can usefully take on the apprentice. The thing to do is to find a smaller project, something that doesn't require as much skill.