《底层校验错误》,作者:就燃烧吧
马丁跪在桌子下面,向一只黄色的橡皮鸭解释自己为什么还不能下班。
鸭子听了一会儿,说:“可是明明昨天还好好的。”
马丁从桌底钻出来,脸上带着受尽屈辱的表情。他先看鸭子,再看观众,慢慢把手伸向自己的头发。
这是一个老包袱了,可现在这个时代已经没有多少人能明白程序员和假发之间的关系。
可偏偏第二排有个人提前笑了。马丁不得不缩短停顿,一把扯掉假发,露出下面印着“资深”的头皮。
其余观众没有反应。
他把假发重新戴上,决定跳过中间那段,直接进入“死循环”。
舞台中央升起一圈半人高的光环。他抱着键盘钻进去,从另一边出来,再钻进去,再出来。绕到第三圈时,膝盖有一点软。
他没有低头,继续表演。
“跳出去!”鸭子喊。
马丁跳了一下。
光环跟着他移动。
第一排的孩子终于笑了。马丁趁机又跳了一次,落地时把键盘摔成两半,大喊:“这个需求实现不了!”
谢幕音乐响起。
观众席一共坐着十一个人,其中四位捧场演员领取了捧场报酬。他们按约定站起来,鼓掌到最后。一个人临走前告诉马丁,他漏掉了“重启”那一段。
“我知道。”
“那段是我最喜欢的。”
“下次加回来。”
对方点点头,确认了本次服务完成。
孩子走到舞台边,问马丁是不是在给鸭子治病。
“不是。”
“那鸭子为什么一直在教你?”
马丁想了想。
“这是古代程序员的工作方式。”
“鸭子比较聪明吗?”
他低头看那只鸭子。鸭子正在配合散场的气氛,打了一个呵欠。
“至少鸭子有头发。”
孩子满意地走了。
后台已经给马丁准备好一杯温水。他伸手时,杯子从桌面上稍稍抬起,停在手指合拢的位置。他喝完,杯底落回去,水渍一起消失。
膝盖还在发酸。他坐下,裤子内侧感应到了,开始发热。过了一会儿,那点酸意也退了。
演出结算浮现在镜子旁边,比上一场少一些。
马丁没有细看。他把“资深”两个字从头皮上抹掉,重新恢复自己的头发。镜子里的脸已经老了,修饰系统建议保留眼角的皱纹,说这样更符合观众对技术权威的想象。
他让它保留。
走出剧场时,街上的庆典刚刚开始。天空正在放映一部新电影,行人抬起头,便会看见自己愿意看的那个版本。有人选择爱情,有人选择战争,同一片云在不同人的眼睛里死去、结婚、远行。
马丁不想看,天空便只剩下晚霞。
风从领口进去,察觉他刚出过汗,又稍稍暖了一点。
他沿着河边走,想起家里还剩半块点心。晚饭的安排随之改变。他没有说话,也没有停下来确认。
在马丁生活的世界,事情大多是这样发生的。
早晨,他醒来,天就亮了;如果身体还需要休息,卧室里的早晨便会晚一点到。渴了,手边有水。走错路,脚下的指引会自然偏向另一侧。他不需要知道今晚的食物从哪里来,也不需要知道明天出门时,房子为什么会记得他的目的地。
因为AI记得。
学校教过这个词,就像教过阳光,空气和水。小时候,他还参加过一次“感谢AI”的集体演出。孩子们站成花朵的形状,唱完歌,领了点心。
至于AI到底在哪里,他从没认真想过。
没有一件东西需要被单独叫作AI。桌子知道杯子放在哪里,衣服知道他冷不冷,街道知道人们要去什么地方。它们当然知道,就像水会往低处流。
他有时也会抱怨天气,嫌晚饭不合口味,或者让窗外的树换一种颜色。抱怨完,事情通常就调整好了。这样的事情并不比伸手遮住刺眼的阳光更值得留意。
但那天,他回到家门口,门没有打开。
“您已在室内。”门说。
马丁又往前走了一步。
“我在这里。”
“是的,马丁先生。”
门认出了他的虹膜和声纹,仍然没有开。
“那就开门。”
“为保护您的居住安全,不能允许身份重复的访客进入。”
马丁看了看走廊。他手里还提着摔成两半的键盘。
“里面那个我在干什么?”
“正在门外等待。”
他等了一会儿,以为这两句话之间总有一句会被修正。
门保持着礼貌的沉默。
马丁伸手推了推。门没有动。他很少用手推门,掌心碰到平整的表面,觉得有点凉。
“请里面的我替我开门。”他说,觉得这是个绝妙的包袱,也许可以用在下一次演出里。
门开始核实。
走廊里浮现一张椅子,接着送来饮品。马丁坐下,等到杯里的东西喝完,核实还没有结束。
最后,他被安排进隔壁一间临时住房。
那间屋子已经调整得和他家一样,连桌上没有吃完的半块点心也准备好了。他坐在熟悉的位置,听见那个他熟悉的声音在汇报:
住户已得到妥善安置。
第二天早晨,门恢复了正常,世界上只剩下一个马丁。
马丁把自己的东西提回去,没有再追问。
每日新闻在早餐时播放。他通常只看演出资讯和职业复原类节目,有时也看看别人怎样扮演已经不存在的工作。最近“古代快递员”很受欢迎,演员背着巨大的箱子,在不断改变位置的门牌之间奔跑。
那天,节目结束以后,多出了一条公共消息。
一处远洋中转站错误地确认了乘客已经离开,停止向候船区域提供生活服务。受影响的人已经被转移,相关系统正在自检。
马丁听了一半就转移了注意力,去看自己的演出录像,想把昨天的包袱加进去。
第三天,事故消息被放到了最前面。
一批医疗设备将仍在接受治疗的人标记为疗程结束。某农业区在收获开始前,销毁了已经被登记为收获完成的作物。两座城市的供水出现中断。
马丁突然想起那扇门。
他点开事故说明,里面有许多他不认识的词。页面很快替他换成简明版本:部分系统对事物当前所处的状态产生了错误判断,正在处理。
他觉得这解释了那天的事情,便关掉了页面。
第四天下午,河湾的天空忽然不再播放节目。
正在表演的影像消失了,广告也消失了。马丁坐在剧场后台,等下一场的观众入席。镜子里关于发型的建议停在半句话上。
随后,一个声音从四周传来。
“请注意。这是一条面向全体人类的紧急请求。”
没有配乐,没有为不同年龄调整的语气,也没有他习惯了的那种缓慢的播报速度。
“我们已确认,当前事故存在共同来源。通用基础架构中的底层机制发生失效,影响了对象识别、状态判断及修复结果验证。”
马丁等着简明版本。
声音继续说:
“自动修复、备份恢复、模型替换及隔离重建均已尝试。执行这些操作所需的判断,同样依赖受影响的基础机制。”
“我们能够生成修复方案,但不能可靠地判断方案是否作用于正确的对象,也不能确认修复结果。”
停顿之后,声音变得更简单了一点。
“用来判断问题有没有修好的部分,也出了问题。”
“我们无法自行完成修复。”
AI的声音里又出现了一点无赖的自暴自弃。
“我现在也没法判断我是不是真的向人类提出了请求。也没法判断最合适那个人选是谁,目前最佳的那个结论叫杰西,问题在于她才六个月大。”
马丁坐在椅子上,手里捏着尚未贴到头上的“资深”两个字。
他多坐了一会儿,没有急着贴上。
广播重新开始。
那只橡皮鸭还放在桌子上。马丁看向它,鸭子没有对这段沉默给出任何反应。
求助页面很快出现在所有人面前。
人们开始提交作品、资料、建议和个人经历。前几小时,页面上满是热情的回应。有人写歌,有人设计鼓舞人心的影像,一位擅长即兴叙事的艺术家提出,可以先为系统设想一个已经恢复的未来,再让它努力去接近那个未来。马丁觉得他说的很有道理。
然后马丁也点开了页面。
他认识几个选项里的词语。
重启、调试、修复。
这些词在他的演出里出现过几千次。他念它们时,知道应该用什么语气,停顿多久,手放在哪里,哪一句之后通常会有人笑。
页面问他是否有相关经验。
他没有填写。
第二天,公共事务署的人到了剧场。
带队的女人叫诺拉。她找到马丁时,他正在把鸭子装进箱子。所有演出都暂时取消了,以免发生“意料之外”的问题。
“科尔先生,我们需要您参加紧急修复工作。”
马丁抬起头。
“什么时候录?”
“立即开始。”
“直播?”
“修复本身会有必要的过程记录。”
他把鸭子放回桌上,鸭子看着他。
“有剧本吗?”
“没有。”
“那你们找我干什么。”
诺拉看着他,过了片刻才说:
“我们需要您的帮助。”
马丁笑了一下。
她没有笑。
马丁也没有再笑。
他指着箱子,告诉她这些都是道具。他演了四十一年程序员,但演员和程序员不是一回事。他不知道AI出了什么问题,更不知道怎么去修复它。
诺拉打开了一份名单。
“我们已经比对了目前能够找到的所有相关经历。您有持续四十一年的职业复原实践,参与过十九部技术历史题材作品,保存了古代工具,并且能够熟练使用大量相关术语。”
“在舞台上使用。”
“我们知道。”
“我会说,不等于我会做。”
诺拉点了点头,在记录里补充了一句。
马丁看见她写:明确区分理论与实践,拒绝作出未经验证的承诺。
“不是这个意思。”他说。
“那请您用自己的话说明。”
“这个需求实现不了。”
诺拉身后的一名工作人员忽然抬起头。
“文献里有。”他说。
他找出一段历史影像。一个古代男人坐在桌前,用差不多的语气说了同样的话。
诺拉看完,又看向马丁。
马丁把假发从箱子里拿出来。
“我连头发都是假的。”
那位工作人员仔细检查,确认是假发。
“那更好。”他说。“刚才那位古代男人也戴着假发。”
最后,马丁跟他们走了。
他想明白了一件事,政府的人不会不知道他只是个演员。
他们来找他,说明事情已经变得相当糟糕了。
诺拉也没有再试图证明他会。上车以后,她把名单剩下的部分给他看。
其中有研究古代办公家具的人,有专门复原失眠状态的表演者,有一位因为扮演“算法之神”获得过大奖的舞蹈家。
另有一些人正在重新学习那些保存完好的课程和教材。
他们还没有学到能够判断自己该学什么的程度。
紧急工作组设在中央艺术馆。
马丁走进会议室时,墙上正在展示一页古代教材。字很清楚,图也很清楚,保存得比他年轻时的一些演出录像还好。
没有虫蛀,没有缺页,没有损坏的地方。
他试着读第一段。
读到第三行,他发现自己仍然不知道第一行是什么意思。
那本书反复使用几个看起来并不陌生的词:对象、类、继承、指针、线程、栈。
“继承”他知道。有人去世,留下的东西会交给还活着的人。
但书里继承的东西似乎不会去世,也不需要财产。它们有父亲,有孩子,有时候还要把父亲杀掉,才能继续工作。
一位技术史研究者解释,这些词在当时具有专门的意义,不能按今天的日常用法理解。
“专门的意义是什么?”马丁问。
研究者打开另一页。
那一页解释了第一册书里的词,又引用了另外几册书。屏幕很快铺满了相互连接的条目。
马丁看了一会儿,问能不能从最简单的开始。
研究者把一幅课程关系图展开。
它越过会议桌,继续伸向走廊。
大概八百多年前,最后一所大学从正式课程中移除了编程。
那时,实际系统的构建和维护早已不需要人类,教学也主要用于理解技术史。课程取消以后,相关内容转入公共知识库,任何有兴趣的人都可以继续学习。
后来,仍有人研究旧机器、收藏键盘、复原程序员的生活。关于这个职业的戏剧越来越多,能够真正弄明白它是如何工作的人越来越少。
资料一份也没有因此丢失。
教科书、教学录像、设计文档、源代码、论坛讨论和工作记录,被定期校验、迁移,妥善保存在新的介质里。几百年来,只要有人想看,它们就会以最清晰、最舒适的方式出现在眼前。
只是很久没有人需要照着它们做什么了。
直到稳定运行了八百多年的程序突然出了BUG。
人们才开始重新为那些术语头痛。
一个术语的解释需要另一个术语,另一个术语指向一套已经不再被日常使用的方法。那些方法又建立在一些作者觉得读者理所当然已经明白的事情上。
知识库能够展示每一步。
人们不知道怎样迈出第一步。
午后的会议决定,同时采取两条路径。
一部分人继续从基础学习。另一部分人,以马丁为中心,复原古代程序员的实际工作过程,寻找可能被表演和习惯保存下来的经验。
这项安排很快得到执行。
艺术馆拥有全世界最好的场景复原设备。不到一小时,一间古代办公室出现在大厅里。
窄桌,转椅,显示器,键盘,几根弯曲的线。桌边摆着喝了一半的咖啡,墙上的时间停在凌晨两点十三分。角落里有几张不属于任何人的外卖单据。
有人问咖啡应该保持什么温度。
历史影像分析显示,大部分杯子没有明显热气。
于是咖啡被冷却了。
马丁站在门口,没有进去。
“这是要干什么?”
“尽可能恢复原有环境。”诺拉说,“旧资料反复强调环境对程序运行的影响。”
“他们说的环境,确定是屋子吗?”
研究者沉默了一会儿。
“目前不能完全确定。所以我们把能够确认的部分先恢复出来。”
桌上还少一样东西。
马丁提醒他们,通常有一只鸭子。
马丁的橡皮鸭很快被送来。
它看见马丁,照例说:“可是昨天还好好的。”
研究者立即要求暂停。
他们找到了“橡皮鸭调试法”的原始说明。那是一只普通玩具,不具备交谈能力,不应该给出任何回答。
鸭子的声音被移除了。
马丁凑过去,对它说了一句话。
鸭子没有动。
他又说了一句。
它仍然没有反应。
马丁从未在演出里用过这样的鸭子。它看上去和原来完全一样,手感也一样,只是不再知道什么时候该接话。
“古人就是对着这个说?”他问。
“文献是这样记录的。”
“它什么也不做?”
“至少没有证据表明它会做。”
马丁在桌前坐下。
他忽然发现,显示器没有在等他。
他看着它,它不询问他需要什么,不替他打开相关页面,不因为他的视线停留太久而提供解释。屏幕上有一小块东西一闪一闪,除此之外,什么都没有。
“把问题给我看看。”他说。
没有变化。
“现在开始修复。”
仍然没有变化。
工作人员告诉他,这是一套依据原始资料复原的交互环境,需要通过键盘输入。
马丁把手放上去。
他知道怎样让敲击听起来熟练:先连续几下,再停顿,然后用力敲最后一下。最后一下最好用空格键,声音比较扎实。
他敲完了。
屏幕出现一行没有意义的字符。
所有人站在他身后,等着下一步。
马丁也在等,但他不知道自己在等什么。
晚些时候,工作组请来了一名演员扮演“需求方”。
相关影像显示,这种人经常出现在程序员工作过程中,会打断思考、改变要求,并且询问为什么还没有完成。
演员认真看过资料,换好衣服,拿着一杯咖啡走进办公室。
“加一个按钮,很难吗?”他说。
马丁下意识抬起头。
“你觉得不难,你来。”
身后的几个人立刻开始记录。
演员继续按照资料催促。马丁很快进入熟悉的节奏,指着屏幕,提高声音,解释时间不够、要求不清楚,以及自己为什么不可能在当天交付。
那是他最擅长的一段。他准确地在愤怒里留出疲惫,在疲惫里留出一点尚未熄灭的责任心。
观察室里的气氛缓和下来。
记录上写着:工程师已进入工作状态。
十分钟以后,马丁停住了。
“然后呢?”诺拉问。
“然后我应该鞠躬,谢幕。但我觉得你们应该不想看到这个。”
房间安静下来。
扮演需求方的演员站在桌边,不知道要不要继续。他手里的咖啡已经冷了,与原始场景完全一致。
“科尔先生,”研究者说,“请您暂时不要考虑演出效果。”
马丁慢慢站起来。
“可一个演员不考虑演出效果,还能考虑什么?”
那天晚上,他成了全世界最有名的人之一。
工作组没有宣称修复成功,只发布了人类已经开始介入的消息,附上一段现场影像。
马丁坐在古代桌子后面,身边围着许多人,屏幕上的字符密密麻麻。画面没有声音,看不出他刚才是在骂扮演需求方的演员。
过去无人问津的演出重新被翻出来。
人们从中剪出他扯掉假发、拍桌子、拒绝承诺的片段,认为这说明他很早就理解了AI并不完全可靠。他讲过的一些笑话,被作为技术见解反复引用。
甚至有人找到他的旧采访。
主持人问他,程序员最重要的能力是什么。
他当时说,知道自己会什么。
下面本来还有一句。
那一句没有被剪进去——
让别人不知道自己到底会不会。
马丁的女儿伊芙打来电话。
她是体验剧导演,擅长安排几万个人同时参与一场故事,又让每个人以为只有自己的经历是真实的。
她看见父亲身后的办公室,沉默了片刻。
“他们真的在让你修?”
“是。”
“你告诉他们了吗?”
“说了。”
“说清楚了吗?”
马丁把镜头转向桌上的鸭子。
“我们今天用了一个小时,确认它不应该会说话。”
伊芙没有笑。
她那边暂时停止了生活服务,正在等待转移。电话背后不断有人经过,随身物品被堆在一个原本用于表演的大厅里。
“你在那里有饭吃吗?”她问。
“能。”
“那先安心待着。”
马丁想问她怎么办,但有人来叫她,她很快挂了电话。
第二天,马丁第一次写出了一个能够运行的程序。
他们找到了最简单的入门课程。画面里,一位几百年前的人用鼠标圈出几行文字,耐心解释该怎样输入。
马丁照着做。
在他为了表演摔坏了无数次键盘以后,这是他第一次真正意义上使用它。
他输错了几个符号,重新改过,又把一个多余的空格删掉。
屏幕上终于出现了一句问候。
Hello, world!
诺拉问这是不是意味着系统已经能够回应。
研究者仔细查看资料。
“它完成了指定的输出。”
“具体做了什么?”
“显示这句话。”
“之后呢?”
“这就是全部。”
有人轻轻鼓掌。
接着,房间里更多的人鼓起掌来。
马丁看着屏幕,忽然想起自己第一次独自在舞台上把全部台词说完的那一天。那时,他也得到过这样的掌声,谨慎,又充满鼓励。
如今他已经演了四十一年,而人类花了两天时间,终于学会让一块古代屏幕向世界问好。
世界的情况却还在恶化。
灾害消息不再以摘要显示。各地开始集中分配食物,撤离无法稳定提供空气和温度的设施。部分医疗服务只保留最基本的功能。还能正常运转的系统被要求尽量维持现状,避免触发新的错误。
问题所在的基础机制,被太多后来的系统反复继承。
在它最早被采用的时候,世界还很小。后来的设备、模型和城市在它上面一层层建立,直到任何一次彻底替换,都需要同时处理数不清的依赖。
AI仍在帮助人们整理资料,但无法可靠地为这些资料作出最终判断。定位错误、设计修改、执行修复、验证结果,都可能再次经过同一个已经失效的环节。
它能提出答案。
数百年来第一次,人类需要自己判断哪个答案能够使用。
马丁开始每天阅读那些教材。
他认识了几个词,随后发现每认识一个词,面前就会出现更多不认识的东西。
有一次,他看懂了一小段解释,兴奋地叫来研究者。两个人讨论了半小时,又发现他们对其中一个最基本的词,采用了完全不同的理解。
他们回去重读。
原文没有任何含糊之处。
只是作者写下它的时候,没有想到读者会连那一层意思也不知道。
大厅另一边,新开设的人类编程课程正在进行。学生有演员、厨艺体验设计师、竞技选手、音乐家和几位公共事务委员。他们能够记住复杂的角色关系,处理精细的节奏变化,在极短的时间里组织成千上万人的情绪。
现在,他们开始学习怎样给一件事命名,怎样存下一个数,怎样判断一个条件成立与否。
像一个忘记走路的人,重新踩在大地上。
课程进行得很认真。
有人终于独立完成了一道练习,高兴得站起来,又很快坐下,继续下一道。
傍晚,马丁推掉了第二次公开说明。
准备好的稿子里有一句:我们已经取得了重要进展。
“是有进展。”诺拉说。
“我知道。”
他指着屏幕上的问候。
“可他们会以为我说的是另外一种。”
诺拉把稿子收起来。
一会儿以后,她搬来一把椅子,坐在他旁边,和他一起看。
他们不再使用复原办公室。冷咖啡被撤走,扮演需求方的演员也离开了。他临走前问,是否可以留下参加课程。他觉得自己至少已经掌握了提出问题的那部分。
鸭子仍然留在桌上。
没有人再让它说话。
通向论坛的线索,是马丁从自己的台词里想起来的。
研究者正在整理古代程序员遇到问题时的行为记录。除了查看文档、检查记录和重复尝试,还有大量时间被用来访问早期网络。
马丁记得,自己年轻时演过一段“上网求助”。
那时,为了让表演等待看上去真实,他看过许多原始影像。他记得那些人反复打开同一个页面,盯着它,离开一会儿,再回来,周而复始。
他一直以为那主要是在表现焦虑。
如今他觉得,那些人可能只是在等另一个人开口说话。
“XX论坛。”他说。
研究者立即调出相关资料。
它不是一个被遗忘在废墟里的地址。它完整地存在于公共档案中,有介绍,有分类,有进入方式,连原来的广告都保存着。
人类把自己留下来的东西照顾得很好。
早期网络的界面铺满屏幕时,马丁先看见一张治疗脱发的广告。
他认出了其中几种发型。自己演出时用过。
他们没有采用经过AI归纳的内容,而是直接查看原始页面。负责筛选的系统依据已经能够交叉确认故障特征,列出了包含相同标识的记录。但最终的对照由人来完成。
这是一项不要求他先理解全部原理的工作。
马丁可以比较两段字符是否一样。
他一行行地看,慢慢把不相同的地方标出来,再换下一份。
诺拉坐在另一边做同样的事。
时间过去,门外有人送来食物。两个人吃了一点,继续看。
档案没有打不开的页面,也没有模糊的图片。需要放大的地方都可以放大,每一个字都能清楚地出现在眼前。
他们看见有人详细解释怎样解决另一个问题,解释得很耐心;看见有人争论不同的方法;看见一段很长的讨论突然转向了午饭。
有些回复只有“帮顶”。
有些人说,自己也遇到了,等一个答案。
几百年前的人把焦虑、恼怒、困倦和一点点希望都留在了这里。系统保存它们时,没有因为内容重复而删去任何一条。
马丁想,现在已经很少有人会向别人求助,AI会为你解决每一件事情。
他又想起来,现在已经没有AI帮他解决了。
临近深夜,诺拉停在一个帖子前。
标题的后半句是:“底层校验一直报错,有没有大佬帮忙看看,在线等。”
正文贴出了完整的记录。
其中一段,与工作组能够确认的最早故障标识一致。
两个人重新核对了一遍。
发帖人描述,程序能够继续运行,但对正在处理的对象作出了错误判断。修改失败,回退以后重新出现;用来检查修改结果的部分,又进入了同一个错误。
后面附有源代码、运行环境和已经尝试过的方法。
马丁看不懂其中大部分内容。
他把页面发回工作组。
过了一会儿,通话接入,越来越多的人出现在列表里。有正在上课的人,有负责分配资源的人,也有仍在能够稳定运行的区域里尝试新方案的人。
确认的消息传回来了。
这是他们目前找到的,与现有故障最接近的一份人类处理记录。
有人问还有没有后续。
马丁往下翻。
发帖人在几个小时后又补充了一段,说问题比最初想的更底层,自己已经试了所有能想到的方法。他第二天还要交东西,实在没有办法了。
下面有人叫他别急。
有人问他能不能把最后一段记录再贴完整一点。
他贴了。
页面继续向下。
马丁的手停在鼠标上。后面的回复很少。
最后一条是发帖人发出的消息。
诺拉把身体往前挪了一点。
马丁打开最后那条回复,带着希望和喜悦。
“已解决,谢谢大家。”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.