Levels in the Game of Programming

Sometimes a video game will show you this part of a level where you need to get to. Unfortunately it's out of reach. How do you get there? Well you go on a detour and receive an item. This item gives you the ability to get to the place where you need to go.

About a year ago I ran into this issue with a Python project that attempted to import QuoteBacks quotations into Arena. Most of the quotations are formatted in as nested dictionaries, and iterating through nested dictionaries wasn't in my toolset at the time — I simply got stuck and skipped. Only after encountering nested dictionaries recently in a work scenario did I learn how to deal with them. It's like gaining that item in the video game, remembering where that item would help get me to where I needed to go — with the QuoteBacks/Arena project. We'll see what happens.

Makes you wonder about progression as being able to go to “places” that you couldn't before. Guillermo Rauch has this great post on “Code Golf” and other interactive coding challenges that took learning programming as this means of progression. Rauch explains,

The idea was simple: you start with a simple hacking challenge at Level 1, and your goal is to hack the made-up system you are given to progress onto the subsequent levels. There was a forum associated with it, where you could meet others and get hints. The level you were in was your flair, and there was a public leaderboard of everyone who was playing.

[...]

This experience was unlike any code tutorial or book I was consuming at the time. It was thrilling, competitive, frustrating, exhilarating. It went from easy (viewing the HTML source) to harder (disassembling binaries and writing key generators).

It taught me skills that are essential to problem solving, rather than coding itself, like reverse engineering a system and unusually effective debugging with very little information. And it did so very quickly.

By now, these tournaments have long been wiped from the internet, and if you google you'll find some that have carried on the torch. I would recommend beginners to play with them, and content creators to experiment with this model for new educational materials.

These kind of games were where I cut my teeth on learning basic shell skills like maneuvering through directories and using grep. The “wargames” on OverTheWire were especially transformative. There's something to the progression of those games that made it feel like you were genuinely learning about the shell in the way that Rauch talks about with the games he played — “thrilling, competitive, frustrating, exhilarating.” I even remember my first exposure to the AWS CLI being through Scott Piper's,flAWS, a game that taught you common security vulnerabilities in AWS through progressing levels.

Perhaps there's something to this kind of format that could be more widely adopted. Massively Multiplayer Online Programming Games?