
过去发生过的事,为什么一点都改不了?——因为代码指针只能向前,而记忆不像代码。
本系列第 3/5 篇:程序员眼中的人心。
一件小事让我卡住了
上周项目上线出过一次故障。我查完日志、定位到原因、改完、验证通过,前后三个小时。
然后我坐在那儿,又花了两个小时想:如果当初那句判断写成另一个样子呢。
这两小时我一行代码都没改。那三个小时已经过去了,它不接受任何修改。
过去是个只读文件
在代码里,这件事有非常干净的对应物:版本控制里的历史,只能读,不能改。
你可以看任何一个 commit,看它改了什么、为什么改。你可以随时 checkout 到任何一个历史版本。但你不能修改三年前的某一行,不能让它改掉之后世界就变一变。
想改变一个已经提交的东西,唯一的办法是往前走:改今天,写一个新 commit,让历史变成"当时是这样,后来我改成了那样"。
程序只有一种修历史的方式——追加,不是编辑。
记忆不是只读文件
那问题来了:既然过去看不得也回不去,人为什么还能一遍遍"改写"它?
因为记忆不像代码。
代码里每次提交都留痕,改了什么都写着,不会被后来的动作抹掉。记忆不是这样。记忆是每次被回忆的时候,用此刻的情绪和此刻的理解,重新渲染出来的一份。
所以同一件事,你二十岁想起来和四十岁想起来,根本不是同一件。它没有 commit hash,没有 diff,没有 git log。它每次打开都是最新版本,而且每次都悄悄改过。
过去不是被保留下来的,过去是被反复重写的。
失真在哪里
这也是为什么"回忆过去"越舒服,越值得警惕。
我后来专门查过一件事,纠正了一个我记了十几年的错误:某个重要项目的关键决策,我先前的记忆里一直归给某个人的功劳。翻出当年的邮件才发现,是另一个人写的方案,我只是执行了。
大事件我记得住。失真发生在细节、动机和情绪这三处。 动机被重新审判,情绪被重新配色,细节被重新编剧。
这也是"玫瑰色回忆"的来处:不是我们记错了,是我们每次回忆时都在往好的方向改一行。
今天可以试的一件事
拿一件你反复回想、每次都带着遗憾或得意的事,写下三行:
事实是:____(不带评价,只写发生了什么)
我给它加的解释是:____
这个解释是从哪一年的我嘴里说出来的?
第三行往往会让你沉默一下。
(下一篇讲那个更狠的部分:既然回望会改写过去,那我们到底该怎么看它。)
上一篇:《会说话就能写代码》 · 下一篇:《回望即重写》
← 上一篇回望即重写
评论0