第5章 第一台Mac------------------------------------------,張偉正在打魔獸世界。,是在排隊。2008年的魔獸世界伺服器一如既往地爛,黃金時段排隊動不動兩小時起步。張偉盯著螢幕上“位置:2458”的數字發呆,聽見門響,扭頭看見陳燃抱著一個紙箱,滿頭大汗。“這什麼東西?這麼大一個箱子。”“Mac mini。”陳燃把箱子放在桌上,開始拆膠帶。“麥……就是你說的那個蘋果電腦?”“對。”,看著陳燃從箱子裡拿出那台銀白色的小主機。在2008年,蘋果產品的設計領先同行至少一個時代。這台Mac mini雖然是一年前的舊款,但那簡潔的鋁合金外殼、那顆會亮的白色電源燈、背麵整齊排列的介麵,放在任何一台PC旁邊都像是來自未來的產品。“臥槽,”張偉伸手摸了摸機身,“這玩意兒是金屬的?”“鋁合金。”“得不少錢吧?”“三千二。”。“三千二?你花三千二買了這麼個小盒子?這玩意能乾啥?打遊戲?”“能讓你賺錢。”陳燃把主機放到桌麵上,接上電源線和網線,然後犯了難。。,是劉洋的——他用來接膝上型電腦打遊戲。王浩倒是有一台,但他那台是CRT的,又大又笨重,而且介麵不匹配。
“張偉,你顯示器借我用用。”
“我的?”張偉指了指自己桌上那台17寸的AOC,“我那台是VGA介麵的,你這Mac能用嗎?”
陳燃看了一下Mac mini的介麵——DVI和Mini-DVI。他冇有轉接頭。
2008年,一個DVI轉VGA的轉接頭要賣三十多塊錢。他不是買不起,但跑一趟電腦城又要花半天時間。
“算了,”陳燃說,“我先用遠端桌麵。”
他從書包裡掏出自己的聯想筆記本——一台大一入學時家裡給買的神舟電腦,塑料殼子,自重快三公斤,散熱口在底部,放腿上能燙出水泡。他開機,下載了一個VNC客戶端,用網線把Mac mini和筆記本連到同一個路由器上,然後通過遠端桌麵連線Mac。
螢幕亮了。
Mac OS X 10.5 Leopard的歡迎動畫出現在筆記本的螢幕上。一隻Finder的笑臉圖示,一條進度條,下麵寫著“正在啟動您的Mac”。
張偉湊過來看。“這係統長得挺好看的。”
“嗯。”
“比Windows XP好看。”
“嗯。”
“你就能不能說個彆的字?”
陳燃冇理他。進度條走完了,進入桌麵——藍色的星空桌布,底部的Dock欄上排著一排圖示:Finder、Safari、Mail、iTunes、垃圾桶。
他深吸了一口氣。
上輩子,他的第一台Mac也是二手的。2010年,他剛畢業,工資三千五,省吃儉用三個月在京東方買了一台二手MacBook Air。那台機子的螢幕有壓痕,鍵盤有幾個鍵不靈,但那是他第一次擁有屬於自己的Mac。
他記得那一天。他把MacBook Air抱回出租屋,從晚上八點一直折騰到淩晨三點——裝Xcode、配環境、寫第一行iOS程式碼。
那時候他不知道,那台破電腦會陪伴他走過創業最初的日子,會在一次深夜加班時從桌上摔下來,螢幕碎了,但還能外接顯示器用。它一直撐到公司A輪融資,陳燃才捨得換了一台新的。
現在,他捧著這台更舊、更慢、螢幕都冇有的Mac mini,心裡的感覺和上輩子一模一樣。
——值了。
開機設定花了他快一個小時。係統是10.5.8,需要升級到10.5.8的最新補丁。Xcode 3.1.3的安裝包有1.2個G,以2008年的網速,下載需要三個小時。
他點開了下載按鈕,然後去食堂吃飯。
晚上八點,Xcode安裝完成。
陳燃開啟Xcode,看著那個經典的藍色圖示和初始介麵,覺得親切得有些陌生。Xcode 3.1的介麵和後來的Xcode 4、Xcode 5完全不同——冇有storyboard,冇有自動佈局,冇有ARC。Interface Builder是獨立的應用程式,和Xcode分開執行。
你要先寫程式碼,然後在IB裡拖控製元件,再通過Outlet把兩者連線起來。
彆說Swift了,連ARC都冇有,記憶體管理全靠手動retain/release。
陳燃閉著眼睛都能寫。
他新建了一個專案:基於View的應用程式,語言是Objective-C。在2008年,還冇有Swift,冇有SwiftUI,每一個介麵都要手寫或者用IB拖。
他開始寫FlamePop的iOS版本。
程式碼框架他早就想好了——一個主檢視控製器,管理遊戲網格、得分、計時器;一個自定義UIView,負責繪製火焰精靈和處理觸控事件;一個GameEngine類,封裝消除邏輯、下落演演算法、連鎖反應。
他把頭一天晚上在筆記本上寫的架構圖展開,按圖索驥,一行一行地翻譯成程式碼。
敲鍵盤的聲音在宿舍裡響起來。
劈、劈、啪、啪、劈、劈、啪、啪。
不是打字,是彈奏。
陳燃的十個手指在鍵盤上飛,速度比宿舍裡任何人都快。他不需要看鍵盤,不需要查文件,不需要考慮語法——Objective-C的語法在他腦子裡像肌肉記憶,一個類怎麼寫,一個方法怎麼定義,記憶體管理怎麼寫,他閉著眼睛都能寫對。
張偉在旁邊看了一會兒,終於忍不住說話。
“你打字速度怎麼這麼快?”
“練的。”
“練了多久?”
“十四年。”
張偉以為他在開玩笑。
寫到快十點的時候,陳燃遇到了第一個問題。
Mac mini的硬碟速度太慢了。
編譯一次需要將近一分鐘,執行模擬器需要再等三十秒。這對習慣了SSD和M1晶片的陳燃來說,簡直是一種折磨。
上輩子,他的開發機是16寸MacBook Pro,M1 Max晶片,64G記憶體,2T SSD,編譯一箇中型專案隻需要五秒鐘。
現在,他坐在一把吱吱響的木頭椅子上,麵對一台轉速5400轉的機械硬碟,等著一行一行地編譯。
但這也不全是壞事。
慢有慢的好處。編譯跑不起來的時候,他會想得更仔細,寫得更謹慎,儘量減少試錯。
這讓他想起上輩子剛入行時帶他的老工程師說過的話:“程式碼不是跑出來的,是想出來的。跑得越快,想得越慢。”
那時候他不信。現在他信了。
寫到淩晨一點,FlamePop的核心介麵搭好了。
一個主遊戲網格,4x4,每個格子是一個UIButton。這是最簡單粗暴的做法,效能不好,但夠快。上輩子他做第一款遊戲時也是這樣乾的,後來使用者量大了才優化成了自定義繪製。
現在不用著急。先把產品做出來,再考慮優化。
陳燃把筆記本合上,揉了揉痠痛的眼睛。Xcode還在編譯,進度條走到一半就不動了。他看了一下係統活動監視器——記憶體占用已經滿了,CPU風扇在狂轉,整台Mac mini燙得能煎雞蛋。
這配置,放在2022年,連瀏覽器都開不動。
但在2008年,它就是他的超級計算機。
他站起來,伸了個懶腰。宿舍裡的燈已經滅了,隻有他的螢幕亮著,白色的光映在屋頂上。張偉已經睡了,劉洋和王浩也睡了,鼾聲此起彼伏,像一首冇有節奏的交響樂。
他爬上床,躺下,閉上眼睛。
腦子裡的程式碼還在跑。一個檢視控製器的生命週期,viewDidLoad、viewWillAppear、dealloc。記憶體管理要小心,誰alloc誰release,不要造成迴圈引用。觸控事件怎麼處理,touchesBegan和touchesMoved的配合。
迷迷糊糊快要睡著的時候,手機震了。
他伸手摸過來,螢幕的白光照得他眯起眼睛。
是蘇晚發來的簡訊。