When you’re a programmer and a father, one of the most exciting things you can hear from your kids is “Dad - can you teach me to program?”
How could you turn that request down?
But how do you do it? Or more importantly, how do you do it in a way that gets them excited from the start and keeps then engaged enough to explore the path beyond the initial 15 minutes?
In my case, I’m trying the ‘games’ approach. Partially because my son is a massive game addict and partially because I just think it’s a fun and engaging way to get into programming (almost every old-school, awesome, programmer I know actually started because they wanted to build a game).
Of course I’ve got a few projects in my massive personal code base that are/were games…so we also have the advantage of not needing to start from scratch.
The project we picked was a simple, turn-based, fighting game (loosely based on my old HeroBrawl project).
The first challenge was that my pre-existing code was in PHP and I thought Python would be a better starting point for learning (plus my PHP code was a huge spaghetti mess – def. not something you want to show a newbie).
So I had to pull it out, dust it off, and port it all over to Python before we could really get started…and of course this gave me the opportunity to also clean up and abstract a lot of the game engine details. This will make it both easier to teach with, and easier to mold/evolve along with the kid’s ideas over time.
Once I had the core of the engine/system ported into our new environment, it was time to sit down with the kids and start fleshing out the real details…the game itself.
We decided to start with the 'combat’ mode and character development features. So we’ve got basic brawling together as well as basic character training together.
We’ve also implemented the initial set of 'items’ that a character can use.
So far in all of this work, the kids have especially taken to the gameplay design/theory (more so than the programming features)…and have been enjoying much of the math behind determining the results of an action (combat, training, or item use).
They’ve also been enjoying alpha testing the system with many many 'test brawls’ and have of course *really* enjoyed the fact that they have 'admin’ control and can gift themselves credits, powers, and other things that a 'reg. user’ would otherwise have to earn or buy (though we don’t actually have any 'reg. users’ yet).
All-in-all it’s been a really fun side project in my house (though I don’t know that my wife would completely agree – since my kids would much rather work on the game than do their homework or studying)…and while the bulk of the actual programming has fallen on me so far, I think it is wetting their appetite for learning more about it over time.
…and if nothing else, it’s developing my oldest son’s project management skills (he gets that from his mother)…because every morning when he wakes up, the first thing he does is check in with me on what features I was able to finish out and release from the list over the night (and then he promptly gives me about 10 more things we have to build next).
Oh yeah - and though it’s not ready for 'prime time’ yet, it is somewhat playable and you can check out what we’ve built so far at http://brawl.ws
This post has received 41 loves.
Kevin has a day job as CTO of Veritonic and is spending nights & weekends hacking on Share Game Tape. You can also check out some of his open source code on GitHub or connect with him on Twitter @falicon or via email at kevin at falicon.com.
If you have comments, thoughts, or want to respond to something you see here I would encourage you to respond via a post on your own blog (and then let me know about the link via one of the routes mentioned above).