第十一章
八点零三分。
电话响了。
办公室里只有一部电话会在这个时间响——那部红色的座机,放在孟小飞桌上,标签纸上写着“技术支持热线”。孟小飞把它设了呼叫转移,转到了前台的座机上,前台的座机又设了自动转接,最后居然转到了我的分机上。这是孟小飞的“发明”,他说这样就算他在家打传奇,电话也不会漏。
我接起来。
“喂!辰宇软件吗?我是鑫源建材的老孙!我们的系统崩了!”
电话那头的声音又急又响,带着浓重的唐山口音,震得听筒嗡嗡响。背景音很嘈杂,有人在喊“月底了账都对不上”,有人在骂骂咧咧,还有打印机卡纸的尖锐鸣叫。
“孙总您别急,慢慢说——”
“我怎么能不急!明天要发工资!所有工资数据都在你们系统里!现在软件打不开了!弹出个什么Java异常!我不懂什么Java不Java!我就问你能不能修!”
我的心猛地提起来,提到嗓子眼,又落下去,砸在胃里,沉甸甸的。
鑫源建材,我知道这个客户。曹莉的客户,一家唐山的建材厂,一百多号工人,用的是我们最老的V2.1版本,系统部署在一台早就该淘汰的Windows NT服务器上。这个版本是两年前的产品,代码是一个已经离职的老员工写的,据说那人走得急,交接文档约等于没有,周远每次提起这个版本都眉头紧皱,像提起一个甩不掉的包袱。
“孙总,您等一下,我马上联系我们技术组长——”
“联系什么技术组长!你知不知道我等不了!现在八点了!银行明天早上九点开门!工资要是发不出去,一百多号工人堵我办公室门口你负责啊!”
听筒里传来他拍桌子的声音,砰的一声,震得我耳膜发麻。然后是一个女人尖细的声音在旁边喊:“老孙你把那个——那个——那个什么防火墙关了试试!”然后是更混乱的声音,杯子和金属碰撞的叮当声,有人撞到了椅子,椅子腿在水泥地面上刮出刺耳的尖叫。
我握着听筒,手心全是汗,键盘旁边的“问题本”被滴落的汗水洇湿了一个角,墨迹微微洇开。
周远家里没有电话。他住在大兴,用的是一个小灵通,信号奇差,十次有八次打不通。曹莉的手机关机了。我翻了翻通讯录,发现公司所有人的电话我都打了一遍,能接的只有一个——孟小飞。
“小飞,鑫源建材的系统崩了,你知不知道那个V2.1——”
“哥,我不懂那个!我只会装客户端和重启服务器!”孟小飞的声音很慌,背景音里能听见传奇游戏的背景音乐,叮叮当当的打斗声,“你要不……要不给周哥打电话?”
“打了,打不通。”
“那……那我也不知道了……”他的声音越来越小,后面又跟了一句什么,我没听清。
电话那头沉默了几秒。我能听见孟小飞的呼吸声,急促的,年轻的,带着一丝不知所措的愧疚。然后他忽然说:“哥,要不你试试?你平时不是把系统里所有模块都跑过一遍吗?”
“那是V2.3,这个是V2.1,版本不一样——”
“那也比我们懂啊!我们连Java都不会!”
这句话像一根针,扎破了什么东西。
我忽然意识到,在这栋楼里,在这个时间点上,我是唯一一个懂Java的人。
那种感觉很奇怪。像是站在一个悬崖边上,前面是深不见底的黑,但你知道,只有你能往前走了。
“孙总,”我把听筒换到另一只手上,用袖子擦了一下额头上的汗,声音尽量保持平稳,“您把那个错误提示念给我听。”
“什么提示?”
“屏幕上的,弹出来的那个红色框框,上面写的什么字?”
“……我找找……啊有了——什么什么……Exception……thread……main……后面是一大堆鬼画符,我念不来!等等我让会计来看——小刘!你过来!你学过英语!”
短暂的混乱之后,一个年轻女孩的声音怯生生地出现在听筒里,带着唐山口音的普通话,软软的,像在舌尖上打了个滚:“嗯……它写的是
我在脑子里飞速检索。系统手册里没有这个,教科书里只有一句语焉不详的定义,老师在课堂上花了五分钟讲它,然后说“这个问题在实际工作中遇到再说”。现在,它来了,在一个唐山建材厂会计的电脑屏幕上,在一个冬天的雪夜里,像一只拦路虎,张着血盆大口。
“孙总,我需要远程登录你们的服务器。”
“什么远程?怎么弄?”
我深吸一口气,开始一步步指导他。那个过程慢得让人绝望。孙总不会操作电脑,会计也不会,每执行一个步骤都要反复确认,电话里不断传来“是这个吗”、“点了这个会不会坏”、“我不敢点”的声音。我握着听筒的手越来越湿,肩膀和耳朵夹着听筒的地方开始发酸,后来干脆把听筒夹在下巴和锁骨之间,歪着头,两只手在键盘上飞速敲击,试图在自己的电脑上复现那个错误。
那是一个变量声明,用来存储员工的工龄补贴。在V2.3版本里,这个变量被初始化了,调用之前会做非空判断。但V2.1版本的代码我没有。
“周哥,你他妈怎么不接电话……”我咬着牙,一遍遍地拨那个小灵通号码,每次都是漫长的嘟声之后自动挂断。第十一遍的时候,我放弃了。
我只能靠猜。
工龄补贴——如果有员工没有填写入职日期,工龄就是空值,空值不能参与计算,就会抛出这个异常。
“孙总,你们最近是不是有新入职的员工?”
“有啊!上个月来了三个!”
“他们的资料是不是录入了系统?”
“录了啊!”
“入职日期填了吗?”
电话那头安静了三秒。
“小刘!入职日期你填了没有!”
那个女孩的声音更小了,像是犯了什么大错:“我……我好像……有一个人的我忘了……他档案不全……”
找到了。
但找到问题和解决问题之间,隔着一条天堑。系统崩了,打不开,改不了数据库。我只能通过后门——用管理员的命令行工具,手动连接数据库,找到那条记录,补上日期,然后重启服务。
这一切都不能出错。错一步,数据库损坏,整个公司的工资数据就真的没了。
我的手指悬在键盘上方,微微发抖。办公室冷得像冰窖,吴姐的暖水袋已经不热了,摸上去只有淡淡的余温,但我额头上全是汗,汗珠顺着太阳穴滑下来,流进嘴角,咸咸的。
“开始吧。”我对自己说,声音很轻,但很稳。
接下来的四十分钟,像一场在悬崖边骑自行车的手术。
我把每一步操作都先在测试环境里跑一遍,确认无误,再让孙总在那边执行。每一个命令都需要我一个字一个字地念,他一个字一个字地在键盘上敲。他敲得很慢,有时候一个字母要找半天,急得嘴里不停地骂骂咧咧,骂电脑,骂键盘,骂自己老眼昏花,骂完了又跟我道歉:“小伙子不好意思,我不是骂你。”
我说没事。我的声音一直保持着平稳,但我的腿在桌子底下不停地抖,膝盖撞到铁皮柜子上,发出轻微的砰砰声。
命令敲下去的时候,我屏住了呼吸。那两秒钟,办公室里只有CRT显示器微弱的电流声,和我自己心脏跳动的咚咚声。窗外的雪不知道什么时候变大了,从沙沙声变成了簌簌声,大片的雪花扑在玻璃上,化成水痕,一道一道地流下来。
“好了!进去了!”孙总的吼声从听筒里炸出来,震得我差点把电话扔了,“小伙子!能打开了!工资表出来了!出来了!”
我听见电话那边传来一片欢呼声,男人的、女人的,有人在拍手,有人在说“可算好了”,那个叫小刘的会计似乎哭了,声音断断续续的:“孙叔对不起……是我……我……”
“哭什么哭!快核对数据!看有没有少!”
我靠在椅背上,后背全是汗,衬衫贴在皮肤上,冰凉冰凉的。我这才发现自己的手在抖,抖得很厉害,十根手指像是刚从冰水里捞出来,关节发僵,指腹的皮肤因为敲了太久键盘而微微发麻。