My new favorite game is Factorio (http://factorio.com). It's like a cross between Minecraft, SimCity, and Civilization, and the result is massively better than any of them. The game is currently in "alpha", but I'm not sure why; it's far more polished and less buggy than many finished professional games I've played.
Overhead view. Like Minecraft, you start out punching trees for wood to craft a pickaxe with which you can then mine some ore to craft other things. But soon, you are building an automatic mining drill, then a conveyor belt to bring the ore to a smelting furnace, then robot arms to insert the ore into the furnace and take the smelted bars out, then more conveyor belts to bring those to other places where thy can be used. Eventually you can build power plants, labs to research new technologies, walls and turrets to defend against attackers, oil refineries, robot delivery drones, trains, and more.
The game is incredibly addictive (especially for programmers?). But what really impresses me is how the game illustrates the complexity of the real world. Factorio is a lesson in how logistics trump tactics and strategy ("strategy is for amateurs, logistics are for professionals"), and in how to build a complex system for changing requirements. The lessons are broadly applicable to the real world.
It's fairly easy to analogize Factorio to city planning. In your first game, you will quickly discover that the city you built for the early game is all wrong for the late game -- and then you realize: every real-life big city is a horrible mess and this is exactly why.
I also find myself comparing Factorio to software, especially distributed systems and networks. I find myself constantly using phrases like "buffer", "flow control", "back pressure", "throughput", "refactor", "under-utilized", etc.
One transition I find particularly interesting: around the middle of the game, you research the ability to build "logistics drones", which are basically like Amazon's quadcopter delivery drones. They can transport materials from point to point around your base -- you set up "request" points and "supply" points, and the drones pick up whatever items land in the supply points and bring them directly to whichever requester is requesting that item.
Up until this point, you mostly use conveyor belts for this task. When you first get logistics drones, you think "These are WAY more expensive than conveyor belts and have much lower throughput. Why would I ever want them?" But you quickly realize that the advantage of drones is that they are rapidly reconfigurable. Once your base is entirely drone-based, you can switch factories to build different items on a whim -- no need to re-route any conveyor belts. This gets more and more important in the late game as the number of different types of things you are building -- all with different input ingredients -- increases, and maintaining a spaghetti of conveyors becomes infeasible. This is tricky to grasp until you do it.
For a while, of course, you'll have part of your base running on drones while another part is still based on conveyors. It's like using Google Flights in your browser to search for airline tickets, while on the back end it is integrating with 60's-era mainframe-based flight scheduling software.
I can't help but imagine that conveyor belts and logistics drones represent two different programming languages (or, maybe, programming language paradigms). Choosing your programming language based on how easy it is to do something simple is totally wrong. The true measure of a good language is how it handles massive complexity and -- more importantly -- reconfiguration over time.
Another thought: In 10-20 years, when we have everything delivered to our houses via drones and self-driving taxis populating every major street, will we be able to just get rid of small residential side-roads? You won't need to drive a car up to your house anymore: it's easy enough to walk a couple blocks to the nearest major street and hop in a cab, or better yet to a train station. You don't need to carry cargo since it's delivered by drones. Delivery trucks: also replaced by drones. Will we suddenly be able to reclaim a ton of inner-city space? What will we do with it?
In any case, thanks to +Michael Powell and +Brian Swetland for introducing me to this game!
PS. Factorio is multiplayer! We've been having a lot of fun with it at LAN parties, and I just completed a coop game with +Jade Q Wang, who is also addicted. We tend to forget to do things like eat or sleep when we're playing.
To your point about drones vs. conveyor belts as programming paradigms: I think belts are procedural while drones (and chests) are declarative. With belts, you have to layout routes and concern yourself with coupling (belts literally getting tangled with each other) between different steps in your automation. With drones and chests, you can just set demand for a given input and trust that it will happen. I try to use drones for the most expensive components because that gives the most throughput. Yes, this game is "crack for programmers".
Indeed. And much like my opinions on imperative vs. FP, I have now come around and no longer like logistics drones very much. :P
In the last year of playing Factorio I've learned that it's much more efficient to build your base in units of several factories that are directly connected to each other and balanced such that each factory is consuming inputs at exactly the rate the producers are producing them. Within these units, you can often avoid having either belts or drones, because you're moving items directly between neighboring factories.
With this approach, the problems of flow control, congestion, etc. are vastly reduced (they only matter between units, not within a unit). If you're using drones, you need far fewer of them. But honestly I usually prefer to just use belts because it's really hard to understand and debug throughput issues in logistics networks (... much like Haskell).
I'm pretty sure there is a programming analogy here but I'm not going to think too hard about it right now. :)
Nah, you've just re-discovered Just In Time and the Theory of Constraints. You've read "The Phoenix Project," right? Go read "The Goal" by Eliyahu Goldratt. TPP was based on The Goal, and reading both illustrated how many of the solutions that software development experts have landed on to improve productivity and the chance of a successful project are the same as the manufacturing problem solutions that manufacturers landed on twenty to thirty years ago.
I have a degree in logistics, but I work as a scripting-heavy systems engineer. My hobby is home construction, especially building systems like drainage planes, vapor management in walls, and structured wiring and plumbing. It's literally all the same thing with almost identical sets of problems.
Wow! I remember reading your original lan build blog! I did not live in the Bay Area at the time but it definitely defined how I imagined the software world out here.
This is going to be a shameless ask but if you ever need an extra person for a lan event I would love to fill that spot.
When I have been programming the whole day at work, cranking my stress/anxiety levels up, then playing an "automation game" does not sound very compelling, to be honest :)
I remember reading a story about farmers who like to play farming simulator games in their off time and truck drivers who like truck driving games. It was kinda weird, but it seems that people who found employment with something they enjoy will have fun playing games simulating their day jobs but without the stress and consequences (and annoying bits that reality forces us to deal with).
I would have thought the same thing, especially given that I used to play Starcraft 2 but stopped because it was too stressful, however a friend of mine introduced me to factorio, and it is actually very relaxing.
> Another thought: In 10-20 years, when we have everything delivered to our houses via drones and self-driving taxis populating every major street, will we be able to just get rid of small residential side-roads?
To nitpick one small part, yes, we will, because ambulances and fire trucks still need to be able to get around, and helicopters are typically cost-prohibitive.
Does this mean: not significantly more addicting than other games but used primarily by a minority so punishment is 100 times worse due to scare stories bred by systematic racism?
This has been the most popular game at my LAN parties (http://kentonshouse.com) for the last year and a half. Here's a review I wrote in December 2014 that still applies (original at https://plus.google.com/+KentonVarda/posts/YHayo6sj42n):
My new favorite game is Factorio (http://factorio.com). It's like a cross between Minecraft, SimCity, and Civilization, and the result is massively better than any of them. The game is currently in "alpha", but I'm not sure why; it's far more polished and less buggy than many finished professional games I've played.
Overhead view. Like Minecraft, you start out punching trees for wood to craft a pickaxe with which you can then mine some ore to craft other things. But soon, you are building an automatic mining drill, then a conveyor belt to bring the ore to a smelting furnace, then robot arms to insert the ore into the furnace and take the smelted bars out, then more conveyor belts to bring those to other places where thy can be used. Eventually you can build power plants, labs to research new technologies, walls and turrets to defend against attackers, oil refineries, robot delivery drones, trains, and more.
The game is incredibly addictive (especially for programmers?). But what really impresses me is how the game illustrates the complexity of the real world. Factorio is a lesson in how logistics trump tactics and strategy ("strategy is for amateurs, logistics are for professionals"), and in how to build a complex system for changing requirements. The lessons are broadly applicable to the real world.
It's fairly easy to analogize Factorio to city planning. In your first game, you will quickly discover that the city you built for the early game is all wrong for the late game -- and then you realize: every real-life big city is a horrible mess and this is exactly why.
I also find myself comparing Factorio to software, especially distributed systems and networks. I find myself constantly using phrases like "buffer", "flow control", "back pressure", "throughput", "refactor", "under-utilized", etc.
One transition I find particularly interesting: around the middle of the game, you research the ability to build "logistics drones", which are basically like Amazon's quadcopter delivery drones. They can transport materials from point to point around your base -- you set up "request" points and "supply" points, and the drones pick up whatever items land in the supply points and bring them directly to whichever requester is requesting that item.
Up until this point, you mostly use conveyor belts for this task. When you first get logistics drones, you think "These are WAY more expensive than conveyor belts and have much lower throughput. Why would I ever want them?" But you quickly realize that the advantage of drones is that they are rapidly reconfigurable. Once your base is entirely drone-based, you can switch factories to build different items on a whim -- no need to re-route any conveyor belts. This gets more and more important in the late game as the number of different types of things you are building -- all with different input ingredients -- increases, and maintaining a spaghetti of conveyors becomes infeasible. This is tricky to grasp until you do it.
For a while, of course, you'll have part of your base running on drones while another part is still based on conveyors. It's like using Google Flights in your browser to search for airline tickets, while on the back end it is integrating with 60's-era mainframe-based flight scheduling software.
I can't help but imagine that conveyor belts and logistics drones represent two different programming languages (or, maybe, programming language paradigms). Choosing your programming language based on how easy it is to do something simple is totally wrong. The true measure of a good language is how it handles massive complexity and -- more importantly -- reconfiguration over time.
Another thought: In 10-20 years, when we have everything delivered to our houses via drones and self-driving taxis populating every major street, will we be able to just get rid of small residential side-roads? You won't need to drive a car up to your house anymore: it's easy enough to walk a couple blocks to the nearest major street and hop in a cab, or better yet to a train station. You don't need to carry cargo since it's delivered by drones. Delivery trucks: also replaced by drones. Will we suddenly be able to reclaim a ton of inner-city space? What will we do with it?
In any case, thanks to +Michael Powell and +Brian Swetland for introducing me to this game!
PS. Factorio is multiplayer! We've been having a lot of fun with it at LAN parties, and I just completed a coop game with +Jade Q Wang, who is also addicted. We tend to forget to do things like eat or sleep when we're playing.