Something I didn't know; the original "RobotWar" was written by the same guy behind the original (pre-id software) Castle Wolfenstein: http://corewar.co.uk/robotwar/
I'd like to throw in a mention for LittleBigPlanet 2[1] on the PS3 as well. The first game in the series allowed users to create their own platforming levels using simple but powerful tools, which more talented creators used to build things like physical logic gates that allowed for more interactive creations. In LBP2, the developers embraced that side of the game by adding proper logic gates which could be packed into microchips, objects that allowed creators to read raw button inputs from the controller, and so on. People have gotten incredibly creative with those tools, going so far as to build everything from custom games to ray tracers in it. Also the visual style of that game is just incredibly charming, far cry from the aesthetic of most modern AAA games.
Another worthy mention is SpaceChem[2], a game that revolves around bonding elements together using a deceptively sophisticated visual programming language. It's not really directly about programming, more of a puzzle game really, but I feel like it uses the same part of my brain that programming does and it'd be a good way to get people into the coding mindset.
Running an Ultima Online server with an emulator called RunUO was a fantastic learning tool for me in high school.
I've always thought you could craft a curriculum around developing for the emulator.
You could start off small as I did by just teaching students how to create items in the game. Show the inheritance hierarchy where 'Uber Sword' inherits from 'Sword' which inherits from a base class 'Weapon'..
Teach students how to write their own spells in the game with delays and different damage types which exposes them to simple if/else logic, timers, enums, etc.
Advance to creating your own monsters and NPCs that respond to player speech which teaches state/simple AI/string manipulation.
You could leave the server running 24/7 so players could play/develop/hangout together.
Show how items disappear from the game world on reboot and how to serialize the game objects.
You could have an exam in the game where players showcase what they've developed and culminate with an all-class battle.
I think a stripped down MMO like this could be the perfect environment to foster creativity/learning.
My introduction to programming was ZZT-OOP[1], the language built into the roguelike ZZT created by Tim Sweeney (Unreal.)
Each ASCII character with a program was an object and they communicated by passing messages to each other. Items like bullets and the player also could pass messages to these custom objects. I remember piecing together some complicated multi-step, multi-object behaviors in a sort of concurrent programming.
My other introduction was changing the behavior of the gorillas in GORILLAS.BAS. From that I learned about Basic, and eventually wrote my first utility for another game, which was a battle success estimator/damage calculator for Sid Meier's Alpha Centauri.
I think the playfulness of games and the more straightforward representation of objects in games really helps children understand the point of programming and some programming concepts that are more obscured in business/utility software.
ZZT was also my first programming experience. It was great. The message passing concurrency was pretty nice except it worked as an external goto. Also zzt-oop had lots of shortcoming so people had to come with with very creative workarounds (especially for arithmetic). Despite that it was good fun. In some ways it'd be nice to have a modern clone with an improved language and a similar simple model (graphical objects with contained concurrent programs, message passing only).
Its successor, Robot Odyssey (http://en.wikipedia.org/wiki/Robot_Odyssey), was great. It was the inspiration to create a programming game as a distraction for users during the bitbucket migration a couple of months ago.
I'd link to the bitbucket game but that's too much self promotion for a Saturday.
Tutorials are all very well, but what we really need is the programming equivalent of Geocities or Diaryland. That's how many of us got started with HTML and CSS - by making stuff and trying to get it to look nice.
Ideally this place would take care of the back end and provide a few basic components (e.g. pages, views) for you to structure your app. There would be code boxes for you to type into, and once you click save you'd be able to view and use the app at username.site.com. At first you might piece together a program out of pre-written components via point-and-click, then you might tweak the code to better serve your app, later on you'll get bored with the presets and start writing your own functions...eventually you'll learn to code from scratch.
There are tools that come close to this (GAE for example), but nothing at the absolute-beginner-anyone-can-do-this level.
I personally think games with level editors are one of the best introductions to programming.
My first exposure to "programming" when I was in middle school was using the Warcraft 2 level editor, setting up custom triggers and using my imagination to build something I thought would be fun for others to play.
That's basically 1000000x better than those games that stress on learning programming or are build around coding.
A game that is good by itself and has a great map editor or a good api for modding. Now that's fun.
These "programming games" just make me think of tricking people with no interest in programming to do some.
Not that I don't recognize some do enjoy these and fall in love with programming thanks to them.
I played a few levels of this. Its a load of fun, thanks for sharing.
I did have to Google for ruby tutorials to figure out things like instance variables and I'm sure somebody who has no prior programming experience would really struggle with this. Having said that, this could easily be modified into a proper tutorial and even now its a fun thing game to try out what you learn in some other tutorial.
Have been playing with this for a few minutes. It's been pretty enjoyable, I especially like the animated graphics. With things like this I always wonder what the experience is like for people who have never programmed. Do you have any idea? I am going to share with some of my non-technical friends but it's possible they won't ever get around to playing it.
I have almost no programming experience, and this game expects you to know quite a bit about programming conventions. My experience so far includes:
* "I don't really know what call means in this context, but based on previous knowledge, I'm guessing I should replace the example words with that."
* "Oh, right, I remember based on previous knowledge that "#" means comment, so I should remove that part too."
* "Oh, maybe I need the exclamation point that previously looked to me just like punctuation, because I know that code is precise about punctuation like that."
* "I don't know how to use if/else in Ruby, but I can guess that I just type 'if' and 'else', because Ruby has a reputation for simplicity."
* "I can also guess based on previous knowledge that indentation probably means something in Ruby, so I'll try indenting things."
And that's about as much guessing as I feel like doing for a game, and I'm still on level two. (I know I could easily learn how to play the game by looking at any basic guide to Ruby; I'm just demonstrating how it feels for a person without any experience.)
Anyone here remember Omega Tank by Origin? An old DOS PC game that gave you a simple but effective environment to program combat tanks to fight against the computer or programs written by your friends. Awesome game.
One programming topic I'd love to see a game for is software concurrency. This is one topic near and dear to my heart which I think a lot of us struggle with since a lot of it can be so counter-intuitive. Reading through "Java Concurrency in Practice", some of the ideas and best practices really popped out at me as something that could be translated into an abstract art style game, and for some reason, the mechanics of guitar hero with multiple guitars visualized in my head. It would be a fast paced game with trippy colors and great digitized procedural music, and you shouldn't need to know anything about programming to play. Threads could be visualized as lines going through space, and you have to protect data units with good use of abstractions, queues, locks etc so they don't get corrupted. And the better you get, the more threads you have to deal with and more advanced topics/tools you'd need to use. I'm not a game developer, but I'd love it if such a game existed :)
Someone mentioned Spacechem in the comments. I don't want to register there to comment, but Spacechem is pretty much all about synchronization of two threads of execution. Also, it's worth noting someone actually built a Turing machine in it.
I also wonder why Minecraft (and especially Redpower 2 mod) didn't get a mention.
I also enjoyed Lightbot, btw. But someone should turn that to a real game, not just flash (bigger desk, larger program space).
My daughter used Microsoft Kodu Game Lab at summer camp and had a blast. I just started to look at it but it looks like a decent intro for at least the 7-8 year old group.
I wonder that the article does not mention Second Life. SL is a real boring thing, as long as you only consume it, but it becomes fascinating, once you start to design.
I know several people who learned Gimp because of SL, or scripting. Scripts could be as easy as a "say hello" if someone walks through a door, or as complex as self driving cars, or a 200x100 meter big pinball game, that requires 3 players: One for each flipper, and one inside the ball. Linden Scripting Language makes quarternions as easy to use as Havok physics.
There is also the Schemaverse (http://schemaverse.com), a multi-player space battle game for learning SQL, pl/pgSQL, and really any other language that has a library for connecting to PostgreSQL
I don't know, but the game which got me interested in programming was Quake because of QuakeC. The game itself doesn't have anything to do with programming at all etc. but you can look in all the game files (not only code, also art assets etc.) and it was so easy to change things around. To build a simple level and write some scripted events, was really rewarding because you made something in really short time which you could actually really "see" (in the gameworld).
Those games which try to teach you programming with little games/puzzles or whatever don't have any value to me. I don't know...
It's a shame that CogniToy's MindRover is not mentioned, it really captured my imagination, and I wish there were more games like it. It does appear to be sadly defunct, however.
I was a big fan of that game. I loved trying my hand against the online competitors, but I was 14 competing against much older people. I got trounced :(
Still, Corvus's mid tier match. I managed to win it by developing a rover that could lead its shots.
My god, if I could just go back and time and have another crack at this game with what I know now.
I wonder if the old data is on one of my hard drives. I made a two vs two rover mission with large rovers. You could make some scary rovers.
I have some slow backburner plans for a game with similar mechanics but an easier introduction for total beginners and more challenging end-game tasks such as dealing with concurrency.
A year or so ago we we created a site that teaches intro to HTML/CSS via games called CodePupil. We haven't worked on it for quite sometime, but here are 2 games we created...
Are there any games made to help software developers improve their design or intuitive skills? Maybe something where you have to minimize dependencies or visualize program flow, or apply known design patterns to solve problems... I'm envisioning minigames that are basically koans with immediate feedback. I think I would find those very useful.
Also, there are tools that make it easier for kids/beginners to create games, and in doing so learn programming, such as: http://www.playmycode.com/ http://pixieengine.com/ https://www.scirra.com/construct2
Some other LightBot-like games include Cargo-Bot, Robologic, and several others: http://breakoutmentors.com/kids-programming-resources/
There's ComputerCraft in Minecraft, etc.
And there's learning programming by modding games/simulations such as minecraft