破曉1998:代碼救世主
“面的”穿過塵土飛揚的街道,將90年代末北京的市井氣息毫無保留地灌入車廂。周默靠著車窗,目光平靜地掠過那些低矮的樓房、刷著標語的圍墻、騎著二八大杠匆匆而過的行人,以及街邊熱氣騰騰的早點攤。這一切與他記憶中那個國際化的、充滿玻璃幕墻的都市相去甚遠,卻真實、粗糲,充滿了蓄勢待發(fā)的生命力。,駛?cè)氚最U路——后來名震天下的中關(guān)村大街。此時的“中國硅谷”還遠未成形,但已初具雛形。街道兩旁,密密麻麻擠滿了各式各樣的招牌?!奥?lián)想電腦**”、“方正科技體驗中心”、“金長城銷售點”……這些是正規(guī)軍。更多的,則是大大小小的“電腦裝機店”、“軟件**”、“耗材大全”,招牌粗制濫造,字體花花綠綠。人行道上,鋪著塑料布的地攤一個挨著一個,上面堆放著用皮筋捆好的軟盤、用記號筆寫著“Windows 95”、“紅色警戒”、“仙劍奇?zhèn)b傳”的光盤,以及各種電腦書籍、過期的《大眾軟件》和《電腦報》??諝饫飶浡芰?、灰塵、油墨,還有不知從哪里飄來的煎餅果子的味道。“到了,就這兒吧,里頭車不好進?!彼緳C操著濃重的京腔,在一條擁擠的巷子口停下。,瞬間被人流和聲浪包圍。拉客的伙計操著各地口音:“哥們兒,攢機嗎?奔騰MMX,價格最優(yōu)!軟件游戲光盤,五塊一張,十塊三張!內(nèi)存條要嗎?現(xiàn)代顆粒,**!”,觀察著。攢機店里,年輕的伙計唾沫橫飛地給一臉茫然的中年顧客講解著“主頻”、“內(nèi)存”、“顯存”。軟件攤前,學(xué)生模樣的年輕人如饑似渴地翻看著光盤封面。書店里,關(guān)于HTML、J**a、VC++的書被擺在顯眼位置,旁邊可能就是《**入門》和《比爾·蓋茨傳》。。原始、混亂、野蠻生長,卻也生機勃勃。這里交易的不僅僅是硬件、軟件,更是對未來的想象和掘金的狂熱。無數(shù)后來的大佬,此刻或許正擠在某間煙霧繚繞的小店里,為一張訂單爭得面紅耳赤,或是對著一行代碼苦思冥想。。他先是走進幾家規(guī)模較大的軟件店,詢問是否有類似“網(wǎng)絡(luò)螞蟻”或者“JetCar”的下載工具銷售。
“下載工具?”一個叼著煙的店主撓撓頭,“有倒是有,但買的人不多。網(wǎng)速那么慢,下載個東西跟抽獎似的,時斷時續(xù)。你要嗎?我這兒有張盤,集成了好幾個,螞蟻、吸血鬼什么的,五塊錢?!?br>
周默接過那張用簡陋塑料袋裝著的刻錄盤,封面是粗劣的噴墨打印。他搖搖頭:“我想找那種獨立的、好用的,最好是能斷點續(xù)傳、速度穩(wěn)定點的?!?br>
店主像看外星人一樣看著他:“哥們兒,要求還挺高。這玩意兒都是老外寫的,咱們能用就不錯了。要我說,真想下載東西,不如買光盤,啥都有?!彼噶酥干砗筘浖苌狭宅槤M目的盜版光盤,“游戲、電影、工具軟件,應(yīng)有盡有。”
周默不置可否,又走了幾家,情況大同小異。下載工具在這個時代,更像是極客和少量網(wǎng)民的玩具,而非大眾需求。商店里銷售的主力是各種應(yīng)用軟件、游戲、操作系統(tǒng)。而“網(wǎng)絡(luò)螞蟻”和它的同類,大多依靠共享軟件模式(先試用后付費)或**在其他軟件包里傳播,盈利能力有限,盜版更是猖獗。
這正是機會。需求被壓抑,體驗糟糕,市場缺乏領(lǐng)導(dǎo)者。
他又去幾家電腦書攤轉(zhuǎn)了轉(zhuǎn),買了幾本最新的《電腦報》合訂本和《程序員》雜志。付錢時,他狀似無意地問攤主:“老板,現(xiàn)在做共享軟件,能賺錢嗎?”
攤主是個戴眼鏡的中年人,一邊找零一邊說:“難!個人做,有點小名氣,靠國外用戶注冊費,一個月掙個幾百美金頂天了。國內(nèi)?嘿,都用盜版。除非你能做個像‘KV300’殺毒那種,單位企業(yè)認的,或者……”他壓低聲音,“能綁上**軟件,強制安裝,彈廣告,那來錢快,但缺德?!?br>
周默笑了笑,沒接話。****軟件、彈窗廣告,這是未來幾年許多國產(chǎn)軟件“**”的捷徑,短期內(nèi)暴利,長期敗光口碑和用戶信任。他要走的路,截然不同。
肚子咕咕叫了起來。周默這才想起,從早上到現(xiàn)在,他只喝了幾口水。他走到一個賣煎餅的攤子前,要了個最基礎(chǔ)的煎餅馃子,蹲在路邊吃起來。粗糙的口感,濃重的醬料,是記憶里遙遠而真實的滋味。
一邊吃,他一邊翻看著剛買的《電腦報》。廣告頁充斥著各種電腦培訓(xùn)班、“****”光盤、以及“教你快速建站”的書籍。新聞版塊,報道了國內(nèi)首批門戶網(wǎng)站的融資消息,某個叫“**”的公司剛剛成立,正在推廣一款叫OICQ的即時通訊軟件,但用戶寥寥。國際版塊,則提到了微軟的Windows 98發(fā)布,以及**在線(AOL)**網(wǎng)景(Netscape)的驚天交易。
歷史的塵埃,落在個人頭上,就是一座山,或者一個金礦。
周默幾口吃完煎餅,拍拍手站起來。他需要接觸更核心的圈子,了解這個時代真正技術(shù)前沿的年輕人在想什么、做什么。他記得,這個時期,水木清華**S是互聯(lián)網(wǎng)上最活躍的技術(shù)社區(qū),也是許多早期互聯(lián)網(wǎng)弄潮兒的聚集地。但他現(xiàn)在沒有電腦隨時上網(wǎng)。
他目光掃過街對面一家門臉稍大、掛著“飛宇網(wǎng)吧”招牌的店鋪。就是那里了。
走進網(wǎng)吧,光線昏暗,煙霧繚繞。幾十臺大腦袋顯示器閃爍著,大部分人在玩《紅色警戒》或《星際爭霸》,叫喊聲、鍵盤鼠標的敲擊聲不絕于耳。也有少數(shù)人,在Telnet界面下快速敲擊著命令行,或是在簡陋的瀏覽器上瀏覽著信息。
周默交了押金,找了臺角落的機子坐下。開機,熟悉的Windows 98啟動畫面。他先打開瀏覽器,輸入雅虎的**,等待緩慢的加載。然后,他打開一個文本編輯器,開始飛快地敲擊鍵盤。
他寫的不是代碼,而是一份簡要的產(chǎn)品規(guī)劃書。標題是:《關(guān)于一款全新互聯(lián)網(wǎng)下載加速工具的初步構(gòu)想》。
他系統(tǒng)地分析了當前主流下載工具(NetAnts, GetRight, JetCar等)的優(yōu)缺點:不支持多線程或支持不佳、斷點續(xù)傳不穩(wěn)定、界面不友好、資源占用高、缺乏有效的資源搜索和鏡像服務(wù)器選擇機制。然后,他提出了自已設(shè)想中的解決方案核心:
1. 動態(tài)多線程分塊下載算法:更智能地分割文件,充分利用有限帶寬。
2. P2P思想雛形:在合法合規(guī)前提下,探索用戶間閑置帶寬共享的可能性(點到點傳輸概念的早期簡化版)。
3. 內(nèi)嵌簡易資源搜索引擎:與早期下載站點合作或自建索引,用戶可直接在工具內(nèi)搜索資源。
4. 簡潔直觀的圖形界面:參考未來“簡約化”設(shè)計理念,降低使用門檻。
5. 開放插件架構(gòu):為未來擴展功能(如視頻音頻處理、壓縮解壓集成等)預(yù)留接口。
他越寫越快,思路如泉水般涌出。很多細節(jié),是結(jié)合了未來二十年的經(jīng)驗教訓(xùn),對這個時代技術(shù)局限性的完美“微創(chuàng)新”。比如,針對此時網(wǎng)絡(luò)極不穩(wěn)定的特點,他設(shè)計了一種更健壯的重連和校驗機制;針對用戶找不到資源的痛點,他提出與當時流行的“海云天”、“華軍軟件園”等網(wǎng)站進行初步數(shù)據(jù)對接的構(gòu)想。
他知道,這些想法中的任何一點單獨拿出來,或許都有先行者想過或嘗試過。但將它們系統(tǒng)性地整合在一起,并賦予一個清晰、以用戶體驗為核心的產(chǎn)品哲學(xué),是超越這個時代的。
就在他沉浸其中時,旁邊機位傳來一陣壓抑的、煩躁的“嘖”聲。
周默轉(zhuǎn)頭看去。旁邊坐著的是個女孩,穿著洗得發(fā)白的牛仔外套,短發(fā)有些凌亂,正眉頭緊鎖地盯著屏幕。屏幕上開著一個VC++ 6.0的界面,一段代碼高亮顯示,旁邊是報錯信息。女孩手指在鍵盤上懸停良久,幾次想敲下去又停下,顯然卡在了某個難題上。
周默瞥了一眼她的屏幕。是在實現(xiàn)一個簡單的多線程文件分塊讀取功能,思路沒錯,但在線程同步和內(nèi)存管理上出現(xiàn)了典型的競爭條件錯誤,導(dǎo)致程序運行時崩潰。
這種問題,在1998年,對于大多數(shù)在校學(xué)生甚至初級程序員來說,調(diào)試起來可能頗費周章。但對周默而言,幾乎是肉眼可見的低級錯誤。
他本不想多事,但看到女孩那副揪著自已頭發(fā)、滿臉“到底哪里不對”的執(zhí)拗表情,像極了前世團隊里那些初出茅廬、對技術(shù)充滿純粹熱情的新人。心中微微一動。
“那個,”周默稍稍提高聲音,指了指她的屏幕,“第47行,臨界區(qū)鎖的獲取和釋放范圍可能有問題,沒有覆蓋到對共享緩沖區(qū)的所有寫入操作。另外,線程退出時,緩沖區(qū)內(nèi)存釋放的時機需要再檢查一下,可能出現(xiàn)了野指針?!?br>
女孩猛地轉(zhuǎn)過頭,一雙因為長時間盯著屏幕而有些發(fā)紅的眼睛看向周默,眼神里充滿了驚訝和警惕?!澳恪憧吹枚??”
“略懂一點?!敝苣届o地說,“你試試把鎖的范圍擴大到包含整個緩沖區(qū)寫入塊,并在每個線程結(jié)束時,確認緩沖區(qū)指針被安全置空或交由主線程統(tǒng)一釋放?!?br>
女孩將信將疑,但死馬當活馬醫(yī),按照周默的提示,快速修改了幾行代碼。保存,編譯,運行。
原本一運行就崩潰的程序,這次彈出了一個簡單的進度條窗口,雖然粗糙,但穩(wěn)定地開始模擬讀取文件塊。
女孩的眼睛一下子亮了,臉上的煩躁和疲憊被巨大的驚喜取代?!俺晒α耍≌娴目梢粤?!”她興奮地低呼一聲,轉(zhuǎn)頭看向周默,眼神里的警惕變成了好奇和一絲欽佩。“你好厲害!一眼就看出問題所在。你是哪個學(xué)校的?也是學(xué)計算機的?我在做一個小工具,想試試多線程加速本地文件處理……”
她的話速很快,透著一股技術(shù)人特有的、遇到同道中人的熱情。
“北航的,也是計算機?!敝苣唵位卮穑瑳]有多說自已的情況,反問道,“你呢?在做下載工具相關(guān)的?”
“嗯!”女孩用力點頭,似乎找到了傾訴對象,“我覺得現(xiàn)在的下載工具都太難用了,速度慢還老斷。我想自已寫一個更好的!不過……好多問題,線程、網(wǎng)絡(luò)通信、協(xié)議解析……頭疼死了。對了,我叫林薇,北理工的,大四?!?br>
林薇。
周默心中一震。這個名字……前世,他隱約記得,在某個頂尖外企的技術(shù)架構(gòu)師名單上看到過,是少數(shù)幾位在基礎(chǔ)軟件領(lǐng)域達到世界級水平的華夏女性專家之一,后來似乎回國主導(dǎo)過某個重要的開源項目。沒想到,她在這個時間點,還只是一個在網(wǎng)吧里埋頭調(diào)試代碼、為多線程同步問題苦惱的大四學(xué)生。
緣分之妙,莫過于此。
“周默?!彼麍笊献砸训拿?,看了一眼她屏幕上那粗糙但結(jié)構(gòu)清晰的代碼框架,忽然道,“你的整體架構(gòu)思路不錯,模塊清晰。不過,有沒有想過,把重點從單純的本地多線程,擴展到網(wǎng)絡(luò)協(xié)議優(yōu)化和資源調(diào)度上?”
“網(wǎng)絡(luò)協(xié)議優(yōu)化?資源調(diào)度?”林薇眨眨眼,露出思索的表情,“你是說,像動態(tài)選擇服務(wù)器、分塊策略那些?我想過,但實現(xiàn)起來太復(fù)雜了,而且需要服務(wù)器端配合……”
“不一定需要復(fù)雜的服務(wù)器端?!敝苣蟿右巫?,靠近了一些,在文本編輯器里新建一個文件,快速畫了一個簡單的示意圖,“看,我們可以這樣設(shè)想:客戶端內(nèi)置一個輕量級的資源索引更新機制,定期從幾個固定的、公認的軟件下載站抓取文件信息,形成本地緩存。用戶搜索時,先查本地緩存。下載時,工具自動嘗試連接多個可能的源地址,包括官方源、鏡像站,甚至……”他停頓了一下,沒有直接說出P2P的概念,那太超前,“甚至可以從其他正在下載同一文件的用戶那里,嘗試獲取已下載的部分?當然,這需要協(xié)議支持和用戶同意,是更遠景的想法?!?br>
林薇聽得入神,眼睛越來越亮:“自動多源嘗試?這想法太好了!能大大提高下載成功率!從其他用戶那里獲取……天,這有點顛覆!不過,協(xié)議和信任機制確實是大問題……但思路太棒了!”她看著周默,像發(fā)現(xiàn)了寶藏,“你這些想法,簡直……簡直像是從未來來的!你也在做類似的東西嗎?”
周默不置可否,將剛才寫的那份簡要構(gòu)想的一部分,拖到屏幕前給她看。“有一些不成熟的想法,正在整理?!?br>
林薇湊過去看,只掃了幾眼,呼吸就微微急促起來?!皠討B(tài)分塊算法……P2P思想雛形……內(nèi)嵌搜索……簡潔界面……開放架構(gòu)……這,這哪里是不成熟?這簡直是一個完整的產(chǎn)品路線圖!”她猛地抬頭,看著周默,眼神灼熱,“你打算自已做?還是……有團隊了?”
“剛開始?!敝苣瑢嵲拰嵳f,“缺人,更缺錢。”
“錢……”林薇的眼神黯淡了一下,但很快又燃起斗志,“我也沒錢。但我有時間,有技術(shù)!我覺得你的想法太棒了,比我自已瞎琢磨的強一百倍!如果……如果你不嫌棄,我能參與嗎?我不要錢,我就想做出一個真正好用的下載工具!”她的表情充滿懇切,那是技術(shù)人看到完美解決方案時,難以抑制的激動和渴望。
周默看著眼前這個短發(fā)、眼神明亮、對技術(shù)充滿純粹熱情的女孩。他知道,這就是他要找的,最初的、也是最關(guān)鍵的火種之一。有天賦,有熱情,有動手能力,而且在這個時間點,尚未被大公司“污染”或束縛。
“當然可以。”周默露出重生以來第一個真誠的微笑,“歡迎加入。不過,目前還只是構(gòu)想,我們需要一個最小可行產(chǎn)品來驗證想法。而且,我可能連請你吃頓像樣的飯的錢都沒有?!?br>
“吃飯不重要!”林薇用力擺手,指了指自已桌上吃了一半的煎餅(和周默剛才吃的一模一樣)和一瓶礦泉水,“這個就行!我們現(xiàn)在就開始討論細節(jié)吧?你這個動態(tài)分塊算法,具體怎么實現(xiàn)能避免死鎖和效率瓶頸?還有資源索引,怎么抓取才不違反網(wǎng)站規(guī)則……”
她瞬間進入狀態(tài),噼里啪啦提出一連串問題。
周默笑了。很好,就是這種狀態(tài)。他拖過鍵盤,開始詳細解釋自已的思路。兩人頭碰著頭,在嘈雜的網(wǎng)吧里,在煙霧和游戲音效的包圍中,討論著線程、信號量、****協(xié)議、抓取策略……仿佛整個世界只剩下屏幕上的代碼和彼此碰撞的思路。
時間悄然流逝。窗外的天色漸漸暗了下來,網(wǎng)吧里的燈陸續(xù)亮起。
當周默終于感覺到腹中強烈的饑餓感時,才發(fā)現(xiàn)已經(jīng)過去了三四個小時。他和林薇已經(jīng)初步敲定了最小可行產(chǎn)品(MVP)的核心功能和大致的技術(shù)實現(xiàn)路徑,甚至劃分了初步的任務(wù)模塊。
“今天就先到這里吧?!敝苣4婧梦臋n,“我們留個****。嗯……有*P機嗎?”
“有!”林薇報出一個號碼,又補充道,“不過我一般晚上才回。宿舍樓下的阿姨兇得很,喊一次要收五毛錢呢?!?br>
“理解?!敝苣擦粝伦砸阉奚岬膫骱籼枺ㄋ€沒有手機),“我這幾天可能會比較忙,要處理一些私事。你先按照我們討論的,把基礎(chǔ)框架搭起來,重點解決多線程下載的穩(wěn)定性和基礎(chǔ)界面。我這邊事情一有眉目,我們就正式開始?!?br>
“好!”林薇用力點頭,臉上是壓抑不住的興奮,“我回去就弄!對了,周默,我們這個東西,叫什么名字好?”
名字?周默看著屏幕上的文檔,又看了看窗外中關(guān)村漸漸亮起的、星星點點的燈火。無數(shù)微小的光芒,在這片土地上亮起,有些會很快熄滅,有些,或許能匯聚成改變夜空的星辰。
“叫‘星火’吧?!敝苣従徴f道,“星星之火。希望它,可以燎原?!?br>
“星火……”林薇低聲重復(fù)了一遍,眼睛彎了起來,“好聽,也有意義。那就叫星火下載!”
離開網(wǎng)吧時,天已全黑。中關(guān)村的喧囂并未散去,許多店鋪依然亮著燈,做著夜晚的生意。周默走在華燈初上、人流依舊熙攘的街道上,感覺胸腔里有一股熱流在涌動。
找到了第一個伙伴,明確了產(chǎn)品的初步方向。這是今天最大的收獲。
他摸了摸口袋里僅剩的幾塊錢,走向公交車站,準備回學(xué)校。明天,他需要去證券營業(yè)部看看。算算時間,延中實業(yè)的股價,應(yīng)該開始有動靜了。
就在他等車時,路過一個報攤。晚報的頭版標題吸引了他的目光:《北京大學(xué)與延中實業(yè)達成戰(zhàn)略合作意向,高校高科技企業(yè)上市步伐加快?》
下面還有小字副標題:“分析人士稱,此舉或開啟高校概念股新篇章……”
周默的腳步頓住了。他買了一份晚報,就著昏黃的路燈快速瀏覽。文章內(nèi)容比較簡略,但確認了北大方正集團正在與延中實業(yè)緊密接觸,商討股權(quán)合作乃至重組事宜。雖然用的是“意向”、“可能”、“或”等不確定詞匯,但對于嗅覺靈敏的資金來說,這已經(jīng)是足夠強烈的信號。
他抬起頭,望向北方,那是北大所在的方向。嘴角勾起一抹冷冽的弧度。
陳浩,你現(xiàn)在在做什么呢?是在未名湖畔高談闊論,還是在某個精英聚會中觥籌交錯?你是否知道,你前世賴以起家的“第一桶金”——投資網(wǎng)絡(luò)概念股獲得的巨額回報,其源頭之一,正在被我這個你未來會毫不留情踢下高樓的“兄弟”,悄然截取最肥美的一塊?
公交車搖晃著駛來。周默收起報紙,擠了上去。
車子開動,窗外的燈火連成流動的光帶。周默靠在冰冷的車窗上,閉上眼睛。腦海中,系統(tǒng)界面靜靜地懸浮著。
當前能量4/100。
影響力2。
新手引導(dǎo)任務(wù)剩余時間:29天6小時。
在系統(tǒng)日志的角落,悄然多了一行:“接觸并初步招攬潛在關(guān)鍵人才‘林薇’。影響力+1。能量微量回復(fù)?!?br>
星火已現(xiàn)。風,就要來了。
他不知道的是,在他離開網(wǎng)吧后不久,林薇并沒有立刻下機。她反復(fù)看著周默留下的那份構(gòu)想文檔,又看了看自已屏幕上剛剛能跑通的、稚嫩的多線程demo,臉上興奮的紅暈漸漸被一種深思取代。
“網(wǎng)絡(luò)協(xié)議優(yōu)化……資源調(diào)度……P2P思想……”她喃喃自語,手指無意識地敲著桌面,“他說的很多東西,思路超前得不像是這個時代的產(chǎn)物……而且,他對細節(jié)的把握,老練得可怕。北航……有這么厲害的學(xué)生嗎?”
她搖了搖頭,將疑惑暫且壓下,滿心都被那個名為“星火”的項目和未來可能性的興奮所充滿。她關(guān)掉文檔,新建了一個文件夾,鄭重地鍵入:“Spark_Downloader_Prototype”。
然后,她想了想,又打開水木清華**S的Telnet界面,登錄了自已那個鮮少使用的賬號,在“編程技術(shù)”版塊,發(fā)了一個帖子:
“求助:如何高效實現(xiàn)****協(xié)議下的多源并行下載及分塊校驗?另,征集對現(xiàn)有下載工具(如NetAnts)的吐槽和改進建議,有重謝(誠意討論)。”
帖子發(fā)出去沒多久,就有了零星回復(fù)。大多是技術(shù)討論,也有灌水的。直到一條站內(nèi)短信彈了出來,發(fā)信人ID是“Vector”。
“你對多源下載和P2P有興趣?有個小項目在籌備,缺核心開發(fā)。如有意向,可聯(lián)系此*P機號:**6201-XXXXX。陳?!?br>
林薇看著這個ID和留言,愣了一下。Vector?這個名字,好像在某個編程競賽的獲獎名單上見過?是北大的大神?
她猶豫了一下,沒有立刻回復(fù),而是關(guān)掉了**S窗口。她的腦海里,還是周默在煙霧繚繞的網(wǎng)吧里,指著屏幕,清晰冷靜地闡述架構(gòu)時的樣子。
“還是先看看周默那邊吧……”她小聲嘀咕了一句,再次打開了代碼編輯器。窗外,中關(guān)村的夜晚,燈光璀璨,每一盞燈下,可能都藏著一個即將破土而出的夢想,或是一場無聲的較量。
而周默的“星火”,和林薇剛剛收到的、來自“Vector”的邀請,如同兩顆悄然改變軌道的微小粒子,在這個1998年深秋的夜晚,發(fā)生了第一次并不知曉彼此的、遙遠的引力擾動。
那個“Vector”,正是陳浩在網(wǎng)絡(luò)上常用的ID之一。
“下載工具?”一個叼著煙的店主撓撓頭,“有倒是有,但買的人不多。網(wǎng)速那么慢,下載個東西跟抽獎似的,時斷時續(xù)。你要嗎?我這兒有張盤,集成了好幾個,螞蟻、吸血鬼什么的,五塊錢?!?br>
周默接過那張用簡陋塑料袋裝著的刻錄盤,封面是粗劣的噴墨打印。他搖搖頭:“我想找那種獨立的、好用的,最好是能斷點續(xù)傳、速度穩(wěn)定點的?!?br>
店主像看外星人一樣看著他:“哥們兒,要求還挺高。這玩意兒都是老外寫的,咱們能用就不錯了。要我說,真想下載東西,不如買光盤,啥都有?!彼噶酥干砗筘浖苌狭宅槤M目的盜版光盤,“游戲、電影、工具軟件,應(yīng)有盡有。”
周默不置可否,又走了幾家,情況大同小異。下載工具在這個時代,更像是極客和少量網(wǎng)民的玩具,而非大眾需求。商店里銷售的主力是各種應(yīng)用軟件、游戲、操作系統(tǒng)。而“網(wǎng)絡(luò)螞蟻”和它的同類,大多依靠共享軟件模式(先試用后付費)或**在其他軟件包里傳播,盈利能力有限,盜版更是猖獗。
這正是機會。需求被壓抑,體驗糟糕,市場缺乏領(lǐng)導(dǎo)者。
他又去幾家電腦書攤轉(zhuǎn)了轉(zhuǎn),買了幾本最新的《電腦報》合訂本和《程序員》雜志。付錢時,他狀似無意地問攤主:“老板,現(xiàn)在做共享軟件,能賺錢嗎?”
攤主是個戴眼鏡的中年人,一邊找零一邊說:“難!個人做,有點小名氣,靠國外用戶注冊費,一個月掙個幾百美金頂天了。國內(nèi)?嘿,都用盜版。除非你能做個像‘KV300’殺毒那種,單位企業(yè)認的,或者……”他壓低聲音,“能綁上**軟件,強制安裝,彈廣告,那來錢快,但缺德?!?br>
周默笑了笑,沒接話。****軟件、彈窗廣告,這是未來幾年許多國產(chǎn)軟件“**”的捷徑,短期內(nèi)暴利,長期敗光口碑和用戶信任。他要走的路,截然不同。
肚子咕咕叫了起來。周默這才想起,從早上到現(xiàn)在,他只喝了幾口水。他走到一個賣煎餅的攤子前,要了個最基礎(chǔ)的煎餅馃子,蹲在路邊吃起來。粗糙的口感,濃重的醬料,是記憶里遙遠而真實的滋味。
一邊吃,他一邊翻看著剛買的《電腦報》。廣告頁充斥著各種電腦培訓(xùn)班、“****”光盤、以及“教你快速建站”的書籍。新聞版塊,報道了國內(nèi)首批門戶網(wǎng)站的融資消息,某個叫“**”的公司剛剛成立,正在推廣一款叫OICQ的即時通訊軟件,但用戶寥寥。國際版塊,則提到了微軟的Windows 98發(fā)布,以及**在線(AOL)**網(wǎng)景(Netscape)的驚天交易。
歷史的塵埃,落在個人頭上,就是一座山,或者一個金礦。
周默幾口吃完煎餅,拍拍手站起來。他需要接觸更核心的圈子,了解這個時代真正技術(shù)前沿的年輕人在想什么、做什么。他記得,這個時期,水木清華**S是互聯(lián)網(wǎng)上最活躍的技術(shù)社區(qū),也是許多早期互聯(lián)網(wǎng)弄潮兒的聚集地。但他現(xiàn)在沒有電腦隨時上網(wǎng)。
他目光掃過街對面一家門臉稍大、掛著“飛宇網(wǎng)吧”招牌的店鋪。就是那里了。
走進網(wǎng)吧,光線昏暗,煙霧繚繞。幾十臺大腦袋顯示器閃爍著,大部分人在玩《紅色警戒》或《星際爭霸》,叫喊聲、鍵盤鼠標的敲擊聲不絕于耳。也有少數(shù)人,在Telnet界面下快速敲擊著命令行,或是在簡陋的瀏覽器上瀏覽著信息。
周默交了押金,找了臺角落的機子坐下。開機,熟悉的Windows 98啟動畫面。他先打開瀏覽器,輸入雅虎的**,等待緩慢的加載。然后,他打開一個文本編輯器,開始飛快地敲擊鍵盤。
他寫的不是代碼,而是一份簡要的產(chǎn)品規(guī)劃書。標題是:《關(guān)于一款全新互聯(lián)網(wǎng)下載加速工具的初步構(gòu)想》。
他系統(tǒng)地分析了當前主流下載工具(NetAnts, GetRight, JetCar等)的優(yōu)缺點:不支持多線程或支持不佳、斷點續(xù)傳不穩(wěn)定、界面不友好、資源占用高、缺乏有效的資源搜索和鏡像服務(wù)器選擇機制。然后,他提出了自已設(shè)想中的解決方案核心:
1. 動態(tài)多線程分塊下載算法:更智能地分割文件,充分利用有限帶寬。
2. P2P思想雛形:在合法合規(guī)前提下,探索用戶間閑置帶寬共享的可能性(點到點傳輸概念的早期簡化版)。
3. 內(nèi)嵌簡易資源搜索引擎:與早期下載站點合作或自建索引,用戶可直接在工具內(nèi)搜索資源。
4. 簡潔直觀的圖形界面:參考未來“簡約化”設(shè)計理念,降低使用門檻。
5. 開放插件架構(gòu):為未來擴展功能(如視頻音頻處理、壓縮解壓集成等)預(yù)留接口。
他越寫越快,思路如泉水般涌出。很多細節(jié),是結(jié)合了未來二十年的經(jīng)驗教訓(xùn),對這個時代技術(shù)局限性的完美“微創(chuàng)新”。比如,針對此時網(wǎng)絡(luò)極不穩(wěn)定的特點,他設(shè)計了一種更健壯的重連和校驗機制;針對用戶找不到資源的痛點,他提出與當時流行的“海云天”、“華軍軟件園”等網(wǎng)站進行初步數(shù)據(jù)對接的構(gòu)想。
他知道,這些想法中的任何一點單獨拿出來,或許都有先行者想過或嘗試過。但將它們系統(tǒng)性地整合在一起,并賦予一個清晰、以用戶體驗為核心的產(chǎn)品哲學(xué),是超越這個時代的。
就在他沉浸其中時,旁邊機位傳來一陣壓抑的、煩躁的“嘖”聲。
周默轉(zhuǎn)頭看去。旁邊坐著的是個女孩,穿著洗得發(fā)白的牛仔外套,短發(fā)有些凌亂,正眉頭緊鎖地盯著屏幕。屏幕上開著一個VC++ 6.0的界面,一段代碼高亮顯示,旁邊是報錯信息。女孩手指在鍵盤上懸停良久,幾次想敲下去又停下,顯然卡在了某個難題上。
周默瞥了一眼她的屏幕。是在實現(xiàn)一個簡單的多線程文件分塊讀取功能,思路沒錯,但在線程同步和內(nèi)存管理上出現(xiàn)了典型的競爭條件錯誤,導(dǎo)致程序運行時崩潰。
這種問題,在1998年,對于大多數(shù)在校學(xué)生甚至初級程序員來說,調(diào)試起來可能頗費周章。但對周默而言,幾乎是肉眼可見的低級錯誤。
他本不想多事,但看到女孩那副揪著自已頭發(fā)、滿臉“到底哪里不對”的執(zhí)拗表情,像極了前世團隊里那些初出茅廬、對技術(shù)充滿純粹熱情的新人。心中微微一動。
“那個,”周默稍稍提高聲音,指了指她的屏幕,“第47行,臨界區(qū)鎖的獲取和釋放范圍可能有問題,沒有覆蓋到對共享緩沖區(qū)的所有寫入操作。另外,線程退出時,緩沖區(qū)內(nèi)存釋放的時機需要再檢查一下,可能出現(xiàn)了野指針?!?br>
女孩猛地轉(zhuǎn)過頭,一雙因為長時間盯著屏幕而有些發(fā)紅的眼睛看向周默,眼神里充滿了驚訝和警惕?!澳恪憧吹枚??”
“略懂一點?!敝苣届o地說,“你試試把鎖的范圍擴大到包含整個緩沖區(qū)寫入塊,并在每個線程結(jié)束時,確認緩沖區(qū)指針被安全置空或交由主線程統(tǒng)一釋放?!?br>
女孩將信將疑,但死馬當活馬醫(yī),按照周默的提示,快速修改了幾行代碼。保存,編譯,運行。
原本一運行就崩潰的程序,這次彈出了一個簡單的進度條窗口,雖然粗糙,但穩(wěn)定地開始模擬讀取文件塊。
女孩的眼睛一下子亮了,臉上的煩躁和疲憊被巨大的驚喜取代?!俺晒α耍≌娴目梢粤?!”她興奮地低呼一聲,轉(zhuǎn)頭看向周默,眼神里的警惕變成了好奇和一絲欽佩。“你好厲害!一眼就看出問題所在。你是哪個學(xué)校的?也是學(xué)計算機的?我在做一個小工具,想試試多線程加速本地文件處理……”
她的話速很快,透著一股技術(shù)人特有的、遇到同道中人的熱情。
“北航的,也是計算機?!敝苣唵位卮穑瑳]有多說自已的情況,反問道,“你呢?在做下載工具相關(guān)的?”
“嗯!”女孩用力點頭,似乎找到了傾訴對象,“我覺得現(xiàn)在的下載工具都太難用了,速度慢還老斷。我想自已寫一個更好的!不過……好多問題,線程、網(wǎng)絡(luò)通信、協(xié)議解析……頭疼死了。對了,我叫林薇,北理工的,大四?!?br>
林薇。
周默心中一震。這個名字……前世,他隱約記得,在某個頂尖外企的技術(shù)架構(gòu)師名單上看到過,是少數(shù)幾位在基礎(chǔ)軟件領(lǐng)域達到世界級水平的華夏女性專家之一,后來似乎回國主導(dǎo)過某個重要的開源項目。沒想到,她在這個時間點,還只是一個在網(wǎng)吧里埋頭調(diào)試代碼、為多線程同步問題苦惱的大四學(xué)生。
緣分之妙,莫過于此。
“周默?!彼麍笊献砸训拿?,看了一眼她屏幕上那粗糙但結(jié)構(gòu)清晰的代碼框架,忽然道,“你的整體架構(gòu)思路不錯,模塊清晰。不過,有沒有想過,把重點從單純的本地多線程,擴展到網(wǎng)絡(luò)協(xié)議優(yōu)化和資源調(diào)度上?”
“網(wǎng)絡(luò)協(xié)議優(yōu)化?資源調(diào)度?”林薇眨眨眼,露出思索的表情,“你是說,像動態(tài)選擇服務(wù)器、分塊策略那些?我想過,但實現(xiàn)起來太復(fù)雜了,而且需要服務(wù)器端配合……”
“不一定需要復(fù)雜的服務(wù)器端?!敝苣蟿右巫?,靠近了一些,在文本編輯器里新建一個文件,快速畫了一個簡單的示意圖,“看,我們可以這樣設(shè)想:客戶端內(nèi)置一個輕量級的資源索引更新機制,定期從幾個固定的、公認的軟件下載站抓取文件信息,形成本地緩存。用戶搜索時,先查本地緩存。下載時,工具自動嘗試連接多個可能的源地址,包括官方源、鏡像站,甚至……”他停頓了一下,沒有直接說出P2P的概念,那太超前,“甚至可以從其他正在下載同一文件的用戶那里,嘗試獲取已下載的部分?當然,這需要協(xié)議支持和用戶同意,是更遠景的想法?!?br>
林薇聽得入神,眼睛越來越亮:“自動多源嘗試?這想法太好了!能大大提高下載成功率!從其他用戶那里獲取……天,這有點顛覆!不過,協(xié)議和信任機制確實是大問題……但思路太棒了!”她看著周默,像發(fā)現(xiàn)了寶藏,“你這些想法,簡直……簡直像是從未來來的!你也在做類似的東西嗎?”
周默不置可否,將剛才寫的那份簡要構(gòu)想的一部分,拖到屏幕前給她看。“有一些不成熟的想法,正在整理?!?br>
林薇湊過去看,只掃了幾眼,呼吸就微微急促起來?!皠討B(tài)分塊算法……P2P思想雛形……內(nèi)嵌搜索……簡潔界面……開放架構(gòu)……這,這哪里是不成熟?這簡直是一個完整的產(chǎn)品路線圖!”她猛地抬頭,看著周默,眼神灼熱,“你打算自已做?還是……有團隊了?”
“剛開始?!敝苣瑢嵲拰嵳f,“缺人,更缺錢。”
“錢……”林薇的眼神黯淡了一下,但很快又燃起斗志,“我也沒錢。但我有時間,有技術(shù)!我覺得你的想法太棒了,比我自已瞎琢磨的強一百倍!如果……如果你不嫌棄,我能參與嗎?我不要錢,我就想做出一個真正好用的下載工具!”她的表情充滿懇切,那是技術(shù)人看到完美解決方案時,難以抑制的激動和渴望。
周默看著眼前這個短發(fā)、眼神明亮、對技術(shù)充滿純粹熱情的女孩。他知道,這就是他要找的,最初的、也是最關(guān)鍵的火種之一。有天賦,有熱情,有動手能力,而且在這個時間點,尚未被大公司“污染”或束縛。
“當然可以。”周默露出重生以來第一個真誠的微笑,“歡迎加入。不過,目前還只是構(gòu)想,我們需要一個最小可行產(chǎn)品來驗證想法。而且,我可能連請你吃頓像樣的飯的錢都沒有?!?br>
“吃飯不重要!”林薇用力擺手,指了指自已桌上吃了一半的煎餅(和周默剛才吃的一模一樣)和一瓶礦泉水,“這個就行!我們現(xiàn)在就開始討論細節(jié)吧?你這個動態(tài)分塊算法,具體怎么實現(xiàn)能避免死鎖和效率瓶頸?還有資源索引,怎么抓取才不違反網(wǎng)站規(guī)則……”
她瞬間進入狀態(tài),噼里啪啦提出一連串問題。
周默笑了。很好,就是這種狀態(tài)。他拖過鍵盤,開始詳細解釋自已的思路。兩人頭碰著頭,在嘈雜的網(wǎng)吧里,在煙霧和游戲音效的包圍中,討論著線程、信號量、****協(xié)議、抓取策略……仿佛整個世界只剩下屏幕上的代碼和彼此碰撞的思路。
時間悄然流逝。窗外的天色漸漸暗了下來,網(wǎng)吧里的燈陸續(xù)亮起。
當周默終于感覺到腹中強烈的饑餓感時,才發(fā)現(xiàn)已經(jīng)過去了三四個小時。他和林薇已經(jīng)初步敲定了最小可行產(chǎn)品(MVP)的核心功能和大致的技術(shù)實現(xiàn)路徑,甚至劃分了初步的任務(wù)模塊。
“今天就先到這里吧?!敝苣4婧梦臋n,“我們留個****。嗯……有*P機嗎?”
“有!”林薇報出一個號碼,又補充道,“不過我一般晚上才回。宿舍樓下的阿姨兇得很,喊一次要收五毛錢呢?!?br>
“理解?!敝苣擦粝伦砸阉奚岬膫骱籼枺ㄋ€沒有手機),“我這幾天可能會比較忙,要處理一些私事。你先按照我們討論的,把基礎(chǔ)框架搭起來,重點解決多線程下載的穩(wěn)定性和基礎(chǔ)界面。我這邊事情一有眉目,我們就正式開始?!?br>
“好!”林薇用力點頭,臉上是壓抑不住的興奮,“我回去就弄!對了,周默,我們這個東西,叫什么名字好?”
名字?周默看著屏幕上的文檔,又看了看窗外中關(guān)村漸漸亮起的、星星點點的燈火。無數(shù)微小的光芒,在這片土地上亮起,有些會很快熄滅,有些,或許能匯聚成改變夜空的星辰。
“叫‘星火’吧?!敝苣従徴f道,“星星之火。希望它,可以燎原?!?br>
“星火……”林薇低聲重復(fù)了一遍,眼睛彎了起來,“好聽,也有意義。那就叫星火下載!”
離開網(wǎng)吧時,天已全黑。中關(guān)村的喧囂并未散去,許多店鋪依然亮著燈,做著夜晚的生意。周默走在華燈初上、人流依舊熙攘的街道上,感覺胸腔里有一股熱流在涌動。
找到了第一個伙伴,明確了產(chǎn)品的初步方向。這是今天最大的收獲。
他摸了摸口袋里僅剩的幾塊錢,走向公交車站,準備回學(xué)校。明天,他需要去證券營業(yè)部看看。算算時間,延中實業(yè)的股價,應(yīng)該開始有動靜了。
就在他等車時,路過一個報攤。晚報的頭版標題吸引了他的目光:《北京大學(xué)與延中實業(yè)達成戰(zhàn)略合作意向,高校高科技企業(yè)上市步伐加快?》
下面還有小字副標題:“分析人士稱,此舉或開啟高校概念股新篇章……”
周默的腳步頓住了。他買了一份晚報,就著昏黃的路燈快速瀏覽。文章內(nèi)容比較簡略,但確認了北大方正集團正在與延中實業(yè)緊密接觸,商討股權(quán)合作乃至重組事宜。雖然用的是“意向”、“可能”、“或”等不確定詞匯,但對于嗅覺靈敏的資金來說,這已經(jīng)是足夠強烈的信號。
他抬起頭,望向北方,那是北大所在的方向。嘴角勾起一抹冷冽的弧度。
陳浩,你現(xiàn)在在做什么呢?是在未名湖畔高談闊論,還是在某個精英聚會中觥籌交錯?你是否知道,你前世賴以起家的“第一桶金”——投資網(wǎng)絡(luò)概念股獲得的巨額回報,其源頭之一,正在被我這個你未來會毫不留情踢下高樓的“兄弟”,悄然截取最肥美的一塊?
公交車搖晃著駛來。周默收起報紙,擠了上去。
車子開動,窗外的燈火連成流動的光帶。周默靠在冰冷的車窗上,閉上眼睛。腦海中,系統(tǒng)界面靜靜地懸浮著。
當前能量4/100。
影響力2。
新手引導(dǎo)任務(wù)剩余時間:29天6小時。
在系統(tǒng)日志的角落,悄然多了一行:“接觸并初步招攬潛在關(guān)鍵人才‘林薇’。影響力+1。能量微量回復(fù)?!?br>
星火已現(xiàn)。風,就要來了。
他不知道的是,在他離開網(wǎng)吧后不久,林薇并沒有立刻下機。她反復(fù)看著周默留下的那份構(gòu)想文檔,又看了看自已屏幕上剛剛能跑通的、稚嫩的多線程demo,臉上興奮的紅暈漸漸被一種深思取代。
“網(wǎng)絡(luò)協(xié)議優(yōu)化……資源調(diào)度……P2P思想……”她喃喃自語,手指無意識地敲著桌面,“他說的很多東西,思路超前得不像是這個時代的產(chǎn)物……而且,他對細節(jié)的把握,老練得可怕。北航……有這么厲害的學(xué)生嗎?”
她搖了搖頭,將疑惑暫且壓下,滿心都被那個名為“星火”的項目和未來可能性的興奮所充滿。她關(guān)掉文檔,新建了一個文件夾,鄭重地鍵入:“Spark_Downloader_Prototype”。
然后,她想了想,又打開水木清華**S的Telnet界面,登錄了自已那個鮮少使用的賬號,在“編程技術(shù)”版塊,發(fā)了一個帖子:
“求助:如何高效實現(xiàn)****協(xié)議下的多源并行下載及分塊校驗?另,征集對現(xiàn)有下載工具(如NetAnts)的吐槽和改進建議,有重謝(誠意討論)。”
帖子發(fā)出去沒多久,就有了零星回復(fù)。大多是技術(shù)討論,也有灌水的。直到一條站內(nèi)短信彈了出來,發(fā)信人ID是“Vector”。
“你對多源下載和P2P有興趣?有個小項目在籌備,缺核心開發(fā)。如有意向,可聯(lián)系此*P機號:**6201-XXXXX。陳?!?br>
林薇看著這個ID和留言,愣了一下。Vector?這個名字,好像在某個編程競賽的獲獎名單上見過?是北大的大神?
她猶豫了一下,沒有立刻回復(fù),而是關(guān)掉了**S窗口。她的腦海里,還是周默在煙霧繚繞的網(wǎng)吧里,指著屏幕,清晰冷靜地闡述架構(gòu)時的樣子。
“還是先看看周默那邊吧……”她小聲嘀咕了一句,再次打開了代碼編輯器。窗外,中關(guān)村的夜晚,燈光璀璨,每一盞燈下,可能都藏著一個即將破土而出的夢想,或是一場無聲的較量。
而周默的“星火”,和林薇剛剛收到的、來自“Vector”的邀請,如同兩顆悄然改變軌道的微小粒子,在這個1998年深秋的夜晚,發(fā)生了第一次并不知曉彼此的、遙遠的引力擾動。
那個“Vector”,正是陳浩在網(wǎng)絡(luò)上常用的ID之一。