晚上十一点四十二分,林默盯着电脑屏幕的眼睛,已经快黏在了代码上。
窗外是深冬的沪城,写字楼外一片漆黑,只有零星几栋高楼还亮着冷白的灯光,像一座座沉默的电子墓碑。整层办公区早就走空了,保洁阿姨七点多就拖完地,临走时看他的眼神,像是在看一个注定要把命交代在键盘上的人。
林默揉了揉酸涩发胀的太阳穴,指尖触到的皮肤又干又烫,连带着太阳穴突突直跳。他今年二十六岁,毕业于一所不算顶尖但也不差的二本院校,凭着一股死磕精神挤进了这家互联网中小厂,当了一名后端 Java开发。
在外人听来,Java程序员、互联网大厂、沪城就业,每一个词都带着光鲜亮丽的滤镜,仿佛坐在空调房里敲敲键盘,就能月入过万、前途光明。
只有林默自己知道,这份工作到底有多磨人。
他不是什么技术大牛,写不出惊艳四方的底层架构,也搞不定高并发分布式的疑难杂症。他每天做的,就是写接口、调参数、改 bug、对接前端、应付产品经理天马行空的需求,以及——无休止地加班。
“需求再改一版,明天早上上线。”
“这个字段为什么不能加?别人都能实现就你不行?”
“用户体验很重要,你辛苦一下,通宵也要搞定。”
这些话,林默已经听得耳朵起茧。
桌上的外卖早就凉透了,是一份十二块钱的青菜瘦肉粉,油汤凝在盒子边缘,散发出一股沉闷的油腻味。他没胃口,只是机械性地伸手抓过旁边的保温杯,灌了一口已经凉掉的枸杞水。
屏幕上,代码密密麻麻地滚动。
他正在赶一个紧急版本——电商平台的优惠券叠加功能。本来逻辑已经写好,测试也过了,结果临上线前半小时,产品经理突然在群里甩过来一句:“老板觉得优惠力度不够,要再加一层跨店满减,顺便兼容老用户的专属折扣。”
一句话,林默之前写的大半代码,几乎都要推翻重构。
前端那边早就跑路了,只剩下他一个后端,被钉在工位上,进退不得。
“艹……”
林默低声骂了一句,声音沙哑得像是砂纸磨过木头。他不是脾气暴躁的人,可连续半个月每天只睡五个小时,再硬的身子也扛不住。颈椎传来一阵尖锐的刺痛,顺着脊椎往上爬,直逼天灵盖,他不得不停下敲键盘的手,用力往后仰,脖子发出一连串轻微的“咔咔”声。
显示器的光映在他脸上,苍白、疲惫,眼底是化不开的青黑。镜框滑到鼻尖,他懒得推,就那么半耷拉着眼皮,看着屏幕上那行刺眼的红色报错。
NullPointerException: null
空指针异常。
Java程序员一生之敌。
就这么一个小小的报错,他已经卡了近一个小时。
明明逻辑没问题,参数也传了,调用路径也对,可程序一跑,就硬生生报空指针。林默盯着代码,眼睛都快瞪出血,脑子里像是塞了一团乱麻,无数变量、方法、接口搅在一起,越理越乱。
他点开日志,一行一行往上翻。
时间戳、调用链、异常堆栈……冰冷的字符在眼前跳动,变成了张牙舞爪的怪物,一点点吞噬他仅剩的耐心。
“到底哪里空了……”
林默喃喃自语,手指无意识地敲击着桌面,节奏杂乱。
他想起下午开会时,产品经理那张笑眯眯却毫无人情味的脸:“林默啊,这个功能很简单的,你加个班就搞定了。年轻人嘛,多拼一拼,以后升职加薪少不了你的。”
拼?
林默在心里冷笑。
拼到头发一把一把掉,拼到体检报告上全是异常指标,拼到连好好吃一顿饭、睡一个完整觉都成了奢望,这叫拼?这叫被压榨。
他不是没有梦想。刚学编程的时候,他也觉得代码是世界上最浪漫的东西,一行行逻辑,一串串指令,能搭建出虚拟世界的高楼大厦,能创造出改变生活的工具。他曾以为,只要把技术学好,就能靠本事吃饭,不用看人脸,不用受委屈。
可现实给了他狠狠一巴掌。
职场不是理想国,是流水线。
他不是工程师,是拧螺丝的工具人。
写不完的业务代码,改不完的需求,填不完的坑,背不完的锅。
前端甩锅、测试甩锅、运维甩锅,最后所有问题,都能莫名其妙落到后端头上。
“这破班,谁爱上谁上吧……”
林默疲惫地靠在椅背上,长长吐出一口气。窗外的风刮过玻璃,发出呜呜的声响,像是某种不知名生物的低吟。
他看了一眼右下角的时间——
二十三点五十八分。
还有两分钟,就是新的一天。
而他,还在跟一个该死的空指针异常死磕。
一股难以言喻的绝望和疲惫,如同潮水般将他淹没。不是那种累到想睡觉的疲惫,是从骨头缝里渗出来的、对现状无力改变的倦怠。他看着屏幕里自己模糊的倒影,那张脸年轻却苍老,充满了死气沉沉的疲惫。
当初为什么要学 Java?
为什么要来沪城?
为什么要把自己活成一个只会敲代码的机器?
无数个问题在脑海里炸开,嗡嗡作响。
林默烦躁地抓了抓头发,指尖插进油腻的发丝里。他猛地伸手,用力敲下回车键,试图重新运行程序。
就在指尖触到回车键的刹那——
滋啦——
一阵尖锐刺耳的电流声,毫无征兆地炸响在耳边!
办公区的灯瞬间疯狂闪烁,明灭不定,灯管发出滋滋的电流声,像是随时会爆炸。显示器的屏幕猛地一黑,随即又亮起,大片大片的绿色乱码疯狂滚动,根本看不清任何内容。
“什么情况?停电了?”
林默心头一惊,下意识想要起身。
可下一秒,一股强大到无法抗拒的吸力,突然从显示器里传来!
那感觉,像是有一只无形的大手,狠狠攥住了他的灵魂,硬生生往屏幕里拽!林默浑身一僵,四肢完全不听使唤,连尖叫都发不出来。电流顺着键盘、鼠标、桌椅,疯狂窜进他的身体,麻、疼、烫,各种痛感瞬间席卷全身。
他的视线开始扭曲,屏幕上的绿色乱码化作无数流光,溢满了整个视野。耳边全是嘈杂的声音——电流声、代码编译声、产品经理的催促声、同事的交谈声,所有声音搅在一起,变成了恐怖的轰鸣。
身体像是被扔进了高速旋转的洗衣机,天旋地转,意识如同风中残烛,一点点被撕扯、碾碎。
他最后看到的,是屏幕上一行诡异的文字:
系统异常:时空维度不匹配,正在强制跳转……
目标朝代:北宋
跳转中……10%…50%…100%…
“穿越?……开什么玩笑……”
这是林默失去意识前,脑海里闪过的最后一个念头。
他甚至没来得及害怕,只觉得荒谬至极。
写代码写出时空穿越?
这比他写过的最离谱的业务逻辑,还要离谱一万倍。
黑暗彻底吞噬了他。
________________________________________
不知过了多久。
像是一瞬间,又像是一个世纪。
意识从无边的黑暗中浮起,如同溺水之人终于抓住了一丝空气。
林默猛地咳嗽起来,喉咙干涩得像是被火烤过,每一次呼吸都带着火辣辣的疼。他呛得眼泪直流,鼻腔里充斥着一股奇怪的味道——不是写字楼里空调风混合外卖的味道,而是尘土、草木、烟火,还有一种淡淡的、说不清的香料气息。
好吵。
嘈杂的声音钻入耳朵,人声鼎沸,吆喝声、脚步声、车轮滚动声、孩童嬉闹声,交织在一起,热闹得不像话。
林默艰难地掀开沉重的眼皮。
刺眼的阳光瞬间照入眼睛,他下意识眯起眼,过了好一会儿,才慢慢适应光线。
映入眼帘的,不是熟悉的办公区天花板,不是白色的吊顶,不是方形的 LED灯。
是青灰色的瓦片,一层叠一层,错落有致,延伸向远方。屋檐角微微上翘,雕着简单却古朴的花纹,阳光落在上面,镀上一层暖融融的金色。
视线往下移。
脚下是凹凸不平的青石板路,缝隙里长着细小的杂草,路面被踩得光滑温润,带着岁月的痕迹。
道路两旁,是一排排低矮的木屋、瓦房,门窗都是木质的,漆着暗红或原木色的漆,有些陈旧,却别有一番韵味。门口挂着布幡,上面写着他认识、却又觉得陌生的繁体字——
“茶”、“酒”、“米行”、“绸缎庄”。
穿着奇怪衣服的人,在街道上来来往往。
男人大多身着长袍,宽袖大带,头发束起,用发簪固定;女人穿着襦裙,裙摆曳地,步履轻盈,头上插着简单的珠钗。有挑着扁担的货郎,摇着拨浪鼓,边走边吆喝;有牵着毛驴的书生,背着书箱,神色匆匆;还有挎着竹篮的妇人,边走边挑选路边的小菜。
没有汽车,没有高楼,没有广告牌,没有耳机、手机、外卖箱。
一切都陌生得离谱,又真实得可怕。
林默僵在原地,整个人都傻了。
大脑一片空白,之前所有的疲惫、烦躁、绝望,全都被瞬间清空,只剩下极致的震惊和茫然。
他……在哪儿?
他机械地低下头,看向自己的身上。
灰色的连帽卫衣,破洞牛仔裤,白色运动鞋,手腕上还戴着一块智能手表——这是他昨天出门时的打扮,是二十一世纪最普通不过的装束。
可放在眼前这个场景里,却显得格格不入,怪异到了极点。
路过的人,都在用奇怪的眼神打量他,指指点点,窃窃私语。
“这人穿的是什么衣物?好生奇怪。”
“头发也太短了,莫不是蛮夷之人?”
“你看他那鞋子,怪模怪样的,从未见过。”
“莫不是从海外来的?”
议论声传入耳中,每一个字,都像重锤一样砸在林默的心上。
他猛地抬起头,环顾四周。
青石板路、古朴建筑、长袍古人、繁体布幡……还有空气中那股真实的、属于古代市井的烟火味。
不是做梦。
不是拍戏。
不是恶作剧。
显示器上那行乱码、那阵电流、那句“北宋仁宗景祐年间”,瞬间在脑海里炸开!
林默的身体,控制不住地开始发抖。
不是冷的,是吓的。
穿越?
他一个天天写 CRUD、改 bug、被需求折磨的 Java程序员,竟然……穿越了?
穿越到了北宋?
穿越到了连智能手机都没有、没有电、没有网络、没有编译器、没有 Maven、没有 SpringBoot的古代?
那他会什么?
他会 Java、会 MySQL、会 Redis、会写接口、会改 bug……
这些东西,在北宋能干嘛?
能当饭吃吗?能换银子吗?能保命吗?
答案显而易见——不能。
一瞬间,比加班到深夜更强烈的恐惧,死死攥住了林默的心脏。
他踉跄着后退一步,后背撞到了一面粗糙的土墙。尘土簌簌落下,沾了他一衣服。
眼前的热闹街市,瞬间变成了巨大的牢笼。
车水马龙,人声鼎沸,却没有一个人是他认识的。
繁华似锦,古色古香,却没有一寸土地,是他熟悉的现代世界。
林默靠在墙上,缓缓滑坐下去。
阳光温暖,微风和煦,街边的小贩还在吆喝,孩童还在嬉闹。
而他,一个来自千年后的 Java程序员,坐在北宋的街头,大脑一片空白,只剩下一个绝望的念头。
“完了。”
“这次的 bug,改不了了。”


