林圆把代码打印出来的时候,窗外正在下雨。
那是他二十四岁生日后的第三天。打印纸一共三页,每一行代码后面都跟着他亲手写下的注释——用红笔,工工整整,像在写遗书。
他把这三页纸折好,放进一个牛皮纸信封,信封上写着三个字:致爸妈。
然后他打开电脑,让那个程序跑起来。
程序很短,他看了很多遍,每一行都记得。注释很长,他写了很久,每一行都记得。
#include
#include
#include
int main() {
// “那个”想法的存在,从很久以前就开始就有,什么时候?我不知道,它不是突然有的。但是现在,它一直都在。
bool hasSuicidalThought = true;
// 我知道这样想不对,我知道。我希望自己不这样想。
bool awareness = true;
// 但我控制不了,我试过,但一个人无法完全控制自己的思维。
bool selfControl = false;
// 外界的干预,你们管这个叫关心,我叫它干预。
bool intervention = true;
// 死了没有?当然,还没有,暂时的。
bool isDead = false;
// 情绪崩溃了没有?也没有,暂时的。
bool emotionalBreakdown = false;
// 我活了几岁,从0开始。
int age = 0;
// 我积累的心理压力,从0开始。
int stress = 0;
// 什么时候会出意外。不是自己能决定的,老天随机选一个数。
// 可能出生就夭折,可能在青壮年,可能在寿命自然耗尽之后都还没出现这个意外,没人知道。
std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());
int accidentAge = rng() % 200 + 1; // 1到200岁之间的某个数字
// 只要没死,并且还有“那个想法”,这个循环就不会停。
while (!isDead && hasSuicidalThought) {
// (开头)检查是否死亡:活到一百岁(如果我的寿命是100),自然老死。或者活到那个“意外年龄”。
if (age == 100 || age == accidentAge) {
isDead = true;
// 告诉这个世界:我在多少岁死了,怎么死的。
if (age == 100) std::cout = 100) {
// 超过这个界限,精神情绪崩溃变成了现实。
emotionalBreakdown = true;
// 告诉这个世界,我扛不住了。
std::cout << "情绪崩溃,";
// 崩溃之后,把“意外年龄”变成现在。这是我唯一能自由决定的事情了。
accidentAge = age;
// 立刻跳回循环(开头),检查是否死亡。
continue;
}
// 唯一的生路:意识到问题,并且有自控力。
if (awareness && selfControl) {
// 满足条件,就能把有“那个”想法变成没有“那个”想法。
hasSuicidalThought = !hasSuicidalThought;
// 然后跳出循环,活下来。
break;
}
// 外界的干预。比如你们问我“要不要再吃一碗”。
if (intervention) {
// 每一次,都会让我再次意识到“不该这样想”。
awareness = true;
// 但干预的实际结果是不可控的:可能让心里轻松一点(心理压力减10),也可能更堵(加10)。
stress = stress - 10 + (rng() % 21);
}
// 谈不上健康地活了一年,年龄多了1岁。
age++;
// 活着的每一年,心里都会多装一些东西。随机地,或多或少。也许是“别人都已经……你还……”的话语,也许是“你怎么这么矫情,太脆弱了”,也许,是一个在意之人的离去。
stress += (rng() % 10);
}
//解脱了
return 0;
}
他写完最后一个注释,把笔帽盖上,碰掉了某个物品。房间里很安静,只有雨声,和清脆的物品落地声。
他低头捡起来,那是一个圆环项链,是奶奶给他的。
奶奶不识字,看不懂这些。但奶奶会做一件事——每次吃饭,她都会说同一句话:“再吃一碗,就这么点怎么可能吃得饱。”
她不会问“你要不要”。她直接说。说完就端起碗去盛,不管你碗里还剩多少。你拦不住她,因为她是奶奶。
林圆从来没有对奶奶说过“不”。不是因为顺从,是因为他知道,奶奶的“再吃一碗”里没有询问,没有尊重,也没有不尊重。奶奶只是怕他饿。奶奶经历过三年自然灾害,她见过人饿死的样子。那个恐惧刻在她骨头里,变成了一种本能——塞饱每一个出现在她饭桌前的孙儿。
奶奶从不说“我尊重你的意见”,因为她根本不知道什么叫意见。她只知道,爱一个人就是让他多吃。奶奶也压制他的自由意志——但那种压制是透明的,像一块玻璃,你撞上去会疼,但你知道那是一块玻璃。它不伪装,不问你“要不要”,不说自己“开明”。
爸妈不一样。
爸妈总是先问:“要不要再吃一碗?”
他说不要。
爸妈再问:“要不就再来一碗?”
他说不要,饱了。
爸妈又问:“下一餐会比较久,再吃一碗吧?”
他说不需要,饿了带点面包饼干就行。
爸妈说:“面包饼干哪有饭菜,健康还是再来一碗吧。”
他曾经问过:“如果我的意见不重要,那你问我的意见的意义是什么?”
爸妈说:“不应该这样想。爸妈不是这个意思。”
他再被提醒:“是啊,我不应该这样想”。
然后?没有然后了。
他后来不再问了。他学会了一个字:“行。”然后撑到想吐。
爸妈说他们是开明的,因为他们上过大学,去过大城市,不像老家那些叔叔伯伯。他们不会强迫他做什么。他们只是反复地、温柔地、不厌其烦地问,问到他的“不要”变成“行吧”。
这叫尊重发言权吗?林圆不知道。他只知道,奶奶从来没问过他,奶奶直接盛饭。而奶奶走后,他反而觉得那种直接的、不伪装的压制,比这种“我尊重你”要干净得多。
奶奶去年走了。
葬礼上,爸妈哭得很伤心。林圆也哭了——这个世界上最后一个不跟他讲“开明”的人,没了。
林圆按下了debug键。程序开始跑动。黑色窗口里,数字在跳动。
age = 0, stress = 2
age = 1, stress = 7
age = 2, stress = 14
……
他盯着屏幕,像一个旁观者在看别人的命运。但每一行stress的增加,他都认识——那是小学时被老师说“你不够努力”,那是初中时被同学孤立,那是高中时爸妈说“我们供你读书多不容易”,那是大学时每一次回家饭桌上的循环。
age = 10, stress = 51
age = 11, stress = 58
……
他看到intervention那一行在反复执行。有时候stress降了一点,他松一口气。随机又回到高处,他胸口发闷。
age = 20, stress = 88
age = 21, stress = 93
age = 22, stress = 99
下一秒,stress加了一个随机数,变成了104,程序进入了崩溃分支。输出窗口第一次出现了字:“情绪崩溃,”。
程序紧接着按照设定跳回了循环开头。输出窗口再次出现输出:“死于意外,在22岁。”
程序跑完了,它不再继续动了。
林圆看着屏幕,愣了几秒。他今年24岁——程序里的自己,两年前就已经死了。
他笑了。那笑容很轻,像是什么东西终于断了。
他把打印纸装进信封,放在电脑旁边。然后拿起手机,给爸妈发了一条消息:
“爸妈,我写了一点点东西,在电脑桌上。你们有空看看。”
然后他关掉手机,穿上外套,走进雨里。
他没有带伞。
第二天早上,林父林母看到消息时,已经是上午十点。他们推开门,房间里没有人。电脑屏幕是黑的,但主机还亮着。信封在桌上,六页打印纸。
林母先拿起来看。她看不懂代码,但她看得懂红色的注释。
她看到了“死亡”,手开始抖。
林父也凑过来读,一起,一字,一句。
信读完了,林母出声问:“这是到底什么意思?小圆在说什么?”
林父没有回答。他按下电脑的空格键,屏幕亮了。黑色窗口还在,最后一行字静静地等着他们:
“情绪崩溃,死于意外,在22岁”
林母看了看日历。今天儿子二十四岁生日刚过三天。程序说二十二岁。
“他写的是两年前?”林母的声音变了。
林父已经拨通了电话。关机。一遍,两遍,三遍。
林父报警的时候,林母已经昏过去了,警察问失踪了多久。林父说:“昨天晚上。”警察说:“成年人二十四小时才能立案。”林父说:“他留了点东西。”警察问:“在哪里?”林父拿出那六页纸。
警察看了第一页,沉默了一会儿,说:“我们马上安排。”
那天下午,在下游的河滩上,发现了一条圆环金项链,那是一位老妇人送给孙子的礼物。
林父把那六页纸折好,放回信封。他没有再看第二遍。林母醒来哭了一整夜,第二天早上对林父说:“我们是不是不该问他‘要不要再吃一碗’?”
林父没有说话。
程序跑完了,只跑了一次。
窗外还在下雨。
林圆死了,那年他二十二岁——在程序里。
林圆死了,那年他二十四岁——在现实里。
程序跑完的那天晚上,他走进了雨里,再也没有回来。