为什么每个软件工程师都应该玩 Factorio
文章摘要
这是开发者 Ahmed Hossam 于 2026 年 9 月 10 日在个人博客上发表的一篇短文,阅读时间约 4 分钟。他借自己玩自动化工厂游戏 Factorio 的经历,讲游戏里反复遇到的问题如何对应软件工程中的瓶颈、负载均衡、队列和可观测性。
入坑经过。 朋友 Yousef 带他入了门。两人一开始一起玩,Yousef 教他熬过了最让人困惑的第一个小时,他说要是没有朋友,自己多半早就放弃了。之后他停了一段时间,服完兵役后又一个人重新拿起来。这次他陷进去了:修好一个问题,就发现别处又出了问题,铁矿太慢,熔炉跟不上,传送带满了……一个接一个地修,完全忘了时间。他说 Factorio 一开始很简单:挖点铁和煤,造一台钻机和一座熔炉,然后慢慢把事情自动化。
瓶颈总在移动。 早期他总想「我需要更多铁」。他加了钻机,矿石来得比熔炉处理得还快;加了熔炉,传送带又太慢;解决传送带之后,组装机跟不上;再后来轮到铜成了问题。熔炉已经满载时,再加钻机毫无帮助。他说软件里的这个道理他早就熟悉,但在游戏里亲眼看着它发生,更容易察觉。
分配不均其实是负载均衡问题。 一条传送带给好几台组装机送铁,排在前面的机器有时会把铁全拿走,后面的只能闲着。铁其实够用,问题出在布局。他加了分流器、调整了传送带,让各台机器拿到的铁更平均,做着做着才意识到,自己想问题的方式就是负载均衡。
队列就在传送带上。 在软件里,他通常是在仪表盘或日志里看到队列;在 Factorio 里,传送带本身就是队列。矿机产出超过下一环节的消耗时,传送带会被塞满,最终上游机器的产出无处可放。他可以放一个箱子,让东西暂时又动起来,这给了多余物品一个去处,但并没有让下一台机器变快。他觉得这很像给一个慢消费者加一个更大的缓冲区。
机器多了,供给也要跟上。 加机器有用,但还得给它们足够的矿石,并把产出送到有用的地方。于是他不再只盯着刚加的那台机器,而是开始检查它前后发生的事情。
工厂越大越难理解。 起初调试很简单:走一圈,看哪里断供了,修好就行。后来火车、机器人和生产线铺满了大半张地图,一台机器停工可能是因为很远处的某个问题。他开始越来越频繁地查看生产统计,因为只看一台机器已经不够。这让他想到软件里为什么需要可观测性:系统大到一定程度,就不可能只看某一部分来理解全局。
永远有下一个设计可以尝试。 Reddit 上的 Factorio 社区满是分享蓝图、调试火车信号、展示比他的工厂大得多的作品的人。有些「巨型基地」像城市,有些在他看来像 CPU 内部,重复的模块之间由一条条线路搬运东西。没有唯一正确的工厂,有人为了优化花了 5000 多个小时。他理解这是怎么发生的:总还有一件事要修,时间就这样不知不觉溜走了。
结语。 他喜欢 Factorio,是因为可以造点东西、看它卡在哪里、修好它,然后在别处发现新问题,「不知怎么的,我就能这样玩上好几个小时」。文末他推荐了 Tony Zhu 的视频《Factorio teaches you software engineering, seriously》(YouTube),说标题听起来像玩笑,但重新玩过之后,他明白了人们为什么会把两者联系在一起。
HN 评论精华
这篇文章在 HN 上只有 10 分、6 条评论,其中一半是作者 ahmedhossamdev 本人的回复,讨论很少。
COBRA77 只说了一句「确实是个挺酷的游戏」,作者回了个「yep!」。
唯一有些内容的交流来自 bovermyer。他先夸这篇写得不错,然后说自己试过 Factorio,但吸引一部分人的那一点恰恰把他劝退了:「我平时已经花够多时间管理系统、优化负载之类的了,不需要在闲暇时间再干一遍。」这是很多工程师对这类游戏的典型保留意见。作者回应说自己也做系统方面的工作,但 Factorio 对他来说不一样:它是可视化的、动手的,而不是抽象的架构图,所以感觉完全不同。bovermyer 觉得这个说法有道理,还说这也许就是他能接受 Satisfactory、却玩不下去 Factorio 的原因:Satisfactory 是第一人称视角,更有「动手」的感觉。作者表示 Satisfactory 也是好游戏,自己也想试试。