Breaking Free From The Gamification and Learning Loop
I’ve spoken positively in the past about the gamification of cybersecurity training, noting that Hack the Box was particularly adept at dopamine carrot dangling, and had me “coming back every day to win points, levels and badges“.
A couple of months ago I begun learning C#, and as with any new educational endeavor I wanted to find a fun way to encourage daily engagement. This led me to codewars.com, which provides community created coding challenges called Katas, ranging in difficulty from Level 8 coding fundamentals to Level 1 mind-melters.
As is common with these gamification sites, there is encouragement and reward for logging in every day and building up streaks. And while that of course is in the best interests of monetisation, from a learning perspective it also seems to makes sense. It’s encouraging me to code every day after all. Has to be a good thing, right…?
Well, it depends. Because what I found myself doing was prioritising daily Kata completion over actually learning something new, applying a new concept, or trying something truly challenging. I’d often find myself on Codewars at 11.36PM, logging on for 5 minutes to squeeze in an easy Level 8 Kata, so that I could slither off to bed content that I had maintained my streak and “coded” that day.
But did I really learn anything new or particularly substantial? No. Is “something” better than “nothing”. Maybe. Is the above anybody’s fault but my own? Not really, but the design of these sites is complicit in encouraging that kind of behaviour, and without realising this you can really fool yourself into thinking you’re making efficient use of your learning time.
The reason I bring all this up is because this weekend I started my first “proper” non-tutorial C# program. Nothing mind-blowing of course, it’s a very simple console application, a fantasy turn based combat game. Completely and utterly useless, and even doubly for somebody who’s almost been 40 years on this planet, but more fun than building the commonly suggested book catalogue system. And after all, a big push to learn C# for me is the potential to use Unity or Monogame in the future, so may as well start as I mean to continue.
I was originally happy to type “attack” into the window, see some dice rolls, and witness the resulting damage inflicted on the opponent creature. But this expanded rapidly. I’ve added an inventory, for both player and opponent. Assignable weapons with damage modification. Assignable items, including consumables like Health Potions, that can be taken before or after battle. Enemies will use a Health Potion too if they can. It’s been a real baptism of fire in regard to classes, inheritance, and how to split code up across files in a sensible way. Next on the list is to add magic, armour, elemental resistance, randomised monsters, player level, town services like blacksmith and tavern, and finally some randomly generated events in between battles, with some kind of end boss. Despite it being something that would have been already dated back the late 70’s, I’m actually excited to work on it and complete it.
The point being, after months of a Udemy C# “masterclass” course, a considerable chunk of a hefty C# .NET book, and weeks upon weeks of Kata streaks, I feel like I’ve learnt more in the last two evenings coding than across all those mediums combined. Ok, that’s a little bit disingenuous, that’s what learning is after all; you do the theory, then you apply that theory in practice. I would not be capable of writing this simple application were it not for the prior learning. But there comes a point – which I think I often fail to recognise – where you have to take off the bike stabilisers. I think you can fall into a bit of a tutorial/learning infinite loop, which I’ve been very much guilty of, where rather than jumping into a project you’re inclined to seek out the “next level” of tutorial/video series/book. You’re never “ready” to go it alone. Or in the case of gamification, continuing to attempt nuggets of code that really aren’t going to significantly advance your coding knowledge. Great for an occasional challenge, fun to compare how you solved the solution in ten lines of code while somebody else did it in one (that can’t just be me right? Every. Single. Time). But doesn’t compare to getting stuck into a project and learning hands on, as frustrating and difficult as that can be sometimes. It’s not a new learners environment, it’s an environment to pick up new tricks and ideas.
I think this crosses over to other aspects of my professional career. I suffer the same fate with professional certifications. As soon as I finish one I’m frantically researching which one I’ll do next, often with no gap in-between. But the real skill development comes with hands-on application, just like with coding your own project. Unfortunately we’re not always well placed at work to do work relevant to what we’ve just learnt, and that really can be a frustrating roadblock in truly developing your knowledge. But I think it’s important after each certification or course to take a pause, apply those skills in some fashion, such as in a homelab, and really solidify your learning before moving on. As fun as gamified learning is, nothing beats just getting stuck into something challenging, meaty, and real.