第4章 第一行代碼

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

  深夜十一點,窗外的縣城徹底安靜下來。只有遠處國道偶有卡車駛過,輪胎摩擦柏油路面的聲音由遠及近,又由近及遠。

  林浩坐在黑暗中,聽著客廳里父母的呼吸聲。父親在打鼾,不重,是那種勞累一天後的深沉呼吸。母親大概已經睡著了,很安靜。

  他等了幾分鐘,確認父母睡熟了,才從床上坐起來。

  月光從窗戶斜射進來,在地板上鋪出一塊銀白。他赤腳踩過那塊光斑,冰涼的觸感從腳底傳來。走到書桌前,他先摸了摸窗台——手機還在那裡,一夜的月光充電效果微乎其微,電量顯示:4.9%。

  他拿起手機,又摸黑走到門邊,輕輕擰開門鎖。老鎖舌發出細微的「咔噠」聲,在寂靜中格外清晰。

  客廳里一片漆黑。父母房間的門虛掩著,鼾聲從裡面傳來。林浩屏住呼吸,貼著牆走到客廳角落,那裡放著一個老式五斗櫃。

  最下面的抽屜。

  他蹲下,輕輕拉開。抽屜有些澀,發出「吱呀」的摩擦聲。他停下,側耳聽了聽——鼾聲沒停。

  抽屜里是家裡的雜物:針線盒、紐扣、幾卷用剩的毛線,還有一個鐵皮餅乾盒。林浩拿起餅乾盒,手感很輕。他打開,裡面是家裡的重要證件:戶口本、父母結婚證、幾張泛黃的收據。

  還有一疊錢。

  他用手指捻了捻。很薄,大概十幾張,都是十元二十元的零鈔。最下面壓著三張一百的。總共大概五百多塊。

  這是家裡全部現金了。

  林浩盯著那疊錢看了幾秒,然後輕輕合上餅乾盒,放回原處。關上抽屜時,他動作更輕了。

  回到房間,他坐在床邊,看著窗外沉沉的夜。

  5800元。他需要這麼多。而家裡只有500多,還是全家一個月的生活費。

  彩票?那個編號327的彩票,也許能中5000。但小藝說得對,一旦他介入,歷史就可能改變。而且彩票中獎是小概率事件,不可控因素太多了。

  他需要更可靠的辦法。

  「小藝。」他壓低聲音。

  手機屏幕亮起,在黑暗中發出幽藍的光。電量:4.8%。

  「我在。」

  「如果不用彩票,有沒有辦法在一周內賺到500元?任何辦法,只要合法,只要能快速啟動。」

  小藝沉默了兩秒——這是她在搜索資料庫。

  「正在分析……檢測到一個潛在機會,但需要您的主動操作。」

  「說。」

  「2002年6月,本地晚報副刊正在舉辦『夏日故事』微型小說徵文比賽。一等獎獎金800元,二等獎500元,三等獎300元。截稿日期:6月20日。獲獎名單公布:7月5日。」

  「寫小說?」林浩皺眉,「周期太長了,而且我沒寫過。」

  「但您擁有超越時代的敘事技巧和故事結構認知。以2028年的網文創作理論,反推2002年的紙媒徵文,屬於降維打擊。」

  林浩想了想。這倒也是。他看過太多未來的小說、電影、遊戲,知道什麼樣的故事能打動人。而且微型小說篇幅短,兩三千字,一個通宵就能寫完。

  「有往屆獲獎作品可以參考嗎?」

  「正在查詢……2001年同主題徵文獲獎作品已調出。核心特徵:故事要有時代氣息,結尾要有轉折或升華,字數控制在2500字以內。一等獎作品《父親的自行車》,講述下崗工人用自行車載客養活全家的故事,情感真摯,細節紮實。」

  林浩在黑暗中點頭。他明白了。2002年,這類樸實、正能量、能引發共鳴的故事最受紙媒青睞。

  「截稿還有十天。如果我明天寫好寄出去,什麼時候能知道結果?」

  「郵寄需要2-3天,評審需要一周,公布需要一周。總計至少半個月。」

  半個月。太長了。而且只是「可能」獲獎,不是「一定」。

  「還有別的嗎?更快一點的?」

  「正在搜索……2002年6月12日,本地電信局將舉辦『寬帶入戶推廣周』活動。現場有知識問答比賽,一等獎獎品為一台聯想桌上型電腦,價值約4000元。比賽內容:網際網路基礎知識、電腦操作常識。」

  林浩的眼睛亮了。


  電腦。直接獎勵電腦。而且時間是後天,很近。

  「比賽規則呢?」

  「面向所有市民開放,現場報名。比賽形式:搶答。題目範圍:Windows 98基本操作、Office軟體使用、網際網路常識、本地電信業務。」

  「題目難度?」

  「以2002年普通市民的認知水平為標準。但您擁有2028年的網際網路經驗,這些題目對您來說相當於小學數學題。」

  林浩握緊了手機。電腦。4000元的電腦。只要贏了比賽,電腦問題就解決了,還能省下寬帶初裝費——電信局搞活動,肯定會贈送寬帶體驗。

  「地點?具體時間?」

  「中心廣場電信營業廳門口。上午九點開始報名,十點比賽開始。」

  「好。」林浩說,「就這個。」

  「但請注意,」小藝提醒,「您的參與可能改變歷史。原本的獲獎者將失去電腦,這會產生蝴蝶效應。」

  「管不了那麼多了。」林浩低聲說,「我需要那台電腦。」

  他頓了頓:「而且,如果我能贏,說明我比那個人更懂電腦。電腦在我手裡,能發揮更大的價值。」

  這話有點自我安慰的意思,但他說得很堅定。

  屏幕暗了下去。電量:4.7%。

  林浩把手機放回窗台,躺回床上。但他睡不著。腦海里反覆盤算後天的比賽,盤算要寫什麼樣的故事,盤算如果都失敗了怎麼辦。

  直到天快亮時,他才迷迷糊糊睡去。

  醒來時已經上午八點。父母都出門了——父親又去了勞務市場,母親去了菜市場。桌上用紗罩罩著一碗粥,兩個饅頭,一碟鹹菜。

  林浩匆匆吃完,回到房間。他拿出紙筆,開始構思小說。

  徵文主題是「夏日故事」。他回想2002年的夏天,回想自己十八歲那年的記憶。蟬鳴、冰棍、樹蔭、暴雨、等待錄取通知書的焦灼……

  他想起昨天看見母親挑揀煤球的樣子,想起父親推著自行車離開的背影。

  筆尖落在紙上。

  標題:《煤球上的夏天》。

  他寫得很慢。不是寫不出來,而是在刻意控制節奏。他知道未來的網文套路,知道爽點、淚點、反轉點該怎麼設置。但2002年的紙媒不接受那些,要的是紮實的細節、克制的抒情、有溫度的人物。

  他寫一個下崗工人家庭的故事。父親每天天不亮就去勞務市場等活兒,母親在菜市場角落賣菜。家裡燒煤球,兒子高考完的那個夏天,開始學著挑揀煤球——把完整的留給父母用,自己用碎煤。

  他寫煤灰沾滿手指的感覺,寫煤球在爐子裡燃燒時散發的熱氣,寫父母回家時身上的汗味和疲憊。

  他寫兒子偷偷去工地搬磚,手上磨出血泡,用煤灰抹上止血。寫他用第一筆工錢買了一台小電扇,放在父母床頭。

  他寫夏天的暴雨,煤棚漏雨,兒子衝出去用塑料布蓋煤堆。雨停後,煤球濕了,點不著,一家人圍在爐子前,父親用扇子扇,母親用嘴吹,兒子加柴火。終於,火苗竄起來,映亮三張滿是煤灰的臉。

  他寫結尾:錄取通知書到了,學費很貴。父母商量著把家裡那輛自行車賣了——那是結婚時買的,二十多年了。兒子沒說話,第二天一早,把暑假打工攢的八百塊錢放在桌上,下面壓著一張紙條:「爸,媽,煤球我挑好了,夠燒一個冬天。」

  寫完最後一個字,林浩放下筆。手很酸,指節發白。他數了數字數:2387字,剛好在要求範圍內。

  他又讀了一遍。文字很樸實,但情感是真實的。那是他上輩子沒來得及對父母說的話,沒來得及做的事。

  他把稿紙折好,裝進信封。地址是晚報副刊部,貼上一張八毛錢的郵票。

  出門時已經上午十點。他先去郵局寄了信,然後走向中心廣場。路過那家報刊亭時,他停下腳步。

  就是這裡。彩票銷售點。那個編號327的彩票,十幾天後會在這裡售出。

  報刊亭老闆是個五十多歲的男人,正坐在小凳子上看報紙。櫃檯玻璃下壓著各種彩票,即開型的「刮刮樂」擺在最顯眼的位置,兩元一張,最高獎金5000元。

  林浩站了一會兒。他口袋裡還有昨天父親給的十塊錢,還剩八塊。可以買四張。


  但他最終沒買。轉身離開了。

  中心廣場上已經搭起了舞台。紅色的橫幅上印著黃色大字:「電信寬帶進萬家,信息高速通天下」。幾個工作人員正在布置,調試音響,擺放桌椅。

  舞台旁邊擺著一排電腦,是那種大腦袋的CRT顯示器,聯想品牌機。其中一台貼著「一等獎獎品」的標籤。

  林浩走近看了看。配置比他預想的還好:奔騰4處理器,256MB內存,40GB硬碟,17寸純平顯示器。還預裝了Windows XP系統——2002年,XP還是新鮮事物。

  「同學,對電腦感興趣?」一個穿電信制服的女工作人員走過來,笑容很職業。

  「嗯,看看。」

  「這是我們這次活動的特等獎,價值4288元。」工作人員熱情介紹,「只要參加我們的知識問答比賽,就有機會贏回家。報名嗎?免費的。」

  「怎麼報名?」

  「填個表就行。」她遞過來一張報名表。

  表格很簡單:姓名、年齡、職業、聯繫電話。林浩填了,職業寫「高中畢業生」。

  「比賽規則呢?」

  「十點開始,現場抽籤分組,每組十人搶答。每組第一名進入決賽,決賽前三名有獎。一等獎就是這台電腦,二等獎是小靈通一部,三等獎是500元電話卡。」

  林浩點點頭。他看了看周圍,已經有不少人報名了。大部分是年輕人,也有幾個中年人。大家都盯著那台電腦,眼神熱切。

  十點整,比賽開始。

  主持人是個二十多歲的姑娘,拿著話筒,聲音很清脆:「歡迎各位參加『電信寬帶知識問答大賽』!我是主持人小楊。首先有請我們電信局副局長王局長致辭……」

  一番領導講話後,比賽正式開始。

  林浩被分在第三組。他坐在選手席,看著前兩組的比賽。

  題目確實簡單得過分。

  「請問,Windows系統中,用來打開『我的電腦』的快捷鍵是什麼?」

  「答案是:Win+E!」一個年輕人搶答。

  「正確!加10分!」

  「請問,電子郵件的地址中,@符號怎麼讀?」

  「艾特!讀艾特!」

  「正確!」

  「請問,我們電信目前提供的寬帶最高速率是多少?」

  「512K!」這次搶答的人更多了。

  林浩看著,心裡有底了。這些題目對他來說,就像問大學生一加一等於幾。

  終於輪到第三組。

  「好,請第三組選手上場!」

  十個人走到台上,每人面前有一個搶答器。林浩試了試,按鈕很靈敏。

  「第一題:在Word文檔中,要保存文件,應該按什麼快捷鍵?」

  「Ctrl+S!」林浩幾乎是本能地按下搶答器。

  「正確!8號選手加10分!」

  台下響起掌聲。林浩的父母不知道什麼時候來了,站在人群里。母親踮著腳往台上看,父親則背著手,表情很嚴肅。

  「第二題:網際網路上,用來查找網站的『搜尋引擎』,最著名的是什麼?」

  「百度!」這次是另一個選手搶到了。

  「正確!」

  「第三題:我們縣的電信客服電話是多少?」

  「10000!」林浩搶到。

  「正確!8號選手再加10分!」

  比賽進行得很順利。二十道題,林浩搶到了十二道,全對。其他選手有時能搶到,但偶爾會答錯。比如有一題問「CPU的全稱是什麼」,有人答「中央處理器」,但標準答案是「中央處理單元」,被扣了分。

  最終,林浩以120分獲得小組第一,進入決賽。

  下台時,母親擠過來,遞給他一瓶水:「累不累?」

  「不累。」

  「那些題你都懂?」

  「嗯,平時看書學的。」

  父親沒說話,只是拍了拍他的肩膀。很用力。


  決賽在半小時後開始。進入決賽的有五個人,除了林浩,還有一個大學生,一個銀行職員,一個中學計算機老師,還有一個網吧網管。

  題目難度提升了。

  「請問,TCP/IP協議的四層模型是什麼?」

  林浩差點笑出來。這題在2028年屬於網絡基礎知識中的基礎,但在2002年,能答上來的人不多。

  「應用層、傳輸層、網絡層、網絡接口層。」網吧網管搶到了,但答得磕磕巴巴。

  「基本正確,加10分!」

  「請問,DNS伺服器的主要作用是什麼?」

  「域名解析。」這次是大學生。

  「正確!」

  「請問,在Excel中,用來求和的函數是什麼?」

  「SUM!」林浩搶到。

  「正確!」

  比賽進入白熱化。林浩的領先優勢並不大,那個計算機老師很厲害,幾道專業題都答對了。

  最後一題,主持人說:「這是一道實操題。請工作人員把電腦抬上來。」

  兩個工作人員抬上來一台電腦,已經開機,桌面是Windows XP的經典藍天草原壁紙。

  「請選手在五分鐘內,完成以下操作:第一,在D盤新建一個文件夾,命名為『電信寬帶』。第二,在這個文件夾里新建一個文本文檔。第三,在文檔里輸入『中國電信,寬帶專家』八個字。第四,保存文檔,並創建桌面快捷方式。完成速度和質量綜合評分。」

  台下響起嗡嗡的議論聲。對大部分2002年的人來說,電腦操作還是個陌生領域。很多人只會用滑鼠點點,具體操作步驟並不清楚。

  五個選手站在電腦前。主持人說:「準備——開始!」

  銀行職員第一個衝上去。他手忙腳亂地找D盤,但桌面圖標太多,一時沒找到「我的電腦」。網吧網管推開他,雙擊「我的電腦」,進入D盤,右鍵新建文件夾——但右鍵菜單出來後,他猶豫了一下,選了「新建」->「文本文檔」,結果文檔建在了D盤根目錄,不是文件夾里。

  計算機老師比較穩,他先建了文件夾,然後打開文件夾,在裡面新建文本文檔。但輸入文字時,他用了全角字符,打字速度也慢。

  大學生在旁邊干著急,插不上手。

  林浩等了幾秒,看明白了情況。他走上前,拍了拍計算機老師的肩:「老師,讓我試試。」

  老師愣了一下,讓開了。

  林浩坐到電腦前。他的動作很流暢,像是做了千百遍。

  右手握住滑鼠,左手放在鍵盤上。雙擊「我的電腦」,進入D盤,右鍵->新建->文件夾,重命名為「電信寬帶」。雙擊進入,右鍵->新建->文本文檔,重命名為「寬帶文檔」。雙擊打開,雙手放在鍵盤上。

  他敲下八個字:中國電信,寬帶專家。

  用的是智能ABC輸入法,他記得2002年的標配。敲拼音,選字,回車。動作很快,幾乎沒有停頓。

  然後文件->保存。關閉文檔。右鍵文檔->發送到->桌面快捷方式。

  完成。

  他看了一眼屏幕右下角的時間:耗時1分47秒。

  「完成。」他說。

  主持人愣了愣,看了看表:「這麼快?檢查一下。」

  工作人員檢查。文件夾有了,文檔有了,文字正確,桌面快捷方式也有了。完全符合要求。

  「8號選手,林浩,完成時間1分47秒,操作全部正確!」主持人高聲宣布,「第一名!」

  台下響起熱烈的掌聲。母親在台下用力鼓掌,眼眶有些紅。父親依然背著手,但嘴角微微上揚,是一個很淺的笑容。

  頒獎儀式很簡單。電信局的領導給林浩頒發了一張大獎狀,還有那台電腦——裝在原裝紙箱裡,很重。二等獎和三等獎也頒了,是小靈通和電話卡。

  「小伙子,電腦用得挺熟啊。」頒獎的領導拍了拍林浩的肩膀,「哪個學校的?」

  「縣一中,剛高考完。」

  「不錯,好好學,以後是個人才。」

  林浩抱著電腦箱子,在父母幫助下搬下了台。箱子很沉,父親要幫忙抬,林浩說不用,自己可以。


  但他還是讓父親抬了一頭。父子倆一前一後,抬著電腦箱子穿過廣場。母親跟在後面,手裡拿著那張大獎狀,走幾步就看一眼。

  回家的路上,不斷有熟人打招呼。

  「老林,這買的啥?」

  「電腦!孩子比賽贏的!」

  「喲,了不得!啥比賽?」

  「電信局搞的,知識問答。」

  「浩子可以啊!」

  父親的背挺得很直。雖然沒說什麼,但林浩能感覺到,父親很高興。

  回到家,父子倆把電腦抬進林浩房間。拆箱,安裝。顯示器、主機、鍵盤、滑鼠、音箱。還有一本厚厚的使用說明書。

  接通電源,按下開機鍵。主機發出「滴」的一聲,風扇轉動。顯示器亮了,Windows XP的啟動畫面出現,進度條緩緩移動。

  父母站在門口看。對他們來說,電腦是陌生的、昂貴的東西。現在這台東西屬於他們家,屬於他們的兒子。

  「這得多少錢啊?」母親小聲問。

  「四千多。」父親說,「浩子贏回來的。」

  啟動完成,進入桌面。藍天草原的壁紙,下面一排圖標。林浩握住滑鼠,移動光標。很流暢。

  「小藝。」他在心裡默念。

  口袋裡的手機震動了一下。電量:4.6%。

  「我在。」

  「記錄:2002年6月12日,獲得第一台電腦。下一步:安裝開發環境。」

  「建議:先安裝Flash MX。2002年最新版本為Flash MX 6.0,安裝文件可在各大軟體下載站找到,但需注意盜版風險。」

  林浩點點頭。他轉向父母:「爸,媽,我想裝個寬帶。」

  「寬帶?」父親皺眉,「那玩意兒貴吧?」

  「剛才電信局的人說了,我是獲獎者,可以免初裝費,前三個月每月只要50元。」林浩說,「三個月後,如果不用可以停。」

  這是剛才下台時,工作人員主動跟他說的,算是額外福利。

  父親想了想,看了看母親。母親說:「裝吧,孩子要用。」

  「那行,明天我去辦。」

  「謝謝爸。」

  父母出去了,輕輕帶上門。林浩坐在電腦前,感受著皮質椅面的冰涼觸感。他打開瀏覽器,輸入「Flash MX 下載」——用的是撥號上網,連接速度52K,網頁加載很慢。

  下載了一個多小時,終於下好了Flash MX的安裝包。安裝,輸入序列號——小藝提供了可用的序列號。安裝完成,桌面上出現了那個熟悉的紫色圖標。

  他點開。軟體啟動,界面是2002年的風格,工具欄圖標很大,配色鮮艷。

  新建一個Flash文檔。舞台尺寸設為550x400,幀率設為24fps。

  然後他打開記事本。不,不是用來寫代碼,是用來做筆記。

  「小藝,喚醒。」

  「我在。當前電量4.5%。」

  「調出Flash遊戲基礎框架的核心代碼。只要結構,不要具體實現。用我能理解的方式描述。」

  「正在整理……」

  手機屏幕亮起,顯示出一段簡化的代碼結構。林浩仔細看,不是逐行代碼,而是偽代碼,用中文描述算法和思路。

  他一邊看,一邊在記事本上記。

  「遊戲主循環:基於enterFrame事件。每一幀,更新所有遊戲對象的狀態,檢測碰撞,重繪。」

  「對象池:預創建對象數組,使用時取出,用完後重置狀態放回,避免頻繁創建銷毀導致的性能問題。」

  「碰撞檢測:矩形碰撞,判斷兩個顯示對象的邊界矩形是否相交。」

  「得分系統:全局變量存儲分數,碰撞檢測到特定物體時加分,分數顯示在舞台左上角。」

  「資源管理:使用Loader類加載外部圖片和聲音,加入加載隊列,全部加載完成後啟動遊戲。」

  他記了整整三頁。不是照抄,而是理解後用自己的話重新描述。有些概念2002年還沒有,他需要找到替代方案。


  比如小藝提到的「事件監聽模型」,在Flash MX中需要用on()函數或者addListener()方法,不完全一樣。

  比如「面向對象編程」,AS2.0雖然支持,但還不成熟,很多開發者還在用面向過程的寫法。

  他必須把2028年的先進思路,翻譯成2002年能實現的技術方案。

  這個過程很慢,很費力。他經常要停下來思考,查Flash MX的幫助文檔,甚至寫一小段測試代碼驗證想法。

  但好處是,他真正理解了。不是知道「該這麼寫」,而是知道「為什麼這麼寫」。

  窗外天色漸漸暗下來。母親敲了敲門,端進來一碗綠豆湯:「歇會兒,喝點湯。」

  「好,謝謝媽。」

  母親放下碗,看了看屏幕上那些看不懂的代碼,又看了看兒子專注的側臉。她沒說什麼,輕輕退了出去。

  林浩喝了一口綠豆湯,很甜,冰鎮的,解暑。

  他繼續。

  開始寫真正的代碼。打開Flash MX的代碼編輯器,在第一幀上右鍵,選擇「動作」。

  光標在代碼編輯區閃爍。

  他深吸一口氣,敲下第一行:

  // Flash遊戲基礎框架

  // 作者:林浩

  // 日期:2002年6月12日

  然後是第二行:

  // 初始化遊戲變量

  第三行:

  // 預加載資源

  他敲得很慢。每敲一行,都要想清楚這一行在整體架構中的位置,想清楚變量名是否合適,想清楚有沒有更好的寫法。

  有時他會刪掉重寫。有時他會加注釋,解釋這行代碼的作用。有時他會停下來,在草稿紙上畫流程圖。

  汗水從額頭滑下,滴在鍵盤上。他用袖子擦掉。

  窗外的天完全黑了。縣城的路燈亮起來,昏黃的光透過窗戶,和電腦屏幕的光混在一起。

  他寫完了對象池管理函數,寫完了碰撞檢測函數,寫完了得分更新函數。雖然只是一個最簡單的框架,只有不到兩百行代碼,但它完整、清晰、可擴展。

  最後,他寫了一個最簡單的測試遊戲:一個小方塊在舞台上移動,碰到邊界反彈,碰到隨機生成的目標物加分。

  點擊運行。

  舞台上的小方塊動了。左、右、上、下,用方向鍵控制。目標物隨機出現,碰到就加分,分數顯示在左上角。

  很簡陋,沒有任何美術資源,只有最簡單的幾何圖形。

  但它是完整的。從加載到運行,從輸入到反饋,從邏輯到表現。

  一個完整的、可運行的遊戲。

  林浩靠在椅背上,長長地舒了一口氣。

  他看了一眼時間:凌晨一點。從下午到現在,八個多小時。

  手機在口袋裡震動了一下。他拿出來,點亮屏幕。

  電量:4.0%。

  「小藝。」

  「我在。」

  「記錄:2002年6月13日凌晨1點07分,完成第一個Flash遊戲框架,共187行代碼。運行成功。」

  「已記錄。恭喜。」

  林浩關掉電腦。屏幕暗下去,房間裡只剩下窗外的路燈光。

  他走到窗邊,看著外面的夜。縣城睡了,只有幾扇窗戶還亮著燈,也許是有人在熬夜看電視,也許是有人在趕工。

  而他,剛剛敲下了重生後的第一行代碼。

  雖然只是一個開始,雖然離目標還很遠,雖然電只有4.0%。

  但他有電腦了,有開發環境了,有第一個可運行的程序了。

  最重要的,他開始了。

  他回到桌前,翻開筆記本,在新的一頁寫下:

  「2002年6月13日。已完成:1.獲得電腦。2.安裝開發環境。3.完成基礎遊戲框架。」

  「下一步:1.開發第一個完整的小遊戲。2.尋找發布渠道。3.測試變現可能。」

  「目標:一周內,賺到第一筆錢。金額:不低於200元。」

  他放下筆,躺到床上。很累,但很清醒。

  窗外,夏夜的風吹進來,帶著梔子花的香味。

  他閉上眼睛,在黑暗中微笑。

  第一步,邁出去了。

章節目錄