跳至主要内容

玩住學

九十年代初,旺角信和中心的地下室裡,總是瀰漫著一種特殊的氣味——廉價影印紙、塑膠光碟盒、電腦風扇過熱時那種微微發焦的味道。那是我少年時代每個週末的朝聖地。

大補碟舖的店主未必認得我的臉,但我認得他架上所有的貨。《電腦時代》、《電腦廣場》、《PC Home》——這些雜誌在網路時代集體消失,但在當時,它們幾乎是我理解這個世界的唯一窗口。

我還有一位老師:一位港大 EEE 神人。我很多遊戲都是從他那抄來的,到電腦舖買 Maxell 磁碟——日本貨,比雜牌貴但耐用,那個年代雜牌磁碟經常壞軌——拿去他家,在 DOS 底下用磁碟機互抄。遇到不給跑的遊戲、或者吃記憶體吃到異常的,他會教我怎麼動 config.sys、怎麼換 COMMAND.COM、怎麼把記憶體擠出幾 KB 出來。所以其實我不是「一個小孩自己摸索」出來的——那些改機的本事,大半是有師傅手把手教的。

1995 年,我中三升中四那年,老師全家移民。臨走之前他跟我講的話,我至今記得:「世界要學的東西學不完。你已經可以不用等人教了,自己看書、看雜誌就能學;現在互聯網已經有了,只是還沒普及——但很快會普及,將來上網學會比等雜誌快得多。英文要學好。」

那一年之後,我沒有再找過另一位師傅。


小學的時候,家裡有一台電腦——而且始終是當年的頂規。那個年代流行「砌機」:主機板、CPU、RAM、顯卡都是可以拆開換的,我那台機器從 386 一路升級到 486、再到 Pentium。家境不算差,父母又寵我;那個年代要跑得動整套日常軟體——DOS 下的 ET3 中文系統、莎士比亞中文排版、加上 Windows 3.1、CorelDRAW——非得一路升級不可。

那時 Windows 3.1 並不是今天意義上的作業系統。你開機進的是 DOS,要跑 Windows 3.1 得自己打一行 win 指令;絕大多數日常軟體也沒有圖形介面,你面對的永遠是那個閃爍的 C:\> 游標。那個年代「用電腦」這件事本身,就是在跟命令列打交道——你別無選擇。

而那台不斷進化的頂規電腦,在我這個小學生手裡最大的用途,是拿來玩遊戲。就在一邊玩遊戲、一邊跟家裡那台電腦磨合的過程裡,我不小心學會了十六進位。

家裡有一部卡西歐工程計算機——原本是家姐的,那種中學生幾乎人手一部的標配型號——上面就有 BIN、OCT、HEX、DEC 四個按鍵。在數學課上把 255 按成 FF、再按成 11111111 打發時間,是我那時的消遣。所以「十六進位」這個詞我們早就會唸了,只是沒人告訴過我們它為什麼重要。

那個「為什麼」,是被遊戲撞出來的。改存檔也好、金手指也好,你會反覆看到同一個數字:角色練到封頂是 255、HP 上限是 255、某個數值表到頂就卡在 FF。二三十次「為什麼我的角色就是強不過去」之後,自己就把線連起來了——計算機上那顆 HEX 鍵按下去 FF 顯示 255,所以 FF 就是八個 bit 全部點亮的狀態;一個 byte 裝不下比 255 更大的數,就溢出。計算機上那顆你按過一千次的鍵,背後站著整個 CPU 的架構。

我那個年代的小孩不是坐下來學電腦的——我們是玩住學。那個年代要玩一隻遊戲,你往往得親手調 config.sys、算記憶體怎麼分、搞清楚音效卡接哪個 IRQ——軟硬體都要自己動。這些過程在當時的小孩眼裡不是苦差,是儀式:打通了,遊戲就跑;跑了,你就贏了。


