不是影评--从《恐怖邮轮》说开去。

Jun 29, 2026

不是影评--从《恐怖邮轮》说开去。

关于“不服”、控制的幻觉,以及我们为什么总想再来一次。

前方自然是大量剧透。

前阵子刚重看过一遍《恐怖游轮》,这两天看到影院重映,又跑去看了一次。

倒也没有冒出什么全新的感悟。更多像是之前模模糊糊抓住的东西,这次变得清楚了一点。

这部电影最显眼的当然是它的循环结构:一个 Jess 看见另一个 Jess,一个事件既是前一轮的结果,又是下一轮的原因。法语里有个词叫 mise en abyme,大约可以理解为镜中镜、故事套故事。程序员则可能更喜欢另一个没那么浪漫的词:递归。

但我自己的感觉更像是万花筒。

每转一下,眼前都像是一个新的世界;再仔细看,里面其实始终是同一组碎片,只是重新换了一个位置。更诡异的是,我们透过这个万花筒看到的不只是 Jess,最后还会在里面看到自己。

当然,网上已经有无数文章在画时间线、数 Jess、解释每一具尸体是从哪里来的。那些挺有意思,不过我这次更在意的不是循环是怎么构成的,而是:

到底是什么东西,驱使她一次次主动重新走进去?

这一次,好像真的不一样

这次看时我印象最深的,是 Jess 第一次发现事情似乎和上一轮不太一样。

她似乎救下了一个原本应该死去的人。至少在那个时刻,她找到了一条不同的分支。

这其实是一个非常危险的时刻。

因为如果每一次尝试都毫无悬念地失败,人可能反而比较容易死心。真正让一个循环难以退出的,往往不是彻底失败,而是它偶尔会给你一点正反馈:

你看,这次好像差一点就成功了。

这个反馈甚至不能说是假的。她确实改变了局部:一个人暂时没有死,一个步骤也确实发生了变化。错的只是从这个事实继续推出的结论——局部可以改变,所以整个系统最终也可以被我控制。

只要再聪明一点、再狠一点、再多来一轮,就能把所有错误修掉。

如果把轮回看成一段程序,Jess 一直以为系统里有一个 bug,只要找到正确的 patch 就可以退出。但慢慢会发现,她不断修补、不断重新执行的行为,本身就是这套程序的一部分。

她不是找不到退出条件。

她是把“再运行一次”误认成了退出条件。

这个结构在现实里其实到处都是。赌博、反复修补一段已经结束的关系、一次次推倒重来的自我改造,甚至我们不断寻找的某种“终极方法”,背后都可能有一点类似的东西。

我在前一篇修车的文章里,其实刚经历过一次小型版本。

从完全不懂车,到会看 OBD 故障码、查论坛、拿 AI 帮忙分析,我确实比最开始懂得多了一点。也正是这“一点”给了我很强的正反馈,让我逐渐爱上了一个关于 CVT 学习参数的解释。后面我看似一直在 Debug,实际上已经不是在求证,而是在不断让 AI 和新信息把我喜欢的答案说得更像真的。

最后的根因却是三元催化器堵塞。前面的知识并非全错,只是我把“比以前多懂一点”,误当成了“我已经开始掌握整个系统”。

反馈是真的,外推错了。

不是完全没有进步。恰恰是因为真有一点进步,我们才更容易相信:再来一次,我就能彻底解决它。

“不服”是一个很准确的词

我前几天和 AI 聊这部电影时,脑子里跳出来一个词:不服

它不只是觉得不公平,也不只是难过。它里面还有一股更硬的东西:

我不承认。

我不接受。

我咽不下去。

我觉得事情不应该这样结束,我还想把它扳回来。

所以“不服”不是一个安静的情绪。它天然带着一种行动冲动:重来、补救、证明、翻案。即使人表面上什么也没做,脑子里也可能在反复模拟——如果当时换一种做法,一切会不会就不一样?

Jess 不服的,也不只是孩子已经死了。

她不服自己曾经是那个会对孩子失控的母亲,不服那样的自己竟然真实存在过,更不服这件事已经成了一个无法撤回的事实。

所以她回到家后,杀掉了那个伤害孩子的自己。

表面上看,她是在阻止悲剧;但从另一个角度,她真正想杀掉的不是“另一个人”,而是已经发生过的自己

只要那个糟糕的我消失了,我就能重新开始。

可过去的自己并不是一个外部敌人。那个自己恰恰是现在这个自己的前因。现在这个看起来更清醒、更痛苦、似乎已经觉悟的 Jess,也并不是一个完成升级的新版本,只是同一个人在循环中的另一个 state。

从系统角度说,杀掉旧 Jess 并没有清理掉历史状态,反而正是生成下一轮 Jess 的步骤。

每杀一次,她都在制造下一个必须被杀死的自己。

所以,杀死过去的自己不是放下,而是继续和自己开战。

很多时候,让过去一直留在场上的并不是记忆本身,而是我们对记忆的抵抗。我们不断告诉自己:

“我早就不是那个人了。”

“我必须彻底摆脱这件事。”

“只要我以后足够成功,就能证明那段过去不代表我。”

但越需要证明,过去就越在场。

