Project Structure for Advanced Beginners

I've recently volunteered to help out Code Scouts, a non-profit organization tasked with helping people learn programming and increase diversity in the field. One of the other mentors, Peter Banka, had a very interesting take on project-based work.

Programming projects as an MMORPG

Peter's idea was simple. Instead of requiring everyone to know everything, let them specialize. The way he explained it was in terms of looking for a quest group in an MMORPG. It takes a fighter and a wizard and a few more to complete quests. That doesn't mean one person needs to know all things (at first, especially). The smaller the surface area of things people need to learn before they're meaningfully contributing, the more engaged people are. I'd suspect this positively correlates to fewer people churning out of the program or generally being frustrated.

So the solution is to find some people who are interested in HTML/CSS and pair them with someone who is interested in learning Python and Django. Maybe throw in someone who is interested in learning SQL and you have a pretty fully fledged group.

What I like about this approach

The best part of this approach is it lowers the barrier to getting into a project-based workflow. A lot of beginners get what I think of as "tutorial fatigue". It makes total sense when someone explains it to you in a particular context, but you don't know how to apply that to real problems. By getting people into a project-based workflow, you give them an opportunity to think for themselves.

Another thing I love about this is that project work is, in my opinion, the most interesting and rewarding work. I can't remember how many times, especially early into my learning, that I stayed up much later than I should because I was excited about some piece of code. The key aspect of this is deep engagement. I was excited about the problem as well as the solution. This is hugely motivating and it only takes a few of these experiences before I think people see the appeal of programming: the relief, excitement and ego boost of solving hard problems with your brain.

Lastly, I think this teaches the importance of the social aspect of coding. Bringing in the dynamics of working with others is really interesting to me. If you don't do your part of the project, the website won't work. This can also be a big motivating factor for people who are extrinsically motivated.

Problems with this approach

One of the potential pitfalls with this approach is that the people we're currently working with are likely not advanced enough to know when they're going off the rails. As their project mates are also inexperienced, they may not see it either. To mitigate this, I believe someone at the mentor level will be helping out in a "project manager" capacity. The goal here is to check in with everyone, chunk out work into manageable sections and generally make sure everyone is on a path to learning the things they've set out to learn.

Overall, I'm very excited to see how this plays out. I have high hopes that people will be more engaged and will learn a great deal.