林默见到老周那天,西安正下着他回来后的第一场像模像样的雨。不是深圳那种往死里砸的暴雨,是关中平原特有的小雨,细得像雾,绵得像老周递过来的名片——物流公司的总经理,名片却印着“货运信息咨询服务部”,地址在二环边一个汽配城,电话是座机。
老周就是送绿萝的那个“朋友”,今年六十二,退休前是交大的后勤处长,说话慢条斯理,每个字都带着拖堂的味道。他把林默领进办公室,其实是个铁皮房,夏天漏雨冬天漏风,墙上贴满褪色的运费表。电脑是个联想台式机,主机箱裂了条缝,用胶带缠着,开机要五分钟,风扇响得像要起飞。
“系统就是这东西,”老周拍了拍显示器,“能撑到现在,全靠司机师傅们记性好。”
林默凑近看,屏幕上是个DOS界面的程序,蓝底白字,光标在最后一行跳,像垂危病人的心电图。他试着输入个help,返回的是乱码。老周解释,这是2003年找学生做的,那时候他还是处长,手里管着十几辆校车。后来退休了,自己搞物流,把系统搬过来用,一直用到今天。
“二十年,没出过问题?”林默问。
“出过。”老周点了根烟,是那种五块钱的白沙,烟灰直接弹在地上,“去年有个司机把货拉错了,跑到延安才发现。系统里地址明明是汉中,他看成了汉口。我骂了他一顿,他说字太密,老花眼看不清。我说你咋不戴眼镜,他说戴了,系统字还是太小。”
林默没笑,他看着那行乱码,脑子里已经开始重构。这套系统没有注释,没有文档,没有版本号,像一段凭空出现的神话。但神话背后有活人:二十年来,几十个司机靠它养家,几百个客户靠它发货,几千条货运记录在它硬盘里生了根。
“我能改,”林默说,“但得花时间。而且改完可能得换新电脑,这老爷机跑不动。”
“换呗。”老周吐出个烟圈,烟圈在铁皮房里不散,像挂了个虚拟的logo,“反正不着急,慢慢来。我们这种小公司,活干得慢点不丢人,活丢了才丢人。”
林默当晚就把主机箱搬回了家。李芳看见那台缠着胶带的古董,脸拉得比面条还长:“老周让你修这个?他咋不让你修他那辆破桑塔纳?”
“桑塔纳我修不了,这个能。”林默把机箱搁在阳台,接上显示器,电源线插进拖线板。开机那一声“嘀”,像老牛犁地前的叹息。陈曦从卧室探头,看见蓝底白字的界面,乐了:“这啥?你儿子?”
“我祖宗。”林默搬了个马扎坐下,开始敲键盘。他先做了个全盘镜像,生怕改错了把老周的饭碗砸掉。镜像做到凌晨两点,进度条卡在97%,他盯着那3%的剩余,眼皮打架,但又不敢合。没有存档点,没有#06#,错了就是错了,回不了头。
陈曦给他泡了杯茶,是自己炒的陕青,叶子大得像柳叶,泡开了满杯都是涩味。她坐在旁边,看他一行行敲代码,像看巫师念咒。她看不懂,但她知道这玩意儿现在比他们都重要——老周答应给三千块,预付一千五,够还下个月房贷的最低额度。
“要不先睡?”她问。
“你先睡,”林默盯着屏幕,“这进度条不等人。”
“它不等你也不等,”陈曦把茶杯往他手里塞,“熬坏了,老周可不赔医药费。”
林默没接茶,他忽然想起什么,抓起手机看时间:02:47。这个数字让他后背发凉,昨晚那个神秘电话也是这个时间打来的,说#06#是自杀指令。他盯着手机,等它震,等它亮,等它跳出一条幽灵短信。
但手机没动静,只有个微信通知,是银行的自动还款成功提醒。他松了口气,又有些失落,像卸载了游戏才发现,自己想念的不是游戏,是游戏里的复活点。
进度条终于走完,他关机,搬着机箱回屋。陈曦已经睡了,缩在床的一侧,给他留了大半位置。他躺下时床垫塌陷,把她晃醒了。她迷迷糊糊翻过来,抱住他,闻到他身上的机油味和旧电脑味。
“你闻起来像老周。”她嘟囔。
“老周闻起来像二十年前的交大。”林默回。
“那你就是二十年前的程序员。”她笑,声音从鼻腔里出来,像撒娇,又像叹息,“还没被优化过的那种。”
林默闭上眼,脑子里全是那套DOS系统的代码。没有Git,没有版本控制,没有回滚,改错了就得用软盘重装。老周说,当年做这系统的大学生,现在在华为,P9,年薪百万。他让林默有问题随时问,但别问太多,人家忙。
林默没加那个P9的微信。他觉得自己没资格问,这不是技术问题,是生存问题。那个P9用二十年时间,把自己从一段DOS代码升级成微服务架构,而林默用了七年,把自己从主程序优化成了底包。
现在又回到DOS时代,像报应。
第二天他起得晚,李芳已经出门了,桌上留着早餐:两根油条,一碗豆浆,用搪瓷缸子装着,盖子是缺了口的碟子。豆浆面上结了一层膜,林默揭下来吃了,像吃一张没写代码的纸。
陈曦在客厅改方案,甲方又发新需求,要“有内涵的年轻感”。她骂了句脏话,把键盘敲得噼啪响。林默没打扰她,抱着机箱去阳台,继续干活。他发现阳台的绿萝有新叶子了,小小的,嫩黄的,像刚冒头的想法。
老周打电话来,问进度。林默说在改,老周说没事不急,然后补充了一句:“对了,有个客户要加急发一批货到成都,三十台冰箱,你看系统里能不能备注个‘易碎’?”
林默说能,挂了电话,打开代码,找到货物信息录入那块。DOS界面的字都是点阵的,放大就糊,缩小就看不清。他改了半天,终于加了个星号功能,在货物名前加,就能在打印的运单上标红。
他测试了一下,保存,编译,打包。每一步都像在走钢丝,没有Test环境,没有Rollback,错了就得给老周跪下。他做完时中午了,陈曦出来倒水,看见屏幕上红红的一片星号,乐了:“你这是给老周开外挂啊?”
“不算外挂,”林默起身活动僵硬的脖子,“算补丁。”
“补丁能挣钱吗?”
“能,老周说这批冰箱运费四千,给我提十个点。”
陈曦算了算:“四百块,够吃四十碗胡辣汤。”
“够吃八十碗,”林默纠正,“我算过了,楼下那家六块钱一碗,老周介绍的四块钱。”
陈曦白他一眼,进厨房热剩饭。林默跟着进去,发现煤气灶果然漏气,打火时“嗞嗞”响,火苗蹿得老高。他调了半天风门,终于稳住,陈曦在旁边看着,忽然说:“你说,老周那个系统,是不是也漏了二十年的气?”
林默没说话,他盯着那簇火苗,蓝中带黄,像一行跑了二十年的代码,随时可能爆栈。
下午老周开车过来取主机,开的是那辆破的桑塔纳2000,车门哐哐响。他看见新功能,高兴得直拍林默肩膀:“好小子,有当年那个P9的风范!”
林默没接茬,他问:“老周,你这系统跑了二十年,有没有想过,万一哪天它彻底死了怎么办?”
老周愣了愣,点了根白沙,烟灰还是弹在地上:“死了就死了呗。司机们记性都好,客户也熟,电话打一圈,货照样发。系统这东西,是给人用的,不是人给系统用的。”
他说得轻描淡写,林默却像被雷劈了。这句话他听过,在无数个需求评审会上,产品经理说“用户习惯就好”,技术负责人说“先上线再优化”,CEO说“数据会证明一切”。但没人说,系统死了,人还能活。
老周是第一个。
临走时,他留下那盆绿萝,说家里养不活,让林默继续伺候。林默没拒绝,他把绿萝放在阳台最亮的角落,心里默念:这回不摔你了,咱俩都认命。
晚上李芳回来,拎了块肉,说要包饺子。林默和陈曦打下手,三个人围在餐桌前,擀面皮的擀面皮,包馅的包馅,像三个合作开发的程序员,没人说话,但节奏默契。李芳忽然问:“老周那活儿,能长干吗?”
“能,”林默说,“他没打算换人。”
“那你们打算啥时候要孩子?”
擀面杖停在半空,陈曦的脸红到耳根。林默没慌,他说:“等这盆绿萝长出新叶子。”
李芳愣了愣,然后笑了,笑得眼角挤出两条鱼尾纹:“那得快着点,绿萝长得慢,但人老得快。”
饺子煮好时,雨又下了起来。这次不是雾,是真雨,打在窗户上啪啪响。林默端着碗去阳台,看见绿萝的新叶子在雨气里舒展,像伸了个懒腰。
他掏出手机,想拍张照,发给老周,或者发给陈曦。但他最终没拍,只是站着,让雨淋到身上,让叶子淋到雨。他想起在深圳最后一次淋雨,那次他按下了#06#,这次他没有。
因为没有存档点的人生,连淋雨都只有一次机会。
他进屋,关门,吃饺子。陈曦蘸醋,李芳蘸辣子,他什么也不蘸,就白口吃,觉得甜。不是饺子的甜,是活过来的甜。
夜里他做梦了,梦见自己还在深圳,48层,王晓月递过来协议,他签了字,然后走出会议室,没摔绿萝,没发邮件,没按#06#。他只是走到窗边,跳了下去。
梦醒时一身冷汗,陈曦在旁边打呼噜,像个小马达。他坐起来,看手机,时间显示03:47。不是02:47,也不是23:47。只是个普通的时间,没有任何指令在等待。
他躺下,重新睡着。这次没做梦,或者做了也忘了。
没有存档点的世界,连噩梦都只有一次。(记住本站网址,Www.WX52.info,方便下次阅读,或且百度输入“ xs52 ”,就能进入本站)