现实已经继续往前走了,心却还留在原地打官司。自己是原告,也是被告,还是审判长。这个官司自然可以无限开庭。

这大约就是一种“苦”的轮回。

现实里的轮回可能更长

电影受限于篇幅,只能把循环压缩到一艘船、一次车祸和几组不断重叠的人物里。观众还能靠甲板上的尸体、地上的项链和死去的海鸥,确认这件事已经发生了很多次。

但现实里的轮回可能要长得多。

它可能以几年甚至十几年为单位,场景、人物和理由都换了,以至于我们根本认不出这还是同一件事。

一段关系结束了,换一个人;一份工作失望了,换一个地方;一个计划失败了,设计一套更复杂的新计划。表面上每次都不同,甚至局部也真的有变化,但如果驱动它们的还是同一种恐惧、同一种不服和同一种对“彻底重来”的期待,那么万花筒里的碎片其实没有变。

现实也不会在甲板上整整齐齐地堆出一地尸体,提醒我们:嘿,你已经来过这里很多次了。

于是我们会把它叫作运气不好、遇人不淑、环境不对,或者干脆叫命运。

当然,也不能反过来把一切都解释成“你自己的循环”。外部世界当然有真实的问题,换工作、换城市、离开一段关系,也完全可能是正确的决定。要是什么都归因于自己,那只是把控制幻觉换了个方向——以前觉得什么都能控制,现在觉得什么都是自己的错,内核其实差不多。

真正难分辨的,是我们究竟在处理一个新的现实,还是借着一个新的现实,继续和同一个过去打架。

New Start New Doye

我很早就喜欢一句话:New Start New Doye

从高中,到 QQ 空间、人人,再到自己的笔记,我反复幻想会有那么一个点:跨过去之后,之前的一切都被抛在脑后,那个失败、混乱、没有执行力的自己留在旧世界里,从此终于可以心无旁骛地做自己真正想做的事情。

新的城市,新的工作,新的关系,新的计划,甚至只是一个新的星期一,都可能被我当成那个 refresh 点。

从这个角度看,我也一直有自己的《恐怖游轮》。

我倒不是说“新开始”全是假的。环境确实会改变人,一个新的机会也确实可能打开原来没有的路径。问题在于,我们很容易给一个出口叠加太多功能:它既要解决职业问题,又要修复自信;既要带来新的关系,又要替过去翻案;最好还顺便回答一下活着的意义。

然后现实只要给出一点正反馈,我们就更加确信:

你看,这次真的不一样。

可很多时候,改变的只是场景。那个带着旧问题、旧执念和旧期待的自己,也一起登上了船。

认过去,不服未来

所以停止轮回的方式,可能不只是轻飘飘地说一句“放下过去”。

“放下”说起来太容易了。真正困难的是承认:

那件事确实发生过。

那个糟糕的人确实也是我。

有些伤害无法撤回,有些关系无法恢复到从未破裂的状态,有些代价只能承担。

接受不是原谅一切,也不是替过去合理化,更不是承认“它本来就应该这样”。接受只是停止要求一个已经发生的事实,重新变成没有发生。

作为程序员,我们很容易幻想人生也能执行一次 git reset --hard:删掉那段混乱的提交,回到一个干净版本,再重新开始。

但现实更像一个已经产生外部副作用的分布式系统。本地代码可以回滚,后面的版本也可以继续修,但已经发出去的消息、已经写进别人生命里的东西,不会因为本地恢复了干净就自动消失。(嗯,现实的系统设计显然不怎么照顾用户体验。)

我们没有修改所有结果的 Root 权限。

真正拥有的,可能只有对下一步行动方式的有限权限。

这也是我现在对“不服”的一个粗糙区分:

面向未来的不服,可以是动力——我承认已经发生了,但我不想以后还这样活,所以愿意调整、训练,下一次做出不同的选择。

面向过去的不服,则更容易成为轮回的发动机——我不承认这件事已经发生,我必须把它抹掉、洗白,或者用后面的成功证明当时的失败从未定义过我。

该认的是过去。

该不服的是未来。

这两句话看起来很像,方向却完全相反。

第一次不上船

十年前写“七十七个为什么”系列时,我很喜欢把问题拆成 why 和 how。那时大约相信:只要把前因弄清楚,那些“道理”和方法就会变得更有用一点。

现在倒没有那么乐观了。

知道 why 不等于就做得到 how。看懂 Jess 为什么一次次登船,也不代表轮到自己的时候,手就真的能松开。

我大概还是会反复把希望压在某个新起点上,也还是会在事情不如预期时,下意识地想:是不是再来一轮、再规划完整一点,就能把一切彻底改对。

理念可能是懂了,执行大概率不会立刻变好😅。

但至少,下一次那个熟悉的念头出现时——

再来一次,这次一定不一样。

也许可以先停一下,问问自己:

我现在是在改变未来,还是在否认过去?

我是在解决一个仍然可以解决的问题,还是在用新的努力覆盖一件已经无法撤回的事?

真正的出口,不一定是终于得到一个完美结局。

它可能只是某一次站在码头上时,第一次不再要求现实给我另一个过去。

第一次,不上船。

是为记。

https://blog.doye.one/posts/feed.xml