Can Videogames Teach You Programming?

TIS-100

Difficulty: Advanced+

The first thing you hear when you start TIS-100 is the cold boot of an old CRT. Whether or not this induces a pang of nostalgia is a good litmus test for how you’ll feel about the assembly-language compiler disguised as a game. Make no mistake: TIS-100 is for the keenest of programmers only. If you’re not already familiar with conditional statements and iteration and the like, you’ll have a precipitous learning curve in front of you. Even if(have_exp == true), TIS-100 is hardly a cakewalk.

Assembly language, for those unfamiliar, is a form of programming language that was common in the ’50s and ’60s, before being supplanted by higher-level languages like C in the ’70s and beyond. Assembly-language instructions are typically based on the machine code a computer uses to talk to itself, and as such they’re significantly harder to read and write compared to the likes of Java and C#. Still, despite its archaic sensibilities, TIS-100 grapples with a number of concepts that remain relevant to this day.

Concept: Communication

What is it?

Communication is an essential component of modern programming. From online leaderboards to multiplayer FPSs to MMOs, games rely more and more these days on talking to each other to facilitate their fun. The problem is, it’s practically impossible for one program to know what another is doing at any given moment, so managing communication becomes tricky. Think of it like two people having a conversation while at the same time fiddling with their phones. If one person’s attention is focused on their phone, they might not hear what the other person is saying. To remedy this, programs communicate using ports and sockets, which are basically Post Office boxes managed by the operating system. A program can send off its data then go about its business, while the onus for checking for new messages falls on the recipient.

How is it taught?

Programs in TIS-100 are split up into nodes, each of which can only execute a limited number of instructions. To achieve the goals laid out for you requires a whole lot of data sharing between nodes. Worse, each node can only talk to those adjacent to it, complicating matters even further. Creating a working solution demands you think of each node as a separate program, privy only to its own operations. Getting them all to cooperate means establishing a communications protocol, just as a network programmer must do. You discover very quickly that convincing different programs to play nice together is harder than it might seem.

Concept: The Stack

What is it?

Like arrays, the stack is a container for grouping together related data. The stack, though, is better suited to shared-data environments where different programs, or different parts of a program, need to access the same data without directly communicating with each other. As the name implies, the stack stores data in a vertical list, adhering to the Last In, First Out (LIFO) protocol: when a new item is added, it goes to the top of the list, and when an item is removed, it’s taken from the top of the list. Think of it like a stack of plates at a buffet restaurant, where patrons take from the top, while clean dishes are also placed on top. Or an internet browser’s Back button and its record of your recent page history.

How is it taught?

As the programs you’re writing increase in complexity, moving data between nodes that can only store two things at a time becomes a game of Chinese whispers, with the likelihood of error only getting higher. The introduction of stack nodes with their limitless data buckets gives you the means to handle much larger sets of data, though the extra capacity doesn’t come free. You have to consider issues like deadlock, where one node is waiting for an empty stack to be refilled, but the node that would refill it is in turn waiting on something from the original node – stalemate! Then there’s the problem of storing multiple datasets on a single stack without getting them all mixed up. Weighing up the trade-offs of using stack nodes versus managing data manually is the sort of consideration programmers make on a regular basis.

Verdict:
Though TIS-100 looks like a relic of the past, it’s in no way outdated. From overlaying menus to multi-core programming, concepts like stack memory and network ports are as relevant today as ever. For the programmer-in-training, TIS-100 is the final hurdle; if you can survive its stiff challenge, you’re ready to code.

Conclusions

So, can you learn to program by playing games? I’d say yes, with a couple of caveats. First, the challenges of programming are rarely as clearly defined as the puzzles in the aforementioned games; project requirements often change multiple times during development, and sometimes you won’t even know whether what you’re trying to do is possible until you do it – or give up. So maybe don’t put Human Resource Machine on your CV. Second, games alone won’t turn you into John Carmack; they can teach you the basics and help hone a programming mindset, but you’ll still need to hit the virtual books before you’re ready to make the next DOOM.

Nevertheless, if you go in with appropriate expectations and a healthy supply of determination, games like those I’ve looked at here can be a solid stepping stone to a future in programming. Just don’t forget the most important rule of working in the tech industry: never tell anybody what you do for a living, or you’ll be on the hook for fixing family members’ bloatware-laden computers for the rest of your life.

71 Comments

  1. Sleepy Will says:

    else heart.break()

    • puninnabun says:

      This.

      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 leonardo.frozenfractal.com 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#)