Factorio is like a distillation of programming so as to retain the fun parts and minimise the unfun parts.
What do I mean by the unfun parts of programming? Real-world stuff that you inevitably have to deal with but which distracts from the core purpose.
Things like: discovering a bug in a library you depend on; dealing with hardware issues; changing requirements; disagreements with colleagues over tooling; deadlines; dealing with users; ...