第三十七章 外包
第二天,楊堅極其罕見地睡到了自然醒。睜開眼時,十一月芝加哥初冬的晨光,正透過百葉窗的縫隙,在地板上投下斑駁的光影。
昨天先是雷厲風行地幫凱文找好了律師,埋下了解決婚姻爛帳的法律引線。接著又在南郊的地下車行砸下重金,訂製了屬於自己的出行工具。
幾件迫在眉睫的事情順利步入正軌,再加上帳戶里那接近四百萬洗白美金帶來的絕對底氣,楊堅腦子裡那根緊繃了許多天的弦,終於在這一刻徹底鬆弛了下來。
重生以來,他一直在步步為營地算計和謀劃。而現在,隨著這三天等車交付的休息時間到來,人類骨子裡的那點懶惰慣性終於占了上風。
他今天什么正事都不想干,只想舒舒服服地躺在這間南區的老房子裡,徹底放空大腦,當一回什麼都不用操心的廢人。
楊堅舒舒服服地躺在略顯破舊的床墊上,順手摸過床頭的智慧型手機。在2011年,這已經算是不錯的配置了。他本能地想要像前世那樣刷會兒手機來消磨時間,但大拇指在屏幕上劃拉了兩下,那種索然無味的感覺就涌了上來。
這時候的YouTube,首頁推薦算法還很稚嫩,充斥著畫質感人的貓咪視頻和無聊的家庭錄像。
Facebook上也全是大段大段的文字狀態更新和構圖極其隨意的低像素照片。對於一個經歷過十幾年後短視頻時代信息大爆炸和精準算法餵養的現代人來說,此時的移動網際網路,簡直就像是一片荒蕪的數字沙漠,無聊得讓人打哈欠。
「算了,還是干點正事填飽肚子吧。」
楊堅把手機扔到一旁,翻身下床,趿拉著拖鞋走進了廚房,決定好好犒勞一下自己的胃。
他打開冰箱,拿出雞蛋、全脂牛奶、厚切吐司和一包培根。作為一個對生活品質有追求的單身漢,做一頓完美的法式吐司並不算難。
他在一個平底碗裡打入兩顆雞蛋,倒入適量牛奶,撒上一點肉桂粉和一撮細鹽,用叉子快速打散攪勻。接著,將兩片厚切吐司放進蛋液里,讓麵包那多孔的結構吸飽汁水。
點火,熱鍋。楊堅沒有急著放黃油,而是先將幾片紅白相間的培根平鋪在平底鍋上。「滋啦——」隨著溫度升高,培根里的油脂被迅速逼了出來,濃郁的肉香瞬間霸占了整個廚房。
等培根煎到焦脆、邊緣微微捲起時,他將培根夾出放在廚房紙上吸油。隨後,他直接利用鍋里那層泛著金黃光澤的培根豬油,將吸滿蛋液的吐司下了鍋。
高溫讓吐司表面的蛋液迅速凝固,散發出一種混合著奶香、蛋香和油脂香的罪惡氣息。煎至兩面金黃微焦後盛出,最後再就著鍋底的一點底油,單手打入一顆雞蛋,煎了一個完美的單面半熟煎蛋。
把吐司裝盤,疊上酥脆的培根,蓋上煎蛋,最後淋上一圈楓糖漿。配上一杯剛手沖好的黑咖啡,這頓熱量和幸福感一塊兒爆炸的美式早餐就算完成了。
楊堅坐在餐桌前,用刀叉切下一塊吐司。酥脆的培根、吸滿糖漿和蛋液的鬆軟麵包,再加上被戳破後流淌下來的濃郁蛋黃,豐富的口感在口腔里爆炸開來。一口下去,不僅胃裡暖洋洋的,連靈魂都仿佛得到了升華。
吃飽喝足,用黑咖啡清了清口腔,楊堅端著馬克杯坐到了書桌前,打開了那台嶄新的筆記本電腦。
這是他用敲詐互利公司拿到的第一筆預付款順手買的。頂配的性能,純黑的金屬機身。至於台式機,他打算等之後家裡換了更好的家具後再攢一台性能怪獸。
按下電源鍵,新筆記本的觸感極佳,風扇運轉的聲音細微得幾乎聽不見。手指搭在鍵盤上的那一刻,楊堅有一瞬間的恍惚,仿佛又回到了前世那個在深夜裡敲擊代碼、運籌帷幄的資深程式設計師時光。
在這種舒適的工作環境下,他的大腦很快進入了高度專注的心流狀態。
他打開記事本,開始系統地分析《2048》這款手機遊戲的開發架構。
作為一個重生的網際網路老兵,他很清楚自己的短板:目前他只剛剛入門了Java。如果要在2011年獨立開發這款遊戲,安卓端(Android)用Java勉強還能對付,但蘋果的iOS端此時用的是極其晦澀的Objective-C語言。要兼顧雙端開發,對他現在的技術儲備來說,挑戰難度太大,而且極其耗時。
但如果直接把核心代碼外包出去,以他目前半吊子的技術水平,很容易被對方用垃圾代碼忽悠,甚至存在被盜取創意的風險。
「必須得找靠譜的人,還得做好技術隔離。」
楊堅在屏幕上敲擊著鍵盤,梳理著系統設計。在2011年,雖然前後端完全分離的概念還不如後世那麼普及,但為了安全和效率,他依然決定將項目拆開:
前端(客戶端):其實《2048》的核心邏輯極其簡單,就是一個4x4的矩陣,加上上下左右滑動的數字合併算法(Matrix Sliding)。甚至都不需要用龐大的遊戲引擎,直接用Cocos2d-x這種輕量級跨平台框架,或者乾脆用HTML5/JS寫個網頁,然後用PhoneGap套個原生的殼子就能搞定雙端。前端只負責渲染UI動畫、接收手勢操作,以及在合適的位置(比如遊戲結束界面)接入AdMob等第三方GG平台的SDK,預留出普通的GG展示格。
後端(伺服器端):需求不多,只需要開發輕量級的API接口。負責處理用戶註冊登錄、排行榜(Leaderboard)數據同步就足夠了。
但在楊堅的規劃里,後端的重頭戲並不是這些常規功能,而是隱藏在暗處的數據埋點與分析。
他需要後端悄無聲息地記錄下每個用戶的日活躍度(DAU)、次日留存率、七日留存率,以及單次遊戲時長。在沒有智能推薦算法的2011年,這些極其直觀的留存數據,才是他用來證明這款遊戲具備恐怖成癮性的最核心資產。只要留存數據足夠漂亮,前端的那些普通GG格,自然能變成源源不斷的印鈔機。
敲完回車,看著屏幕上的架構圖,楊堅確認了整體工程量其實非常小。幾個技術熟練的計算機大學生,最多一兩周,就能把雙端可運行的初代Demo(MVP測試版)做出來。至於後期的機型適配、UI打磨和上架流程,再花點小錢讓他們慢慢修就行了。
問題是,去哪找便宜好用又聽話的大學生呢?直接去技術論壇上發帖招人,良莠不齊,還容易被坑。
突然,楊堅腦海中閃過一個人影。
他拉開抽屜,翻出了之前參加芝加哥大學技術沙龍時拿到的一張名片——芝加哥大學工程學院,郝斯特教授。
這個老頭子在芝加哥大學混跡多年,手底下管著大批計算機系的高材生,人脈極廣。通過他來介紹幾個基本功紮實的學生牛馬,絕對是手拿把掐的事。
而且學生普遍比較單純,只要楊堅把任務拆解得足夠碎,不讓郝斯特和那些學生看清整個《2048》背後那套極具成癮性的心理學機制,他就能安安穩穩地悶聲發大財。
思路理順,楊堅拿起手機,照著名片上的號碼撥了過去。
沒過多久,電話接通了,那頭傳來了壓低的聲音。
「你好,這裡是郝斯特。」
「教授,您好。我是楊堅。幾個月前我們在芝加哥大學的技術沙龍上見過面,當時您還對我的一個算法設想指點過幾句。」楊堅語氣溫和、不卑不亢地攀著交情。
郝斯特顯然對這個有些特別的亞裔青年還有印象,輕笑了一聲:「哦,我記得你,那個對算法效率極其苛刻的小伙子。怎麼,今天打電話來,是有什麼技術問題要探討嗎?」
「不全是。實際上,我手裡有一個校外的商業小項目,需要幾個編程底子紮實的幫手。」楊堅直奔主題,「我想,或許您可以給我推薦幾位您的得意門生。當然,報酬方面絕對是按商業標準來。」
郝斯特這種老江湖自然心領神會,給學生介紹私活賺外快,順便自己還能落個人情,這種事在高校教授圈子裡再正常不過了。
「沒問題,楊。只要項目靠譜,我手底下有幾個聰明的小伙子完全可以勝任……」
郝斯特的話還沒說完,電話那頭的聲音突然頓住了,緊接著傳來一陣輕微的布料摩擦聲,似乎是教授站起了身。
「抱歉,楊,稍微等一下。情況有點不對勁……」郝斯特的聲音壓得更低了,帶著幾分疑惑和慍怒,「周末大學的階梯教室被借用來承辦SAT(美國大學入學考試)統考,我剛好來賺點監考的外快。但我好像發現了一個代考的傢伙。」
「代考?」楊堅挑了挑眉毛。
「是的。」郝斯特在電話那頭小聲嘀咕著,像是在仔細觀察,「一雙無精打采的死魚眼,鼻子挺得像個希臘雕塑……見鬼,這小子雖然穿著套頭衛衣,但那種混不吝的勁兒根本不像個準備申請大學的老實高中生!而且我發誓,上個月承辦ACT考試的時候,我也在這間教室見過他這張臉!這混蛋絕對是個在各種標準化考試里流竄的職業槍手!」
死魚眼?希臘雕塑般的鼻子?SAT職業代考?
這幾個精準的標籤組合在一起,楊堅的腦海中瞬間浮現出了一張總是帶著桀驁不馴表情的臉。
菲奧娜的大弟,加拉格家的智商擔當,南區出了名的代考天才——菲利普·加拉格(Phillip Gallagher)。
楊堅嘴角忍不住勾起一抹玩味的弧度。這芝加哥還真是小得可憐。
「教授。」楊堅握著手機,看著屏幕上《2048》的架構圖,慢條斯理地說道,「如果你描述的這個小子,剛好是我認識的那個傢伙的話……我建議你先別急著叫校警抓人。」
「為什麼?」郝斯特教授有些不悅。
「因為如果真的是他,那他完全有能力拿滿分。他現在做這些題,純粹只是在精準控分,替客戶考個符合自身水平,且不會被懷疑的平庸分數而已。」楊堅向後靠在椅背上,眼中閃爍著算計的光芒。
「控分?」郝斯特教授愣了一下。
「沒錯。教授,既然你抓到了他,不如用點特殊的手段。」楊堅輕笑了一聲,順勢引導道,「你們考場為了防作弊或者應對突發情況,手頭應該都準備了另一套難度稍微高一點的備用SAT卷子吧?」
「有是有,但這混蛋破壞了教育公平,我為什麼還要給他做另一份卷子……」
「那就直接把那份備用卷甩在他臉上,告訴他不用再藏拙,讓他當著你的面放開了考。」楊堅語氣平緩,卻帶著極強的說服力,「如果他做不出來,說明他只是個背答案的水貨,你再叫保安也不遲。但如果他能在你眼皮子底下,輕輕鬆鬆拿個接近滿分的成績……」
楊堅頓了頓,語氣變得意味深長:「教授,你不覺得,比起把一個為了賺生活費的窮小子送進警局,親手驗證並挖掘出一個擁有怪物般天賦的超級天才,是一件更有成就感的事情嗎?」
電話那頭沉默了十幾秒。
大學教授往往都有一種愛才的通病,郝斯特顯然被楊堅這番話挑起了強烈的好奇心。
最終,郝斯特教授的聲音里透出了一絲混雜著懷疑與興奮的情緒:「楊,你現在直接來芝加哥大學我的辦公室。等我把這個『死魚眼』小子處理完,咱們好好聊聊你的項目,順便……看看你口中的天才,到底能不能靠他自己的腦子,從我手裡把這份備用卷啃下來。」
昨天先是雷厲風行地幫凱文找好了律師,埋下了解決婚姻爛帳的法律引線。接著又在南郊的地下車行砸下重金,訂製了屬於自己的出行工具。
幾件迫在眉睫的事情順利步入正軌,再加上帳戶里那接近四百萬洗白美金帶來的絕對底氣,楊堅腦子裡那根緊繃了許多天的弦,終於在這一刻徹底鬆弛了下來。
重生以來,他一直在步步為營地算計和謀劃。而現在,隨著這三天等車交付的休息時間到來,人類骨子裡的那點懶惰慣性終於占了上風。
他今天什么正事都不想干,只想舒舒服服地躺在這間南區的老房子裡,徹底放空大腦,當一回什麼都不用操心的廢人。
楊堅舒舒服服地躺在略顯破舊的床墊上,順手摸過床頭的智慧型手機。在2011年,這已經算是不錯的配置了。他本能地想要像前世那樣刷會兒手機來消磨時間,但大拇指在屏幕上劃拉了兩下,那種索然無味的感覺就涌了上來。
這時候的YouTube,首頁推薦算法還很稚嫩,充斥著畫質感人的貓咪視頻和無聊的家庭錄像。
Facebook上也全是大段大段的文字狀態更新和構圖極其隨意的低像素照片。對於一個經歷過十幾年後短視頻時代信息大爆炸和精準算法餵養的現代人來說,此時的移動網際網路,簡直就像是一片荒蕪的數字沙漠,無聊得讓人打哈欠。
「算了,還是干點正事填飽肚子吧。」
楊堅把手機扔到一旁,翻身下床,趿拉著拖鞋走進了廚房,決定好好犒勞一下自己的胃。
他打開冰箱,拿出雞蛋、全脂牛奶、厚切吐司和一包培根。作為一個對生活品質有追求的單身漢,做一頓完美的法式吐司並不算難。
他在一個平底碗裡打入兩顆雞蛋,倒入適量牛奶,撒上一點肉桂粉和一撮細鹽,用叉子快速打散攪勻。接著,將兩片厚切吐司放進蛋液里,讓麵包那多孔的結構吸飽汁水。
點火,熱鍋。楊堅沒有急著放黃油,而是先將幾片紅白相間的培根平鋪在平底鍋上。「滋啦——」隨著溫度升高,培根里的油脂被迅速逼了出來,濃郁的肉香瞬間霸占了整個廚房。
等培根煎到焦脆、邊緣微微捲起時,他將培根夾出放在廚房紙上吸油。隨後,他直接利用鍋里那層泛著金黃光澤的培根豬油,將吸滿蛋液的吐司下了鍋。
高溫讓吐司表面的蛋液迅速凝固,散發出一種混合著奶香、蛋香和油脂香的罪惡氣息。煎至兩面金黃微焦後盛出,最後再就著鍋底的一點底油,單手打入一顆雞蛋,煎了一個完美的單面半熟煎蛋。
把吐司裝盤,疊上酥脆的培根,蓋上煎蛋,最後淋上一圈楓糖漿。配上一杯剛手沖好的黑咖啡,這頓熱量和幸福感一塊兒爆炸的美式早餐就算完成了。
楊堅坐在餐桌前,用刀叉切下一塊吐司。酥脆的培根、吸滿糖漿和蛋液的鬆軟麵包,再加上被戳破後流淌下來的濃郁蛋黃,豐富的口感在口腔里爆炸開來。一口下去,不僅胃裡暖洋洋的,連靈魂都仿佛得到了升華。
吃飽喝足,用黑咖啡清了清口腔,楊堅端著馬克杯坐到了書桌前,打開了那台嶄新的筆記本電腦。
這是他用敲詐互利公司拿到的第一筆預付款順手買的。頂配的性能,純黑的金屬機身。至於台式機,他打算等之後家裡換了更好的家具後再攢一台性能怪獸。
按下電源鍵,新筆記本的觸感極佳,風扇運轉的聲音細微得幾乎聽不見。手指搭在鍵盤上的那一刻,楊堅有一瞬間的恍惚,仿佛又回到了前世那個在深夜裡敲擊代碼、運籌帷幄的資深程式設計師時光。
在這種舒適的工作環境下,他的大腦很快進入了高度專注的心流狀態。
他打開記事本,開始系統地分析《2048》這款手機遊戲的開發架構。
作為一個重生的網際網路老兵,他很清楚自己的短板:目前他只剛剛入門了Java。如果要在2011年獨立開發這款遊戲,安卓端(Android)用Java勉強還能對付,但蘋果的iOS端此時用的是極其晦澀的Objective-C語言。要兼顧雙端開發,對他現在的技術儲備來說,挑戰難度太大,而且極其耗時。
但如果直接把核心代碼外包出去,以他目前半吊子的技術水平,很容易被對方用垃圾代碼忽悠,甚至存在被盜取創意的風險。
「必須得找靠譜的人,還得做好技術隔離。」
楊堅在屏幕上敲擊著鍵盤,梳理著系統設計。在2011年,雖然前後端完全分離的概念還不如後世那麼普及,但為了安全和效率,他依然決定將項目拆開:
前端(客戶端):其實《2048》的核心邏輯極其簡單,就是一個4x4的矩陣,加上上下左右滑動的數字合併算法(Matrix Sliding)。甚至都不需要用龐大的遊戲引擎,直接用Cocos2d-x這種輕量級跨平台框架,或者乾脆用HTML5/JS寫個網頁,然後用PhoneGap套個原生的殼子就能搞定雙端。前端只負責渲染UI動畫、接收手勢操作,以及在合適的位置(比如遊戲結束界面)接入AdMob等第三方GG平台的SDK,預留出普通的GG展示格。
後端(伺服器端):需求不多,只需要開發輕量級的API接口。負責處理用戶註冊登錄、排行榜(Leaderboard)數據同步就足夠了。
但在楊堅的規劃里,後端的重頭戲並不是這些常規功能,而是隱藏在暗處的數據埋點與分析。
他需要後端悄無聲息地記錄下每個用戶的日活躍度(DAU)、次日留存率、七日留存率,以及單次遊戲時長。在沒有智能推薦算法的2011年,這些極其直觀的留存數據,才是他用來證明這款遊戲具備恐怖成癮性的最核心資產。只要留存數據足夠漂亮,前端的那些普通GG格,自然能變成源源不斷的印鈔機。
敲完回車,看著屏幕上的架構圖,楊堅確認了整體工程量其實非常小。幾個技術熟練的計算機大學生,最多一兩周,就能把雙端可運行的初代Demo(MVP測試版)做出來。至於後期的機型適配、UI打磨和上架流程,再花點小錢讓他們慢慢修就行了。
問題是,去哪找便宜好用又聽話的大學生呢?直接去技術論壇上發帖招人,良莠不齊,還容易被坑。
突然,楊堅腦海中閃過一個人影。
他拉開抽屜,翻出了之前參加芝加哥大學技術沙龍時拿到的一張名片——芝加哥大學工程學院,郝斯特教授。
這個老頭子在芝加哥大學混跡多年,手底下管著大批計算機系的高材生,人脈極廣。通過他來介紹幾個基本功紮實的學生牛馬,絕對是手拿把掐的事。
而且學生普遍比較單純,只要楊堅把任務拆解得足夠碎,不讓郝斯特和那些學生看清整個《2048》背後那套極具成癮性的心理學機制,他就能安安穩穩地悶聲發大財。
思路理順,楊堅拿起手機,照著名片上的號碼撥了過去。
沒過多久,電話接通了,那頭傳來了壓低的聲音。
「你好,這裡是郝斯特。」
「教授,您好。我是楊堅。幾個月前我們在芝加哥大學的技術沙龍上見過面,當時您還對我的一個算法設想指點過幾句。」楊堅語氣溫和、不卑不亢地攀著交情。
郝斯特顯然對這個有些特別的亞裔青年還有印象,輕笑了一聲:「哦,我記得你,那個對算法效率極其苛刻的小伙子。怎麼,今天打電話來,是有什麼技術問題要探討嗎?」
「不全是。實際上,我手裡有一個校外的商業小項目,需要幾個編程底子紮實的幫手。」楊堅直奔主題,「我想,或許您可以給我推薦幾位您的得意門生。當然,報酬方面絕對是按商業標準來。」
郝斯特這種老江湖自然心領神會,給學生介紹私活賺外快,順便自己還能落個人情,這種事在高校教授圈子裡再正常不過了。
「沒問題,楊。只要項目靠譜,我手底下有幾個聰明的小伙子完全可以勝任……」
郝斯特的話還沒說完,電話那頭的聲音突然頓住了,緊接著傳來一陣輕微的布料摩擦聲,似乎是教授站起了身。
「抱歉,楊,稍微等一下。情況有點不對勁……」郝斯特的聲音壓得更低了,帶著幾分疑惑和慍怒,「周末大學的階梯教室被借用來承辦SAT(美國大學入學考試)統考,我剛好來賺點監考的外快。但我好像發現了一個代考的傢伙。」
「代考?」楊堅挑了挑眉毛。
「是的。」郝斯特在電話那頭小聲嘀咕著,像是在仔細觀察,「一雙無精打采的死魚眼,鼻子挺得像個希臘雕塑……見鬼,這小子雖然穿著套頭衛衣,但那種混不吝的勁兒根本不像個準備申請大學的老實高中生!而且我發誓,上個月承辦ACT考試的時候,我也在這間教室見過他這張臉!這混蛋絕對是個在各種標準化考試里流竄的職業槍手!」
死魚眼?希臘雕塑般的鼻子?SAT職業代考?
這幾個精準的標籤組合在一起,楊堅的腦海中瞬間浮現出了一張總是帶著桀驁不馴表情的臉。
菲奧娜的大弟,加拉格家的智商擔當,南區出了名的代考天才——菲利普·加拉格(Phillip Gallagher)。
楊堅嘴角忍不住勾起一抹玩味的弧度。這芝加哥還真是小得可憐。
「教授。」楊堅握著手機,看著屏幕上《2048》的架構圖,慢條斯理地說道,「如果你描述的這個小子,剛好是我認識的那個傢伙的話……我建議你先別急著叫校警抓人。」
「為什麼?」郝斯特教授有些不悅。
「因為如果真的是他,那他完全有能力拿滿分。他現在做這些題,純粹只是在精準控分,替客戶考個符合自身水平,且不會被懷疑的平庸分數而已。」楊堅向後靠在椅背上,眼中閃爍著算計的光芒。
「控分?」郝斯特教授愣了一下。
「沒錯。教授,既然你抓到了他,不如用點特殊的手段。」楊堅輕笑了一聲,順勢引導道,「你們考場為了防作弊或者應對突發情況,手頭應該都準備了另一套難度稍微高一點的備用SAT卷子吧?」
「有是有,但這混蛋破壞了教育公平,我為什麼還要給他做另一份卷子……」
「那就直接把那份備用卷甩在他臉上,告訴他不用再藏拙,讓他當著你的面放開了考。」楊堅語氣平緩,卻帶著極強的說服力,「如果他做不出來,說明他只是個背答案的水貨,你再叫保安也不遲。但如果他能在你眼皮子底下,輕輕鬆鬆拿個接近滿分的成績……」
楊堅頓了頓,語氣變得意味深長:「教授,你不覺得,比起把一個為了賺生活費的窮小子送進警局,親手驗證並挖掘出一個擁有怪物般天賦的超級天才,是一件更有成就感的事情嗎?」
電話那頭沉默了十幾秒。
大學教授往往都有一種愛才的通病,郝斯特顯然被楊堅這番話挑起了強烈的好奇心。
最終,郝斯特教授的聲音里透出了一絲混雜著懷疑與興奮的情緒:「楊,你現在直接來芝加哥大學我的辦公室。等我把這個『死魚眼』小子處理完,咱們好好聊聊你的項目,順便……看看你口中的天才,到底能不能靠他自己的腦子,從我手裡把這份備用卷啃下來。」