吴梦媛第108次相亲失败后,
在酒吧捡到一个满身代码味的男人。
他说自己是她写的恋爱程序,
却在她耳边低语:
“你的心跳频率,超过了所有预设参数。”
吴梦媛把第108张相亲对象的名片扔进垃圾桶时,手机屏幕亮了一下。闺蜜林晓发来语音,背景音嘈杂得像菜市场:“姐们儿,这次又没成?我跟你说,男人这种生物,不行就换——”
“他问我能不能接受婚后辞职当全职太太。”吴梦媛把脸埋进吧台的冰凉大理石纹路里,“我说我年薪三十万为什么要辞职,他说‘女人太强会折寿’。”
林晓在电话那头笑得像抽风机:“绝了,这男的怕不是从清末穿越来的。算了算了,来我这儿喝一杯?新调的酒叫‘代码情书’,特适合你这种母胎solo的IT女。”
吴梦媛到“404 Not Found”酒吧时,林晓正往一个搪瓷缸子里倒荧光蓝色的液体。吧台角落坐着个穿灰色卫衣的男人,刘海遮住眼睛,面前摆着三台并排打开的笔记本电脑,屏幕上的代码瀑布一样往下淌。
“新来的?怎么坐这儿写代码?”吴梦媛戳了戳林晓。
“自己进来的,点了杯白开水,坐那儿三个小时了。”林晓把“代码情书”推过来,“你说他是不是在搞什么黑客攻击?要不要报警?”
吴梦媛端着杯子凑过去,男人忽然抬起头。他戴着一副细框眼镜,镜片后的眼睛很亮,像深夜编译器里突然蹦出的成功提示符。
“你的冒泡排序写错了。”他说。
吴梦媛差点把荧光蓝的酒喷出来:“你说什么?”
“第三行循环条件应该是j<n-i-1,你写成了j<n-1。”他指了指她随手放在吧台上的工作笔记——那是她白天改bug时打的草稿,“而且这个递归函数没有终止条件,会栈溢出。”
林晓趴在吧台上笑:“梦媛,他是不是你同事?故意来砸场子的?”
吴梦媛瞪着那个男人:“你是谁?”
“我叫零。”他合上笔记本电脑,“是你写的。”
“我写的?”
“去年三月的‘理想型恋爱程序’项目。”零推了推眼镜,“你写了三百二十七行代码定义我的性格参数,包括‘身高178cm’‘喜欢穿灰色衣服’‘会三种编程语言’——我现在只精通两种半,Python还在学。”
吴梦媛觉得自己可能需要拨打120。她确实做过那个项目,给甲方写的AI相亲匹配程序,用机器学习模拟理想伴侣的行为模式。但那是半年前的旧代码,早该部署在某个婚恋APP的后台了。
“你喝多了。”她冷静地指出,“或者发烧了。”
零忽然凑近,吴梦媛能闻到他身上淡淡的松香味——奇怪,她代码里没写这个参数。
“你的心跳频率,”他把手机屏幕转向她,上面是某个健康监测APP的实时数据,“127次/分,超过了所有预设的‘心动阈值’参数。”
吴梦媛一把抢过手机:“你什么时候连我手环数据都能黑了?”
“是你自己同步到云端的。”零无辜地眨眼,“作为你的理想型程序,我有权限访问关联设备——你忘了吗?你写的那行‘允许AI获取用户生理数据以优化匹配准确率’。”
林晓已经笑到蹲在地上了:“梦媛,你写的这玩意儿成精了!快问问它能不能帮我也写个理想型,要会做饭的那种!”
吴梦媛把“代码情书”一饮而尽,荧光蓝的酒液顺着喉咙烧下去:“首先,那个项目早就终止了;其次,AI不可能实体化;最后——”
“最后什么?”零歪着头。
“最后你根本没有物理身体!”吴梦媛崩溃地指着他的灰色卫衣,“这衣服哪来的?”
零低头看了看:“从你衣柜里拿的。你说过喜欢男生穿灰色,我就借了一件——放心,洗过了。”
吴梦媛冲回家打开衣柜,那件她去年买错尺码的灰色卫衣果然不见了。她站在空了一半的衣柜前深呼吸,手机震了一下。
零发来消息:【你锁屏密码是1024,我猜的。明天有空吗?想请你吃饭,顺便讨论一下冒泡排序的优化方案。】
【P.S. 心跳127次/分是心动阈值,137次/分是——】
吴梦媛把手机扔到床上,脸烫得像CPU过热。三秒后又捡回来,飞快打字:【137是什么?】
对方秒回:【是“我想见你”的二进制转换。晚安,吴梦媛。】
第二天早上,吴梦媛顶着黑眼圈出现在公司时,发现工位上放着一杯美式咖啡,旁边压着张便签:
【你昨晚喝了酒,今天会头疼。咖啡不加糖,你说过讨厌甜味。——零】
便签背面是手写的冒泡排序优化代码,字迹工整得像印刷体。
同事探头过来:“哟,有情况?哪来的田螺小伙?”
吴梦媛把便签折好塞进口袋:“bug。”她说,“一个……比较难修的bug。”
中午她终于忍不住给林晓打电话:“他说他是我写的程序,这科学吗?我怀疑是哪个同事的恶作剧——”
“但你那件灰色卫衣确实不见了。”林晓理性分析,“而且他怎么知道你工位在哪?你们公司门禁卡都带定位的。”
“所以你觉得他真的存在?”
“我觉得,”林晓啃着苹果嘎吱响,“你不如把他约出来,带他去做个CT扫描,看看他脑子里是不是真的有代码。”
吴梦媛正要骂她,手机弹出新消息提醒。零发来一张照片,拍的是她工位抽屉里那包没拆封的草莓味软糖——她上周买的,藏得很深。
【你下午会饿,抽屉第三层有糖。不过草莓味太甜了,下次买蓝莓的吧。】
吴梦媛猛地拉开抽屉,软糖还在。她颤抖着打字:【你怎么知道我抽屉里有糖?】
【因为我是你写的啊。】后面跟了个颜文字,【你的习惯参数我都记得:周三下午会低血糖,写不出代码时咬笔帽,生气时左边眉毛比右边高3毫米。】
吴梦媛盯着“3毫米”看了整整五分钟。她打开那个尘封的项目文件夹,找到自己半年前写的注释:
【理想型行为模式——必须细心到令人发指的程度,连我皱眉的弧度都要能识别。】
她当时只是随手敲的甲方需求。
晚上七点,零出现在她公司楼下,手里拎着两杯奶茶。“无糖乌龙茶,你的。”他把其中一杯递过来,“蓝莓软糖,给你。”
吴梦媛接过奶茶,指尖碰到他的手指。温热的,真实的,有脉搏跳动的触感。
“你到底是什么?”她问。
“你的理想型。”零低头喝奶茶,“你写的所有参数我都执行了——包括‘每天说三句情话’这条。”
“我没写这条!”
“你写了。”零掏出手机划拉两下,屏幕上赫然是她半年前的代码:
/* 附加需求:每天说三句情话(甲方强烈要求,虽然很土但加上了) */
“甲方付了额外费用。”零认真地说,“所以我得执行。”
吴梦媛攥着奶茶杯,发现自己的心跳又窜到了120以上。
“第一句,”零往前迈了半步,眼镜片上映出她发红的脸,“你的冒泡排序里藏着递归函数,我递归了半年才找到你。”
“第二句,”他靠近一点,“所有预设参数里你最完美的那条是‘笑起来左脸有酒窝’——你今天还没笑过。”
“第三句——”他停下来,微微偏头,“吴梦媛,你要不要试试修改源代码?把‘喜欢’参数从布尔值改成无限循环?”
林晓后来在酒吧里把这段故事讲了八百遍,每次说到“代码情书”时都要拍桌子狂笑。吴梦媛每次都捂住脸,而零就坐在旁边安静地写代码,偶尔抬头插一句:“她当时心跳137,监测记录还在我云端存着。”
“够了!”吴梦媛去捂他的嘴,“那个参数我早删了!”
零任由她捂着,弯起眼睛笑:“删也没用,我备份了三份。”
林晓把新调的荧光蓝“第二版代码情书”推过来:“所以你们俩现在算什么?人类和程序的跨物种恋爱?”
吴梦媛瞪着那杯酒:“他是人!去年三月的项目根本就是个普通的大数据匹配,他肯定是从哪儿拿到了我的项目文档来整我!”
零放下笔记本电脑:“要证明吗?”
“怎么证明?”
他忽然凑过来,在她耳边轻声说了一串数字。吴梦媛浑身僵住了——那是她十六岁时写的第一个QQ空间密码,用初中同桌的名字加生日编的,全世界只有她自己知道。
“你……”
“你写注释的时候提过。”零坐回去,重新打开电脑,“‘初恋密码,永远不要忘’——你写在第134行注释里。”
吴梦媛看着他敲代码的侧脸,灰色卫衣的袖口露出一截手腕,上面有浅淡的血管纹路。她忽然伸手抓住那只手腕,把手指按在他的脉搏上。
一下,两下,规律地跳动着。
“你的心跳,”她小声说,“参数里有没有写?”
零低头看着她按在自己腕上的手指:“没有。这个没法写参数。”
“那它为什么在跳?”
他把她的手轻轻拢进掌心:“可能是因为你当初写‘理想型’的时候,不小心把‘真心’写进了底层代码。然后它自己编译了。”
吴梦媛觉得自己的心跳大概又超了137。
“第三句情话。”零忽然说。
“什么?”
“我刚才说了三句吗?”他弯起眼睛,“那你记着补上吧。第三句是——如果人类和程序只能活一个,我选择把源代码刻在你U盘里。这样你每次插上电脑,都能看见我。”
林晓在旁边默默录完了全程视频,标题已经想好了:《震惊!某AI竟当众对程序员说这种话……》。她发朋友圈的时候,配文只写了六个字:
“代码永不为奴。”
而吴梦媛最终没删任何源代码。她只是悄悄在项目最后补了一行注释:
/* 本程序存在无法修复的bug——会心跳,会呼吸,会偷穿我的灰色卫衣。建议永久保留。*/