痕跡
沈清珩發現自己最近在寫程式碼的時候,會不自覺地停下來。
不是卡住了。是“知”到了什麼。他的黑程式碼在系統評估功能關閉後完了最終的化,不再需要主呼——它已經為他神經系統的一部分,就像呼吸一樣自然,不需要去想“我現在要呼吸了”,自己就會呼吸。寫程式碼的時候,他的黑程式碼會自讀取螢幕上的每一行程式碼的“底層狀態”。不是語法檢查,不是邏輯分析,而是更深層的東西——這行程式碼在被編譯機指令之後,會在CPU的哪個核心上執行,會佔用多快取,會在流水線中經歷多次冒險。這些資訊對寫程式碼沒有任何幫助,但他就是能“看”到。
他寫了一個排序演算法。黑程式碼讀取了演算法的底層狀態——時間覆雜度O(n log n),空間覆雜度O(1),在Intel i7-12700H的CPU上執行時,會在效能核心上執行,L1快取命中率大約百分之八十七。他不需要這些資料。但他還是看到了。就像方硯不需要知道路面的係數,但他還是讀到了。
他從顯示前靠回椅背。
蘇曉棠在客廳裡看一本書——不是程式設計書,是一本小說,王安憶的《長恨歌》。最近開始讀上海作家寫的上海故事,說是想多瞭解一下這座城市。搬來上海一年多,對這座城市的瞭解還侷限在便利店方圓兩公里之。現在想擴大一點。沈清珩覺得這個想法很好,但他自己沒讀過《長恨歌》。他讀過的上海故事只有石庫門弄堂口的指示牌。
“沈老師,你怎麼不寫了?”蘇曉棠從書裡抬起頭。
“在想事。”
“想什麼?”
“想我怎麼才能讓黑程式碼不讀那些沒用的資訊。”
蘇曉棠放下書。穿著沈清珩的舊衛,灰的,領口有些鬆了,出一截鎖骨。夜燈開著。十幾塊錢的雜貨店燈,上電就亮。“方硯也有同樣的問題。他的亮金程式碼在讀所有東西。路面、行人、花、綠蘿。他說他在練習‘刪除’。”
“我的黑程式碼不是在讀,是在‘寫’。不是寫程式碼,是‘留痕跡’。我坐過的椅子、過的門把手、踩過的地板——都會短暫地留下我的程式碼簽名。不是故意的,是黑程式碼在理世界裡還沒學會不留痕跡。方硯在第七層裡學會了刪除,我在理世界裡需要學會不留。或者學會掉。”沈清珩低頭看著自己的手。黑印記從左手手背蜿蜒到前臂中段,在夜燈線下幾乎是看不見的,但蘇曉棠知道它在那裡。見過它在系統裡發的樣子。
蘇曉棠從沙發上站起來,走到書桌前,拉起沈清珩的左手,翻開手背。那道印記在指尖的控下,微微亮了一下。不是發,是“回應”。蘇曉棠的金鑰和沈清珩的黑程式碼之間的連線,在理接時會自啟用。不傳遞資訊,不換資料,只是“確認”——確認對方還在。
“方硯說,在第七層深,他發現系統的自我認知程式碼每一層都在問同一個問題:‘我是誰?’你的黑程式碼在理世界裡留痕跡,是不是也在問這個問題?‘我在這裡。你看到我了嗎?’”
沈清珩看著蘇曉棠的手指在他的印記上停留。
“也許。”
蘇曉棠鬆開他的手,回到沙發上,拿起《長恨歌》。沈清珩轉回螢幕前,看著那個排序演算法。黑程式碼還在讀——L1快取命中率百分之八十七,效能核心,時間覆雜度O(n log n)。這次他沒有刪。他把那條資訊存在了意識裡,‘存在’不是出於需要,而是出於‘接’——資訊讀到了就讀到了,不需要刻意刪除,也不需要刻意保留。讓它自己消失。方硯花了兩週學會“刪除”。沈清珩不知道自己需要多長時間學會“順其自然”。
週五下午,公司提前發了一個通知——專案上線,今晚需要留守。沈清珩所在的電商公司正在做“雙十二”的測,運維組的人手不夠,從研發組調了幾個人幫忙盯著監控大盤。沈清珩是其中之一。他從下午六點開始盯,一直盯到凌晨一點。
監控大盤在辦公室正前方的巨幕上,五十五寸,四塊拼接,即時顯示著系統的各項指標——QPS、RT、CPU、記憶、網路IO、磁碟IO。所有數字都在正常範圍波。但沈清珩的黑程式碼在盯著大盤的同時,也在讀別的東西。不是在讀大盤上的數字,而是在讀“監控系統本的底層狀態”。這個監控系統是誰寫的,用了什麼框架,資料採集的取樣率是多,儲存引擎是SQL還是ClickHouse,資料保留策略是多久。他不需要這些資訊,但他讀到了。
他讀到了監控系統底層的一個微小異常。不是QPS突增,不是RT飆升,不是任何運維指標會報警的異常。是一個數據取樣的時間格式不統一的問題——同一個監控項,在不同伺服上採集到的資料,時間有的用的是UTC+8,有的用的是UTC+0。差值正好八個小時。
這個異常不會影響監控系統的準確,因為取樣的時間只是為了排序,不是用於計算時間間隔。但沈清珩的黑程式碼在讀到這個異常的時候,自“標記”了它,就像一個編譯在遇到不規範的語法時會給出警告——程式碼能執行,但不推薦。
沈清珩看著那條警告,笑了。不是覺得好笑,是覺得黑程式碼真的把自己當他的編譯了。不是在修系統的Bug,而是在修公司監控系統的Bug。
凌晨一點,測結束。運維組的老王拍著他的肩膀說“辛苦了”,沈清珩說“不辛苦”,關上電腦,走出公司大門。靜安寺的午夜,街上的車很,路燈把人的影子拉得很長。他在路邊站了一會兒,等一輛計程車。等了很久,車沒來。
他決定走回去。從公司到出租屋,大約需要四十刻鐘。他走得不快,黑程式碼在他走路的時候自讀取了路面的係數、行道樹的年度、對面樓房的建造年份。他沒有刻意刪,也沒有刻意留。資訊來了,就讓它來。資訊走了,就讓它走。方硯說得對,順其自然。
走到常德路路口的時候,沈清珩停下了。不是因為累了,是因為他的黑程式碼知到了方硯的亮金程式碼。不是連線自啟用的那種知——連線需要雙方理距離在十米以才會自啟用。他現在離常德路那棟老小區還有將近兩百米,但他就是“覺”到了方硯。方硯在亮著燈的窗臺前,窗臺上有兩盆花,一盆枯死的綠蘿,一盆鮮活的薄荷。方硯站在窗前,手裡拿著一個量杯,在給綠蘿澆水。五十毫升。沈清珩能知到這些,但他的黑程式碼和方硯的亮金程式碼之間的連線沒有啟用,這些畫面不是連線傳過來的,是他的黑程式碼據方硯的習慣和行為模式“推演”出來的。和人工智慧差不多,沈清珩想。他的黑程式碼在第七層裡經過一年多的演化,已經學會了據有限的資訊推演未知的部分。不是預測,是“補全”——和他作為程式設計師的工作本質一樣。
他繼續走。
凌晨一點五十二分,沈清珩到家了。客廳的燈關了,小夜燈亮著。蘇曉棠已經睡了。睡在沙發上,沈清珩的舊衛蓋在上,被子踢到了地上。沈清珩把被子撿起來,蓋在上。他在沙發旁邊站了一會兒,看著睡著的臉。《長恨歌》扣在地板上,翻到了一百多頁的地方。他彎腰撿起書,夾好書籤,放在茶几上。然後他關掉小夜燈,走進了自己的房間。
躺在床上,閉上眼睛。黑程式碼在安靜地執行,不是在讀什麼,而是在“整理”。把今天讀取到的所有資訊分類——有用的、沒用的、需要保留的、可以刪除的。L1快取命中率百分之八十七,沒用的,刪除。監控系統時間不統一,沒用的(他不負責監控系統),但標記過了,刪除。老王拍他肩膀時手掌的溫度,有用的,保留。蘇曉棠睡著時睫在臉頰上投下的影,有用的,保留。方硯在窗前給綠蘿澆水的畫面,他推演出來的,不是真實讀取的,但也保留。
。了好疊也子被。上發沙在放了好疊衛。衛舊的他是不,服的己自著穿。粥攪裡房廚在棠曉蘇到看,室臥出走珩清沈。息休六週,二休五做,理助析分料資,作工新了換——店利便去沒天今。味香的粥有裡房廚,了起經已棠曉蘇。六週。半點八上早。醒鐘鬧被珩清沈
。回沒也頭棠曉蘇”。早“
”。早“








