Designing Zachtronics' TIS-100 (2015)
gamasutra.com
gamasutra.com
The backstory that unfolds through your fake inbox actually gives the devilishly tricky game some direction, and the post-solution histograms showing just how many people solved the same puzzle cheaper, with fewer instructions and with lower power consumption than you tug at your ego and keep you obsessing over the same puzzle long after you've solved it. There's even a fun Solitaire variation buried in there for good measure, which was evidently so popular they also released it as a standalone game [3].
1: http://www.zachtronics.com/shenzhen-io/
2: https://news.ycombinator.com/item?id=12660253
3: http://store.steampowered.com/app/570490/SHENZHEN_SOLITAIRE/
Seems that the Internet likes to compare these two games. Here they are compared on Slant.io: https://www.slant.co/versus/6230/6231/~tis-100_vs_human-reso...
Another really satisfactory part of the gameplay of TIS-100 was that I sometimes came up with a new optimization to solve a later challenge, and could then go back to my old solutions and get large speedups by applying the same optimization there. It made me play the game nonlinearly and go back and forth between the challenges and trying to improve my code in them. It's just a lot of fun for programming-minded people.
Zachtronics games give me that feeling of zen that is increasingly harder to find in games nowadays - the "Oh dang it is 2am already, I thought it was like 9pm!".
I'd recommend checking out the aforementioned titles, as well as some of the 'other games' on the website[1], like Ruckingenur-II.
Then I lost even more time reimplementing the game in JavaScript and trying to solve the puzzles with genetic programming. I did not get very far. https://github.com/melograph85/tis100
The feeling of "I could be using my time better".
The main difference here, specifically, is that the game has a well defined set of constraints. It is a limited environment with a known correct solution; it has an achievable goal.
There are well defined and measurable metrics, and you quickly learn systematic methods to improve your results with respect to those metrics.
Furthermore, the ability to achieve the goals and improve your stats is entirely within your own control.
Unfortunately, the real world is a mess of subtle complexity. Sometimes not so subtle!
Constraints are poorly defined if at all. Often there is no 'known correct' solution, because most of the time there isn't a well defined problem. Bug reports are a good counterexample to this, however.
Often the metrics aren't defined at all, or different people measure them in different ways. Most of the metrics people care about won't be measured automatically, and you have a limited ability to directly incrementally improve them.
Lastly, your ability to make any impact at all is almost always dependent on other people working with you to that end.
There have been lots of attempts to 'gameify' real-world code development; I wish the world weren't so complex. Sometimes I wish I didn't have that nagging in the back of my head that I could be spending my time better, but to be fair it's probably the one thing that keeps me from getting bored!
I wish there was an environment that could simulate 100s of TIS-100 "cores" but I guess I'd need to write it myself.
They make real world chips that are much like the architectural concept in TIS-100.