Can Videogames Teach You Programming?

if(desire_to_program > 10)

When I tell people I’m a programmer, I get that look. The glazed eyes, the polite smile, the clear desire to change topic. If I’m lucky, I’ll get pitched on an idea for the next killer mobile app that my conversation partner insists will make us rich; if I’m less lucky, I’ll get wrangled into providing free tech support for the rest of my life. The thing is, though, as impossible as it might sound, programming can be more fun than people realise. Fun enough to warrant its own video game genre, even.

Just how educational are these games, though? Is it really possible to become a programmer by playing games? I dug through Steam and came away with three promising candidates. Let’s take a look at them, and see whether they can really teach you skills to pay the bills.

Obviously few games are going to teach you how to write C# code, but these programming games translate the concepts of programming into visual metaphors and achievable puzzles. We’re going to therefore review each game in terms of the programming concepts it introduces and how well it teaches those concepts in a manner that would carry over should you start to learn a programming language later. We’re also going to run through these games in ascending order of conceptual complexity, so that they might form a complete course towards programming.

It should also be stressed, before we begin, that none of these games claim that they will teach you to code; we just think that they might. Onwards!

Human Resource Machine

Difficulty: Beginner – Intermediate

Human Resource Machine is all about data processing. A conveyor belt marked ‘IN’ delivers tiles with numbers and letters printed on them, and it is your job to send the right ones – as defined by each puzzle – to the conveyor belt marked ‘OUT’. To do this, you put together a list of commands for your eager worker to follow – a program, essentially. Since the tiles rolling in are randomised, your program has to account for all possible combinations of numbers and letters. This is a concern all programmers are intimately familiar with.

HRM does a great job of introducing concepts in an approachable way, giving you time to familiarise yourself with each new command before moving onto the next one. Even better, you can slow down time as your worker performs your program, stepping through each command so you can see exactly where and why it isn’t working the way you expected. Given how much time a programmer spends debugging, getting used to breaking down a program line by line is incredibly useful.

Accessibility, though, is only part of the programming equation. The critical question is: can playing HRM teach you how to program? To answer that, let’s dig a little deeper into the concepts powering HRM’s puzzles.

Concept: Basic Variables

What are they?

Dealing with unknown data, whether it be a conveyor belt of random numbers and letters or the light-speed keyboard commands of a StarCraft pro, is a fundamental component of virtually every program ever written. Because programs can’t predict the future – yet, anyway – they need a generic placeholder for storing and referring to unknown data during their execution. This is where variables come in. A variable is basically a labelled container for data that can be emptied and refilled as needed.

How is it taught?

In HRM, floor tiles serve as a surrogate for variables. At the centre of each puzzle room, the floor is divided into a numbered grid where you can temporarily store the numbers and letters coming in on the conveyor belt. In your list of commands, you refer to these tiles by their numerical labels – starting at 0, because in programming counting always begins at 0, not 1. Alternatively, you can give them your own labels like ‘FirstAdder’ or ‘Tally’ to help make your program easier to understand. This is a crucial technique in programming, especially if multiple people are working on the same code. Well-named variables can be the difference between diagnosing your misbehaving program straight away, and spending hours just trying to remember what the heck your code is doing.

Concept: Arrays

What are they?

Where variables are used for referencing a single value or object, arrays are used when you need to group a whole bunch of similar objects together. Instead of needing a separate variable for each slot in a player’s inventory, for example, a game might have a single ‘inventory’ array within which all inventory items are stored. The benefit to this approach is that those items can be referenced in relation to the ‘inventory’ object like so: inventory[0], inventory[1], inventory[2]… This makes it very easy to write code that checks all slots in a player’s inventory, and in terms of raw performance, arrays are a lot faster than individual variables.

How is it taught?

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] command, the program will use the 7 as another label and retrieve the value inside Tile 7. Don’t worry too much if that sounds a little confusing; you really need to see arrays in action to understand how they work. Importantly, HRM lets you do that with a number of well-paced puzzles.

Concept: Conditional Statements (aka IF…THEN statements)

What are they?

A program wouldn’t be much use if it produced the exact same output every time, regardless of the data you fed into it. That would be like a game that literally played itself, ignoring all player input and looping the same run-through again and again. Programs need to make decisions, whether they be as simple as deciding which of two numbers is bigger, or determining if a player’s crossbow bolt will hit its target or not. Conditional statements are the real brains of a program, the artificial equivalent of our neocortex.

How is it taught?

To keep things simple, HRM includes only two types of conditional statements: jump if zero, and jump if negative. These commands check the value in your worker’s hands and ‘jump’ to another part of your program if the condition is true. If your worker is holding -5, the jump-if-negative command will resolve as true and follow the jump arrow to the part of the program you pointed it at. If your worker is holding 1 instead, the program will continue as normal onto the next command in line. This may seem pretty simple, but later puzzles require a bunch of jump-if commands all working together, their jump arrows crisscrossing like a football play devised by the devil himself.

Concept: Iteration (aka Looping)

What is it?

Repetition is the bread and butter of computing. We write programs to automate the tasks we don’t have time to do ourselves, and for that we use loops. Loops herd NPCs back and forth along the same patrol route. Loops hit enemies with burning damage for every second they’re aflame. Loops keep a car accelerating until it reaches its top speed. Hand-coding each iteration of these processes would be woefully inefficient, and when it comes to programming, inefficiency is a sin.

How is it taught?

HRM combines the aforementioned conditional statements with the standard jump command to convey the basics of looping. There are two main types of loops, for loops and while loops, and HRM teaches both. For loops, which perform a set of commands a predetermined number of times, are implemented using one floor tiles as a counter that ticks down until it satisfies the jump-if-zero check and ‘breaks’ out of the loop. While loops function much the same way, except instead of looping a set number of times, they keep repeating while a certain condition is true. As the puzzles get tougher, you need to combine both types of loops with the array tiles to process lists of data of unknown length. This is a another cornerstone of basic programming, and HRM does a good job of gradually building you up to it.


By framing itself in familiar concepts like conveyor belts and floor tiles, and by offering only a small list of commands to work with, Human Resource Machine serves as a solid introduction to the core principles of programming. Colour-coded commands and helpful jump arrows echo the language of flow charts, making it easier to keep track of what a program is doing as it executes. The bespoke terminology like copyfrom and bump might not translate 1:1 to modern programming languages, but the concepts they teach are one and the same. After conquering HRM, you would be well-equipped to start learning how to code for real.

On page two, we look at Double Fine’s Hack ‘n’ Slash.

Sponsored links by Taboola

More from the web

From this site


  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. 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.

    • Premium User Badge

      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. 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.

  9. Premium User Badge

    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.

    • 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)

        • 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. Premium User Badge

    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.

  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.

  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#)

Comment on this story

XHTML: Allowed code: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>