Can Videogames Teach You Programming?

Hack ‘n’ Slash

Difficulty: Intermediate – Advanced

Maybe, though, you want to prep a little more before plunging into the world of programming. This is where Hack ‘n’ Slash comes into play. At first glance, it seems like a typical Zelda-style action-adventure game, but instead of cutting down enemies you ‘hack’ them, using your sword-cum-USB-stick to reprogram their behaviour. Nearly all objects in the world can be reprogrammed this way, to the point where you can actually cause the game to crash by rewriting its code. This is both to the game’s benefit and its detriment; on the one hand, you have an incredible amount of freedom in approaching every puzzle, but at the same time, it can be terribly intimidating if you don’t understand why your solution simply didn’t work. To be fair, though, that’s pretty much programming in a nutshell.

The main problem with Hack ‘n’ Slash is that it’s effectively two different games, one being the Zelda-style puzzler that explores concepts like variables and routines in greater depth than Human Resource Machine, and the other being a full-on code debugger that drops you into raw code without so much as a plank to float on. This difficulty spike makes Hack ‘n Slash a rough game to play, but if you can get past that, there’s a lot of good stuff to learn.

Concept: Advanced Variables

What are they?

As mentioned earlier, variables are ways of storing and referring to data in a program. In Hack ‘n’ Slash, they are used to store much more than the single letters and numbers of Human Resource Machine, and their role in defining a program’s behaviour is made far more apparent.

How are they taught?

Hack ‘n’ Slash develops the concept of variables by introducing what are known as ‘typed’ variables. These are variables that can hold only a certain type of value, for instance only numbers, or only the values ‘true’ or ‘false’. When you hack an enemy, a list of variables that you can mess with pops up, but you can only change their values according to their type: you can’t store letters in a number variable, and you can’t increase a number beyond its defined limits. Thanks to these unwritten rules, you gradually learn the difference between Booleans, integers, and strings, even if you don’t know them by name.

The crux of Hack ‘n’ Slash’s lesson in variables, however, is seeing how their values dictate a program’s behaviour. Trial-and-erroring your way through a variable’s range of values is good mental practice for any programmer, especially when testing and debugging. A program needs to be capable of handling all possible data thrown at it, even if that means discarding the data that would cause it to act funky. Realising just how easy it is to break Hack ‘n’ Slash’s enemies by setting their Damage variable to -1 serves as an invaluable lesson in the importance of proper testing.

Concept: Syntax

What is it?

Just like the languages we use to communicate with each other, programming languages have rules for how their words come together to form sentences. This grammar is known as syntax, and though it can be unique to each language, most modern programming languages follow the conventions established by C some four decades ago.

How is it taught?

Hack ‘n’ Slash introduces the concept of syntax in its second half, when it moves past messing with variables and confronts you with naked code. Based on the Lua programming language, the code takes a number of liberties with its syntax, presumably in an effort to make it easier to understand. In practice, though, the made-up terminology only trades one flavour of confusion for another, limiting its real-world applicability in the process. Fortunately, the most common syntactic elements remain intact, familiarising you with the general structure of modern code.

Such grammatical rules include the dot syntax used in terms like Port.Value, which refers to the Value variable of an object called Port, and the structure of if… then statements for decision making. To help you decipher these oftentimes bewildering rules, Hack ‘n’ Slash drops you into a visualised version of the code, where variables are represented as colour-coded crystals that get fed into machines which process them into actions. Coloured lines trace the flow of the program between machines, although the machines are stacked so close together that it’s often hard to follow the order of operations.

Concept: Functions/Methods

What are they?

There’s an old adage in programming that 90% of a program’s execution time is spent running 10% of its code. In other words, programs spend a whole lot of time repeating the same operations. To take advantage of this, we split the most common code out into discrete functions, and whenever the program needs to run that code, we just call the function with a command like funFunction(). This saves us from re-writing the same code multiple times throughout a program, and more importantly, it means we only need to change one chunk of code if an oft-used function needs tweaking.

