麻将机程序故障​

当发牌大脑“发疯”时

春节聚会上,新买的麻将机突然发疯般吐出牌来, 牌桌上的人面面相觑, 程序员姐夫默默打开电脑连接了麻将机主板, “这根本不是故障,是机器的愤怒。”


年味儿是鞭炮屑混着冷空气钻进门缝的那股子硝磺气,更是麻将牌哗啦啦砌墙时,那整齐又清脆的碰撞声,今年大伯家格外闹腾,簇新的自动麻将机摆在客厅中央,成了绝对的焦点,二婶的大嗓门、小堂弟的尖叫、还有堂姐拆零食袋的窸窣,全被这轰隆运转的机器声稳稳压住,像给一锅沸水盖上了厚厚的木盖。

轮到堂姐坐庄,她染着栗色的头发,新做的指甲在绿色绒布上轻轻一叩,带着点矜持的满意,她是这麻将机的“金主”,年前咬牙买的,说是“提升家族娱乐现代化水平”。“这机子,静音、流畅、发牌准。”她不止一次跟人炫耀。

庄家按下骰子键,熟悉的电机嗡鸣响起,四方的牌仓开始抬升,洗牌滚筒发出规整的沙沙声,一切如常,第一摞牌顺畅地从出牌口推出,第二摞紧随其后,第三摞出来了,第四摞、第五摞……牌像决了堤的洪水,源源不断、毫无章法地从那个方形小口喷射出来,噼里啪啦,不是砌墙的清脆,而是混乱的倾泻,一张“八万”甚至飞过牌墙,砸进了堂姐手边的茶杯里,溅起一小撮茶叶。

轰隆声没停,反而更加执着、更加狂躁,仿佛机器内部的某个器官陷入了不可控的痉挛,牌桌上砌了一半的“长城”被后浪推倒,牌与牌纠缠着滑落,堆在绿色绒布上,越积越高,渐渐漫过众人的牌尺,五颜六色的牌面——幺鸡、白板、发财——以一种荒诞的姿态堆积如山,淹没了东南西北的风圈,也淹没了刚才还热火朝天的算牌声。

堂姐脸上的矜持冻住了,嘴角那点笑纹僵着,眼睛瞪得溜圆,盯着那不断“呕吐”出牌的机器口,仿佛在看一个突然发疯的陌生人,二婶的唠叨戛然而止,半张着嘴,大伯举着茶杯,忘了喝,连最闹腾的小堂弟都闭了嘴,缩在妈妈怀里,惊恐地看着那台仍在轰鸣的“怪兽”,空气粘稠得如同冷却的糖浆,只有机器固执的、单调的、重复的运转声,咔哒、咔哒、哗啦啦……

堂姐夫——我们都叫他“凯哥”——就是这时候放下手机的,他是那种典型的程序员,聚会时总像自带一个透明的安静罩子,他站起身,动作不紧不慢,走到那台仍在“发作”的麻将机旁,蹲下,他没像别人那样试图拍打机身或者胡乱按键,只是伸出手指,沿着机箱侧面摸索,然后在一个不起眼的缝隙处轻轻一抠,一小块挡板滑开,露出下面一排密密麻麻的接口。

他走回放着他背包的角落,掏出一个深灰色的笔记本电脑,还有一捆细长的线缆,走回来,连线,插入麻将机那个隐蔽的接口,动作娴熟得像给病人接上监护仪,电脑屏幕亮起幽幽的光,映着他没什么表情的脸,他盘腿直接坐在了地板上,敲击键盘的嗒嗒声,微弱却清晰,终于刺破了那令人窒息的、单一的机器轰鸣。

屏幕上滚动着天书般的代码行,黑色背景,绿色字符,飞快上移,凯哥的眼镜片上反着光,看不清眼神,大伯终于找回了声音,带着难以置信:“这……这是咋了?卡住了?能修吗?”堂姐也凑过来,声音有点抖:“是不是我按错了?质量有问题吧!这才用了几天!”

凯哥没立刻回答,手指在触摸板上滑动,点击,过了大概一两分钟,就在那“牌山”几乎要崩塌滑落时,他推了推眼镜,很平静地开了口,声音不高,却让所有人都闭了嘴。

“不是卡住。”他顿了顿,似乎在想怎么让这群盯着牌和机器发愣的亲戚理解,“也不是你们操作问题,至少,不完全是。”

