While I certainly wouldn’t want to use any assembly language for a real project, my first programming language was THUMB (the alternate instruction set for ARM CPUs), and I’ve always really liked it. Though I almost never use it.
Dwarf Fortress is the ultimate game, of any genre. But the fact that someone can make a working computer in it could also make it the best programming game.
Ever heard of Colobot? Windows, Linux, OSX compatible, fully 3D, robot exploration game where you COLOnize with BOTs, using a C++/Java like language to teach your bots how to dig, fly, shoot enemies, defend their base, transfer goods, recharge itself and many more things… I’m kind of in love with it. And yeah, it’s a former commercial game released as open source.
There’s an excellent little indie game called “Pragmatica” that I really like. Sadly, I’m not able to locate an official download site where I am now, but it shouldn’t be hard to find.
A while back I was reading an interview and I saw the line “it’s the assembly language programming game you never asked for” and I was intrigued, then promptly forgot about it. I really need to download it now and play it, because I am apparently a freak who loves assembly programming.
Two bits of code I’m most proud of were both written in assembly for low-end processors to wring every last cycle of performance out of them. They also took a completely disproportionate amount of time to write and get working, but I loved every minute of it. For me, there’s just something about knowing you’ve written a piece of code that’s pushed a processor right to its limit.
Nice post. Nothing could really be simpler than assembly - in one sense - but people dislike it because it means that they have to think about the particular hardware rather than the more abstract level of the problem they are trying to solve. All programs of any language end up as some form of Assembly, so there is no difference in what is possible in any language. C was great because people could assume that the hardware details would be taken care of, while still being able to reach that level.
I thought that “awards ceremony every time C does what it was supposed to” was really overstated, just as having the car go around the corner every time you turn the wheel is not unexpected. If you turn towards a wall, that is not the fault of the car or its designers. Would it be better if we could get in the car and tell it where to go like a taxi? Sure in most cases, but James Bond would probably not be pleased, nor his pursuers. LUCY drove without ever having done so before, right?
I did do some 6502 assembler (Apple ][ and Atari), and 68020 in college (Sun 3). But I started off with punched cards in a summer class in High School, before we were allowed to move to the terminals. How much do we really need to know from the past for the present state of development to be understandable? That is something I evaluate while teaching my programming students. Self-teaching is good, some guidance is good. A motivated self-learner can probably solve most any problem. Eventually.
Game engine programmers still write in assembly frequently. Especially, if developing for consoles. They frequently have to SIMD their code to avoid cache misses. Mike Acton goes into it a lot on his anti-oop presentations.
Even for PS4 and XBone? I can see doing that for particularly performance sensitive areas of code, but both of the latest consoles are straight x86 to the bone (AMD Jaguar cores). The optimization techniques should be very well understood by now.
Insomniac definitely still does it. I think the issue is mostly trying to push out higher graphical fidelity on aging hardware.
On the PC it doesn’t really matter, except for certain parts of the code. Which is why Valve programmers recommend waiting on SIMD instructions till later in development, but planning for where it’s needed early on.
Hopefully, the whole Steam Machine takes off in the next few years so an entire industry isn’t mostly programming for aging hardware.
Just bought and installed Human Resource Machine to check if it could be fun for hiring purpose… 3h later, at 4am, enjoying the endgame animation… I’ll definitely use it during hiring process. Thanks, Jeff.
A great list of classic Hacking games from the always-excellent Rock, Paper, Shotgun
- else Heart.Break() (2014)
- Hacknet (2016)
- Uplink (2001)
- Gunpoint (2013)
- Duskers (2016)
- TIS-100 (2015)
- Minecraft (2011)
- Hacker (1985)
- System 15000 (1984)
- Enter the Matrix (2003)
A bit last-three-years heavy in my opinion, but some very worthy choices on this list and at least two I had never heard of and worth a look!
Human Resource Machine is so fun. It’s difficult enough to be kinda confusing and difficult but still doable–the game uses really, really simple commands and the closest thing to recursion/looping are conditional GOTOs. You only get a couple options for the conditions, too. It seems like the best algorithms are either beautiful or mind-bendingly crazy. Readability? Who cares about that stuff? Just stick some masking tape on it. If you’re used to sane code that’s written for humans to read and only incidentally for compilers to execute, prepare to rearrange your priorities in the most fun mad-scientist way possible, pushing the system and making it your plaything.
I’m on level 18 or something after about two hours (according to Steam), and so far I’ve gotten at least one of the optimization challenges on each level that has them. You often can’t get both the speed and size challenges done at once, so they need different approaches, and it’s really difficult to figure out how to change tactics when one solution comes naturally. I seem to get into a mental groove of optimizing for one or the other at a time.
It also has a sense of humor. Instructions from management can get pretty silly. Um, but not sillier than real life–does that still count?
Sadly, starfighter seems to have been shutdown.
For those interested, I’ve worked on a new programming competition, Halite, run by Two Sigma and Cornell Tech.
I’d love to hear @codinghorror’s thoughts on the competition.