屏幕的蓝光在凌晨三点的办公室里,像一摊凝固的毒液。
路摇摇盯着第4391行代码,眼睛里布满血丝。那行代码很简单:
user.getProfile().getAddress().getCity().toString();
典型的链式调用,典型的空指针陷阱。
他已经盯着这行代码看了二十三分钟。不是看不懂,是在想,为什么人类要发明编程这种东西来折磨同类。
手机在旁边震动,第十三次。不用看,肯定是项目经理。
“路哥,甲方爸爸说,再修不好,尾款不结了……”
“路哥,咱们组就剩你了……”
“路哥,房贷还了吗?”
路摇摇没接。他端起桌上那杯凉透的速溶咖啡,灌了一大口。苦涩的味道在舌根炸开,像在提醒他还活着。
还活着。
他活动了一下僵硬的脖子,颈椎发出不堪重负的“咔哒”声。连续加班第七十二小时,身体已经到极限了。但他不能停,下个月八千块的房贷、老家父母期待的电话、还有那该死的“优秀员工”评级,都像鞭子一样抽着他。
“再撑一会儿,”他对自己说,“修完这个BUG就睡。”
手指放在键盘上,开始敲修复代码。
很标准的补丁:加空值判断,加日志,加默认值。不解决为什么会有空用户,只保证系统不崩溃。
就像他的人生,到处打补丁。
点击“运行”。
控制台开始滚动。绿色的小勾一个个出现,单元测试通过,集成测试通过,压力测试……
屏幕右下角的时间跳到03:27。
心脏突然停了一拍。
不是形容,是真的停了一拍。紧接着是剧烈的绞痛,从胸口炸开,瞬间蔓延到左臂。路摇摇张着嘴,想呼吸,但空气进不来。他想喊,但发不出声音。
视野开始变黑,像有人用蘸了墨的毛笔,一笔一笔涂掉整个世界。
最后看到的,是屏幕上弹出一个对话框:
【系统提示:检测到致命异常】
【错误代码:HEART_ATTACK】
【建议:立即就医】
他伸手去抓手机,手指碰到冰冷的屏幕,然后身体向前倾倒,脸重重砸在键盘上。
“砰。”
很轻的一声。
然后,世界黑了。
黑暗中,有声音。
“……生命体征消失……”
“……确认死亡,时间03:29……”
“……通知家属……”
路摇摇感觉自己飘起来了。不,不是感觉,是真的在飘。他低头,看见自己还趴在工位上,脸贴着键盘,手垂在桌边。几个同事围过来,有人打电话,有人在摇晃他。
但他感觉不到。
他在上升,穿过天花板,穿过楼板,穿过整个写字楼。城市的夜景在脚下展开,灯火通明,车流如织。他看见自己那栋楼的十七层,那扇窗户还亮着。
然后,速度加快。
城市变成光点,大地变成色块,云层在脚下掠过。他向上飞,飞向一片虚无的黑暗。
不知道飞了多久,速度慢下来。
脚下出现一条路。
灰色的,雾气弥漫的路。路上有很多人在走,排成长长的队伍,缓缓向前移动。每个人都低着头,表情麻木。
路摇摇落地,发现自己站在队伍末尾。
“这、这是哪儿?”他问前面的人。
那人回头,是个中年大叔,穿着睡衣,拖鞋只剩一只。他打了个哈欠:“奈何桥啊。刚死?”
“我……死了?”
“不然呢?”大叔指了指队伍前方,“看见没?那座桥,孟婆在桥头发汤。喝完,过桥,投胎。流程很简单。”
路摇摇顺着方向看去。
雾气的尽头,真有一座石桥,很古老,爬满青苔。桥头有个小摊,一个老太太坐在摊后,慢悠悠地舀汤。每个走到摊前的人,接过碗,仰头喝下,然后表情变得空白,呆呆地走上桥,消失在雾气里。
“我……我还没跟我爸妈说再见……”路摇摇声音发颤。
“谁不是呢。”大叔叹气,“我澡洗到一半,脚滑,头磕马桶上了。我老婆还在外面喊‘老公你洗好了没’,我说‘马上’,然后就到这儿了。”
路摇摇不知道该说什么。
队伍缓缓向前移动。他跟着走,脑子一片空白。死了。就这么死了。因为一个空指针异常,因为连续加班七十二小时,因为该死的KPI。
他想起老家父母的脸,想起上个月他们打电话说“摇摇,别太累,身体要紧”。他当时怎么回的?他说“没事,年轻,扛得住”。
扛得住个屁。
眼泪涌上来,但流不出来。鬼魂没有眼泪。
队伍越来越短。他能看清孟婆的脸了,很普通的老太太,戴着老花镜,穿着碎花衬衫,像邻居家的奶奶。她面前摆着一口大铁锅,锅里汤水沸腾,冒着热气。
“下一个。”孟婆头也不抬。
路摇摇走到摊前。
孟婆推了推眼镜,打量他:“姓名,死因,年龄。”
“路摇摇。猝死。二十八。”
“哦,程序员?”孟婆在平板电脑上划拉,“最近猝死的程序员真多。上个月来了十七个,这个月你是第八个。”
她在平板上操作,突然“咦”了一声。
“怎么了?”路摇摇问。
“你的命格有点意思。”孟婆把平板转过来给他看。
屏幕上是一张复杂的图表,线条交织,像电路图。最上面一行字:【十世善人·命格谱系】。
“看见没?”孟婆指着其中一条线,“你本该是‘十世善人’命格,每一世都顺遂平安,福泽深厚。但你看这里——”
她手指向下滑,线条突然断裂,变成刺眼的红色。
“第一世,横死。第二世,横死。第三世,还是横死……连续九世,都死在同一个时间点,同一个原因。”
“什么原因?”
“新婚夜。”孟婆抬眼看他,“每一世,你都在新婚夜被杀。凶手是同一人。”
路摇摇后背发凉:“谁?”
“你的新娘。”
“……”
孟婆收起平板,叹气:“你这命格太特殊,按规定得走特殊通道。但今天地府系统升级,特殊通道关了。这样,你去那边摇个号,看系统给你分配什么。”
她指向桥边。
那里立着一台机器,外壳锈迹斑斑,屏幕上滚动着红光字:
【地府第8888期特岗摇号】
【剩余名额:1】
【参与条件:因果异常值>100】
【奖品丰厚,快来试试!】
机器旁围了一圈鬼,但没人上前。一个大妈小声说:“别去,那机器坑人。我上次摇了,抽中‘畜生道体验券’,下辈子当猪。”
另一个大叔附和:“就是,正常投胎多好,摇什么号。”
路摇摇看向孟婆。
“去。”孟婆挥手,“你的因果异常值肯定够。”
“因果异常值是什么?”
“就是你命该如此,但实际没如此的程度。”孟婆解释,“比如你命里该当皇帝,结果要饭了,差值就是因果异常值。正常人不超过50,超过100的,都是奇葩。”
路摇摇犹豫。
“快去!”孟婆催促,“不然我直接给你盛汤了!”
他走到机器前。屏幕亮起,开始扫描。
【检测到新魂魄……】
【姓名:路摇摇】
【死因:过劳猝死】
【生前职业:程序员】
【因果异常值计算中……】
数字开始跳动。
1…10…50…100…
超过100的瞬间,机器发出“嘀”的轻响。但数字没停。
200…300…500…
机器开始震动,外壳发烫。
800…900…999…
“砰!”
屏幕炸了。
不是真炸,是特效。满屏烟花绽放,彩带从机器顶端喷出,激昂的电子音响起:
【恭喜!!!恭喜路摇摇先生!!!】
【您摇中了本期唯一特等奖:天道系统热补丁(PATCH10.0.1)!!!】
【请于三分钟内前往地府人力资源部报到!!!】
【逾期视为放弃,将自动分配畜生道轮回(十世)!!!】
整个奈何桥安静了。
所有排队的鬼都看了过来,眼神复杂,有羡慕,有嫉妒,有不解。
孟婆一拍大腿:“我就说!快去!右转那栋白楼,二楼人事科!”
路摇摇还愣着。
“快去啊!”孟婆推他,“你想下辈子当猪吗?!”
他踉踉跄跄地跑向那栋白楼。楼梯间贴满标语:
“今天工作不努力,明天努力找工作”
“卷死同行,饿死自己”
“地府欢迎您,来了就别想走”
二楼,走廊尽头,“人事科”的门牌。
他敲门。
“进。”
推开门,是间标准的办公室。工位、电脑、文件柜、绿萝。办公桌后坐着个穿职业套装的年轻女人,正在低头看文件。
她很漂亮,但气质冰冷,像雪山上的莲花。
“路摇摇?”她抬头。
“是、是我。”
女人从抽屉里拿出一份合同,推过来:“劳动合同,签一下。”
路摇摇低头看。
《鸿蒙OS天道系统热补丁岗位劳动合同》
甲方:鸿蒙OS天道系统管理局
乙方:路摇摇
岗位:热补丁(编号PATCH10.0.1)
工作内容:修复天道系统BUG
试用期:三个月
薪资:3000功德/月
工时:996(紧急情况007)
下面是小字条款,密密麻麻。
“我能问问,”路摇摇声音发干,“这个工作,具体干什么?”
“修BUG。”女人言简意赅。
“可天道系统是……”
“你可以理解为,三界是一个大型操作系统,神仙是管理员,人类是用户,鬼魂是待回收数据。”女人说,“系统运行久了,会有BUG。你的工作就是找到并修复它们。”
“为什么是我?”
“三点。”女人竖起三根手指,“第一,你生前是程序员,专业对口。第二,你的因果异常值爆表,对‘规则错误’有天然吸引力。第三,你便宜。”
“……”
“签不签?”女人拿起笔。
“如果……我不签呢?”
女人微笑,指向合同最后一行小字:“不签视为放弃特等奖,按地府默认流程处理:因果异常值过高者,需入畜生道轮回十世,以平衡命数。通俗讲,下辈子开始,你当十辈子的猪、狗、鸡……随机分配。”
路摇摇手一抖。
“签,还是不签?”女人把笔递过来。
他看着那支笔,又看看合同,再看看女人冰冷的眼睛。
深吸一口气。
接过笔,在乙方签名处,写下名字。
“很好。”女人收起合同,从抽屉里拿出两样东西。
一把车钥匙,五菱宏光的标志。
一部手机,老式诺基亚。
“你的工作用车和通讯工具。”她说,“车在楼下,手机里有任务系统。第一个任务已经发布,建议你尽快查看。”
路摇摇接过钥匙和手机。
“最后,”女人站起身,伸手,“我是孟婆,地府人力资源总监。你的考勤、绩效、奖金都归我管。欢迎加入地府,路摇摇同志。”
路摇摇握住她的手,冰凉。
“现在我要做什么?”
“下楼,开车,看任务。”孟婆坐回椅子,“提醒一句,你的试用期任务难度是A级,完不成的话,直接投胎当猪,不用等十世了。”
路摇摇转身,同手同脚地走出办公室。
走廊的标语在晃动:
“今日工作不努力,明天努力找工作”
他下楼,推开大门。
门外是个停车场。几十辆车停着,其中一辆五菱宏光,车身上贴着夸张的广告:
“专业修BUG,天庭认证!”
“24小时上门服务!”
“解决各种系统异常!”
他按下钥匙,车灯闪了闪。
拉开车门,坐进去。内饰普通,但中控台嵌着一块大屏,亮着蓝光,界面是……
IDE。
熟悉的代码编辑器,左侧文件树,右侧代码区,下面是控制台。工具栏有运行、调试、编译、部署按钮。
路摇摇愣住了。
他拿起诺基亚手机,黑白屏,绿色背光。屏幕上只有一个图标:任务。
点开。
【新任务(A级)】
【任务名:修复“玉帝权限溢出”漏洞】
【描述:检测到天道系统前台管理员“玉帝”(账号JadeEmperor)存在严重权限溢出漏洞。漏洞导致管理员权限被未知程序篡改,已影响三界稳定。】
【时限:72小时】
【失败惩罚:账号注销(即死亡,不可复活)】
【搭档:已分配。管理员账号:Su_Daji(苏妲己)】
【是否现在联系搭档?是/否】
路摇摇盯着屏幕,看了很久。
然后他笑了。
低低的笑声,在车厢里回荡,越来越响,最后变成疯狂的大笑。
“哈哈哈哈……玉帝?BUG?修?”
他拍着方向盘,笑得浑身发抖。
加班猝死,下地府,摇号摇到个修BUG的工作,第一个任务是他妈修玉帝的BUG?
这世界疯了。
不,是他疯了。这一定是死前的幻觉,是大脑缺氧产生的荒诞梦境。
他笑着,直到笑不动了,瘫在座椅上,喘着气。
手机屏幕还亮着,那个“是/否”的选项,像嘲讽,又像邀请。
窗外,地府的天空是永恒的昏黄,没有太阳,也没有月亮。
他伸出手指,悬在“是”的上方。
停了三秒。
按下去。
电话接通了。
听筒里传来一个女声,年轻,清冷,像雪山融化的溪水。
“路摇摇?”
“是、是我。”
“我是苏妲己,你的搭档兼直属上级。任务看到了?”
“看到了。”
“有什么问题?”
路摇摇深吸一口气:“有。问题很大。第一,玉帝是谁?第二,权限溢出是什么情况?第三,我怎么修?第四,修不好真会死?”
对面沉默了两秒。
“问题一,玉帝是天道系统的前台管理员,三界CEO。问题二,他的账号权限被非法篡改,现在处于‘半失控’状态。问题三,用你的专业能力修。问题四,真会死。”
“……”
“你的工作用车中控台,就是你的开发环境。现在,发动车子。”
路摇摇看向中控台的IDE界面。他拧动车钥匙,发动机轰鸣。
屏幕亮起,代码区出现一行字:
//天道系统-管理员模块-JadeEmperor.java
下面是密密麻麻的代码。
他随便扫了一眼,就看到好几个明显的漏洞:
publicvoidsetPermission(Permissionp){
//TODO:添加权限校验
this.permission=p;//直接赋值,无校验
}
publicvoidexecuteCommand(Stringcmd){
Runtime.getRuntime().exec(cmd);//直接执行系统命令,无过滤
}
典型的菜鸟代码,连基本的防护都没有。
“这代码……谁写的?”路摇摇忍不住问。
“上任管理员,三千年前离职了。”苏妲己说,“之后一直没人维护。积压的BUG太多,系统快撑不住了。”
“所以招我来当补丁?”
“对。修好玉帝的权限漏洞,是试用期考核。通过了,转正。通不过,”她顿了顿,“下辈子当猪。”
路摇摇看着代码,手指在键盘上敲了几下。
控制台输出:
[ERROR]Permissioncheckfailed:nullpointerexception
空指针。又是空指针。
他修了六年BUG,死了,到地府,还要修空指针。
“现在,”苏妲己说,“开车到南天门。我们需要进入天庭服务器,才能访问玉帝的账号模块。到了联系我。”
电话挂断。
车厢里恢复安静,只有发动机低沉的轰鸣。
路摇摇握着方向盘,看着前方。
停车场出口处,立着牌子:
【前方:三界快速路】
【限速:60】
【注意:小心驾驶,地府交警严查超速】
他踩下油门。
五菱宏光冲出停车场,驶入那条看不见尽头的路。
后视镜里,地府的人力资源部小楼越来越远。
路摇摇不知道自己要面对什么。
但他知道一件事:
这可能是他这辈子——或者说,死后——写过最离谱的代码。
修玉帝的BUG?
行。
那就修吧。
毕竟,他真的不想下辈子当猪。
(第一章完)

