
我出生于1982年。5岁时,我第一次玩《超级马里奥兄弟》 ——当时我的手刚好够大,能按到所有的按钮。等到超级任天堂和世嘉Genesis问世的时候,我的手也随着游戏手柄一起长大了。
对我来说,那才是电子游戏的黄金时代。我会花无数个小时一遍又一遍地玩初代《塞尔达传说》(NES)。有时候,我会花好几个星期仔细探索《塞尔达传说:众神的三角力量》(SNES)的每一个关卡,寻找那些在游戏不同阶段本不应该进入的区域。我会挑战自己,只用超级冲击炮(Mega Buster)击败《洛克人2》 (NES)中的所有Boss。我还会玩《大金刚国度》 (SNES),力求达到101%的完成度——找到隐藏在隐藏房间里的另一个隐藏房间。
现在回想起来,我好像玩这些游戏玩了好几年,但实际上每款游戏可能只玩了几个星期或几个月。有一段时间,我想自己制作电子游戏。我喜欢那种人们享受我倾注心血的作品的感觉——即使他们甚至不知道我是谁。
有一款游戏深深地吸引了我,那就是《模拟城市 2000》 (Macintosh 版)。
从玩家到创作者
《模拟城市》是一款城市建造游戏,也是该类型的首款游戏。 《模拟城市经典版》于 1989 年发布,随后于 1993 年推出了适用于 Windows 和 Mac 系统的《模拟城市 2000》 。
它的运作方式如下:
游戏开始时,你将面对一片随机生成的空白土地。你可以掷骰子,让它生成拥有更多山脉、森林、河流、海洋的地形,或者逐块调整。
一旦地图确定,你就可以自由地建造你的城市了。但建造城市的方式并非像你想象的那样放置单个建筑。你需要将区域划分为住宅区(绿色)、商业区(灰色)或工业区(黄色),并为其提供电力和水源,然后静待人们入住。

那是我第一次为自己制作东西,并希望人们会喜欢它。
随着人口增长,您的人口也会增加——税收收入也会随之增长。有了这些资金,您可以建设更多公共服务设施,以吸引更多人移居海外。例如,建设警察局和消防站以保障民众安全;建设学校和学院以继续教育;建设公园和码头以休闲娱乐;以及建设道路、高速公路、铁路和地铁以方便人们出行。

随着城市发展,总会遇到瓶颈需要解决。人口密度激增,需要更多警力。由于就业机会或劳动力不足,建筑物会被废弃。税收过高,人们纷纷迁往其他城市。污染、犯罪、通勤时间以及其他因素都会导致人口变化。如果忽视这些问题,你的城市将会遭受损失。
当我使用纸张作为我的第一个集成开发环境时
我对《模拟城市2000》简直到了痴迷的程度。我醒着的每一分钟都在玩,甚至晚上都让家里的电脑开着,这样我早上醒来上学前就能看到游戏里有很多钱(和发展成果)。
我当时读八年级,还记得在上学的公交车上,用大学用的横格纸和铅笔绘制模拟城市地图的原型。那是我第一次制作原型。
回到家后,我会把纸上的设计图转移到我的城市里,看着它变成我脑海中想象的样子。
这种满足感是我以前从未体验过的。
我停止玩模拟城市的那一天
以下内容涉及《模拟城市2000》结局剧透。
玩了几个月后,我发现几乎所有能利用的方格都被巨型建筑(建筑生态学的简称)占据了。巨型建筑是游戏后期新增的内容,允许你在4×4的狭小区域内建造可容纳7万人的未来主义建筑。

一天早晨,我像往常一样醒来查看我的城市,准备去上学。令我震惊的是,我的城市消失了!取而代之的是数百个陨石坑,那里曾经是我建造的巨型建筑群。恐慌过后,我意识到这就是结局。我的巨型建筑群已经发射升空,进入了太空——这是它们旅程的下一步。
那时还没有 Chat GPT(甚至还没有 Google),所以我了解事情经过的唯一方法是在雅虎上找到一个解释结局的网站。
从游戏到游戏网站
大学时我迷上了劲舞革命(Dance Dance Revolution)。我创建了一个网站,上面有很多劲舞革命的统计数据和一个phpBB论坛,这个论坛后来成为了美国东南部玩家的首选社区(劲舞革命是一款非常注重社交的游戏)。

这个网站的代码在 GitHub 上。它很糟糕。糟糕到什么程度呢?糟糕到“我不知道 SQL 有 ORDER BY 子句,所以我把所有数据都拉回来,然后在 PHP 里排序”的地步。
但是,搭建这个网站的过程让我感觉和玩模拟城市2000很像。
在这两种情况下,我都会为用户构建无需我干预即可遵循的路径。看到数据和体验被组织成用户实际遵循的路线,这种感觉令人兴奋!
创造这些体验让我着迷。从那时起,我做了不少项目,每个项目我都力求重现《模拟城市2000》的感觉。
进入 Ruby on Rails 的世界
早在 2005 年,我就听说了 Ruby on Rails 并开始学习它。它极大地加快了我的开发速度,这是其他任何技术都无法比拟的(至少在最近使用 Claude Code 之前是这样,但这又是另一个话题了)。
从那时起,Ruby on Rails 就成了我工具箱里的必备工具,让我能够重新找回那种创造世界的感觉。
20 年过去了,我依然在构建世界。最近,我白天在Libro.fm为人们构建收听有声读物的路径,晚上则在Hardcover为人们创造发现书籍的路径。
SimCity作为系统设计入门指南
玩模拟城市游戏所磨练出的技能可以直接应用于网页开发——即使我上中学时并没有意识到这一点。
为你的城市选择地形就像选择你的底层架构。对我来说,Rails 就是我的起点。
在笔记本上画城市草图,当然就是在为你的应用做原型设计。你是在制定实施计划。
为你的城市制定区域划分方案,就好比选择城市功能。你是在为用户做出选择,决定他们可以做什么以及在哪里可以做。
你每年收到的报纸就是你的产品反馈。忽视它,后果自负;而遵循它,则能让你始终了解用户的需求。
发电厂是你们的基础设施。没有它们,你们就会停电。一旦出现问题,所有人都得全力以赴。
道路、地铁和高速公路就是你的信息架构。用户将通过这些架构出行。如果架构出了问题,所有人都会寸步难行。
水和污水处理是你的后台工作和异步进程。它们不在你的视线范围内,你也不会注意到它们——至少在它们正常运行的时候是这样。
税率就是你的产品定价。税率太高,人们就会大量流失。
警察、消防员和医院负责错误跟踪、警报和可观察性,以确保一切顺利运行。
当然,灾难就是灾难。
你的决定至关重要
无论是《模拟城市2000》还是软件开发,任何单一的决定都不会立即带来成功。只有精心安排这些决策,使它们协同运作,才能创造出和谐的成果。
任何系统都会存在瓶颈。就我的大多数项目而言,瓶颈在于如何首先吸引人们的注意力。无论你是玩模拟城市游戏,还是为数百万用户构建应用,只要你能理解系统的需求并专注于此,你的系统就能发展壮大——前提是你给它足够的时间。
原文: https://adamfortuna.com/from-simcity-2000-to-ruby-on-rails
