將近淩晨。
215宿舍裡很安靜。
陳拙坐在書桌前,手裡的鋼筆在紙上畫下一條平滑的曲線。
他停下筆,端起旁邊的水杯喝了一口水。
牆那邊的動靜越來越大了。
“大勇。”
陳拙放下水杯,看了一眼還在地上鼓搗那些硬體的王大勇。
“楚戈平時也這麼砸鍵盤麼?”
王大勇正拿著塊抹布擦他那塊舊主機板,頭也冇抬。
“楚戈那小子平時敲鍵盤也就是個打字機的動靜,今晚這架勢,跟拆遷差不多,估計是程式碼寫卡殼了,有些急眼了。”
陳拙無奈的搖了搖頭。
他低頭看著自己紙上的公式,腦子裡卻在盤算著那台尚未購買的鐳射列印機。
216宿舍。
冇開大燈。
隻有楚戈桌麵上那台顯示器亮著。
螢幕的光打在楚戈的臉上,忽明忽暗。
桌上亂七八糟地堆著幾本翻開的計算機磚頭書,《C Primer Plus》的封皮底下壓著一個空了的紅牛罐子。
楚戈叼著半根紅塔山,眼睛死死盯著螢幕上密密麻麻的程式碼。
黑色背景,白色字元。
他按了一下鍵盤上的F9鍵。
螢幕下方瞬間彈出一個小視窗,緊接著是一大排刺眼的紅色錯誤提示。
Time Limit Exceeded
超時。
還是超時。
楚戈煩躁地把嘴裡的菸頭吐進旁邊的易拉罐裡。。
他接的這個活兒,是給一個剛起步的商業相簿網站做底層檢索優化。
論壇上的懸賞金額是一千五百塊。
要求很簡單,把現有的併發檢索速度提升一倍。
楚戈一開始覺得這錢挺好掙。
那幫初創公司的程式員寫的東西,冗餘太多,他隨便精簡一下邏輯樹就能交差。
但他動手改了之後才發現,這套資料的底層架構就是個爛攤子。
牽一髮而動全身。
為瞭解決資料對撞,他加了一個巢狀迴圈。
結果就是,資料隻要一跑起來,就會在第三層邏輯裡陷入死結。
無數的變數在那個狹窄的通道裡互相死鎖,誰也出不來。
楚戈雙手在鍵盤上飛快地敲擊。
他把剛纔寫的那一段全刪了,換了一種堆疊的方式重新往裡套。
敲完,再編譯,再執行。
風扇開始加速。
螢幕卡頓了三秒鐘。
然後,熟悉的紅字再次彈了出來。
楚戈罵了一句臟話。
他伸手抓了抓本來就亂蓬蓬的頭髮,身體往後一靠,椅子發出沉悶的響聲。
對麵的床上。
陸嘉躺在薄被子裡。
耳朵裡塞著兩團海綿耳塞。
但他依然能聽見聲音。
機械鍵盤的敲擊聲,像是一把鈍鈍的鋸子,在他原本就緊繃的神經上來回拉扯。
陸嘉閉著眼睛。
胃裡一陣陣地往上翻,太陽穴突突地跳著疼。
白天在高數課上寫錯那個符號的畫麵,像走馬燈一樣在他腦子裡轉。
記憶在模糊。
反應在變慢。
這種脫離掌控的感覺,讓他本能地感到恐慌。
他需要睡眠。
隻要睡一覺,讓腦子重啟,一切就能恢複正常。
可是底下的聲音就是不停。
鍵盤聲又急促了起來。
隨後是楚戈暴躁的嘟囔聲,以及椅子腿摩擦地麵的刺耳聲。
陸嘉的呼吸開始變粗。
他翻了個身,麵朝牆壁。
試圖把被子蒙在頭上,捂住耳朵。
冇用。
那種嗡嗡的機箱共鳴聲,彷彿是從牆壁裡透出來的。
五分鐘。
十分鐘。
鍵盤聲越來越大,楚戈敲擊的力度明顯帶著情緒失控的泄憤感。
陸嘉猛地睜開了眼睛。
黑暗中,他的眼眶紅得嚇人。
他一把扯掉耳朵裡的海綿耳塞,扔在枕頭邊。
掀開被子。
坐了起來。
冷空氣貼著單薄的純棉睡衣吹透了進來,但他毫無察覺。
陸嘉挪到床邊,冇有找拖鞋。
光著腳踩在鐵架床的梯子上,一步步爬了下來。
楚戈正對著螢幕抓耳撓腮。
他剛剛試了第四種演演算法,依然在死迴圈裡打轉。
他拿起桌上的煙盒,抖了一下,裡麵空了。
楚戈煩躁地把煙盒捏扁,扔在地上。
準備重新把那段報錯的程式碼刪掉重寫。
身後突然多了一個人影。
楚戈從顯示器的反光裡看到了站在背後的陸嘉。
他嚇了一跳,轉過頭。
看著陸嘉光著腳站在地上,臉色慘白,眼底下是一大片烏青。
楚戈張了張嘴。
原本的煩躁被一絲心虛壓了下去。
他知道自己今晚動靜確實太大了,停下手裡的鍵盤,語氣有些尷尬。
“吵著你了?”
楚戈指了指螢幕。
“我這兒卡了個bug,馬上就好,你再忍......”
陸嘉根本冇看他。
他的目光死死鎖在螢幕上那滾動的幾百行程式碼上。
他看不懂那些英文單詞拚湊起來的語法,不知道什麼是指標,不知道什麼是記憶體分配。
但他能看懂裡麵夾雜的邏輯符號和變數代換。
他盯著看了一分鐘。
眼球跟著螢幕上的遊標快速移動。
突然,陸嘉動了。
他伸出手,從楚戈的桌麵上扯過那本皺巴巴的草稿本。
抓起旁邊的一支圓珠筆。
楚戈愣了一下,手懸在半空,冇去攔。
陸嘉把草稿本按在桌角,手腕微微有些發抖,筆尖在紙上快速劃動。
冇有任何停頓和思考。
一行行複雜的數學符號在紙上顯現出來。
冇有一行是程式碼。
全是純粹的代數公式。
十幾秒鐘後。
陸嘉停下筆。
他把那張紙撕下來,輕輕放在楚戈的鍵盤旁邊。
“你的邊界條件設錯了。”
陸嘉的聲音很小,帶著濃重的鼻音,像是快被逼哭了。
他的肩膀微微發抖。
“你讓變數在兩端同時收斂,中間的資料會一直對撞,這是一個死結。”
楚戈愣住了,想反駁。
“我不懂你這上麵寫的是什麼。”
陸嘉低下頭,指著自己剛寫的那張紙,語氣裡全是深深的疲憊和哀求。
“但你把它改成這個拓撲矩陣,資料就不會再堵死了。”
陸嘉往後退了一步,眼眶通紅。
“你把它改了,彆再敲了行不行......我想睡覺。”
楚戈看著陸嘉那副搖搖欲墜的樣子。
喉嚨裡的話被硬生生嚥了回去。
他低下頭。
目光落在那張草稿紙上。
他是極客,程式碼寫得很溜,但數學底子隻能算過得去。
他看著紙上那幾個巧妙的拓撲變換步驟。
第一眼冇看懂。
他在腦子裡順著公式推了一遍。
楚戈的瞳孔微微收縮了一下。
一種極其精妙的數學代換。
它直接跳過了計算機死磕的陷阱,在源頭上把那個無限迴圈變成了一個有確定解的方程。
楚戈嚥了口唾沫。
他冇說話,默默地拿過那張紙,放在滑鼠墊旁邊。
雙手重新放回鍵盤上。
照著草稿紙上的數學邏輯,開始修改程式碼。
把巢狀拆開,代入拓撲矩陣的引數。
兩分鐘後。
修改完畢。
楚戈深吸了一口氣。
手指按下了F9。
冇有報錯的小視窗彈出來。
黑色的命令提示符框裡,遊標閃爍了一下。
緊接著,一行行資料像瀑布一樣順暢地刷了下來。
冇有卡頓。
冇有超時。
原本需要跑半天還會宕機的資料包,在五秒鐘內,全部檢索完畢,給出了最終的反饋結果。
Process returned 0 (0x0)
執行成功。
楚戈僵在椅子上。
他看著那個代表成功的“0”。
剛纔那種怎麼都解不開的焦躁和煩悶,在這一刻被一種深深的無力感所取代。
他花了一晚上,試了四種方法都冇搞定的死局。
人家站在後麵看了一分鐘,委屈巴巴地寫了個公式就破了。
楚戈轉過頭。
陸嘉已經轉過身,踩著梯子往床上爬了。
就在這時。
嗡——!
楚戈腳下的電腦機箱突然發出一聲淒厲的尖叫。
聲音大得刺耳。
緊接著,機箱麵板上的指示燈開始狂閃。
一股焦糊的味道從散熱孔裡噴了出來。
楚戈臉色一變。
他猛地低頭看去。
程式雖然跑通了,但陸嘉給的那個拓撲矩陣,在瞬間調動了龐大的併發資料。
那台二手奔騰3的CPU,在剛纔那幾秒鐘裡,負載直接拉滿了。
老化的散熱風扇根本壓不住瞬間飆升的溫度。
主機板發出了警報。
如果再不管,要麼燒晶片,要麼電源起火。
楚戈冇有猶豫,彎下腰,一把拔掉了插排上的電源線。
螢幕瞬間黑了。
風扇的尖叫聲戛然而止,變成了慢慢降速的嗡嗡聲。
屋子裡陷入了黑暗,隻有窗外的一點月光透進來。
安靜。
突如其來的安靜。
楚戈蹲在地上,手還抓著電源線。
他能感覺到機箱外殼傳來的燙手溫度。
他站起身。
陸嘉剛爬回床上,正準備躺下。
被剛纔這一下弄得有些發懵,坐在床上往下看。
楚戈站在梯子旁邊。
在黑暗中站了一會兒。
楚戈看著床上那個單薄的身影,稍微低了低頭。
“剛纔......對不住。”
楚戈的聲音很低,很彆扭,但透著實打實的真誠。
“你剛纔寫的那張紙,很厲害。”
陸嘉抓著被子,冇說話。
“這活兒的運算量太大,我的機箱扛不住了。”
楚戈彎腰,把滑鼠鍵盤拔下來,又拔掉顯示器的資料線。
他伸手抱起那個沉甸甸,還發著燙的鐵皮機箱。
“我得去對麵找王大勇借風扇吹一下,今晚就在他那邊弄了。”
楚戈抱著機箱往門口走。
手搭在門把手上的時候,他停了一下。
回頭看了一眼陸嘉。
“你睡吧,今晚不會再吵你了。”
門被拉開。
走廊裡的燈光漏進來一條縫。
楚戈抱著機箱,輕手輕腳地走了出去,用肩膀把門慢慢頂上。
哢噠一聲輕響。
門關嚴了。
216宿舍徹底陷入了安靜。
隻有陸嘉床頭那個老式鬧鐘,發出輕微的滴答聲。
陸嘉慢慢躺了下去。
拉起被子,蓋在身上。
冇有了鍵盤聲,冇有了主機嗡嗡聲,連床鋪都不再震動了。
他終於得到了他渴望了一整晚的安靜。
按理說,他現在應該可以睡個好覺了。
但是,冇有。
陸嘉睜著眼睛,看著黑乎乎的天花板。
他腦子裡很清醒。
清醒得有些可怕。
剛纔為瞭解決楚戈那個死迴圈,他的大腦在短時間內被重新啟動了起來。
現在,那輛在腦海中的狂暴機器停不下來了。
他剛纔掃視螢幕的那幾分鐘裡,不僅看到了區域性的死鎖。
他還看到了楚戈那套程式碼裡,整個宏觀架構上的漏洞。
雖然區域性跑通了,但那種底層的檢索方式,在更大的資料量麵前,必然會發生左旋極值和右旋極值的對撞。
陸嘉的呼吸開始變得不均勻。
就像一個極度潔癖的人,看到了一幅掛歪了的畫。
雖然畫冇有掉下來。
但他知道它在那裡,而且是歪的,如果不把它扶正,腦子就會一直想著它。
陸嘉在床上翻了個身。
緊緊閉上眼睛。
但腦子裡全是那些冇有閉環的變數。
他甚至開始在腦子裡自動補全剩下的半個方程。
停不下來。
二十分鐘過去了。
陸嘉猛地掀開被子。
在徹底的安靜中,他絕望地發現。
他還是睡不著。
對門。
215宿舍的門被人敲響了。
砰砰砰。
王大勇剛把主機板放下,拉開門。
楚戈抱著冒熱氣的機箱站在門外,一頭大汗。
“大勇,幫個忙。”
楚戈一邊往裡走,一邊喘著氣。
“電腦快燒了,借你風扇吹吹。”
陳拙坐在椅子上,回過頭。
他看著地上那個敞著側板正往外散發著刺鼻焦糊味的機箱,又看了看滿頭大汗,喘著粗氣的楚戈。
“大半夜能把CPU跑冒煙。”
陳拙手裡轉著那支黑色的筆,語氣裡帶著點調侃。
“你用這台二手奔騰3算什麼呢?模擬核爆?”
王大勇蹲在地上聽樂了,跟著搭腔。
“就是,這矽脂都快烤化了,你小子乾嘛了?”
楚戈一屁股癱坐在王大勇旁邊的空椅子上,煩躁地搓了搓臉,重重地歎了口氣。
“彆提了,在黑客論壇接了個私活,給一個相簿網站做底層資料併發檢索的優化,懸賞一千五百塊錢。”
楚戈指了指那台還在散發餘熱的機箱,滿臉的鬱悶。
“資料量太大,我本來卡在一個巢狀死迴圈裡出不來,結果剛纔敲鍵盤動靜太大,把我的舍友陸嘉給吵瘋了。”
楚戈回想起剛纔那一幕,語氣裡帶著點不可思議。
“那小子光著腳爬下來,紅著眼圈,給我甩了個特彆牛的拓撲代入矩陣,公式一敲進去,死結瞬間就解開了。”
說到這,楚戈煩躁地抓了抓頭髮。
“但壞就壞在這兒,區域性死鎖是解開了,可併發資料瞬間拉滿,整個資料流全湧進來了,我這破風扇根本壓不住溫度,直接宕機。”
楚戈抬頭看著陳拙,滿臉無奈。
“而且這還冇完,他那個矩陣代進去之後,我現在這套平鋪直敘的宏觀架構根本收攏不住這麼龐大的資料,就算大勇幫我把溫度降下來,硬跑也得跑死。”
陳拙安靜地聽完這段前因後果。
他冇多問,也冇有評價那個懸賞。
他隻是伸出手,拿過楚戈手裡那個揉得皺巴巴的草稿本。
掃了一眼上麵楚戈畫的那些亂七八糟的流程線。
隨後,陳拙隨手在草稿紙背麵,畫了一個極其簡潔的倒樹狀圖。
線條很乾淨。
“從下往上切,逆向拓撲。”
陳拙把本子遞過去,語氣平緩。
“底層的資料不用全部呼叫,隻設定邊界閾值,用這種樹狀架構去跑,你這台機子就能吃得下。”
楚戈看著那個圖。
眼神瞬間變了。
他盯著紙上的線條,腦子裡快速模擬了一遍資料的走向。
這種從根部往上剝離的思路,直接避開了最耗費算力的平鋪式檢索。
楚戈抬起頭,看陳拙的眼神透著驚訝。
就在楚戈發愣的時候。
215的門冇關嚴。
被一隻手從外麵推開了。
陸嘉穿著皺巴巴的睡衣,穿著拖鞋站在門口。
他手裡攥著幾張寫滿推導的草稿紙,眼底的紅血絲比剛纔更重了。
屋裡三個人同時看向他。
陸嘉咬著牙,越過王大勇,走到楚戈麵前。
把手裡的草稿紙拍在桌子上。
“如果不把剩下的那半個方程解完......”
陸嘉的聲音帶著一絲絕望的執拗,眼眶紅紅的。
“我腦子裡全都是錯誤的變數在打架。”
他盯著楚戈。
“我根本睡不著。”