2000 年前後我升上大學。那時 Computer Science、Computer Engineering、Software Engineering 這些科系早就已經有了,讀的人很多。傳統 EEE 也不冷門——它穩定、容易移民加分、家長接受——但大家讀 EEE 都是衝著「大電」那條傳統出路去的:建築二判、電廠、機電工程。很少人會想到用 EEE 來養一種跨層次的視野。

我選了 EEE,加上 Computer Engineering 的 double major。

我從小玩高達模型、遙控車、遙控直升機,心裡想做的事一直是「自己做一樣產品出來」,不是單純寫軟體。對我來說,要跨越硬體到產品,EEE 是最對的底子——即使同屆真的用這個角度在想事情的人並不多。

第一個學期,我們接到一個 assignment:用一顆 Motorola HC11 微控制器、一顆可變電阻、一條 RCA 輸出線,做一台撞磚頭遊戲機。沒有任何函式庫、沒有 framework。HC11 直接 bit-bang 出時序訊號,再透過一顆簡單的 DAC 轉成類比,才把一個個像素推到 RCA 輸出上。可變電阻那一端的類比訊號經過 ADC 取樣之後,轉換成球拍的位置。整個程式最後燒進一顆容量以 KB 計的 EEPROM 裡。

那一個學期,我一個人,從零做出了一台完整的遊戲機。


這本書表面上是在講電子遊戲如何推動了過去四十年的科技霸權。但我寫這本書的真正動機,是要回答一個更私人的問題——

為什麼我那個年代,還有人可以成長為一種橫跨硬體與軟體、從電晶體到雲端都懂一點點的工程師?為什麼這一條成長路徑,今天已經幾乎消失?

這個問題的答案,跟本書後面的每一個主角都有關。

John Carmack 之所以是 Carmack,是因為他成長的年代,硬體還是裸露的。他必須直接寫 VGA 記憶體、必須自己搞清楚 CPU 的每一個 clock cycle 要怎麼花——所以當日後 3D 繪圖引擎要在硬體極限上做取捨時,他是那個還站得穩的人。

Gabe Newell 的故事對我特別私人。我小時候不懂為什麼有些遊戲突然就跑不動、為什麼要換 COMMAND.COM、為什麼每個新版 Windows 都讓 DOS 遊戲更難玩——要等到多年後接觸 Linux,我才看清楚:那不是技術問題,是商業問題。這本書第五、第六章會展開這段歷史;但在自序這裡我只想說,有些路你是被逼著走完的,走完了才知道,原來別人也在走同一條路。

Gabe Newell 選擇 Linux,是因為他知道封閉 stack 的代價。抽象層本身不是問題,它是管理複雜度的唯一辦法;真正致命的是黑箱——當 Windows 和 Intel 把每一層都鎖起來,開發者就變成平台商的房客,隨時可以被收租、可以被逐出。Valve 要走出這個困境,需要一個不只懂 API、而是看得穿整個 stack 的領導者——因為要在一個開放但複雜的系統(Linux)上蓋起自己的遊戲平台,你必須知道哪一層打得開、打開之後能做什麼。

黃仁勳在 2006 到 2007 年間押注 CUDA、熬了將近十年,是因為他看得懂硬體與軟體之間那條縫。他既不是純軟體工程師,也不是純硬體工程師,而是一種罕見的、能夠同時握住兩端的人。

今天 Intel 與微軟的困局,本質上可以理解為:一代「只懂 framework、不懂硬體」的工程師,正在接手一個需要全局視野的帝國。他們非常聰明,但他們習慣的工作方式,是站在無數抽象層之上做優化,而不是穿透抽象層,去重新設計地基。


這本書記錄的是過去四十年的科技史。但它真正想問的問題是:

AI 時代,我們還有沒有可能培養出下一代的 Carmack、Lisa Su、張忠謀?

說真的,我本來就不算一個正常人——我只是一直在扮正常。

如果這種人已經不存在了,這本書就是一份悼詞。 如果這種人還在,這本書就是一份使用說明書。