書店
6、原型
她迅速捲動並瞄過我的程式,讓我有點難為情,因為我的程式裡滿是這類的評語:要命,耶!還有,電腦,現在該是你聽命於我的時候。
是個女生。她半個身子探進店內,看著我說,「店還有開嗎?」
我把工作日誌從封面翻到封底,一面尋覓,任何東西都行。也許是來自過去的訊息:好店員啊,留意科維納的暴怒。可是沒有。我的前任店員們就像我一樣直來直往。
「對。還有專門來借書的會員。」
所以我加了些鹽巴跟一點奶油,然後埋頭苦幹到凌晨兩點,終於弄出了可以運作的新視覺化原型。我馬上注意到奇怪的事情:那些燈光竟然跟著彼此移動。
「我就是做這種工作的,」她彎低身子說,瞥看程式,「資訊視覺。你介意嗎?」她指了指鍵盤。呃,當然不,深夜的美麗駭客女孩,我哪會介意。
「是不多。」
在我的螢幕上,廷多爾會從二號走道頂端借出一本書。然後下個月,拉賓就會來借同一個書架裡的書。五個星期以後,英伯特會如法炮製——就是同一個書架——不過同時,廷多爾已經把書歸還,從一號走道的底部借了本新的。他領先一步。
那個女生的雙眼放光,「資訊視覺化!」她一掃疑心,突然開心起來。
想像你在煮飯好了。可是你不是一步步照著食譜走,一面巴望做出最棒的成果,而是不管何時想要,都能把整批材料放進或拿出鍋子。你可以加進鹽巴,嚐嚐看、搖搖頭之後,再把鹽巴全部拉出來。你可以把爽脆到完美的外皮拿起來,把它獨立出來,然後隨你高興往裡頭添加任何東西。那不再是一個線性過程,不是以成功或(對我來說大多是)令人喪氣的失敗為終點。反之,它像是環形迴路、花體字或小小的草寫字。它是一個遊戲。
「我剛剛在等公車,結果手機嗡嗡響起來——我想我有張折價券?」
凱特還在等我回話。「當然好。」我尖聲說道。
我換個角度來說。「因為有點歷史了,」我說,「這家店開了快一個世紀。我想是城裡最老的——搞不好是整個西岸最老的書店。」
然後:我在Google上搜尋「時間序列視覺化」,開始更新我模型的版本,一面想著搞不好我可以弄出原型來讓她佩服。我真https://m.hetubook.com.com的很欣賞那種你可以用原型打動她的女生。
如果要讓這家店的3D模型真正發揮用途,需要展現給你看的可能就不只是書本的所在位置,也要顯示目前出借的有哪些、又是借給了誰。於是我把工作日誌最後幾週的條目,簡略地輸進電腦,教導我的模型學會辨認時間。
凱特的電話發出閃亮的乒一聲,她往下一瞟。「噢,」她說,「我的公車來了。」我心裡暗咒公共運輸系統偶爾的準時。「我可以讓你看看我說的時間序列是什麼,」她冒險問道,「想找個時間見面嗎?」
好了,我要把事情搞定,講話不要太宅。「唔,是這家店的模型,只不過妳能看到哪本書還有庫……」
她朝著櫃檯直直走來,把手機往我這裡一推。小小的螢幕上正是我的Google廣告。超定位在地廣告攻勢——我都把它給忘了,可是它還在運作,而且還找到了某個人。我設計的數位折價券就在那裡,從她刮痕處處的智慧型手機往旁瞥看。她的指甲透著光澤。
「對。」我倒是不曉得他叫墨利斯。「你有沒有遇過送新書來的人?」
一等他離開,我滿腦子淨是新理論。搞不好奧利佛也參了一腳。也許他是科維納的眼線——沉默的觀察者。完美極了。也許他捲入了某種更深層的陰謀。也許我只看到了事情的表面。我知道像這樣的書店(或者是圖書館?)還有更多家,可是我還是不知道「像這樣的」是什麼意思。我不知道後側書單是幹嘛用的。
「還沒,不算有啦,沒有。」其實我壓根兒不曉得那是什麼。
「抱歉,我佔著不放,」她說著趕緊把筆電轉回來給我,「我得意忘形了。」她把一綹髮絲推到耳後,站直身子,故作平靜地說,「所以呢,克雷,你為什麼要做這家書店的模型?」她說著視線一面沿著書架往天花板飄去。
我把這次的交易狀況記入工作日誌,強調英伯特的扁帽以及他口氣裡的蒜味。接著為了替以後的店員著想,或許也為了想對自己證明這是真的,我於是寫下:
「當然了,」我說,「妳可以進來。我們店永遠開著。」
英伯特出示了他的借書卡——6MXH2I——然後拿走他的和圖書書。鈴鐺叮叮響起,我再次形單影隻。
她說,「你有沒有試過時間序列視覺化?」
哎,當然開著,那個女生的栗色頭髮剪到下巴那裡,身上的紅T恤印了芥末黃的字眼BAM——是的,我們書店是開著沒錯。
「沒錯,」我說,「就是資訊視覺化。喏。來看一下吧。」
隔天晚上,我像平日那樣走進書店,對奧利佛.果恩揮手打招呼。我想問他關於艾瑞克的事,可是我不太知道要怎麼說。我跟奧利佛從來不曾談過這家店的詭異之處。所以我這麼起頭:
鈴鐺叮叮響起。是英伯特:矮短結實,蓄著濃密粗硬的黑鬍子,斜戴著報童帽。他把現有的書(紅皮巨冊)舉起來,推過櫃檯。我迅速掃過那個視覺化影像,找出他在模式裡的位置。一枚橘色光點跳著越過我的螢幕。在他還沒吐出一個字兒以前,我就知道他要二號走道中間的一本書。那會是——
我們在半路會合,就在櫃檯末端。我把只要轉得太遠就會消失的3D書店秀給她看。她湊得很近。
他們寫下的文字質樸又實在,只是描述了來來往往的會員們。其中有些是我認得的:廷多爾、拉賓跟其他人。有些人對我來說是一團謎——只在白天來訪的會員,或是很久以前就不再來訪的會員。從散落在紙頁上的日期看來,這本書涵蓋了五年多一點的時間,只寫滿半本。下一個五年要由我負責填滿嗎?我要在不曉得自己寫些什麼的狀況下,連續盡責地書寫好幾年嗎?
首先:我寫了電郵給凱特,問她明天星期六想不想共進中餐。我可能有些膽怯,但我相信打鐵就要趁熱。
「普羅赫洛夫之書,」英伯特咻咻喘氣說,「接下來一定要讀普羅赫洛夫之書。」我梯子才爬到一半就頭昏目眩。到底怎麼回事?我這次不敢輕舉妄動;我從書架上抽出細薄黑皮的普羅赫洛夫之書時,在很勉強的狀態之下才保住了平衡。
我不確定自己現在就想坦白供出這個地方有多詭異。哈囉,很高興認識妳,我專賣看不懂的書給怪咖老人——想一起吃個晚飯嗎?(頓時,我很確定那些老人堆中的其中一個會歪歪斜斜衝進前門來——拜託,廷多爾、費多洛夫,還有全部老人:今天晚上請乖乖待在家裡,繼續苦讀吧。)
二十四和-圖-書小時神祕書店有非常怪異的事情正在發生。
現在,書本在塊狀的3D書架上像檯燈一樣散放光芒,它們是用色彩編碼的,於是廷多爾借過的書本發出藍光,拉賓是綠光,費多洛夫則是黃光等等的。滿酷的。可是,我的新特色也引進了一個程式缺陷:現在,只要把書店旋轉得太遠,書架整個就會閃啊閃得消失不見。坐著的我伏身忙著對付程式,想把問題弄個明白卻始終徒勞無功。這時鈴鐺清脆地叮叮響起。
「那是什麼?」她挑起一邊眉毛說。一道可愛的深色眉毛。
可是,當然了,程式語言的重點在於你不只拿來讀,還得拿來寫。你要讓它替你服務。我想,這點就是Ruby厲害的地方:
要是我整夜想個不停,腦袋就要融成一灘水了。我需要能轉移我注意力的事——具有挑戰性的大事。所以我拉起筆電的蓋子,繼續架設3D書店的工作。
我之前掙扎了好幾個鐘頭,可是這個女生——凱特——才五分鐘就找出我書店的程式缺陷。她是天才。在除錯的過程中,她一步步教導我,迅速又信心滿滿地解釋她的推論。接著,她敲著鍵盤,喀答喀答三兩下就除錯完成。
「我們在Google會替搜尋日誌做這種東西,」她說,「滿酷的——你會看到某個新構想閃過了全世界,就像小小的傳染病。然後一週之內就會消耗殆盡。」
我的四肢系統變得如此習慣某種(非常低)限度的人類(女性)接觸。她就站在我旁邊,手肘稍微戳到我的身體,基本上就讓我有了醉意。我試著擬定自己接下來的步驟。我要推薦愛德華.塔夫特(Edward Tufte)的《量化資訊的視覺呈現》。普蘭伯有一本——我在書架上看過,好大一本。
凱特的微肌肉非常迷人。
如果艾瑞克的惡意來得出奇不意,這那麼這個女生的好奇心也令人驚奇。「沒問題,當然行。」我說,一面轉換著幾個深暗視窗,直到Ruby的原始模樣填滿了螢幕,全是色彩編碼的紅、金跟綠。
寫程式的方法各有千秋。一般的書寫語言有不同的節奏跟片語,對吧?唔,程式語言也是這樣。叫做C的語言都是尖銳的命令句,幾乎是赤|裸的電腦行話。而叫做Lisp的語言就像兜圈子的長句,滿是從hetubook.com•com屬子句,句子長到通常讓你忘了開始在講些什麼。叫做Erlang的語言就像這個字本身的拗口唸法:古怪又很斯堪那維亞。我沒辦法用這些語言來寫程式,因為它們的難度太高。
「我可以看一下原始程式碼嗎?」
「真不可思議,」她說,「Google跟這裡比起來就像個嬰兒。」難怪:原來這女生是Google人。她真的是天才。還有,她有顆牙齒缺角缺得很可愛。
「奧利佛,我有個問題。你知道,這家店有正常的顧客嗎?」
歷史正仰賴著如此微小的東西。視角只要差個三十度,這個故事就會在這裡結束。可是我筆電的角度恰好如此:3D書店正在我的螢幕上以兩個軸心瘋狂繞轉,就像太空船翻滾穿越空白的宇宙,那個女生往下一瞥,然後——
可是,Ruby是我從新貝果以來就很中意的語言,是由一位開朗的日本程式設計師發明的,讀起來就像是友善又容易理解的詩歌。就像詩人比利.科林斯(Billy Collins)藉由比爾蓋茲來發聲。
我不由自主發出詫異的高呼。是艾瑞克要回來對我大吼大叫嗎?還是執行長科維納本人終於回來,要將暴怒降諸於——
就寫在程式裡——有個叫做clay_is_awsome(克雷超炫)的方法。我想每個程式設計者都會寫這種東西。
我之前沒注意到這種模式,因為它在空問跟時間上相隔遙遠,就像每個音符之間有三個小時空檔的一首樂曲,全以不同的八度音來彈奏。可是在這裡,在我的螢幕上經過濃縮與加速之後,就變得一目了然。他們全都彈奏著同一首曲子,或是跳著同一個舞碼,或者——對了——解著同一道謎題。
他頓住並想了想。接著,言簡意賅地說,「沒。」
每過幾分鐘,我就抬頭看看前側櫥窗,望向窗外的街道。我在尋找幽幽暗影、飄閃而過的灰西裝,或是黝暗眼眸的閃光。可是什麼也沒有。我的工作把那種怪異感抹消掉了,最後進入興高采烈的狀態。
「沒錯!」我說,「超棒的折價券。最棒的!」我的嗓門太大了。她一定會轉身離開。Google驚人的廣告演算法把一個超可愛的女生送了過來,我不知道該拿她怎麼辦。她轉著腦袋四下張望書店,露出懷疑和-圖-書的神色。
「我是凱特,」她說,「我想我找出問題了。想看嗎?」
「就像墨利斯.廷多爾。」
「我超愛這種資料的,」她邊說邊朝我的筆電點點下巴,「真實世界的資料。老資料。」這個女生閃動著生命的火光。這是我結交新朋友(包括女朋友以及別種朋友)的主要篩選條件,也是我所能給人的最高恭維。我嘗試過很多次,想搞清楚點燃這種火光的是什麼——在冰冷黑暗的宇宙裡,哪些特徵聚合起來,形塑出這麼一顆星辰。我知道重點主要集中在臉上——不只是眼睛還有眉毛、臉頰、嘴巴,還有把所有東西連結起來的微肌肉。
我聽了覺得很有意思,可是主要是因為這女生對我來說很有意思。
重點是要讓那些隨著時間出借的書本動起來,而不是在同一個時間點看到它們。首先,我往筆電裡輸入更多工作日誌上的名字、書名與時間。然後我開始進行駭客行動。
她在二十四小時神祕書店的一張明信片上匆匆寫下電子郵址:katpotente@(想當然是)gmail.com。「折價券我下次再用吧,」她揮揮手機說,「晚點見囉。」
哎,是,我是想見面。搞不好我就乾脆替她把那本塔夫特的書買下來。我會用牛皮紙包了以後帶過去。等等——那樣很怪嗎?那本書滿貴的。搞不好有低調一點的平裝版。我可以在亞馬遜網路書店買。好蠢,我明明就在書店工作。(亞馬遜送貨的速度夠不夠快?)
後來,深夜獨處加上吸入木質素一個鐘頭之後,我清醒過來,做了兩件事。
「很棒耶,」她笑盈盈地說,「你一定就是克雷吧?」
一等她離開,我就登入去看我的超定位廣告攻勢。難道我不小心勾到「正妹」選項嗎?(有沒有勾到「單身」呢?)這種自我介紹法,我承擔得起嗎?純粹就行銷來說,這次是敗筆:我沒賣出任何一本書,不管是貴的或其他價位。事實上我還因為那張草草寫了字的明信片而欠下一塊美金。可是沒有擔心的理由:Google從我原本的十塊美金預算,只扣了十七分。但我得到的卻是單次完美的廣告曝光——就在整整二十三分鐘以前。

