5 ms·
I don't mean to derail the conversation, but this really does remind me of the game Factorio, though sort of in reverse. In Factorio, you build a larger and la
by ledauphin 6y ago
I don't mean to derail the conversation, but this really does remind me of the game Factorio, though sort of in reverse.
In Factorio, you build a larger and larger factory out of pre-established functional components (assemblers, labs, chemical plants, etc) that take in a limited set of inputs and produce (usually) a single output. Your challenge is not to define the functional core processes, but instead to wire together those functional components by connecting their inputs and outputs in ever-more-automated fashion, starting by hand, then using simple belts (pipes) that eventually allow arbitrary load-balancing via "splitters", and eventually through to trains (the forking and load balancing happening via backpressure in the train system) and robots (where everything is managed essentially as a single state database of requests, and backpressure is provided by output limitations, usually per functional component).
Naively, I think that someday a decent chunk of programming might actually look like this, and parts even be represented visually (though in my opinion likely still defined formally as text). Only I think programmers will continue to write the functional components themselves, unlike in Factorio. They'll just live on different levels of the "codebase", and the "pipes" level will likely be a lot more abstracted than it is in Factorio.
As a software developer, I find this paradigm to map very well to serverless architectures, because you generally want to think a level higher than the per-machine basis. It does require a willingness to forgo handy and well-established tools like the filesystem and Unix pipes in favor of higher level abstractions around transfer and storage of data.
- freeqaz 6y agoYou have, from first principles, reconstructed a huge portion of my thought process for building https://refinery.io https://refinery.io Factorio and Minecraft automation mods are a big inspiration! Check out InfiniFactory too :) Bridging existing applications to the Serverless paradigm is far from simple. That's one of the biggest struggles I've experienced trying to build a Flow-based software platform. Learn more every day though. Thank you for the interesting comment!
- mikewarot 6y agoI took a look at your site (refinery.io), and the "watch demo" is really a "read introduction"... I was expecting to sit back and let you show me 10-15 minutes of video that sells the idea. It looks very professionally done, but reading screens isn't as easy as it used to be for me, a video is better. Good luck!
- freeqaz 6y agoThank you for the thoughts! I really should sit down and record a video. I'll figure out how to get that put together soon :)
- dgb23 6y agoAnother video game that works similarly is Oxygen not Included. One of the most compelling arguments for a data-flow/flow-based programming is the mental model and the visualization aspect of it. This opens up opportunities for monitoring, visual, data-driven programming and it is white board friendly. In Elements of Clojure[0], the author discusses the concept of "principled components and adaptive systems". And a flow based design reminds me of exactly that. The semantics of composition and communication are well-defined and universal, but internally the components can (should) be specific and concrete. Similar can be said about Small Talk as well. A primary aspect of its design was the mental model, understanding and learning. The core idea was that learners (especially children) understand things in terms of their operational semantics. > I don't mean to derail the conversation, but this really does remind me of the game Factorio, though sort of in reverse. So no, I don't think this is a derailment, but likely one of the most important aspects of paradigms like this. [0]https://elementsofclojure.com/ https://elementsofclojure.com/
- ledauphin 6y agothank you for making this connection - I had recently been reading Elements of Clojure and noticed the concept of principled components, and I had been slowly working my way towards this realization/analogy myself.
- lincpa 6y agoThe Grand Unified Programming Theory: The Pure Function Pipeline Data Flow with principle-based Warehouse/Workshop Model https://github.com/linpengcheng/PurefunctionPipelineDataflow https://github.com/linpengcheng/PurefunctionPipelineDataflow