電影《社交網(wǎng)絡(luò)》里的一幕讓人印象深刻。馬克·扎克伯格在哈佛的一間宿舍里舉行了一場(chǎng)編程比賽,贏家成為公司里的第一位實(shí)習(xí)生。其實(shí),每隔一段時(shí)間,F(xiàn)acebook便舉辦“黑客馬拉松”比賽,讓員工在一夜之間想出好的點(diǎn)子,并完成項(xiàng)目開發(fā)。
2012年5月6日,一場(chǎng)真正的黑客馬拉松比賽在上海和硅谷兩地實(shí)時(shí)上演。一群素未謀面的程序員于周末匯聚在一起,他們出于對(duì)代碼的偏愛,自愿報(bào)名參與到24小時(shí)不間斷的開發(fā)當(dāng)中。經(jīng)過硅谷和上海兩地的終極PK,最終來自上海一款名為CHOP的產(chǎn)品摘得冠軍。
比賽結(jié)束兩三天后,曾為“網(wǎng)友”的兩位冠軍程序員互通電話,籌備第二次見面,商討是否應(yīng)該將CHOP的功能繼續(xù)完善。
CHOP團(tuán)隊(duì)1號(hào)程序員桂林,負(fù)責(zé)后端開發(fā)。他非計(jì)算機(jī)專業(yè)出身,現(xiàn)為塔防類社交游戲《宿命守衛(wèi)者》的開發(fā)者之一。高中時(shí)代開始瘋狂迷戀編程,大學(xué)時(shí)代過于極端,荒廢專業(yè)課程,每天浸泡在圖書館潛心鉆研各種編程書籍,自學(xué)成才。學(xué)生時(shí)代的得意之作是將漢諾塔的解題過程可視化,做得像游戲一樣炫目。
桂林是在編程和代碼中找回的自信。從事“苦逼”的程序員工作多年之后,依然以視碼代碼為終身事業(yè)。正如他在微博簽名中所描述:“不懂設(shè)計(jì)模式和算法,但只要哥一寫代碼,就是美的”?!叭绻梢宰鲆惠呑映绦騿T,有什么不可以?”剛過而立之年的他覺得國內(nèi)不歡迎年齡大的老程序員的現(xiàn)象十分嚴(yán)重,他希望自己這份生涯能永遠(yuǎn)延續(xù)下去。他屬于同事眼中的“強(qiáng)力程序員”,經(jīng)常處于24小時(shí)開機(jī)狀態(tài),一直開著界面,各種操作全靠鍵盤,從不使用鼠標(biāo)。他經(jīng)?;钴S于行業(yè)內(nèi)技術(shù)性論壇上,曾寫Node.js的庫Mongoskin及其它庫分享給程序員們使用。
2號(hào)程序員魏子鈞,亦80后,非計(jì)算機(jī)專業(yè),酷愛編程,來自盛大創(chuàng)新院。圈內(nèi)人士均喚之網(wǎng)名“大城小胖”,可謂人如其名。實(shí)際為黑客馬拉松比賽現(xiàn)場(chǎng)的工作人員,做好服務(wù)比賽選手等后勤工作之后,不甘寂寞、不碼代碼就手癢的他直接殺入CHOP團(tuán)隊(duì)參與開發(fā),負(fù)責(zé)前端開發(fā)。
大城小胖自稱“非典型性”程序員,一邊戲謔地稱己為“碼農(nóng)”,一邊在工作之余搗鼓代碼、研究程序到凌晨?jī)扇c(diǎn)鐘,他最大的興趣是每天從程序和技術(shù)中尋找樂子。最為遺憾的是身為“代碼控”多年以后,卻依然未能有一款經(jīng)典作品橫空出世。大城小胖最近一直在扛著一本幾百頁厚的計(jì)算機(jī)幾何學(xué)認(rèn)真研究,一如既往努力提升自己。他說,“做游戲?qū)?shù)學(xué)模型的要求特別高”。
團(tuán)隊(duì)中的產(chǎn)品經(jīng)理為Thomas Yao,為一名郵件列表的管理員,在CHOP產(chǎn)品功能的完善和DEMO演示環(huán)節(jié)中發(fā)揮了積極作用。
兩名程序員一致認(rèn)為,團(tuán)隊(duì)之所以能獲獎(jiǎng),Thomas清晰的英文項(xiàng)目介紹幫了不少忙。但最為關(guān)鍵之處在于,開發(fā)接近尾聲之際絲毫未懈怠,最終花20分鐘進(jìn)行了一個(gè)Markdown(是一種更為新潮的標(biāo)記語言,深受程序員歡迎)功能的完善,程序員便可以用標(biāo)簽符號(hào)或快捷鍵控制表示一串代碼,輸入特別便捷?!斑@款功能的完善可能為項(xiàng)目加分不少,或者是能獲獎(jiǎng)的關(guān)鍵?!边@是產(chǎn)品亮點(diǎn)之所在。因開發(fā)時(shí)間有限,他們砍掉了之前設(shè)計(jì)好的很多亮點(diǎn)功能。
這是一場(chǎng)對(duì)智力和技能的挑戰(zhàn)。開場(chǎng)前首先要進(jìn)行一場(chǎng)激烈的頭腦風(fēng)暴,拿出比較炫酷的創(chuàng)意,又要考驗(yàn)首次合作的團(tuán)隊(duì)意識(shí)?!安簧瞄L團(tuán)隊(duì)協(xié)作的人參加這種活動(dòng),可能會(huì)失敗。它考驗(yàn)團(tuán)隊(duì)的創(chuàng)意、技能、毅力和團(tuán)隊(duì)協(xié)作精神。”參加過多場(chǎng)比賽的大城小胖娓娓道來。
首次參加類似活動(dòng)的桂林對(duì)此深有體會(huì)。他其實(shí)一提出做聊天室想法時(shí)便遭到團(tuán)隊(duì)的質(zhì)疑。最終桂林做出解釋,亮出“CHOP區(qū)別于論壇和及時(shí)聊天工具的聊天室產(chǎn)品,能按照聊天主題半自動(dòng)化地對(duì)語意內(nèi)容進(jìn)行歸類”時(shí),得到大家認(rèn)同?!霸趺醋龅娇焖佼a(chǎn)出?這對(duì)程序員的溝通能力要求非常高?!毙愿耖_朗的大城小胖稱桂林盡管相對(duì)內(nèi)向,但遇到問題時(shí)能表達(dá)特別清晰并有說服力?!捌鋵?shí)我跟桂林屬于網(wǎng)友,平時(shí)是通過代碼進(jìn)行交流,比較了解彼此的技術(shù)水平。盡管之前從未見過面,但已經(jīng)建立起相當(dāng)高的信任度,這點(diǎn)非常重要?!?/p>
一場(chǎng)比賽參與下來,桂林感受到的最大考驗(yàn)是時(shí)間非常倉促,真正寫代碼的時(shí)間也就10多個(gè)小時(shí)?!笆孪任覀儼亚岸撕秃蠖诵枨蠼涌诹性诩埳希∨质窃谕耆珱]有服務(wù)器端數(shù)據(jù)的情況下做前端開發(fā),他只能按照約定的數(shù)據(jù)結(jié)構(gòu)寫一個(gè)虛擬數(shù)據(jù)。開發(fā)12個(gè)小時(shí)之后,盡管服務(wù)器端的大部分功能都實(shí)現(xiàn)了,但前后端的數(shù)據(jù)還未對(duì)接上?!贝藭r(shí),已經(jīng)是凌晨2點(diǎn)多,離比賽結(jié)束只有5個(gè)多小時(shí)了,但大城小胖中途離場(chǎng)2小時(shí)。處于孤軍奮戰(zhàn)狀態(tài)中的桂林壓力異常大。
“將前端的WEB登錄和服務(wù)器端的新技術(shù)在后臺(tái)進(jìn)行交互時(shí),又產(chǎn)生新的技術(shù)難題,即Web頁面與Websocket無法共享Session?!边@對(duì)桂林來說有點(diǎn)棘手。桂林明白,在實(shí)際開發(fā)過程中,經(jīng)常會(huì)出現(xiàn)一個(gè)小問題而影響整個(gè)開發(fā)周期。最初他對(duì)產(chǎn)品的期望值特別高,而現(xiàn)在的他開始擔(dān)心有交不出作品的可能性?!坝行﹩栴}完全依賴Google未必能夠找到正確答案,需要靈活應(yīng)變?!边@時(shí)很考驗(yàn)桂林的現(xiàn)場(chǎng)反應(yīng)能力。好在耗費(fèi)近一個(gè)小時(shí)后,技術(shù)障礙最終突破。
大城小胖的前端開發(fā)也并非進(jìn)展得一帆風(fēng)順,做Serve端時(shí),必須用Node.js技術(shù)配合桂林的后端開發(fā)?!癗ode.js技術(shù)只知道皮毛,但在產(chǎn)品開發(fā)中卻用到很多?!痹跁r(shí)間有限,來不及臨時(shí)翻書,更不能頻繁打擾桂林的情況下,大城小胖能做的是努力學(xué)習(xí)桂林代碼的寫法?!斑@要求自己以120%的努力去快速掌握知識(shí)。很幸運(yùn)的是我戰(zhàn)勝了挑戰(zhàn)。”大城小胖松了一口氣,總算見識(shí)了一回自己在饑渴狀態(tài)下高效率學(xué)習(xí)。
比賽結(jié)束前的幾個(gè)小時(shí)是不斷地解除bug、設(shè)計(jì)界面的過程,中間也在不斷改善操作中存在不合理之處?!罢麄€(gè)過程基本按照最初的設(shè)想來開發(fā)的,還算比較順利?!惫鹆纸K于在規(guī)定時(shí)間內(nèi)如期實(shí)現(xiàn)了產(chǎn)品效果。
“至少我們不滿足于常規(guī)和現(xiàn)狀,不斷追求從更酷更炫產(chǎn)品的角度研發(fā)產(chǎn)品,愿意挑戰(zhàn)自我。哪怕在周末時(shí)間也愿意跟技術(shù)圈的朋友們一塊寫寫代碼,這就是我們這群人的樂趣之所在?!贝蟪切∨謱?duì)這幫人的極客精神給予最后詮釋。他們不再是一群只會(huì)悶頭寫代碼而不善言辭的程序員,通過參加各種類似的比賽活動(dòng),這個(gè)群體在社會(huì)上活躍度越來越高了。