神隕雨
沈清珩覺得自己這輩子最錯誤的選擇,就是在週五晚上八點說了一句“這個Bug我十分鐘就能修好”。
現在是凌晨一點四十七分。
他還坐在工位上。
螢幕上的程式碼像一條條發光的毒蛇,盤踞在他眼前。那個該死的Bug從“十分鐘”變成了“四小時”,從“一行程式碼的事”變成了“底層邏輯重構”。咖啡喝了四杯,外賣盒子還敞著口扔在桌角,紅燒肉的油已經凝固成了一層白色的膜。
他盯著螢幕,眼睛乾澀得像兩片砂紙。
“沈老師,還不走?”
保潔阿姨推著拖把車經過,看了他一眼。
“快了,”沈清珩揉了揉眼睛,“您先忙。”
保潔阿姨搖搖頭走了。整層樓只剩下他一個人。
北緯科技大廈的十七層,白天擠滿了人,現在安靜得像一座墳墓。日光燈管發出細微的電流聲,偶爾有中央空調的風口響一下,像某種巨型生物在喘息。
沈清珩靠在椅背上,盯著天花板發了三秒鐘的呆。
然後他重新看向螢幕。
Bug還在。那個該死的時間戳轉換錯誤,像一隻蟑螂一樣藏在他寫了三千行的支付系統裡。日誌顯示它已經存活了十一天,製造了四百七十二筆異常訂單,讓客服部接到了兩百多個投訴電話。
他的leader在下午六點的週會上說:“清珩啊,這個問題客戶很關注,週末之前一定要解決。”
週末之前。那就是今晚。
他深吸一口氣,重新開始梳理呼叫鏈。
手指在鍵盤上敲擊的聲音在空曠的辦公室裡迴盪。
---
凌晨兩點十五分。
沈清珩終於找到了Bug的根源。
不是邏輯錯誤。不是邊界條件問題。是一個他從來沒見過的異常——某個中介軟體的返回值,在特定毫秒級時間視窗內,會憑空多出一個他從未定義過的欄位。
這個欄位叫“rule_id”。
他追蹤了一整個晚上,翻遍了所有程式碼倉庫、所有依賴包、所有第三方文件,都沒有找到這個“rule_id”的任何來源。
它就像是……從空氣里長出來的。
沈清珩盯著螢幕上那個詭異的欄位,後背微微發涼。
他做了四年開發,從沒遇到過這種事。
“算了,”他自言自語,“先睡一覺,明天再說。”
他儲存程式碼,合上膝上型電腦,把手機揣進兜裡,拿起那件掛在椅背上的黑色衛衣。
就在他穿衣服的瞬間,窗外閃過一道白光。
不是閃電。閃電是從上往下的。
這道光是從下往上的。
沈清珩的動作頓住了。他慢慢轉向落地窗。
北緯科技大廈的十七層,能看到大半個科技園。此刻,園區裡所有的路燈、所有的寫字樓燈光、所有加班視窗透出的亮光,都同時閃了一下。
然後,天空開始下雨。
不是普通的雨。
那些雨滴在落下的過程中,會發出微弱的光。不是反光——是它們本身在發光。每一滴都像是被點燃的細小星辰,拖著淡藍色的尾跡,從雲層中傾瀉而下。
沈清珩下意識看了一眼手機。
凌晨兩點十八分。訊號滿格。沒有天氣預警。
他又看了一眼窗外。
雨越下越大。那些發光的雨滴落在柏油路面上,濺起的不是水花,而是像碎玻璃一樣的光點。落在行道樹的葉片上,葉片會短暫地亮一下,像一個LED燈被按下了開關。
“這是甚麼鬼……”
他拿起手機想拍影片,手指剛點開相機應用,螢幕上突然彈出一個他從未見過的介面。
是直接覆蓋在所有內容之上的——一個極簡風格的深□□面,像是從螢幕底層浮現出來的。
上面只有一行字:
【系統提示】檢測到“神隕雨”覆蓋。你已被選為“天命人”。
沈清珩愣住了。
他以為是手機中了病毒,用力按了幾下電源鍵。螢幕黑了又亮,那個介面還在。
他重啟了手機。
開機動畫結束後,那個介面又出現了。
只不過這次多了一行字:
【緊急工單#0001】重力場區域性溢位。修復時限。
下面還有一個倒計時。
沈清珩盯著螢幕,腦子裡只有一個念頭:這他媽是哪個同事在整我?
他環顧四周。辦公室空無一人。所有的工位都是暗的。
他又看了一眼窗外。
然後他看到了讓他這輩子都忘不掉的一幕。
科技園中央的那條主乾道上,一輛白色的廂式貨車正在懸浮。
不是被甚麼舉起來的。是它自己飄起來的。四個輪子懸空半米,像一個被隱形的手托起的玩具車。車頭燈還亮著,照出一片慘白的光。
而在那輛貨車的正下方,有一個人。
一個穿著黃色外賣服的人,騎著一輛電動車,正停在貨車懸浮的位置。他顯然也懵了,仰著頭看著頭頂的龐然大物,電動車的踏板燈一閃一閃的。
沈清珩的大腦瞬間從“有人在整我”切換到了“出事了”。
他衝到窗前,臉幾乎貼在玻璃上。
那輛貨車在緩緩下沉。
一秒一厘米。
不。不是下沉。是重力在恢復。
但恢復的速度不均勻。貨車先往左偏了一下,又往右偏了一下,像是在被兩股不同的力量拉扯。車廂上印著的“順豐速運”四個字在燈光下忽明忽暗。
倒計時還在走。
沈清珩低頭看手機,又抬頭看窗外,又低頭看手機。
他不知道自己為甚麼要看那個倒計時。他連這個介面是甚麼都不懂。甚麼叫“重力場區域性溢位”?甚麼叫“天命人”?他只是一名寫Java的後端開發工程師,他的工作是把需求文件變成可執行的程式碼,他的世界裡最危險的事情是生產環境被刪庫。
但現在有一輛貨車要砸到一個外賣員頭上。
他轉身衝向電梯。
電梯還在十七樓。他瘋狂地按著關門鍵,門關上又開啟了一次——有東西擋住了感應器?不,沒有人,是空氣。他再次按關門鍵,這次門終於關上了。
電梯開始下降。
十七、十六、十五。
手機又震了一下。他低頭看,那個介面自己更新了。
【緊急工單#0001】重力場區域性溢位。
修復方式:程式碼注入。
請在倒計時結束前輸入修復程式碼。
下面多了一個輸入框。
游標在輸入框裡一閃一閃的。
像極了他每天都在用的IDE。
沈清珩盯著那個輸入框,腦子裡閃過一萬個念頭。最後只有一個念頭落了下來:
我是一個程序員。
我每天都在做的事情,就是把不工作的東西,變成工作的。
電梯到了五樓。
他咬咬牙,在輸入框裡敲下了第一行字:
```javascript
if (pended && erneath) {
```
電梯到了二樓。
他繼續敲:
```javascript
ty = 9.8;
```
電梯到負一層。門開了。
他最後敲下:
```javascript
} else {
ty = 9.8;
}
```
點選“提交”。
電梯門完全開啟的那一刻,他聽到了外面傳來的聲音。
哐當。
貨車落地的聲音。
不是砸落。是穩穩地落下的聲音。四個輪子同時接觸地面,連一點多餘的顛簸都沒有,像是被一隻無形的手輕輕放下的。
沈清珩衝出電梯。一樓大廳的玻璃門外,那輛貨車已經穩穩地停在路上,車燈還亮著,發動機還在響。
那個外賣員站在旁邊,電動車倒在地上,他顯然是被嚇到了,嘴唇哆嗦著說不出話。
貨車司機從駕駛座探出頭來:“兄弟你沒事吧?我剛才……我剛才感覺車飛起來了!”
沈清珩站在大廳裡,渾身冷汗。
手機又震了。
【工單#0001】已修復。
修復耗時。
獎勵:運維積分+50。當前積分:50。
排名:第名。
他盯著那行“第名”,喉嚨乾澀。
這不是整蠱。
這是真的。
這個世界上,有至少四萬七千個人,和他一樣,在剛才那場雨裡,接到了這樣的工單。
---
凌晨兩點四十一分。
沈清珩坐在科技園路邊的花壇上。
雨已經停了。路面溼漉漉的,但那些發光的東西已經消失了,像是從來沒有存在過。路燈重新亮了起來,寫字樓的燈也恢復了正常。
如果不是手機上那個介面還在,他會以為自己在做夢。
那個介面現在變成了一個“主面板”,像一個極簡版的監控後臺。
“蓋亞指令”主面板
·天命人ID:QH-0427
·運維積分:50
·當前排名
·待接工單:0
·歷史工單:1(已修復)
底部有幾個標籤頁:工單、社群、排行榜、我的。
他點開了“社群”。
裡面像是一個論壇的簡化版,全是帖子。發帖時間都在最近半小時內。
· “我靠你也有???”
· “北京朝陽區求組隊,這玩意兒到底是甚麼?”
· “別慌,我剛修復了一個機率異常,感覺就是寫程式碼”
· “有沒有人知道積分有甚麼用???”
· “我不信,這一定是騰訊的新遊戲測試”
沈清珩快速刷了幾條,資訊很零散,但有幾個共同點:
第一,所有被“神隕雨”淋到的人,收到的都是類似的介面。
第二,大多數人修復的都是小問題——有人修復了一個“摩擦力異常”,有人修復了“聲音傳播速度偏斜”。
第三,每個人都提到了同一個詞:程式碼注入。
就像是……世界本身是一套系統。
而他們是臨時被拉來修Bug的外包。
沈清珩盯著螢幕,腦子裡突然蹦出一個念頭:如果世界是一套系統,那它的程式碼是誰寫的?
系統本身。
“蓋亞指令”。
這個名字聽起來不像是一個臨時起的名字。它太正式了,像是早就存在的東西。
他又看了一眼排名:第名。
四萬七千多個人。
這個數字還在漲。在他盯著看的這十幾秒裡,排名從跳到了。
說明雨還在其他地方下。還在不斷有新人被選為“天命人”。
沈清珩深吸一口氣。
他站起來,拍了拍褲子上的灰。
“先回家。”他對自己說,“睡一覺。明天再說。”
---
凌晨三點零五分。
沈清珩騎著共享單車到了出租屋樓下。
那是一個老小區的六樓,沒有電梯。他爬樓梯的時候,腦子裡一直在轉。
重力場溢位。程式碼注入。if else語句。提交。
他修那個Bug的方式,和他平時修Bug的方式沒有任何區別——先判斷條件,再給出解決方案。唯一不同的是,這次他的程式碼在一個完全陌生的環境裡被執行了。
而且被執行成功了。
貨車落地的那一剎那,他感受到了一種奇怪的感覺。不是成就感。不是後怕。
是一種……熟悉感。
好像他曾經做過類似的事情。
好像他本來就應該會這個。
他搖了搖頭,把這個荒謬的念頭甩掉。
爬到六樓,掏出鑰匙開門。一室一廳的小房子,進門就是客廳,沙發上堆著快遞盒和換下來的衣服。他把書包扔在玄關,走進臥室,倒在了床上。
手機又亮了。
不是那個系統介面。是微信。
蘇曉棠:你還在加班嗎?
蘇曉棠是他公司樓下便利店的店員。他每天晚上都會去買一罐無糖可樂,時間久了就認識了。蘇曉棠眼睛很大,笑起來有酒窩,說話聲音不大,但每個字都很清楚。
沈清珩回了兩個字:剛到家。
蘇曉棠:剛才那場雨你看到了嗎?
沈清珩的手指在鍵盤上停了半秒。
他:看到了。很怪。
蘇曉棠:我看到了很神奇的東西。
他:你也被淋到了?
蘇曉棠:嗯。但我不是被淋到。我是……我在收銀臺裡,雨下到一半的時候,我看到店裡的監控螢幕上出現了很多奇怪的數字。
他:甚麼數字?
蘇曉棠:我不確定。那些數字一閃就沒了。但是我覺得……它們是在描述剛才那輛飛起來的貨車。
沈清珩猛地從床上坐起來。
蘇曉棠不是被雨淋到的。她沒有收到系統介面。沒有工單。沒有積分。但她看到了異常。
這意味著甚麼?
意味著普通人也有可能感知到“系統”的存在?
他:你怎麼知道貨車飛起來了?
蘇曉棠:我看到它了。從便利店的窗戶看到的。我跑出去看的時候,它已經落地了。
她停頓了一下。
蘇曉棠:沈老師,你那時候在附近嗎?
沈清珩猶豫了三秒鐘。
他:嗯。我在。
蘇曉棠發了一個笑臉表情。
蘇曉棠:那就好。我還以為我出現幻覺了。晚安!
他:晚安。
沈清珩放下手機,盯著天花板。
出租屋的天花板有一塊水漬,形狀像一個被壓扁的橢圓。他已經盯著這個水漬失眠過很多次了,但從沒有哪一次像今天這樣,腦子裡塞滿了問題。
“蓋亞指令”是甚麼?
“神隕雨”從哪裡來?
“天命人”為甚麼會被選中?
“運維積分”有甚麼用?
為甚麼蘇曉棠能看到異常,卻沒有收到系統介面?
還有那個最讓他不安的問題——
他剛才敲下那段程式碼的時候,為甚麼沒有任何猶豫?
他從沒有學過那種“語法”。if else是程式設計的基礎結構,沒錯。但那段程式碼裡使用的“pended”和“erneath”這些屬性和方法,他從來沒有定義過。
可是“系統”認了。
它認了那些屬性和方法,像是它們本來就存在。
像是他本來就應該知道它們存在。
沈清珩閉上了眼睛。在意識陷入黑暗的最後一秒,他的腦海裡閃過一個畫面——
一個他從未見過的介面。不是手機上那個簡潔的黑底白字介面,而是一個巨大的、鋪天蓋地的、由無數發光的線條和字元構成的介面。
而他站在那個介面的正中央。
手裡握著一行程式碼。
那是他三歲的時候。
他不記得這件事。
但他知道那是真的。