How is it taught?

Taking the form of the largest machines in the visualised version of the code, functions themselves can be hacked just like enemies and other objects, making for an Inception-esque scenario of diving into the code within the code. Changes made to a function’s code will propagate through the entire game, potentially leading to unexpected consequences later down the line. This is an all-too-common danger in programming, especially in bigger projects, and learning to be wary of the grander effects of even small changes is just good programming practice.


As a game, Hack ‘n’ Slash has a lot of problems. As a programming tutorial, it’s markedly better. By emphasising the impact of tweaking variables, and visualising functions as physical machines, it covers concepts invaluable to all aspiring programmers. So long as you’re prepared to learn the hard way just how much trial, error, and frustration goes into coding, you can come away with a firm grip on the systems and processes that underpin all languages of the modern era.

On page three, the scary world of assembly language in TIS-100.


  1. Sleepy Will says:

    else heart.break()

    • puninnabun says:


      else Heart.Break() is hands down the best programming/hacking game I’ve ever played. It teaches programming the way I looked at it when I first started dabbling in code 18 years ago: I could change things with it! I could create life! It was a wonderful world of discovery back then, and else Heart.Break() is a wonderful world of discovery now.

      I’d also say that comparing TIS-100 to asm is a stretch at best.

      • Tacroy says:

        TIS-100 is ASM, it’s just not x86 ASM. Each node is literally a Reduced Instruction Set Computer. It’s an even more RISC than MIPS ASM.

      • Phasma Felis says:

        “Comparing”? The game is literally about writing assembly code.

        • Xerophyte says:

          It’s also literally marketed as “the assembly language programming game you didn’t ask for”.

          I really like TIS-100, but that may be because I write C++ for a living and enjoy that too. A game that is “even lower level programming: the fun bits” is pretty much catnip.

          I’m not sure it teaches much of anything, it’s very intentionally esoteric in order to not feel like work. I guess possibly it’ll teach a neophyte a bit about what that clock speed thing means, how a CPU actually works and also that concurrency is very tricky if the threading model you pick is insane or from the 70s. It doesn’t really have much bearing on programming at large apart from teaching you how to solve complicated problems by repeatedly solving simple problems. Which, uh, I guess is what programming fundamentally is, so carry on Zach.

          Also, I am going to recommend Manufactoria which is a 2D in-browser Infinifactory-ish thing from 2010.

          • phlebas says:

            Manufactoria is amazing – I keep hoping for another engineering game that feels like it. Spacechem had writing on a similar level but felt a lot more restrictive in its design spaces. TIS-100 is the closest so far…

          • puninnabun says:

            @Tacroy / @Phasma Felis / @Xerophyte

            You are all correct, obviously, and my attempt at conveying my message was clumsy at best.

            What I tried to say was: The experience of programming in an assembly language is, in my opinion, vastly different from playing TIS-100. Yes, you are executing instructions and manipulating registers in small computers, and yes, that is of course assembly programming.

            However, there are no functions (apart from the IPC), no calling conventions, no memory management and no system calls. I’d go so far as to say TIS-100 is more or less exactly SpaceChem, only with a very different user interface.

            All of this is of course rather abstract, and in the non-abstract way TIS-100 is certainly assembly programming. It just doesn’t feel like assembly programming to me.

    • MajorLag says:

      Else had a lot of flaws, even as a programming game. Don’t get me wrong, I kind of dug it in a surreal way, but I honestly don’t think it is a very good introduction to programming because you only really need to know about 4 commands to become master of the universe and they aren’t that hard to discover.

      • puninnabun says:

        but I honestly don’t think it is a very good introduction to programming because you only really need to know about 4 commands to become master of the universe and they aren’t that hard to discover.

        If you play it as a “I want to win (or finish)” game, then you are absolutely right. In that case, however, I’d say that you are doing it wrong*. It should be enjoyed as a wonderful sandbox to explore and play with, rather than a race to the end.

        * except that I don’t say that about playstyles. Do whatever gives you the most excitement.

        Edit: What, RPS has got an edit button now? The world’s really gone to hell.

  2. Premium User Badge

    Drib says:

    Oh Jesus, assembly code game. Get out of here.

    I think these games can teach some decent core concepts, or at least the start of them. Having some idea of how code itself works, the ideas of loops and variables and syntax and all that… it’s more important than knowing a particular language itself.

    • puninnabun says:

      I agree, and I would also say that the mindset of breaking down a problem into smaller parts, recognizing patterns and applying abstractions is even more useful than learning variables and loops. I also think that structured approach to abstractions and problem solving is the main reason why learning to program could be useful for the majority of the population.

    • DeadlyAccurate says:

      I had to take an assembly code class when I started my first job 19 years ago, and I’ve never found it so hard to stay awake in a class in my life.

  3. Slazia says:

    I love the idea of teaching things through games in general, so I don’t see why programming should be an (Exception e) to that rule.

  4. Yargh says:

    I’m quite enjoying TIS-100 so far, taking it slow though so I have yet to encounter the storage node or had to deal with graphics.

  5. HeavyStorm says:

    As a seasoned software engineer, I must say: I never engaged in any of those games.

    I love to write code for a living, but I think the coolest thing about that is the great freedom in it. Which is robbed of you in those games, since they force you to follow a more strict course.

    Well, except for TIS, which I think is cool but never actually tried.

    • modzero says:

      As a programmer I tried engaging with kOS in KSP. I even have some idea how to write PID controllers etc. Problem is same as with many other side projects – there’s only so much energy left in you after 8h of doing the thing.

    • puninnabun says:

      Try else Heart.Break();

      Just do it. I’ll wait.

      • Tacroy says:

        As a programmer, my problem with Else Heart.Break() is that the second I got my hands on a hacking tool I bootstrapped myself into a near-omnipotent godhead.

        Except the main character was still a fuzzy-minded doofus who in-story wasn’t able to do the first thing with the tools he’d been given. He had basically unlimited power, but seemed entirely unable to express this to anyone.

        So I ensconced myself in the room with the mainframe and spent some time implementing Quicksort in order to enhance my stalking of every entity in the game world.

        • puninnabun says:

          As a developer, I did exactly the same. Immersion has been half-broken in most games for me for ages (as I imagine it has been to some extent for you as well) — all since I stopped thinking “Ooh, this is marvellous” and started thinking “Hmm, I guess they implemented this that way.”

          So the fact that dialog options don’t reflect whether or not you have nop’d the level check in your modifier doesn’t really bother me.

          There are still interesting puzzles to solve, though. They are still fairly easy, but the developer expects you to modify your modifier and has designed the game, or at least some areas, accordingly.

    • GenialityOfEvil says:

      That’s always the problem I’ve had with these sorts of games, especially ones where you’re just picking the right command or clause. Programming is one of those oddities where you learn far more by mistakes than by getting things right.

  6. piss says:

    link to this is a fun little game jam programming gmae i got linked to from zachtronics twitter. you stamp punch cards to control a painting robot

  7. DoubleG says:

    Anything by Zachtronics is great — the criminally underrated Infinifactory is great at teaching programming concepts to players without them realizing.

    Their original title, SpaceChem, also deserves a mention — at an old job of mine, it practically shut down the engineering department for a week because the engineers couldn’t stop playing it.

    • jimbobjunior says:

      I think Spacechem is excellent in demonstrating the various pitfalls that arise in concurrent programming; deadlocks, resource contention etc.

      • Matt_W says:

        TIS-100 does this as well, but more explicitly. You essentially have a 9-11 core machine with all the individual processors running in parallel. Managing the parallel execution and information flow between the cores in TIS-100 is most of the work of building a working program.

    • QSpec says:

      Agreed. I adore Zachtronics.

      To further lend support to the credibility that Spacechem is a “programming” game (admittedly an abstract one), there is at least one person who created an interpreter for it (for brainfuck).

  8. Premium User Badge

    Malarious says:

    On the contrary, I suspect they appeal to a different sort of programmer. Games like Spacechem, TIS-100, Infinifactory et al present very clear, small, digestible problems that can be approached in many ways, and even after you’ve solved it, you can go back and tweak and optimize some more to eke out a few extra percents of efficiency, which is easily my favorite part about programming.

    A good programming game presents the best parts of programming, the fun parts, the bits that got us interested in it in the first place without getting bogged down in the implementation. No need for commenting, for documenting, for opening issues or meeting to resolve ambiguities with the spec or to try and sell the team on a different API, there’s no dealing with the inane sides of the job: just hyper-focused problem-solving with crystal-clear optimization conditions.

    • bonuswavepilot says:

      Yes! And no deadlines! The magnificence of being able to spend as many hours as I please tweaking my Spacechem machine or TIS-100 code until it is *just so*.

  9. Skabooga says:

    Nice article! Castle Shotgun doesn’t appear to have any programmers haunting its corridors, so I found it informative to get a professional view on how these games reflect actual programming.

  10. Someoldguy says:

    I’ve been out of programming for decades but I think it’s great that they’ve introduced all sorts of little games and tools to get kids experimenting with it these days. From the BBC’s Doctor Who game that interleaves simple concepts with platforming levels to the schools that have little robots you can program with your phone to complete tasks set by the teacher. Anything that engages a kid’s interest is a good thing.

  11. Sardonic says:

    I always thought the other Zachtronics game, Spacechem is a real good primer on logic flow and resource management. Also the ancient windows 95 game Widget Workshop is basically baby’s first logic gate puzzler.

  12. jeeger says:

    Umm. The section on “syntax” is a bit off there – true, a lot of modern languages’ syntax is based on C, but there’s equally as many languages that aren’t.

    The Lisp family, for example, or the Python whitespace-sensitive syntax.
    Saying that most modern languages use C syntax is a generalization at best, and incorrect at worst.

    • Premium User Badge

      Malarious says:

      A plurality of the most popular languages use syntax derived from C, so I don’t think it’s incorrect at all. If you’re reading about programming games on a video game website, you’re probably interested in languages that can be used for writing games, which only makes the statement even more relevant.

      • kalzekdor says:

        If you’re reading about programming games on a video game website, you’re probably interested in languages that can be used for writing games, which only makes the statement even more relevant.

        I can tell you’re not a programmer. All programming languages can be used to write games. Hell, one of the earliest games was written using an analog computer programmed by patchcords and displayed on an oscilliscope! Games can be programmed directly in assembly, whether x86, ARM, z80, MIPS, or etc. They can be made in compiled languages like C, C++, Fortran, COBOL, BASIC (or any of its infinite flavors), or Pascal. They can be made in bytecode languages like Java, C#, Lua, or Scala. They can be made in interpreted languages like Python, PHP, ASP, Ruby, Perl, or Javascript (whether running directly on the client machine, or served over HTTP). And I’m barely scratching the surface here. There are a number of game making tools (and programming games) that use either a variant of an existing language, or their own proprietary language.

        function canMakeComputerGames(Language languageToCheck)
        return listOfProgrammingLanguages.contains(languageToCheck)

        • Premium User Badge

          Malarious says:

          OK, you got me there. You can theoretically write a game in any language. It doesn’t change the fact that if you want to write a real game for a modern system, you’re going to be interfacing with libraries written in C or C++. If you’re doing any kind of 3D work, you’ll (hopefully, for multiplatform reasons) be using OpenGL or Vulkan which are both implemented with C APIs. If you’re using an engine like Unity, then you’ll want to use C#.

          The parent comment claimed “saying that most modern languages use C syntax is a generalization at best, and incorrect at worst,” which simply isn’t accurate. The most-used modern languages are derived from C syntax. Java, Javascript, C, C++, C# easily make up a plurality of all code written in the past couple of years, and they all use C syntax. Particularly, modern games are overwhelmingly written in C++ or (increasingly) C#.

          You can write a game in Ruby or PHP or Pascal. And if it’s a roguelike or text-based game, then it’ll probably be fine. Or you can use an engine and write the logic code in a scripting language and probably be fine. But it sure helps to know C syntax, considering how much stuff is written with it, and considering the fact that your code is invariably going to interface with it!

          If you’re someone interested in writing computer games, learning a language like C, C++, or C# is the best course of action. These languages all have heaps of resources available for any aspiring students and you aren’t going to hit any ceiling where the language can’t do what you’re asking it to (show me a high-performance 3D game engine written in Python). It’s deceitful to pretend that every language is equally useful for writing games when there are clearly optimal choices.

  13. SuicideKing says:

    Well, I would say yes – but perhaps not in a way that this article seems to focus on.

    I took baby steps in programming by learning how to make “events” work in FreeSpace 2’s mission editor and by messing around with similar structures in Age of Empires II. Graphic Simulations’ F/A-18 Korea was also a playground for me, setting up waypoints, firing objectives, etc. This helped me understand the logic used by the AI. Using cracks for games also helped me understand folders, file trees, etc. and encouraged me to look inside game configuration files (I gave myself infinite money in NFS HP2, for example – but also figured out the mechanics that govern difficulty).

    Of course we were taught programming in primary school as well, and then more formally in higher classes, but the seeds were sown by games that encouraged me to tinker with their systems, not those that set out to teach me stuff.

    I know the Arma games have sent a lot of non-programmers down the path of programming thanks to its extensive scripting API exposed even to mission makers, not just modders.

    • puninnabun says:

      Of course we were taught programming in primary school as well

      This is so beautiful it almost made me cry. *sniffles*

  14. dkfgo says:

    Minecraft has a bunch of educational mods that are far more interesting than any – ugh – educational software I’ve ever heard of, including some that teach programming. IMO there isnt a better environment to apply the turtle methodology than a Minecraft world. I mean, kids are already attracted to Minecraft naturally, just introduce them to the turtle and soon they’ll be trying to do all sorts of stuff with it.

    • po says:

      And then once they’ve got a good grounding in Lua / are starting to feel minecraft is a bit too much of a kids’ game, they could move on to something like Polycode.

      If something like that had existed 30 years ago, I’d have had a much easier entry to games programming.

  15. invitro says:

    I’m not sure the author is a programmer. Or someone who knows what programming is, anyway.

    “In HRM, floor tiles serve as a surrogate for variables.” — False. The floor tiles are memory locations, not variables. The labels are variables.

    “HRM pulls no punches with its implementation of arrays. Instead of referencing floor tiles directly through their labels, you can use the value inside one tile as the label pointing to another. For example, Tile ‘0’ might have the number 7 inside it. If you use the standard copyfrom ‘0’ command on it, you’ll get that 7 back. If instead you use the copyfrom [0]” — This has nothing whatsoever to do with arrays. It is indirection, which is built into the innermost machine language of a CPU. I’m guessing the author thought of an array because of the [square brackets].

    I’m sure there are more examples of the author not understanding programming, but I’m too depressed to continue. But on the bright side, Human Resource Machine and TIS-100 are both wonderful games.

    • dajt says:

      I was going to make the same points, if less harshly.

      I thought the indirect addressing concept may be interesting to some. Most people who’ve learned programming in the last 20 years probably don’t know about it as it isn’t part of many languages aside from C/C++/asm.

      I learned assembly before C and thought it was funny that every book makes such a big deal about pointers when they are just indirect addressing which is natural for an asm programmer.

      It’s pretty cool that a game includes the concept.

    • Matt Sayer says:

      Thanks for the feedback, invitro! You’re right, likening floor tiles to variables was an oversimplification, though I didn’t want to dive too deep into the specifics of memory management. As for the arrays, in HRM the use of indirect referencing is primarily to mimic arrays, and I was focusing on that lesson. The finer points of pointers are not really broached, which is why I narrowed my focus.

      Thanks again for your feedback!

    • MajorLag says:

      That’s a pointer, which is a core concept of most lower level languages including C. Here’s the thing though: pointers and arrays are the same thing!

      For instance, in C, “array_name[index]” can also be written as “index[array_name]” because the syntax is merely a wrapper for some pointer arrhythmic, so the author isn’t quite as wrong as you think.

      • phlebas says:

        Well, yes. But I think the point was more about indirection – HRM requires looking up array[array[index]], or even more deeply nested examples like a linked list – which is more typically pointer rather than array usage.

        (any not-yet-programmers reading this thread: don’t let it put you off! It’s a technical distinction rather than anything you need to know to enjoy the game, and it’ll all make sense by the time you get to it.)

      • puninnabun says:

        Since we’re already nitpicking: Arrays and pointers are mostly the same, except that the compiler knows the size of arrays and does not know the size of the elements pointed to by a pointer.

        Which is important to know if you ever pass an array to a function, because then it is implicitly converted to a pointer, and then your nice sizeof-macro stops working, and you get to spend a week debugging it.


  16. ropeladder says:

    Had to mention Untrusted here, because it’s pretty great (and free and in your browser!). It gives you bits of the source code for a variety of ascii-based interactive puzzles and you have to edit the code in ways that allow you to solve the puzzles.

    • phlebas says:

      Ooh, I hadn’t heard of this one and it’s rather good. Thanks!

    • Josh W says:

      Man, level 13 is so hard.

      • phlebas says:

        Funny you should say that – I found it one of the easiest as my solution for the previous level worked there too! Which probably means I applied overkill on level 12, making it more interactive than it needed to be…

        Level 15, on the other hand, was a pig.

        • Josh W says:

          Yeah, I came up with a solution on 12 that was based on global coordinates and took a route customised to the specifics of the map, and I thought to myself “this is not going to be very robust”. I was right, but I didn’t think they were going to use randomisation, which invalidated my method completely!

          I’m probably going to try to use the left hand rule or something.

          • phlebas says:

            That would be impressive, and should be doable if you can wangle a static variable. Cleverer than my solution for the two, anyway!

  17. bonuswavepilot says:

    The only real objection I had to Human Resource Machine is the tiny little space you get to write your code in. Once you get through the earlier levels and into some of the more complex stuff it is a festival of constant scrolling up and down. Even worse if you are trying for the efficiency achievement by doing things like unrolling loops. (That said, you can do your coding in another editor then paste it back into the game, which is cumbersome, but I’m glad they included it.)

  18. Banks says:

    Infinifactory is my favourite one. Such a wonderful game.
    It actually does not feel like a programming game per se, but the 3d space and the setting make it much more playful and it removes part of the frustration of the others while empowering player agency and experimentation. I’d also say that it’s a bit easier, but the last few levels are crazy hard, so no way.

    Spacechem and tis-100 are also masterpieces. Shenzhen i/o looks super hardcore too.

    • MajorLag says:

      Nobody does programming games like Zach. He’s pretty much the undisputed king of the genre.

  19. ThePuzzler says:

    Not seeing a lot of commenters saying they became a programmer after playing one of these games…

    • phlebas says:

      I was already a programmer when I played them, and I enjoyed them.

    • MajorLag says:

      To be fair, they aren’t that old, meaning the people who played them as an introduction to programming probably haven’t had time to go to school and spend 6 or 7 years working at Starbucks while trying to find a job in this broken economy yet.

      • ThePuzzler says:

        No, but they might have started trying to write their own game in Unity or whatever.

        • MajorLag says:

          But with things like Unity the biggest stumbling block isn’t the scripting, it’s the art assets.

          • ThePuzzler says:

            You can buy art assets off the Unity art store, use free Creative Commons art, rip off assets from other games and then replace them with legal art later, write a text-only adventure game, write an ASCII Dwarf Fortress clone… There are lots of ways to become a programmer that don’t involve joining EA.

  20. MajorLag says:

    Honestly I don’t really get why people think they want to learn to code. Don’t get me wrong, a lot of people are just born programmers with a keen sense for abstraction and logic, but it seems like nowadays people talk about wanting to learn to code like they might want to learn to play guitar or speak french. I don’t get it. As far as I can tell, coding is less important a skill now than it has ever been. If you don’t want to spend your days rewriting business logic in the bowels of some company, or maybe programming microcontrollers for robots, then why do you want to code so bad?

    • ThePuzzler says:

      Why would anyone want to learn to play a guitar? That’s a waste of time. Most guitar-music developers make very little money. Much more efficient to sample one of the guitar songs that’s already been written. They’re probably better than anything you could do.

      • MajorLag says:

        The difference, I guess, is that people are impressed by guitar players, even mediocre ones. It’s a skill to show off at parties and it’s probably pretty enjoyable. The same is not really true of programming. Nobody is impressed by your rendition of quicksort. There’s a certain kind of mind that finds it fun, the kind that will enjoy TIS 100, but I can’t imagine there are really that many people out there like that.

        • phlebas says:

          More than you might think. Though if you think the point of learning the guitar is to impress people rather than because you want to make music, it’s quite likely not for you.

          • MajorLag says:

            Learning guitar isn’t for me, it’s true. I’ve got the kind of mind that really liked TIS-100, and every other programming game Zach has put out.

            Still, I see a lot more people into music than I do logic puzzles, and yet you hear all the time about how people want to learn to code, people who I’ve never seen show any inclination towards that. I’m forced to wonder what drives that. At first I thought it was maybe because of the rise of indie game development and mobile apps, but with the tools out there now you barely need any programming expertise to do those things anymore. In fact, in several discussions I’ve seen people actively recommend not bothering to learn any programming at first, the sentiment being “do you want to program, or do you want to make games?”.

        • Josh Grams says:

          Heh. But I’d argue that programming shouldn’t be about quicksort. That’s my biggest beef with Zachtronics’ games: they’re very focused on artificial obstacles and the kind of low-level details that good programmers these days avoid like the plague. They’re about the kinds of tedium that you had to endure when programming on the tiny machines of long ago.

          And that certainly has a place: I’ve been pleasantly surprised by how many non-programmers find that sort of puzzle-solving attractive. But I’d love to see someone make an equally compelling game that hides the awkward details rather than showcasing them.

  21. gsilver says:

    Why back in my day, games that taught you how to code were printed in magazines that you would spend dozens of hours typing into your home computer by hand, and that’s the way we liked it!

    //Is a computer programmer today because of videogames… and also old.

    • phlebas says:

      …and we had to learn to program to fix bugs caused by typos in the magazines! Yes!

  22. dylanmc says:

    Other cool ones I can think of:

    Box-256, which is a bit like TIS-100 in flavor.

    Robot Odyssey from 1984, online version here

    And of course, there’s a reddit for this

    • phlebas says:

      Sadly that reddit seems to focus on ‘code battle’ games such as Corewars where you’re basically writing AI scripts to try and beat other players. All good fun for a seasoned programmer, but not a structured learning/puzzle experience like the games we’ve discussed here.

      Box-256 could be interesting, though.

  23. geldonyetich says:

    One of the earlier games I played that helped me to learn how to program was OMEGA, created by the infamous Origin Systems.

    At its heart, OMEGA was basically Core Wars, a game about writing programs to overwrite eachother. However, OMEGA framed it as working for a future weapons corporation that sells self-piloting tanks that shoot eachother to bits. You basically set up simulations of these tanks and watched them go about their grim work.

    Though part of this was resolved in menus where you chose weapons and hull assignments, most of the real work was done in the programming segment which was essentially BASIC with LOGO mixed in and tank-relevant commands.

  24. buddy-bubble says:

    anyone interested might take a look at antme, it’s a game that teaches you coding in c# (in real c#)