他伸手指了指屏幕上定格的几行代码:“看这里,发牌逻辑的循环判定,理论上,洗好牌,推完四家,就该停下,等待下一轮指令,但现在,这个‘停止’的判断条件,一直没被满足,机器认为‘任务没完成’,所以就一直在执行‘推牌’这个动作。”

“啥意思?”二婶茫然地问。

“意思就是,”凯哥把电脑屏幕稍微侧过来一点,尽管知道没人看得懂,“控制它什么时候该停的那个‘命令’,或者说,那个‘念头’,丢了,或者错了,它停不下来。”

堂姐急了:“那不就是坏了?程序出错了!”

“是程序问题,但未必是‘坏’。”凯哥的视线从屏幕移到那台终于因为牌仓彻底空掉、只能空转发出摩擦噪音的麻将机上,又扫过桌面上那一片狼藉的、无辜的麻将牌,他的嘴角似乎极轻微地扯动了一下,说出了一个让所有人愣住的话:

“我倒是觉得,这不太像简单的程序故障。”

他敲了几下键盘,调出另一个界面,是一行行日志文件。“你们看,在‘发疯’之前,机器记录了几十次连续开局,几乎没有间隔,每次都是快速洗牌、快速发牌,就在最后一次发牌指令前,记录里有一串异常的电压波动提示,很轻微,但持续了几秒。”

他抬起头,目光平静地扫过围拢过来的家人:“新机器,硬件突发问题的概率不高,这种日志,更像是程序在某种极端重复且‘不被尊重’的操作压力下,内部的定时器或者状态寄存器出现了累积误差,最终导致了逻辑错乱,就像一个被逼着不停重复简单指令的人,最后指令本身变得模糊,只剩下重复的动作。”

他顿了顿,说出那句后来被我们反复回味的话:

“与其说是‘故障’,不如说,这是机器的‘愤怒’,对粗暴、重复、毫无意义循环的一种……非暴力不合作,只不过,它的‘抗议’形式,是把牌全吐出来。”

客厅里一片寂静,只有麻将机空转的摩擦声逐渐降低,最终发出一声轻微的“咔”,彻底停了下来,仿佛终于精疲力竭,桌面上,那座小小的、荒唐的“牌山”静静地堆在那里,幺鸡的红嘴在一片绿背和乱牌中格外扎眼。

堂姐看着那座牌山,又看看自己新做的、现在沾了点茶渍的指甲,脸上红一阵白一阵,大伯皱着眉,琢磨着“机器的愤怒”这几个字,二婶嘀咕:“跟机器较什么真儿……”

凯哥已经开始动手拔线,合上笔记本。“临时改了个补丁,绕过那个出错的状态判断,强制加了结束间隔,应该能用了。”他重启了麻将机,机器发出正常的、低低的嗡鸣,开始缓慢、平稳地将桌面上散乱的牌回收,动作规整,和之前的疯狂判若两“机”。

牌局重新开始,洗牌声再次响起,但这一次,没人再觉得那声音只是背景,偶尔有人偷眼看那台机器,它沉默地工作着,推送出完美的四摞牌,然后安静等待,仿佛刚才那场歇斯底里的“呕吐”从未发生。

但有些东西不一样了,堂姐摸牌的动作轻了许多,大伯在等待洗牌时,会端起茶杯真正喝一口,而不是焦躁地用手指敲桌面,甚至连咋咋呼呼的二婶,在机器运转时,也会不自觉地暂停她永远说不完的家常。

那晚散局后,我帮着收拾,麻将机已经关闭,静静立在角落,像个普通的家具,我忍不住小声问正在装电脑包的凯哥:“哥,你最后说的……机器的‘愤怒’,真是那个意思?程序真有‘情绪’?”

凯哥拉上背包拉链,看了那机器一眼,脸上依旧是那副平静无波的表情。

“代码没有情绪。”他说,“但写代码的人,设计它工作逻辑的人,预设了‘有序’和‘规则’,当外界的使用粗暴地、无限地践踏这种预设的‘有序’,试图把它变成无意义的重复劳动时,系统就会错乱,表现出来,就是失控。”

他背起包,朝门口走去,留下最后一句话,轻飘飘的,落进夜里:

“机器不会愤怒,但失控本身,就是一种回答,对‘无限重复’的回答。”

麻将机程序故障​