第四十七章 48小時極限趕工

投票推薦 加入書籤 小說報錯

  利普像一具被抽乾了靈魂的行屍走肉,步履蹣跚地走下台階。背後那扇代表著溫暖與希望的大門,已經徹底對他關閉。

  沒有了這800美金的尾款,馬庫斯的棒球棍將在周末無情地砸碎他的雙手,而東歐黑幫則會把他的弟弟妹妹切成零件賣到黑市。

  絕望,一種真正令人窒息的絕望,如附骨之疽般爬滿了他全身。他甚至想過要不要去搶劫街角的便利店,或者去偷弗蘭克的藏身處,但那些念頭在腦海中閃過的瞬間就被他自己否定了。

  錢不夠,也來不及。

  就在利普深一腳淺一腳地踩在滿是積水的柏油馬路上,準備迎接死亡的審判時。

  「咔噠。」

  身後,楊堅家那扇沉重的大門突然再次被人推開。一道暖黃色的燈光像利劍一樣劈開了漆黑的街道,正好照在利普單薄的背影上。

  利普渾身一震,猛地回過頭。

  楊堅依舊穿著那件單薄的短袖,雙手抱在胸前,居高臨下地站在門廊的台階上。夜風吹動他額前的碎發,那雙深邃的黑眸里沒有任何憐憫,只有屬於理智的絕對冷酷。

  「啪嗒。」

  一個沉甸甸的黑色塑膠袋被楊堅隨手扔了出來,精準地砸在利普腳邊的水坑旁。

  利普愣住了,他如同抓住救命稻草般死死盯著那個袋子,卻不敢輕舉妄動。

  「我剛才說過了,我不做廉價的慈善,更不會無緣無故替你擦屁股。」楊堅的聲音穿透冷風,清晰地砸進利普的耳朵里,「但我是一個生意人,我願意給你一個證明自己價值,順便完成自救的交易。」

  利普猛地抬頭,他幾乎是連滾帶爬地撲回台階前,死死盯著楊堅:「什麼交易?只要能拿到錢,我什麼都干!」

  楊堅指了指地上的袋子,語氣毫無波瀾:「你的遊戲代碼,距離完整交付還差整整一個星期的工作量。現在,撿起那個袋子。裡面有兩瓶足夠讓你心臟狂跳的阿德拉(Adderall)提神藥片,還有五罐能苦到讓你舌頭髮麻的黑咖啡。」

  利普低頭看了一眼那個袋子,臉上神色帶有疑惑,顯然還沒反應過來。

  「利普,你看過《社交網絡》這部電影嗎?」楊堅突然拋出了一個看似毫不相干的問題。

  利普愣了一下,呆呆地點了點頭。那部講述Facebook創始人發家史的電影前不久剛上映,他在電影院裡偷偷溜進去看過。

  「很好。」楊堅嘴角勾起一抹冰冷的弧度,「既然看過,那你就應該知道,那些改變世界的極客,在面臨生死存亡的節點時是怎麼做的。」

  楊堅微微前傾身體,壓迫感如泰山壓頂般襲來:「我要你像馬克·扎克伯格一樣!把你那可笑的自尊心扔進垃圾桶,把自己死死鎖在房間裡!磕著藥,喝著爛咖啡,兩耳不聞窗外事,熬夜拼命把這個項目給我敲出來!」

  「從現在起,我只給你四十八個小時!」

  楊堅抬起手腕,看了一眼錶盤,聲音如同死神的倒計時:「今天是周一晚上五點。周三下午五點之前,把剩下一周的活全部給我完美幹完!如果沒有致命Bug,代碼能順利跑通,我就會把遊戲打包上線。只要遊戲上線,我就立刻結清你的尾款。」

  他俯視著這個因為恐懼和激動而渾身發抖的南區天才:「如果你能在48小時內把現在的半成品變成完整版,你的手就保住了。如果幹不完,或者你交給我的是一坨滿是Bug的屎……」

  楊堅頓了頓,眼神變得無比森寒:「我就坐在這裡,喝著熱咖啡,透過窗戶親眼看著那幫大猩猩把你的手指一根、一根地掰斷。」

  「砰!」

  大門再次重重關上,將所有的溫暖與燈光重新隔絕。

  但這一次,站在冷風中的利普沒有再感到絕望。他猛地撲向地上的黑色塑膠袋,像護著稀世珍寶一樣將裡面的藥片和咖啡死死抱在懷裡。

  那是他的命!那是他雙手和家人的命!

  利普深吸了一口冰冷的空氣,原本因為恐懼而渙散的眼神,此刻爆發出一種如同餓狼般的兇狠光芒。他轉身,邁開雙腿,像瘋了一樣朝著加拉格家那棟破舊的房子狂奔而去。

  ……

  「砰!」

  利普一腳踹開自己臥室的房門,反手將其死死反鎖。

  隔壁房間裡,菲奧娜還在因為俄羅斯黑幫的恐嚇而無助地哭泣,黛比和卡爾在樓下因為搶奪最後半塊發硬的麵包而大聲爭吵。整個加拉格家依然籠罩在一片混亂與末日般的壓抑中。


  但這一切,此刻都被利普徹底屏蔽了。

  他一把掃開書桌上那些亂七八糟的雜物,將那台破舊的二手筆記本電腦小心翼翼地放在桌面上。按下開機鍵,屏幕亮起微弱的螢光,照亮了他那張因為極度緊張而微微抽搐的臉。

  他撕開塑膠袋,擰開一瓶阿德拉,倒出兩片白色的藥丸,連水都沒喝,直接仰起頭生咽了下去。接著,他拉開一罐黑咖啡,「噸噸噸」地灌了半罐。

  苦澀的液體順著食道流下,伴隨著藥效的發作,他的心臟開始加速跳動,大腦仿佛被注入了高壓電流,瞬間從疲憊中清醒過來,精神亢奮到了極點。

  「四十八小時……一個星期的工作量……我能做到,我他媽是個天才,我他媽一定能做到!」

  利普神經質般地喃喃自語著,雙手如同抽筋般猛地放在鍵盤上。

  「啪嗒啪嗒啪嗒——」

  鍵盤的敲擊聲如同暴雨般在狹小冰冷的臥室里炸響。

  這是利普人生中第一次,真正意義上體驗到了科技網際網路圈子裡臭名昭著、折磨人的詞彙——項目衝刺。

  沒有了平日裡那種寫兩行代碼就去抽根煙、喝口酒的散漫。

  在生死存亡的倒計時面前,他徹底拋棄了所有的南區小聰明,他不再去想怎麼偷車,不再去想怎麼代考,他現在的世界裡,只有屏幕上那些跳動的字符、模塊、對象和邏輯判斷。

  周一的深夜,冷風順著窗戶的縫隙呼嘯著灌進房間,凍得他雙手發僵。他只能每隔半小時就把手放在大腿下捂熱,然後再繼續瘋狂敲擊。

  UI界面的渲染、滑動邏輯的邊界判定、分數翻倍的算法優化、存儲最高分的本地緩存……那些原本需要大量時間去構思和調試的底層邏輯,在他的大腦超負荷運轉下,被強行壓縮成一行行密集的代碼。

  到了周二的中午,藥效開始減退。一種仿佛要將靈魂撕裂的疲憊感如潮水般湧來。利普的眼皮像灌了鉛一樣沉重,眼前屏幕上的代碼開始出現重影,字母仿佛變成了亂爬的螞蟻。

  「利普!你在裡面幹什麼?出來吃點東西!」門外傳來菲奧娜帶著哭腔的敲門聲,「馬庫斯剛才又打電話來威脅了,我們該怎麼辦啊……」

  「別管我!別打擾我!」

  利普發出野獸般的低吼。他用發抖的手再次擰開藥瓶,倒出藥片塞進嘴裡,用冰冷的黑咖啡沖服下去。

  周二的夜晚,是最難熬的地獄。

  他的心臟因為攝入過量咖啡因和阿德拉而狂亂地跳動著,仿佛隨時會撞破胸膛跳出來。手指因為長時間保持高強度的敲擊而開始抽筋。房間裡瀰漫著一股濃烈的汗臭味、咖啡餿味和久未洗澡的酸腐味。

  但他沒有停,不能停,停下就是死。

  這種把腦力壓榨到極限的痛苦,比在街頭被幾個大漢圍毆還要噁心百倍。肉體的疼痛熬一熬就過去了,但這種精神上的緊繃,與透支生命無異。

  屏幕右下角的時間在一分一秒地流逝。

  周三的太陽升起,照在利普那張形如枯槁的臉上。他雙眼布滿血絲,眼眶深陷,眼底掛著兩個可怕的黑眼圈。他就像一台即將報廢的機器,全靠著最後一絲求生欲的執念在運轉。

  「滑動判定……完成。」

  「動畫過渡幀……完成。」

  「重新開始的內存釋放……完成。」

  下午四點五十分。距離楊堅定下的48小時死線,只剩下最後十分鐘。

  「啪!」

  利普重重地敲下了最後一個回車鍵。編譯,打包,生成。

  看著屏幕上顯示出「Build Successful」(構建成功)的綠色字體,利普那根緊繃了整整兩天兩夜的神經,終於發出一聲不堪重負的脆響。

  他顫抖著拔下插在電腦上的U盤,抓起一件充滿異味的夾克披在身上,跌跌撞撞地拉開房門,猶如一個從墳墓里爬出來的殭屍,朝著門外衝去。

  ……

  周三下午五點整。

  「砰砰砰!」

  楊堅家的大門被敲響。

  楊堅拉開門,一股濃烈的酸臭味撲面而來。利普頂著一頭如同雞窩般的亂發,雙眼紅得像兔子,嘴唇乾裂起皮,整個人仿佛瞬間老了十歲。

  他虛弱地靠在門框上,聲音沙啞得如同砂紙摩擦:「最後一個功能的代碼已經提交了……我已經合併到主分支了。」


  他咽了一口乾澀的唾沫,死死抓著門框,還想強撐著說點什麼,「我想看著它……看著它上線……」

  然而,話還沒說完,一旦緊繃的生死弦鬆開,徹底透支的身體瞬間發出了強制關機的指令。

  利普雙眼一翻,雙腿一軟,整個人直挺挺地往前倒去。

  楊堅眼疾手快地往旁邊退了一步,順勢抓住了利普的後衣領,像拖死狗一樣把他拖進了溫暖的客廳,直接扔在那張寬大柔軟的沙發上。

  幾乎是接觸到沙發的瞬間,利普連哪怕一秒鐘的掙扎都沒有,直接陷入了深度昏迷般的睡眠中,震天響的呼嚕聲立刻在客廳里迴蕩起來。

  看著沙發上那個滿身酸臭味、幾乎拼了半條命的南區天才,楊堅嘴角微微上揚,露出一抹滿意的弧度。

  溫室里的花朵是經不起風浪的,只有經過這種地獄般壓榨的打磨,一塊生鐵才能真正淬火成鋼。

  「做得不錯。接下來,輪到我了。」

  楊堅轉身走向吧檯,隨意拿起半塊已經發硬的全麥麵包咬在嘴裡,給自己沖了一杯高濃度的黑咖啡。隨後,他坐到了那台配置頂級的筆記本電腦前。

  楊堅熟練地打開終端命令行,把代碼從遠程管理倉庫拉取到本地。

  看著屏幕上飛速滾動的代碼拉取日誌,他在開發環境中迅速搭建好測試框架。他沒有絲毫的憐憫,直接套用了最嚴苛的工業級標準來驗收這個由南區少年花48小時爆肝趕出來的奇蹟。

  雖然楊堅前世主攻的是底層雲計算和架構設計,對於Java這種應用層面的語言細節了解得並不算極度深透,但這根本不是問題。因為對於一個資深程式設計師來說,語言只是工具,真正核心的,是他腦海里那套滾瓜爛熟、經過無數矽谷大廠驗證過的現代軟體工程測試範式。

  首先是單元測試(Unit Tests)。

  楊堅飛快地閱讀著測試腳本,驗證核心邏輯。數字2和2滑動是否一定會合成4?網格數組在移動時是否會發生越界崩潰?隨機生成新數字的概率是否完全符合預期?

  一行行綠色的Pass閃過。基礎邏輯竟然出奇的紮實。

  「這小子的確是個天才,在腦子糊塗成那樣的情況下,核心算法居然沒出錯。」楊堅暗自讚賞了一句。

  但接下來的測試,才是真正的折磨。

  冒煙測試(Smoke Test)與集成測試(Integration Tests)。

  楊堅將代碼編譯到安卓模擬器上,開始進行UI與邏輯的對接測試。他模擬極其狂暴的亂點操作,在方塊合併動畫還沒有播放完畢時,強行進行反方向的滑動。

  「咔。」

  模擬器畫面瞬間定格,後台終端彈出一長串刺眼的紅色報錯信息:NullPointerException(空指針異常)。

  動畫隊列出現了死鎖,導致下一次滑動的狀態讀取失敗。

  遇到這種問題,一般的寬容老闆可能會自己順手改了。但楊堅的行事風格顯然不是這樣。

  他站起身,走到沙發旁,面無表情地伸出穿著拖鞋的腳,對著利普的大腿狠狠地踹了一腳。

  「起來!」

  利普在睡夢中發出一聲痛苦的悶哼,像觸電般驚醒過來,眼神迷離地看著天花板,大腦完全處於宕機狀態:「啊……怎麼了?馬庫斯打進來了?」

  「沒打進來,但你的代碼崩潰了。」楊堅一把揪住他的衣領,將他從沙發上硬生生拖起來,按在電腦桌前,指著屏幕上的紅色報錯代碼,「在連續快速滑動並打斷動畫時,你的狀態機沒有做加鎖處理,拋出了空指針異常。現在,立刻把它修復。」

  利普痛苦地揉著臉,眼睛都睜不開,只能憑著肌肉記憶和對代碼的熟悉,雙手放在鍵盤上,像夢遊一樣輸入了幾行修復代碼,加入了狀態鎖。

  「改完了……」利普嘟囔了一句,剛想站起來,雙腿一軟,再次倒在沙發上,三秒鐘後,呼嚕聲再次響起。

  楊堅冷酷地端起咖啡喝了一口,繼續測試。

  他又進行了端到端測試(End-to-End Tests)的標準,把自己想像成一個完全不懂規則、脾氣暴躁、試圖用各種極端操作搞垮遊戲的愚蠢玩家。

  他測試了屏幕瘋狂旋轉時的解析度適配;測試了遊戲進行到一半突然接聽電話後的後台掛起與恢復機制;甚至測試了當網格全部填滿且無法滑動時,遊戲判定「Game Over」彈窗的延遲時間。


  在這個過程中,只要發現任何一處內存泄漏、UI重疊或者邏輯卡死,楊堅就會毫不留情地走過去,粗暴地搖晃沙發的靠背,把睡得像死豬一樣的利普再次搖醒。

  「遊戲重啟時緩存沒有徹底釋放,導致內存占用堆積,改掉!」

  「Game Over的遮罩層透傳了點擊事件,導致死局還能繼續觸發音效,改掉!」

  整整四個小時。利普在這如同酷刑般的折磨中被搖醒了四次。每一次他都是閉著眼睛修改,改完又立刻昏睡過去。他甚至覺得這種折磨比馬庫斯的拳頭還要恐怖,至少馬庫斯打人不會要求你解釋空指針異常。

  晚上九點。

  當楊堅最後一次在模擬器里極其流暢地將數字拼到2048,並且故意死局,遊戲完美彈出結束畫面,內存釋放曲線平穩時。

  他終於停下了敲擊鍵盤的手。

  代碼徹底乾淨了。一款足夠在全球掀起風暴的神級成癮小遊戲,在這個芝加哥南區破敗房屋裡,正式誕生。

  接下來,就是上線部署。

  對於首發平台的選擇,楊堅有著絕對清晰的時代洞察力。在這個時間節點,如果選擇蘋果的App Store,那繁瑣嚴苛的審核機制動輒需要一周甚至半個月的時間。等遊戲上架,利普的手指早就被黑幫掰成粉末了,弗蘭克欠的債也足以讓加拉格一家家破人亡。

  所以,楊堅毫不猶豫地選擇了當時狂野如蠻荒時代的安卓平台——早期的Android Market(Google Play的前身)。

  當時的安卓生態極度開放,甚至可以說是缺乏監管。審核機制簡陋到了令人髮指的地步,基本上只要包名不衝突,機器稍微掃描一下確認沒有惡意的木馬病毒,就直接放行上架。這為楊堅搶時間提供了絕佳的土壤。

  楊堅飛快地打開命令行,熟練地生成了數字簽名證書。

  隨後,他將那份經過地獄測試的代碼進行編譯打包,生成了最終版本的APK文件。

  登陸開發者後台,上傳APK,填寫簡單的英文描述:「極其簡單的數字合併遊戲。你能拼出2048嗎?」截圖也是隨便截了幾張極其樸素的遊玩畫面。

  為了確保萬無一失,楊堅甚至花了幾十美金,走了一個當年平台默認的「開發者加速通道」服務。

  點擊提交。審核開始。

  在這個充斥著低劣遊戲和簡陋應用的市場裡,《2048》那套乾淨利落的代碼和微小的安裝包體積,在機器審核眼中簡直是完美的存在。

  僅僅過了一個半小時。晚上十點半。

  楊堅的郵箱裡彈出了清脆的提示音。

  【Google Play Developer Support: Your app '2048' has been successfully published and is now live.】(你的應用『2048』已成功發布並上線。)

  楊堅看著那個簡單的數字圖標在網頁上亮起,長長地吐出了一口濁氣。他端起桌上那杯已經徹底冰冷的白開水,走到沙發前。

  「嘩啦!」

  半杯冷水毫不留情地潑在了利普的臉上。

  「啊!我改!我這就改異常拋出!」利普發出一聲驚恐的怪叫,像觸電的青蛙一樣從沙發上彈了起來,雙手在空中胡亂地抓著,仿佛還在敲鍵盤。

  「不用改了。」楊堅隨手將水杯放在桌子上,指了指發光的電腦屏幕。

  利普愣住了。他用袖子胡亂抹了一把臉上的冷水,強撐著睜開布滿血絲的雙眼,順著楊堅手指的方向看去。

  在一個簡陋的應用商店網頁上。一個由灰色底板和帶有數字「2048」的黃色方塊組成的極簡圖標,正安靜地躺在最新上架的列表里。旁邊,赫然寫著它的名字——2048。

  「上……上線了?」利普愣愣地看著屏幕,聲音帶著極度乾澀的沙啞。

  整整兩天兩夜的地獄衝刺,讓他現在的腦子還有些發懵。看著那個簡陋的網頁,他甚至產生了一種強烈的不真實感——就像是一場快要把他絞碎的噩夢,突然就這麼結束了。

  「不僅上線了,我已經掛上了谷歌的基礎GG聯盟代碼。只要有人下載遊玩,每一次底部的GG展示,都會變成真金白銀流進帳戶。」

  楊堅語氣平淡地解說著。


  隨後,他拉開抽屜,拿出了之前倒賣破解手機賺來的現金,點好後將一小疊鈔票扔在了利普的大腿上。

  「那是整整一千美金。八百美金,是你交付項目的尾款。多出來的兩百,是你這兩天保質保量、熬夜趕工的加班費。」

  錢並不重,只有薄薄的一小疊。但粗糙的紙幣質感和那股帶著油墨味的真實感,瞬間擊穿了利普的心理防線。

  比起那個還沒產生任何收益的乾癟網頁,大腿上這實打實的一千塊現金,才是將他從斷手地獄裡徹底拉出來的救命稻草。

  就在幾天前,他還在為幾百塊的代考費沾沾自喜,還在為了馬庫斯的威脅痛哭流涕,還在因為楊堅冷酷的拒絕而感到無盡的絕望。

  而現在,僅僅四十八個小時。靠著敲擊鍵盤,靠著被壓榨大腦,他竟然堂堂正正、沒有偷竊、沒有欺騙地賺到了整整一千塊的巨款!

  這是一種對舊有三觀的徹底粉碎與重塑。南區那套坑蒙拐騙的街頭智慧,在真正的技術變現和資本運作面前,被碾壓得連渣都不剩。

  「錢到手了。」楊堅轉身走回電腦前,只留給利普一個背影,語氣恢復了冰冷,「現在,帶著你拼了半條命賺來的錢,滾回加拉格家。去把那個叫馬庫斯的大猩猩的窟窿給補上,保住你那雙還能敲鍵盤的手。」

  利普緊緊攥著那疊錢,指關節因為用力而微微發白。

  他沒有了平時那種油腔滑調的嘴硬,也沒有了南區混混的桀驁不馴。他站在原地,眼眶發紅,對著楊堅挺拔的背影,重重地點了點頭。

  「謝謝……老闆。」

  這句「老闆」,他喊得心甘情願,內心充滿了前所未有的震撼與狂熱的死心塌地。他轉身推開門,沖入冰冷的黑夜中,腳步前所未有的堅定。

  而此時,電腦屏幕上,「2048」的後台下載量,依然還是一個極其可憐的數字:0。一場真正的風暴,才剛剛開始醞釀。

章節目錄