Teaching People to Code
Recently I've been experimenting with ways of teaching people to code which match the way I and other succesful developers I know have learnt. These focus less on theory and syntax and more on problem solving and "hacking things together". Now I'm looking for five people who want to learn to make stuff with Ruby to teach.
After my previous startup, shop of me, was relegated to side project status last October, I've been spending a lot of time wondering what to do next.
One of my projects since then has been writing a book called "Reliably Deploying Rails Applications". As well as turning out to be somewhat more popular than I expected, it's suprised me how much fun I've had chatting to people who were learning from it and helping to point them in the right direction when problems have occurred.
Helping people learn technical stuff is really good fun. With this in mind, the lovely bec_pr agreed to be my guinea pig for learning Ruby using a somewhat unconventional method and syllabus we've devised together.
The thing is, learning to code is generally dull. Making things with code is awesome but learning syntax on its own is about as much fun as memorising French verb conjugations - and in my view an equally terribly way of getting started.
I 'built' websites before understanding HTML, database driven applications before knowing SQL and games before knowing what a loop was. By built I mean hacked together from things other people had made; I learnt just the bits I needed in order to make the stuff I wanted. As I discovered how awesome it was to actually make things, I learnt more and more of the theory simply because it was useful for building better things, not because that's what you're "meant to do".
My learning cycle was:
- this doesn't work / do what I want it to do
- why not? lots of googling / asking people
- learn a little bit of new theory to solve the problem
A lot of the best developers I've worked with learnt to code in this way, by hacking stuff together and picking up the theory as they went along. It also seems like quite an effective teaching method, you get the repeated little jolts of satisfaction from working out small problems and the ongoing feeling that you're actually making a thing.
But for this to work as a teaching method, there's a key ingredient which is often missing. It's an essential part of the learning process to spend time Googling and researching the problems you run into and fixing them yourself - this is what most developers spend most of their time doing. But, particularly when you're getting started, sometimes it feels there are problems you can't quite work out on your own. Anecdotally, this seems to be where a lot of people give up.
This bit I can help with; when people get stuck, I can point them in the right direction. I think there might be a business there but that's a little way away, so here's what I'm proposing;
I'm looking to start off with 5 people who want to learn to make real stuff with Ruby. There will be ten small exercises, each one of which is based around building a small program which does something.
In the first three exercises you'll learn to make:
- a simple tool to search and download data from Twitter
- a script which takes data and turns it into a csv file that Excel can open
- a small web application
We'll chat as a group about the other seven exercises to make sure we're working on the best selection of projects to help you build the things you're interested in.
Each exercise is based around intentionally broken sample code, delivered in steps. For each step, the challenge is to work out why it's not working and to fix it. I'll be available on instant messenger and, if required, Skype to give hints if anyone gets stuck or to explain things in more depth. Participants are welcome to work through at whatever pace works for them. I won't look over your shoulder but I'll be available if help is needed.
I'll provide a complete cloud based development environment so you don't have to worry about setting up your own. You just need access to a modern web browser (Chrome, Safari or Firefox). At the end I'll provide assistance getting setup with a local environment if needed.
The cost will be $50 per person and if, at any point during or after the course, you feel you're not getting value for money, I'll refund it without question. My normal consultancy rate is about $120/hour and I'm expecting to provide several hours of support to each participant, so hopefully no-one will feel short changed!
But why? you may ask. I know lots of people who've tried and given up on coding and I think that with this method, they might have stuck at it and enjoyed it - I want to see if it works. I think there may be a business here if so, and $50 would be a realistic price point. Eventually, with materials designed based on our experience of how lots of people use them, I think the amount of support required would be much lower, so that price point would be profitable. In the mean time I'm happy to make a loss on it to learn how best to do it.
And who am I? I'm Ben, a Ruby and Rails developer and author of a book about how to deploy succesful web applications written in Ruby. I'm also the tech lead of a London-based startup that makes apps and tools for the fitness industry, which between them get about a million hits per day.
If you're interested, please drop me an email at firstname.lastname@example.org with a brief note about why you want to learn to code and what interests you about this idea.
Update: The response to this post was incredible (thanks to everyone who got in touch!) so I decided to pursue this further. If you're interested in the course, you can apply at http://www.makeitwithcode.com, we've got at least one new group starting every week and early feedback has been really good!