創(chuàng)意選擇(黃金時代的產(chǎn)品思維)_第1頁
創(chuàng)意選擇(黃金時代的產(chǎn)品思維)_第2頁
創(chuàng)意選擇(黃金時代的產(chǎn)品思維)_第3頁
創(chuàng)意選擇(黃金時代的產(chǎn)品思維)_第4頁
創(chuàng)意選擇(黃金時代的產(chǎn)品思維)_第5頁
已閱讀5頁,還剩145頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

創(chuàng)意選擇黃金時代的產(chǎn)品思維目錄TOC\h\h第1章向喬布斯做示例演示\h史蒂夫可以預(yù)言未來\h進(jìn)入密室\h蘋果之核\h簡潔是靈魂\h“圣人”的裁決\h史蒂夫只說了四句話\h第2章初入蘋果\h鸚鵡螺沒有吹響\h蘋果的瀏覽器替代計劃\h馴服Mozilla\h10×程序員\h理查德·斯托爾曼\h示例程序法\h第3章第一次“尤里卡時刻”\h移植策略\h代碼與菜譜\h修正、重啟、報錯……\h黑色石碑\h靈感1%+汗水99%=發(fā)明創(chuàng)造\h第4章喬布斯要的是速度更快\h替代IE瀏覽器\hPLT——軟件調(diào)試官\h優(yōu)化與速度底線\hSafari:大家都喜歡的名字\h喬布斯的演講\hSafari的成功,僥幸嗎?\h第5章困境中的掙扎\h離開蘋果,去谷歌?\h成為“簽字”人\h“海森堡”故障\h尋求幫助\h從“我”到“我們”\h第6章神秘的Purple項目\h錯誤決定\h智能手機開發(fā)團隊\h鍵盤德比大戰(zhàn)\h蘋果風(fēng)格\h第7章第二次“尤里卡時刻”\hNewton的噩夢\h“勝利之作”的難題\h一個按鍵只放一個字母\h自動糾錯功能\hQWERTY鍵盤與品位\h第8章收斂階段\h又出錯了\h自動糾錯詞庫\h圖像傾斜算法\h在壓力下倒計時\h初見iPhone\h最后的排查\h創(chuàng)意選擇的魔杖\h第9章革命性產(chǎn)品:iPhone\h融合理念\h圖標(biāo)的尺寸\h用戶界面順暢\h刪除建議欄\h匠心獨具\h算法與啟發(fā)的平衡\hiPhone之所以偉大……\h第10章最后一次做示例演示\h比爾做了個木頭iPhone\hiPad鍵盤示例演示\h自己做決定第1章向喬布斯做示例演示一陣震動聲傳來,我低頭看向握在手中的iPhone,在過去半小時里,我一直緊張地把它在兩手之間倒來倒去。而此刻,我終于收到了這條一直苦苦等待的信息:“現(xiàn)在可以過來了?!蔽伊⒓椿貜?fù):“好的?!币魂囌饎勇晜鱽?,我低頭看向握在手中的iPhone,在過去半小時里,我一直緊張地把它在兩手之間倒來倒去。而此刻,我終于收到了這條一直苦苦等待的信息:“現(xiàn)在可以過來了?!蔽伊⒓椿貜?fù):“好的?!蔽耶?dāng)時正在位于加利福尼亞州庫比蒂諾市的蘋果總部“無限循環(huán)”2號辦公樓的會議區(qū)等候通知,在收到信息前,我坐在椅子上,手肘撐在膝蓋上,身體前傾。盡管皮質(zhì)的椅子非常舒適,我的內(nèi)心依然惴惴不安。信息已送達(dá),我第一時間起身離開座椅,將iPhone放回口袋,快速穿過一條安靜的走廊,在一間被稱為密室的會議室門口駐足。這扇門被打開之后,我將向史蒂夫·喬布斯展示我最近更新的示例程序。史蒂夫可以預(yù)言未來2009年夏末,我正在為當(dāng)時尚未命名的一款平板電腦開發(fā)軟件原型。兩年多以前,蘋果正式推出了iPhone,正如它一經(jīng)問世便俘獲了電子產(chǎn)品發(fā)燒友的目光一樣,iPhone不斷地在大眾市場上攻城略地,銷售額的增長氣勢如虹?,F(xiàn)在,新的任務(wù)——為這一劃時代產(chǎn)品的后續(xù)升級產(chǎn)品提供軟件支持——又落在我們iOS軟件開發(fā)團隊的身上。其實,我本人從2005年開始就參與了iPhone的研發(fā),在此期間我經(jīng)歷了重重磨難,最終柳暗花明,這些經(jīng)歷我會在第6章中與大家分享,我當(dāng)時的職責(zé)是開發(fā)鍵盤操作軟件,該項課題的重中之重正是我負(fù)責(zé)的自動糾錯功能,這一功能可以將你輸入的zhen’qur自動糾正為zheng’que。在iPhone的研發(fā)過程中,我們很慎重地將鍵盤操作軟件認(rèn)定為一個科研課題。當(dāng)著手開發(fā)iPhone的觸屏操作系統(tǒng)時,我們根本不知道在一片小小的觸摸感應(yīng)玻璃上打字是否具備技術(shù)上的可行性,也就是說,我們所做的一切很可能是徒勞的。盡管今天虛擬鍵盤已隨處可見,但當(dāng)時以黑莓為代表的主流智能手機都配備具有真實擊打觸感的巧克力鍵盤,而iPhone要配備的是對指尖觸摸毫無反饋的極小的虛擬按鍵。因此,有效的自動糾錯功能十分重要,我自始至終都在擔(dān)心自己撰寫的糾錯代碼會讓iPhone成為科技圈的又一個笑柄。沒有一個蘋果員工想重蹈Newton(蘋果公司于20世紀(jì)90年代推出的個人數(shù)字助理產(chǎn)品)的覆轍,這個在20世紀(jì)90年代曾被蘋果寄予厚望的PDA(個人數(shù)字助理)產(chǎn)品在問世后慘遭滑鐵盧,一蹶不振后再無東山再起之日,究其原因,有一大部分要歸咎于乏善可陳的文字輸入系統(tǒng),Newton未能像它曾被期待的那樣成為普羅大眾不可或缺的數(shù)碼伙伴。蘋果公司無處不在的保密制度使我的開發(fā)任務(wù)更加復(fù)雜,“Purple”(紫色)是iPhone項目在研發(fā)時的內(nèi)部代碼,與Purple相關(guān)的所有細(xì)節(jié)均受到了必要的信息保護。2007年1月,在史蒂夫的公開演講前,幾乎沒有人有機會試用Purple,甚至不能看一眼Purple的操作系統(tǒng),所以我的鍵盤項目被視為一個真正的科研課題,在面向消費者之前,我只能在很少的內(nèi)部使用者口中獲得極其有限的反饋信息,這幾乎相當(dāng)于在iPhone上市后才開始在大范圍人群中做大規(guī)模的使用試驗。也許你現(xiàn)在能夠理解我的緊張了。站在“密室”門口,我無暇回顧由iPhone緊張的開發(fā)周期帶來的壓力,我的注意力集中于當(dāng)下的任務(wù)——給史蒂夫做最新版本的示例程序演示。這個將在隨后被命名為iPad的平板電腦會使用與iPhone相同的操作系統(tǒng),但iPad的屏幕更大,這一變化會給鍵盤操作帶來一系列新挑戰(zhàn),我已經(jīng)做好了其中一個難題的解決方案,并將其展示出來。這樣的示例程序演示貫穿了整個蘋果軟件的開發(fā)過程,是一切開發(fā)工作的基礎(chǔ)。正如我現(xiàn)在正在講述的iPad軟件演示案例一樣,你會在本書里看到各種各樣的示例程序演示的故事。在開發(fā)Purple智能手機的過程中,我從未向史蒂夫做過示例演示——在組織架構(gòu)里級別更高的人會承擔(dān)這項任務(wù)。顯然,虛擬鍵盤在iPhone上的成功運用提升了我在公司內(nèi)部的地位,盡管我的上級并未明說,但在我的能力被事實證明后,他們邀請我與史蒂夫見面的舉動使我確信,正是這一功勞讓我獲得了當(dāng)面向這位大名鼎鼎的首席執(zhí)行官史蒂夫·喬布斯匯報的資格。這是我第二次向史蒂夫做示例演示——第一次發(fā)生在短短幾個星期之前,當(dāng)時我向他展示了為iPhone4設(shè)計的準(zhǔn)備在高分辨率視網(wǎng)膜屏幕上顯示的字體選項,那次演示非常順利,我的再次受邀讓我認(rèn)為自己已經(jīng)進(jìn)入需要定期向史蒂夫演示示例程序的核心開發(fā)團隊,我并不清楚有資格進(jìn)入這個小圈子的人到底有多少,但我相信人數(shù)并不多,可能只有幾十。當(dāng)然,其中還有更核心的小圈子,因為當(dāng)我還站在走廊等待進(jìn)入密室的指示時,里面已經(jīng)有人與史蒂夫促膝長談了。史蒂夫是公司里所有圈子的中心。5年來,他兩次因身體原因休假,此時他剛剛結(jié)束第二次休假,回歸公司數(shù)月。在身體狀況允許時,他會親自做出關(guān)于產(chǎn)品的一切重要決定。不間斷地進(jìn)行示例評審就是他決定蘋果軟件的界面、觀感以及功能的最主要方式。作為程序員,我感覺為史蒂夫做演示就像參拜德爾斐神諭一樣,示例演示就是我提出問題,而史蒂夫的回復(fù)就是最終的答案。不過人們從神諭中得到的往往是令人困惑的隱喻,而從史蒂夫那里得到的則是直截了當(dāng)?shù)慕Y(jié)論和要求,他的回答始終明確而清晰,要么會批準(zhǔn)你的示例演示,要么會明確要求下一次他要看到完全不同的東西。盡管如此,“史蒂夫之謎”依然存在,無論你的工作成果多么完美,或者在他之前的初步審查中進(jìn)展得多么順利,你永遠(yuǎn)都不知道他會產(chǎn)生怎樣的反應(yīng)。有時,他會表達(dá)自己對一件事物的喜愛或憎惡,但話音未落便更改了結(jié)論;有時,這種想法上的改變會發(fā)生在一兩天之后;有時,一旦他的意見表達(dá)了出來,很多年都不會改變。史蒂夫的情緒也難以捉摸。在任何時候,他都可能因為自己不喜歡你的示例而對你大聲斥責(zé),沒有人能幸免于此——無論是與他朝夕相處的高管還是像我這樣默默無聞的程序員。這是向史蒂夫直接匯報必須付出的代價,你要么接受,要么干脆放棄面對面演示的機會。任何人要想在這輛極端情緒的過山車上堅持下來都不容易,的確有人會求饒。一位才能非常出眾且經(jīng)驗豐富的同事直接跟我說,他正是因為無法忍受史蒂夫在面對面會議中表現(xiàn)出的待人方式,才拒絕再次為史蒂夫當(dāng)面演示示例程序。盡管我的這位朋友對史蒂夫的脾氣頗有怨言,但他仍然尊重和欣賞史蒂夫?qū)Ξa(chǎn)品的品位和商業(yè)判斷。雖然史蒂夫的觀點和情緒很難預(yù)測,但他對產(chǎn)品的熱情是完全可以預(yù)測的。他希望蘋果的產(chǎn)品能做得很好,因此他堅持參與整個過程,通過他的評論來指導(dǎo)產(chǎn)品的發(fā)展。正因為這樣,我才等著給他看我的演示。他想看看我最近的進(jìn)展,然后用他的反饋和建議把工作推向他理想中的水平。毫無疑問,作為新產(chǎn)品線中用戶界面的重要元素,我們研發(fā)的平板電腦鍵盤必須得到史蒂夫的親自驗證和批準(zhǔn)。每一次評審時,他都會非常詳細(xì)地說明下一次他想要看到的成果,比如“在這兩個元素之間增加一點兒空間”,或者是“把這張圖表里面的綠色替換成藍(lán)色”,或者是“這些統(tǒng)統(tǒng)都不行,下次要給我更多的選擇”。更多時候,他試圖讓產(chǎn)品盡可能地直觀和簡潔,為此他愿意付出時間和努力,并愿意通過施加影響力來保證這一點。通過評審示例程序,提出具體的改進(jìn)要求,重審反復(fù)更新后的示例程序,給出最終的肯定意見,史蒂夫能夠?qū)a(chǎn)品變成他想要的樣子。就像傳說中的神諭一樣,史蒂夫可以預(yù)言未來。進(jìn)入密室一陣門把手轉(zhuǎn)動的聲音傳來,我朝密室的方向看去,門只開了一條縫,一絲光亮從密室的門縫中露出,照亮了昏暗的走廊。在我的眼睛適應(yīng)了光源后,我看到了iOS工程副總裁亨利·拉米雷斯那張微笑的面孔。亨利將門開到剛好足夠腦袋探出來的角度,即便到了這一刻,我還是沒能理解這個戲劇化的姿勢到底是什么意思。我們都知道,當(dāng)史蒂夫在密室里做示例評審時,匯報人需要靜悄悄地進(jìn)出。但現(xiàn)在不是解惑時間,我走向門口,心中感到一陣緊張。亨利的崗位職責(zé)要求他既與史蒂夫等公司高層溝通,又與我這樣的程序員互動。他帶領(lǐng)的軟件工程師團隊既要為iPhone自帶的應(yīng)用軟件(信息、郵件、日歷、Safari瀏覽器等)負(fù)責(zé),又要向世界各地的程序開發(fā)者提供軟件開發(fā)工具包,使程序能夠在iOS應(yīng)用程序商店上架銷售。史蒂夫需要亨利去傳達(dá)示例評審會議的決定,亨利因其標(biāo)志性的自信和謙虛而勝任這個角色。他蓄了滿臉的胡須并經(jīng)常打理,在蘋果工作了20多年,他的胡須變得不再烏黑,像是撒上了鹽和胡椒粉。他是一位口音很重的法國人,有時我僅能通過上下文來理解他表達(dá)的意思,他的有些英文單詞的發(fā)音聽起來很奇怪。我感覺最有趣的是build(構(gòu)建)這個單詞,亨利在說這一通用的編程術(shù)語時,我聽到的總是bweeld。幾星期前,亨利再次成為我的直接上司,之所以說“再次”,是因為幾年前,在iPhone項目尚未開展的時候,我曾向他匯報工作,當(dāng)然那時我們倆的職位都與現(xiàn)在不同。一個很偶然的機會,我親眼見證了亨利在強壓狀態(tài)下仍能保持冷靜和耐心的能力,這個小插曲將在后面與各位分享。這么多年來,我一次又一次地感受著他的冷靜。在向史蒂夫做示例演示的過程中,無論氣氛多么緊張,他都始終保持鎮(zhèn)定并一直微笑。亨利是程序員團隊和公司里最難取悅的領(lǐng)導(dǎo)者之間的緩沖地帶,他將高層指示中難以入耳的苛責(zé)進(jìn)行過濾,然后傳達(dá)至每位程序員。如果他對我說“我剛聽說史蒂夫發(fā)現(xiàn)了一個系統(tǒng)漏洞”,那么史蒂夫的原話可能是“今天的版本里面大寫鎖定鍵真不好用,難道這群蠢貨沒有測試過這個鍵盤嗎?”每當(dāng)亨利篩選出有用的信息并將其傳達(dá)給我們的時候,我總會對他能夠順利搞定所有事情的信心敬佩不已,他似乎很清楚,我一定會立刻放下手頭的所有事情第一時間修復(fù)漏洞,而給我施加壓力并無益于問題的解決。亨利的行事方式使得他成為有點兒不近人情的首席執(zhí)行官的互補搭檔,他就像一陣保護我們不被史蒂夫的狂熱灼傷的涼風(fēng),默默守護在我們身邊?!斑M(jìn)來吧。”亨利笑著說,他將門開得稍大一點兒以便我進(jìn)入。我邁開步子穿過走廊,深深地呼吸。示例評審正在進(jìn)行,或者說我認(rèn)為它正在進(jìn)行。進(jìn)入密室后一向右轉(zhuǎn),我便看到了史蒂夫,他正在用手機通話?!班?,聽起來不錯。”史蒂夫倚靠在一張辦公椅上說,他的目光透過圓框鏡片直視天花板,iPhone緊貼耳邊,身上穿的黑色高領(lǐng)毛衣的袖子被擼到前臂的中部,兩腿在身前交叉,牛仔褲的褲腳移到了小腿處,露出了穿在灰色跑鞋里面的黑色襪子。這是史蒂夫的標(biāo)準(zhǔn)著裝。他看起來并未因為疾病而精力不足,此時此刻,他正全神貫注于這次很重要的通話。我愣了一兩秒,但迅速意識到自己應(yīng)該靜靜地站在原地,不要試圖引起史蒂夫的注意。我被叫進(jìn)來繼續(xù)等待。被迫聽一位有權(quán)勢的人物通話可不是一件舒服的事情,我自然也不愿意表現(xiàn)得像在偷聽一樣,我把手放在身后打量起這間會議室。密室大概30英尺長,15英尺寬,主色調(diào)為褐色,沒有窗戶。會議室的中間對著門口的方向放著一個沙發(fā),將整個房間的空間分成兩部分。一對8英尺長的桌子挨著靠門這邊的墻平行擺放,這里形成了一個做示例演示時可以利用的空間。沙發(fā)和兩張長桌首尾相接形成了U字形,史蒂夫的辦公椅剛好位于字母的一個拐角處,我站在門口靠近U字的開口處朝右看去,在離我最近的一張桌子上,放著iPad原型機,我即將演示的最新示例程序已經(jīng)被下載到原型機里了。我再度環(huán)視整間會議室,無論多少次走進(jìn)這間屋子,我都有相同的感覺。房間內(nèi)的裝潢有些破舊,根本不像高度重視設(shè)計品位的蘋果公司使用的會議室。離我較遠(yuǎn)的那張桌子上只擺放了一臺iMac,它身后的墻上被訂上了一張歪歪扭扭的MacOSX10.2的無框海報,這個版本的昵稱是美洲虎。如果說這張破爛的海報本身不能體現(xiàn)它的悠久歷史的話,那么海報中以皮毛和斑點做底、有襯線的“X”則讓人很清楚這張海報已經(jīng)有些年頭了——這個版本的軟件已經(jīng)推出若干年了。從那以后,這個“X”的標(biāo)志通過不斷更新被逐漸改變?yōu)榻饘倩疑?,最后又變成了無襯線的字體。這些桌子倒是因不起眼而引人注目,它們可不是你想象中的蘋果零售商店里用來陳列商品的同款淺色桌子。這些桌子是灰色的,桌面用福米卡塑料貼面,是標(biāo)準(zhǔn)的辦公家具。在我左邊的那面墻,上至天花板下至踢腳線都被白板占據(jù),白板上面沾滿了筆跡,這些筆跡又在反復(fù)的擦拭中被抹掉了。接下來,映入我眼簾的是那張沙發(fā),沙發(fā)并不干凈,坐在上面就好像置身于大學(xué)聯(lián)誼會里面滿是污穢的沙發(fā)墊上一樣。在沙發(fā)后面的那一半空間里,有幾個豆袋椅被遺棄在角落里,像是對早期硅谷的致敬。整體來說,密室就像一個沒有什么特別之處的書房。但這是一個非常重要的房間,經(jīng)常被史蒂夫用來評審示例程序,只是它本身并非那么引人注目。觀察這間會議室花了我一兩分鐘的時間,但是史蒂夫仍沒有顯示出中斷通話的跡象。我下意識地覺得有些尷尬,因為我是整個屋子里唯一站著的人,亨利坐回沙發(fā)上之后,那里已經(jīng)沒有多余的空間了,而史蒂夫占據(jù)了唯一的一把椅子??雌饋?,在史蒂夫結(jié)束通話以前,我只能保持現(xiàn)在的狀態(tài)。某一刻,我看向亨利,他向我挑了挑眉毛,聳了聳肩,好像在說“我也不知道究竟還要等多久”。我不知道亨利為什么要在這種情況下讓我進(jìn)來,但還是那句話,這不是答疑解惑的時候。1英尺≈0.3048米?!幷咦⑦@里的Ⅹ表示羅馬數(shù)字,蘋果曾聲明這個產(chǎn)品正確的名字是“MacO-S10”。這個來自公司旗艦產(chǎn)品的命名規(guī)則在多年后被用到了iPhoneⅩ上。很多人把Ⅹ當(dāng)作英文字母x來發(fā)音,而不是數(shù)字10,不過誰會指責(zé)消費者呢?蘋果之核與亨利一起坐在沙發(fā)上的人組成了軟件開發(fā)的真正的核心圈子,版本評審時,他們是僅有的史蒂夫希望坐在自己身邊給予建議、提供咨詢和進(jìn)行思維碰撞的人。他們參與了iPhone的評審過程,現(xiàn)在又輪到了iPad。這里的每一個人都通過不斷提出有助于改進(jìn)產(chǎn)品的反饋意見,成功地獲得并坐穩(wěn)了現(xiàn)在的位置。在亨利左邊就座的是他的上級斯科特·福斯特爾——時任iOS軟件工程高級副總裁,直接向史蒂夫匯報。正是斯科特給了我在密室直接向史蒂夫匯報的機會,他希望我在匯報時盡量簡潔,突出重點。盡管他并未直接提出這樣的要求,但通過他作為最高級別管理人員主持的早期評審會議中的成功案例和失敗案例,我已經(jīng)很清楚自己需要怎么做了。在密室中進(jìn)行的評審顯然重要得多,因為他的老板就座在會議室里。斯科特是我的上級和支持者,我在演示過程中的表現(xiàn)將對他產(chǎn)生重要影響。鑒于我仍處于進(jìn)入核心圈子的考察階段,我猜測,只要搞砸一次,我可能就會被斯科特從這個小圈子中除名。盡管他從未明說,但據(jù)我所知,只要得到一個類似于“蠢貨”的評論,我就永遠(yuǎn)不會回到這里了。斯科特的地位并非岌岌可危,他與史蒂夫的關(guān)系十分穩(wěn)固,他們的合作關(guān)系可以追溯到NeXT時期,NeXT是史蒂夫1985年被蘋果解雇后獨立創(chuàng)辦的公司。自1996年蘋果收購NeXT以來,史蒂夫和斯科特就開始在軟件方面緊密合作了。我認(rèn)為,史蒂夫非常重視斯科特在將新技術(shù)集成于成熟軟件產(chǎn)品方面的想象力,斯科特很擅長新技術(shù)和成熟軟件產(chǎn)品的結(jié)合。如果程序員告訴斯科特,一個正在開發(fā)的應(yīng)用于觸屏系統(tǒng)的軟件可以使系統(tǒng)準(zhǔn)確區(qū)分快速滑動和緩慢平移,那么他會立刻構(gòu)想出一個用戶使用場景,手指在列表的某一行(比如收件箱里的一封郵件)上輕輕滑動,就可以將其刪除。我們在蘋果創(chuàng)造出來的軟件就源于這種細(xì)節(jié)的一次次積累。史蒂夫看中斯科特,不僅因為他可以自己做出這些細(xì)節(jié)的創(chuàng)新,更在于他可以創(chuàng)建和領(lǐng)導(dǎo)團隊將這一過程不斷規(guī)?;瘡?fù)制。這是史蒂夫心目中的蘋果使命的一部分,蘋果產(chǎn)品開發(fā)的最顯著特點是:將科技與人文融合,利用最先進(jìn)的軟件和硬件,使設(shè)計和文化的元素融入其中,這樣創(chuàng)造出來的產(chǎn)品和功能會非常有用,能讓人們的日常生活充滿樂趣。斯科特之所以能夠坐到現(xiàn)在的位置,是因為他可以將科技與人的連接做得無人能出其右,并且他似乎可以輕而易舉地做到這一點,完全不用停頓,也不用清嗓子,就能形成源源不斷的賺錢效應(yīng)。他的機敏有時會令人緊張。我發(fā)現(xiàn),斯科特總是能讓我意識到自己需要講得更快一些,這樣他才不會打斷我的發(fā)言。坐在斯科特旁邊的是他手下的另一位高級經(jīng)理格雷格·克里斯蒂,他是人機界面團隊的負(fù)責(zé)人。人機界面團隊中的軟件設(shè)計工程師決定了iOS和Mac軟件及服務(wù)產(chǎn)品所呈現(xiàn)的視覺、體驗,以及系統(tǒng)功能背后的邏輯。我們在提到格雷格的團隊時會使用簡稱HI團隊,作為HI團隊負(fù)責(zé)人,格雷格為我們應(yīng)用程序和用戶界面的設(shè)計拓展了廣度和深度。格雷格是一個身著法蘭絨襯衫、有吸煙習(xí)慣的紐約人,他像一本活的百科全書,熟稔計算機技術(shù)的發(fā)展歷史,對模擬硬件和數(shù)字硬件的知識如數(shù)家珍,并且對易使用軟件的開發(fā)有著與生俱來的第六感。幾年前,在開發(fā)iPhone鍵盤的過程中,格雷格曾給我提供了至關(guān)重要的建議。當(dāng)我被難題困住而感到非常絕望的時候,他直截了當(dāng)?shù)匾笪医鉀Q一個我一直以來都在回避的問題——要讓每一個按鍵都變得比指尖還要小,并且在現(xiàn)有自動糾錯代碼的基礎(chǔ)上做必要的改進(jìn)。格雷格經(jīng)常能夠洞察到某些復(fù)雜的改進(jìn)路徑可能才是提高產(chǎn)品易用性的最優(yōu)方式;他從來都不是一個容易被糊弄的人。打個比方,他像獵人一樣繞著捕熊器巡視,捕捉每一個因懶惰而試圖用借口逃脫責(zé)任的人。如果你想用一個粗制濫造的示例程序蒙混過關(guān),那么等待你的必然是格雷格尖銳的駁斥。他在公司里并不是很受歡迎,但是,對那些嚴(yán)格要求自己且勤勉盡責(zé)的人,他絕對會提供毫無保留的支持。在沙發(fā)最右側(cè)就座的是巴斯·奧爾丁,這個位置離史蒂夫很近,近到史蒂夫伸出腿就可以踢到他。巴斯是HI團隊里的一位設(shè)計師,他在創(chuàng)建圖解、動畫以及示例演示方面有著天才般的造詣,他的嫻熟技藝對iOS設(shè)備最終呈現(xiàn)出來的觀感起到了重要作用。當(dāng)我們要解決在沒有鼠標(biāo)或方向鍵的情況下上下移動一個項目列表的問題時,巴斯創(chuàng)造了“慣性滾動”,即在用戶滑動屏幕時,列表隨之滾動,用戶反復(fù)滑動屏幕,列表滾動速度加快,用戶停止滑動后,列表會逐漸降低滾動速度直至停止。如果滾動到頁面底部,列表就會反彈。如今,我們所有人都覺得這種方式是理所應(yīng)當(dāng)?shù)?,只是因為巴斯的解決方案完美地呈現(xiàn)了我們心目中的這種交互應(yīng)有的樣子。巴斯個子很高,很瘦,他的短發(fā)一根一根地豎立在頭頂。巴斯習(xí)慣于以一聲“哈哈”作為一句話的結(jié)尾,好像你和他正在分享同一個笑話。巴斯是史蒂夫最欣賞的人之一,也是我最喜歡的人之一。我很喜歡與他共事,即將向史蒂夫演示的示例程序就是我們最新的合作成果。史蒂夫的通話仍在繼續(xù),我再次看向這些坐在沙發(fā)上的人,他們的表情和姿勢讓我意識到自己并不是這間會議室里唯一想要避嫌的人。這個場景看起來有些離奇,而且似乎帶著一點兒夢幻的色彩。我的目光又落在了史蒂夫身后演示桌上的iPad上,它依然靜靜地躺在那里,不會憑空消失,但是我開始擔(dān)心起來:它的電池充滿了嗎?這個夢幻的場景會不會變成一場夢魘?簡潔是靈魂這次鍵盤方案示例演示的工作實際上從一個月以前——我被提升為iPhone軟件首席工程師(見圖1-1)之后不久——就開始了。圖1-1我的工作名片這份新工作的內(nèi)容是比較開放的,我的任務(wù)是為優(yōu)化現(xiàn)有軟件去開發(fā)和研究新項目。在我苦思冥想要怎么開展工作時,HI工作室成為我每天都要拜訪的地方。一天,我放下手頭的工作去找巴斯,與平時一樣,他正在做一件很酷的事情。他用AdobeDirector(多媒體項目的集成開發(fā)軟件)制作了一份示例程序,即便在2009年,這個軟件也已經(jīng)是老古董了。多媒體出版業(yè)在20世紀(jì)90年代曾大規(guī)模地使用Director軟件制作可以用光盤播放的內(nèi)容,以及一些你可以經(jīng)常在購物中心看到的供顧客查詢某家鞋店或美食中心的互動內(nèi)容。此后,F(xiàn)lash動畫、網(wǎng)絡(luò)以及移動計算技術(shù)的興起讓這款軟件逐漸被人們遺忘,但是巴斯很喜歡這個軟件,主要原因是Director軟件中面向?qū)ο蟮恼Z言是Lingo語言,而他本人精通Lingo語言,因此他可以利用Director軟件,用簡單的圖片、動畫和幾行Lingo語言代碼,制作出表面上看起來跟Mac計算機和iPhone的交互界面完全相同的示例程序。盡管他制作出的示例程序并非消費者使用的“真”軟件,但巴斯可以利用Director軟件在很短的時間內(nèi)呈現(xiàn)出類似于真實軟件的效果以供開發(fā)者參考。當(dāng)巴斯又開始用Director軟件進(jìn)行創(chuàng)作時,我站在他身后觀察,在他的Mac計算機屏幕上,我看到了一個似乎很像拉長的iPhone鍵盤的東西。背景、按鍵以及字母顏色都一樣,但是鍵盤的整體形狀比iPhone鍵盤更扁更長。巴斯對我說這是他設(shè)想的iPad鍵盤。他做這個示例程序是為了測試一些參數(shù)的變化。在鍵盤的邊緣部分,巴斯做了一套屏幕控制鍵,當(dāng)他按下這些按鈕并滑動的時候,演示界面上的鍵盤背景、按鍵以及字母開始發(fā)生變化。他讓按鍵時而變大,時而變小,他在淺色按鍵深色字母和深色按鍵淺色字母之間來回切換,他不斷地調(diào)整空格鍵、刪除鍵以及回車鍵的形狀,隨著這幾個按鍵的變化,其他按鍵也隨之調(diào)整形狀以填補空白。每一個方案都配有一個精心制作的動畫,并標(biāo)示了改動的部分。巴斯在給我演示每一個方案時,都會簡短地介紹該種方案的可行性和實用性。暫且不說屏幕上優(yōu)美的畫面簡潔而完美地詮釋了他的想法,僅是鍵盤的長寬比和布局就給我留下了深刻的印象。與我們在iPhone上應(yīng)用的鍵盤相比,他對iPad觸屏鍵盤的構(gòu)想更像是臺式機或者筆記本電腦上的鍵盤:標(biāo)點符號鍵和shift鍵的位置與它們在標(biāo)準(zhǔn)鍵盤上的位置相同,在鍵盤最上方的數(shù)字鍵上,同時顯示了我們熟悉的配對字符,比如,!和1在同一個按鍵上,@和2在同一個按鍵上,以此類推。幾年前,巴斯和我合作設(shè)計了iPhone鍵盤,我們受限于iPhone的小尺寸屏幕,一直在苦思冥想。經(jīng)過很多次試驗后,我們從主鍵盤上移走了盡可能多的按鍵,以保證有足夠的空間使經(jīng)常使用的字母按鍵盡可能放大。即便是這樣,一個普通大小的手指依然有可能同時覆蓋兩個甚至三個字母按鍵。在最終版本的設(shè)計稿中,我們將標(biāo)點符號鍵和數(shù)字鍵放置在單獨的界面里,用戶需要在主鍵盤界面中點擊“.?123”這個按鍵進(jìn)行切換。我們擔(dān)心用戶會抱怨或者對這個不便利的設(shè)置感到憤怒,但結(jié)果是人們快速且平靜地接受并適應(yīng)了這樣的變化。巴斯在向我逐一展示他為iPad設(shè)計的各種鍵盤方案時說,他想要在iPad大屏幕上配置一個更傳統(tǒng)的鍵盤布局,就像他桌上的Mac計算機鍵盤一樣。在我們聊天的過程中,巴斯從未停止手中的動作,他不停地移動滑動鍵和各種按鈕,屏幕上的示例程序隨之在不同的方案之間轉(zhuǎn)換,這些方案都是基于平板電腦有著更大的屏幕從而可以在主鍵盤排布更多按鍵這個主題而設(shè)計的。巴斯給自己建造了一個鍵盤樂園,他的熱情極具感染力,當(dāng)他停下手中的動作,轉(zhuǎn)過頭來看我時,我臉上露出了抑制不住的笑容。我回到辦公室,反復(fù)回想巴斯展示給我的示例程序,我在腦海中想象著這個鍵盤在我桌子上的iPad原型機里運行,而不是在他的Mac計算機上運行的樣子,讓我印象最深刻的就是巴斯關(guān)于增加更多按鍵的內(nèi)容。這個方案看起來是很合理的,尤其是在我們已經(jīng)有了足夠的屏幕空間,可以使用更多按鍵的時候。我認(rèn)為人們可能更喜歡直接在主鍵盤上尋找到句號和逗號,而不需要按“.?123”按鍵進(jìn)行轉(zhuǎn)換。我的目光在iPad原型機的屏幕和連接在Mac計算機上的鍵盤之間來回切換,我突然萌生出一個想法。我拿起iPad將其橫置在Mac鍵盤的上方,我發(fā)現(xiàn)iPad屏幕長邊的長度與鍵盤字母第一排的長度幾乎相同,這讓我意識到鍵盤第一排的10個字母“QWERTYUIOP”剛好可以按照原比例被直接復(fù)制到iPad虛擬鍵盤上。這樣一來,在字母這排的上方就沒有空間放數(shù)字了,但這樣的設(shè)計可能也無傷大雅,因為iPhone的鍵盤排列就是這樣的,只不過在更大的iPad屏幕上,這些按鍵的尺寸可以變得與Mac鍵盤相同。巴斯希望將Mac鍵盤完全復(fù)制到iPad上,而我的思路跟他的方案完全不同?,F(xiàn)在,我們擁有了兩個有趣的想法。我的方案能提供更便于打字的大按鍵,但這樣用戶就需要在其他界面尋找數(shù)字和標(biāo)點符號;巴斯則希望用戶能在主鍵盤上直接敲擊數(shù)字和鍵盤,但是每一個按鍵都會變得更小。我決定自己動手做一個示例程序來模擬這兩種方案的效果。在我升職的幾周前,我一直負(fù)責(zé)鍵盤代碼的日常維護工作,因此我十分熟悉鍵盤系統(tǒng)的軟件,我可以在幾天之內(nèi)寫出兩套鍵盤方案,一套是巴斯的“更多按鍵”方案,還有一套是我設(shè)想的“更大按鍵”方案。用這套代碼寫出的示例程序比巴斯用Director軟件做出來的更實用,因為巴斯提供的示例僅僅是用圖片和動畫模擬的,而我的示例則是可以在任何iOS應(yīng)用中正常使用的“真實”鍵盤。我更深入地思考了一下,然后決定將“更大按鍵”方案的鍵盤布局盡可能地按照Mac鍵盤的尺寸呈現(xiàn),把它設(shè)計成每行按鍵交錯排布的樣式。如果我能夠模擬真實鍵盤的整體格局,也許Mac使用者會更習(xí)慣于使用iPad虛擬鍵盤。為了讓設(shè)計更加準(zhǔn)確,我必須做好測量工作。首先,我需要一把尺子。我把自己的抽屜翻了個底朝天,結(jié)果只找出了幾個舊的RAM芯片、一些圖釘以及若干iPhone原型機。我問了坐在旁邊的同事,他們投來疑惑的目光并以聳肩作為回答——一個程序員要測量什么東西?我翻遍了走廊上的辦公用品柜,仍舊沒有找到尺子。然后,我想起來,在距離總部辦公室約一英里的史蒂文森溪谷大道上,有一家塔吉特百貨商店。在開車去塔吉特百貨商店的路上,我一直想象我需要的尺子到底是什么樣子的。它應(yīng)該是一把給專業(yè)繪圖人員使用的漂亮的、堅固的、用金屬制成的尺子,是那種像是蘋果出品的精確測量儀器。然而,我并沒有在塔吉特百貨商店里面找到如此美好的尺子,唯一在售的是一種一英尺長的略帶黃綠色的淡藍(lán)色塑料尺。它看起來很廉價,事實上也確實很便宜。當(dāng)我發(fā)現(xiàn)我可以買一個相同顏色的塑料半圓量角器時,我還是把它們一起買下了。就這么決定了!帶著兩個新玩具(呃,應(yīng)該說是工具)回到蘋果辦公室后,我開始測量相關(guān)物品的尺寸,測量對象包括臺式機鍵盤及按鍵、筆記本電腦鍵盤及按鍵、iPhone屏幕及上面顯示的虛擬鍵盤按鍵,以及iPad屏幕。我想要建立一個關(guān)于這些鍵盤元素的數(shù)據(jù)庫,我需要一定的時間和精力來研究這些數(shù)據(jù),理清這些數(shù)據(jù)之間的聯(lián)系,建立一種直觀體驗。我把所有這些物件的尺寸和角度都記了下來,在AdobeIllustrator軟件里面制作了一些框架草圖,我將所有的草圖疊放起來,苦苦地思索。我開始為兩種鍵盤撰寫代碼,除了將最上方的功能鍵刪除以外,我完全依照筆記本電腦鍵盤的樣式來呈現(xiàn)巴斯的“更多按鍵”方案。至于我自己設(shè)想的“更大按鍵”方案,我參考iPhone鍵盤,但把delete鍵刪除了,同時添加了一個shift鍵。我又思考了更多細(xì)節(jié),并花了幾天時間完成了這個示例程序的代碼編寫。鑒于iOS中已經(jīng)有了一個用于切換語言的“地球”樣式的按鍵,我把這兩種方案視為兩種可切換的新“語言”。在完成這項工作后,我將成果展示給巴斯。他對我的示例程序報以和藹的微笑,這表明他很喜歡它。他還給出了一個建議,不要使用“地球”按鍵在兩種界面之間切換,畢竟我們不是在切換語言。他認(rèn)為我們應(yīng)該在空格鍵旁邊增加一個新的鍵盤切換鍵,按一下就可以將鍵盤按鍵放大,再按一下就可以將按鍵縮小,以便于使用更多按鍵。巴斯說他會為縮放設(shè)計一個動畫,我認(rèn)為非常棒。我回到自己的辦公桌前,又開始了增加縮放鍵的工作。幾天后,我們把所有的事情都搞定了,現(xiàn)在是時候給更多人展示了(見圖1-2)。我們將這個鍵盤示例加入了下一次iPad整體評審的工作日程表中,亨利、格雷格以及斯科特將對眾多最新的示例程序進(jìn)行評審。在評審過程中,他們將決定每一個示例程序是否能夠被提交到史蒂夫面前,預(yù)判亨利的程序員團隊能否在日程表的剩余時間里完美地實現(xiàn)示例程序展示的功能,而且要保證低故障率。他們會非常謹(jǐn)慎地篩選提交給史蒂夫的示例程序,盡量回避史蒂夫可能非常喜歡,但我們還無法在產(chǎn)品中實現(xiàn)的那些東西。斯科特可不是在象牙塔里運營研發(fā)部門。能夠提交給史蒂夫的示例程序一定是我們確保能實現(xiàn)的,因此,未經(jīng)反復(fù)修改就通過評審的示例程序是極少見的——一般要經(jīng)歷數(shù)周的反復(fù)反饋和修改。圖1-2巴斯的“更多按鍵”方案和我的“更大按鍵”方案iPad鍵盤示例程序卻沒有如此費勁兒,我們輕松地通過了在史蒂夫之前的評審。這主要歸功于巴斯通過其自行設(shè)計的縮放動畫活靈活現(xiàn)地展示了我們的構(gòu)想。當(dāng)你按下iPad示例程序中的zoom(縮放)鍵時,當(dāng)前顯示的鍵盤(比如,我的)會切換至另外一個(他的),就像Keynote或者PowerPoint里面的“點擊進(jìn)入下一張幻燈片”一樣。一個鍵盤的圖像完全消失,屏幕上浮現(xiàn)出另一個鍵盤。巴斯還在動畫中增加了縮放比例,在切換過程中,被切換的鍵盤按鍵逐步縮放至即將浮現(xiàn)的鍵盤按鍵的大小,最初這個縮放過程比較緩慢,然后逐步加快,當(dāng)動畫停止的時候,你會有一種終于降落了的感覺。這種效果是非常精細(xì)的,整個動畫的切換過程還不到一秒,但是巴斯就是有辦法讓這些細(xì)節(jié)展示出來。當(dāng)觀察這個zoom鍵操控的動畫時,你會覺得這兩種鍵盤在做非常復(fù)雜的變形,但事實上它們并沒有。從一個工程師的視角來看,這是相當(dāng)難得的,因為這種簡單的設(shè)計意味著我們僅用幾個小時就可以將這個動畫的程序代碼編寫出來,而且整體效果好得令人驚奇。這個動畫看起來并不像在桌面上做展示的幻燈片那樣從一張切換到下一張,當(dāng)你按下切換鍵時,整個過程讓你覺得當(dāng)前這個鍵盤自動變成了另外一個鍵盤。這種感覺是渾然一體的,就是那種讓蘋果軟件深入人心的不言自明的感覺。所有參加這次預(yù)評審的人都很喜歡鍵盤切換的概念。我們認(rèn)為用戶在使用新產(chǎn)品時會從這種復(fù)雜界面中受益,與iPhone相比,這是充分利用iPad大屏幕的絕佳方式。有些人會喜歡更多按鍵的布局,他們對完整的字母、數(shù)字以及標(biāo)點符號的布局有著天然的好感。還有一些人可能喜歡更大按鍵的布局,他們的手指對合乎常規(guī)的按鍵布局有更敏感的觸覺。這種可以切換的安排對兩類用戶都很友好。zoom鍵的存在讓用戶可以嘗試兩種新鍵盤,并可以隨時切換而無須在系統(tǒng)中專門設(shè)置鍵盤偏好,更何況,巴斯設(shè)計的動畫讓這一切看起來非常特別。斯科特批準(zhǔn)我們將該示例程序演示給史蒂夫看。1英里≈1.6093千米?!幷咦ⅰ笆ト恕钡牟脹Q“嗯,這一切聽起來都很不錯。”史蒂夫說,他的聲音打破了密室里的沉寂,“好的,我會給你打電話的?!彼恼Z調(diào)預(yù)示著通話即將結(jié)束,我們幾個人立刻回到現(xiàn)實。“再見?!笔返俜蜻呎f邊將iPhone從耳邊放回眼前,目光在屏幕上停留了片刻,按下了紅色的掛機按鈕。然后,他把iPhone放入了牛仔褲的前口袋,在椅子上起身坐直后,緩慢地轉(zhuǎn)向我。我們倆的目光在空中交匯。多年以來,很多人都在評論史蒂夫的非凡能力,無論他告訴你什么,無論那些東西聽起來多么難以置信,他都有能力讓你相信。這種現(xiàn)實扭曲力場已經(jīng)成為一個傳奇。但是,當(dāng)史蒂夫的目光鎖定我的那一刻,我卻感受到了相反的力量,現(xiàn)實扭曲力場的極性顛倒了。就像碰觸了一個燈光的開關(guān)一樣,史蒂夫開啟了嚴(yán)肅的氣場,這種氣場能隔絕所有的言不由衷,將一切虛假的偽裝清除殆盡。他的表情并非很明顯的不友好,但他一定很清楚,他目不轉(zhuǎn)睛的凝視可以讓處于我這個位置的人感到恐慌,我也確實被這種凝視影響了,以至有些害怕。我把他的神情看作不會讓我蒙混過關(guān)的信號,他已經(jīng)準(zhǔn)備好看我的示例程序了。斯科特站起來走到史蒂夫的椅子后面?!昂玫模屛覀冮_始示例演示吧。史蒂夫,這位是肯,他之前負(fù)責(zé)過iPhone鍵盤的項目,現(xiàn)在他有一些平板電腦鍵盤設(shè)計的示例程序要向你展示。”盡管就在幾周前,我已經(jīng)當(dāng)面向史蒂夫做過演示了,斯科特向史蒂夫介紹我的方式仍好像我們是第一次見面一樣。如果史蒂夫很喜歡我之前的工作或者在之前的示例評審時記住了我,那么情況就不會是這樣的,但他并沒有表現(xiàn)出任何一種跡象。斯科特走到iPad原型機前,并沒有從桌子上把它拿起,他按下home按鍵,當(dāng)屏幕被喚醒時,滑動手指以解鎖屏幕。史蒂夫仍然看著我。我接著斯科特對示例程序介紹的中斷處往下說:“是的,我們設(shè)計了兩種方案。一種是有更多的按鍵,就像筆記本電腦鍵盤那樣;另一種是有更大的按鍵,就像放大版本的iPhone鍵盤一樣。我們的想法是同時提供兩種選擇,通過zoom鍵在兩者之間進(jìn)行切換?!笔返俜蚓従彽剞D(zhuǎn)動他的座椅來到展示桌前,低下頭,他面前的iPad是橫置的,home鍵在整個平面的右側(cè)。屏幕上正在運行的是iPadNotes應(yīng)用的早期版本,插入點光標(biāo)正在一個空白的文檔上閃爍。屏幕底部當(dāng)前顯示的是巴斯設(shè)計的“更多按鍵”的鍵盤布局,它看起來和筆記本電腦鍵盤一模一樣,只不過按鍵比標(biāo)準(zhǔn)版本的略小。史蒂夫的目光掃視了整個iPad屏幕,他的頭部以極小的角度傾斜,在我看來,他應(yīng)該在從正面和側(cè)面嘗試觀察整個鍵盤界面的每一處細(xì)節(jié)。史蒂夫研究了很久之后,伸出手按下了zoom鍵,開啟了巴斯制作的精美動畫,鍵盤隨之切換成我設(shè)計的“更大按鍵”布局。沒有任何反饋,也沒有任何可以猜出他想法的線索。史蒂夫就像一個正在第一次查看牌面的高額賭注撲克牌玩家?,F(xiàn)在屏幕上顯示的是另一個鍵盤,史蒂夫又開始了他的研究。他花了足足30秒仔細(xì)觀察了屏幕上的所有細(xì)節(jié)。當(dāng)覺得滿意后,他再一次按下了zoom鍵,將“更多按鍵”的鍵盤布局呈現(xiàn)出來,跟示例演示剛開始時沒有什么區(qū)別。史蒂夫又開始研究,他的想法和感覺依然讓人捉摸不透。他再次按下zoom鍵,將界面切換至“更大按鍵”的布局,這一次,他簡單地瀏覽了一下,確認(rèn)已經(jīng)看過全部兩種設(shè)計,而這兩種設(shè)計要等待他來選擇。他轉(zhuǎn)過來徑直看向我(見圖1-3)?!拔覀冎恍枰渲幸环N,對吧?”這不是我想要的回答。我想我當(dāng)時可能連吞咽這個動作都變得很困難。史蒂夫仍然在看著我,而我微微聳了聳肩,然后說:“是的……呃……我想是的?!笔返俜蛏陨源蛄苛宋乙幌?,然后問道:“你覺得我們應(yīng)該用哪一個?”一個非常簡單的問題,需要我而且僅需要我來回答。史蒂夫的椅子和身體并沒有轉(zhuǎn)向屋子中的任何人。這是我的示例程序,他希望我來回答。然后有些事情就這么自然而然地發(fā)生了。我站在那里,史蒂夫的目光一直停留在我身上,等待我回復(fù)他的問題。我突然意識到我有自己的觀點,應(yīng)該知道如何回答。“是這樣的,我在過去這些天里一直在用示例程序里的鍵盤,我已經(jīng)開始喜歡‘更大按鍵’這個布局的鍵盤了。我想,既然我可以習(xí)慣通過觸感打字,相信其他人也可以,自動糾錯功能可以幫上大忙?!眻D1-3評審示例程序時的史蒂夫史蒂夫繼續(xù)看著我,他在思考我的答案。他從沒有將眼神從我身上轉(zhuǎn)移到其他人身上或者其他地方,完全沉浸在當(dāng)下。就在這里,他認(rèn)真地思考我關(guān)于下一個蘋果重磅產(chǎn)品的想法。這是令人激動的時刻。他想了幾秒鐘,然后宣布了他對這次示例程序的最終決定。“好的,我們用‘更大按鍵’這個方案?!本瓦@樣,蘋果的“圣人”發(fā)話了,關(guān)于軟件設(shè)計的預(yù)言被大家知曉了,話音落定的同時,史蒂夫輕輕地點了點頭。我的示例演示到此結(jié)束。格雷格、亨利和巴斯從沙發(fā)上站起來,他們用“干得好”和“演示得不錯”等簡短的句子表達(dá)了鼓勵。我又變回了那個天生內(nèi)向的人,在剛剛接受了遠(yuǎn)超我日常最高限度的關(guān)注度后,我看向地面。這間屋子里面的緊張氣氛瞬間消散了。斯科特朝門口走了幾步,暗示我此時應(yīng)該離開以便他們進(jìn)行接下來的工作。我打開了“密室”的門,斯科特靜靜地等在我身后準(zhǔn)備關(guān)門,在我離開后他將繼續(xù)在“密室”里工作。我向走廊邁開步子,就在門被鎖上前,我聽到史蒂夫說“謝謝”。史蒂夫只說了四句話德爾斐神殿的入口處上方有一個碑文,上面寫著:“了解你自己?!彼诟嬲]即將步入神殿的提問者,你所尋求的答案可能就在自己的內(nèi)心深處。當(dāng)我走出“密室”時,我對自己剛才的表現(xiàn)非常滿意,我完全憑借自己的能力如實地回答了史蒂夫?qū)κ纠绦虻奶釂?。這只是在這次示例演示之后我回想這段經(jīng)歷時的最初感受,而此后,我思考了更多。史蒂夫問我自己的想法其實是一個測試。在看過我的示例程序后,他想確認(rèn)我是否能夠勝任把蘋果軟件做得更好這項工作。如果我沒有給出令人滿意的答案,那么他會向會議室中的其他人提問。在座的其他人都是通過不斷地經(jīng)歷類似的測試,以及持續(xù)交出優(yōu)秀的工作成果來坐穩(wěn)如今的位置的,他們成就了iPhone軟件的每一個細(xì)節(jié)。如果我希望自己能夠一直在密室中做示例演示,那么我只有不斷地為他建言獻(xiàn)策,并為公司做出卓越貢獻(xiàn),才能贏取未來的邀請函。當(dāng)然,在此之后我做到了。在整個職業(yè)生涯中,我給史蒂夫做過很多次示例演示。對我來說,這就是寫代碼和影響所寫的代碼的區(qū)別。在這次示例演示里,我的想法得以貫徹到產(chǎn)品中,在最終問世的iPad里,除了刪除掉zoom鍵之類的小細(xì)節(jié),真正的鍵盤與我在會議室中演示的示例程序完全相同。我通過了測試。密室中的決策和發(fā)布軟件之間的關(guān)系,也說明了在蘋果公司里示例程序?qū)ξ覀兊闹匾?。示例程序是將概念想法轉(zhuǎn)變?yōu)檐浖闹饕绞健_@些示例評審會議的設(shè)置展示了我們是如何將軟件打造得如此優(yōu)秀的。這句表述隱含了一個假設(shè),即蘋果把創(chuàng)造偉大軟件當(dāng)作最重要的目標(biāo)。我們做到了,而這一切直接來源于史蒂夫。他設(shè)立了公司的首要目標(biāo),無論是在公眾場合演講還是內(nèi)部交流,他都始終強調(diào)這一點:創(chuàng)造偉大的軟件是公司的核心任務(wù)。更重要的是,史蒂夫不僅在口頭上重視這一目標(biāo),還表現(xiàn)在行動上,因此軟件開發(fā)團隊源源不斷地制作示例程序,無論何時,只要有引人關(guān)注的新發(fā)現(xiàn),史蒂夫總能抽出時間參加示例評審,從而親眼見證“偉大產(chǎn)品的誕生”。他的參與使得整個項目一直保持不間斷的進(jìn)展和突破。我們只有把各種各樣的示例程序匯總,才會形成一個完整的產(chǎn)品,因此,在密室工作的5個人和喬布斯一起形成了一個對整個過程有著關(guān)鍵影響的小圈子——可以創(chuàng)造出一個獨立的首席執(zhí)行官級別示例程序的團隊。在這個小團隊中,我們擁有我們需要的一切。我是程序員,巴斯是設(shè)計師,亨利、格雷格和斯科特是編輯者。在合作過程中,有些角色是可以互相轉(zhuǎn)換的。巴斯有時會寫點兒代碼,他經(jīng)常在不需要程序員的幫助的情況下,獨立完成一個可以直接向史蒂夫演示的示例程序。在這次鍵盤示例程序開發(fā)中,我承擔(dān)了部分設(shè)計工作,自行增加了“更大按鍵”方案。在我把“地球”鍵作為兩種鍵盤的切換按鈕后,巴斯承擔(dān)了編輯工作,將其變更為zoom。決斷力自始至終都非常重要。在把方案提交給史蒂夫之前,斯科特是執(zhí)行主編,是那個“做決定的人”。蘋果公司的每一次示例評審都有一個決策者,這個人是唯一有權(quán)力決定一個示例程序是否通過或者宣告接下來要做什么的人。不過,即使是在正式評審開始前,比如在巴斯和我這類比較有經(jīng)驗的開發(fā)者組織的會議上,我們每個人都可以決定自己負(fù)責(zé)的工作,以及我們是否有意愿為一個全新的想法或者進(jìn)一步的改進(jìn)付出額外的努力和時間。一旦我們與團隊成員合作完成了為評審準(zhǔn)備的工作,或者與級別較低的同事完成了某項任務(wù),團隊主管就是那個決策者。這個決策環(huán)在任何管理層級中都適用。在特別忙碌的時期,亨利會負(fù)責(zé)所有iOS工程師的示例評審工作,此時,他就是斯科特之前的全權(quán)決策者。我們必須在示例程序能夠最終呈交給史蒂夫之前日復(fù)一日地制作海量的示例程序,這意味著我們的日常工作就是一座由示例程序、評審、決策構(gòu)成的金字塔,史蒂夫的最終裁決位于塔尖。判斷是否要通過一項工作成果并不是唯一的決策內(nèi)容。當(dāng)斯科特決定選擇把我,而不僅僅是我的示例程序呈交給史蒂夫評審時,他是在用自己的方式表達(dá)他的想法:相對于我的工作成果,我的個人想法同樣重要。斯科特在非常謹(jǐn)慎地拓寬史蒂夫身邊的小圈子,在我看來,他把誰帶入這個圈子也是史蒂夫評價他的重要標(biāo)準(zhǔn)。這種直接接觸首席執(zhí)行官的層級限制并不會與其他大公司有太多的區(qū)別,但是在蘋果,得到這種特權(quán)的方式與你在組織架構(gòu)中的級別沒有太大關(guān)系,而是與你做出更好的產(chǎn)品的能力息息相關(guān)。在我為iPhone原型機設(shè)計鍵盤的時代,雖然呈交給史蒂夫評審的示例程序是由我制作的,但我并沒有資格參與“密室”評審,當(dāng)時的我很難意識到雖然我寫出來的程序?qū)竞苤匾疫@個人是否參加評審并沒有太大意義。斯科特同樣扮演了一個示例程序守門人的角色,因為史蒂夫只會在已經(jīng)存在足夠優(yōu)質(zhì)成果的前提下推進(jìn)工作。斯科特很清楚他不能給史蒂夫展示不入流的示例程序,并在聲稱自己的團隊已經(jīng)竭盡全力的情況下期望它們能得以僥幸通過。這樣做除了能夠激怒史蒂夫并使自己喪失除史蒂夫以外最有話語權(quán)的決策地位之外,別無益處。斯科特同樣知道,他不能使用類似于在一群“老馬”中安插一匹“千里馬”的眾星拱月的策略,寄希望于史蒂夫因自己挑選出了勝利者而滿意。史蒂夫能夠很輕易地看穿這些小把戲。在我和巴斯的共同努力之下,我的示例程序達(dá)到了標(biāo)準(zhǔn)。我們的示例程序是建立在三個要素的基礎(chǔ)上的,這三個要素就是兩種不同布局的鍵盤和一個能把兩者結(jié)合起來的切換方式。在評審現(xiàn)場,我們發(fā)現(xiàn)我們的想法與史蒂夫的設(shè)想不謀而合。在這個示例演示中,史蒂夫看到了他喜歡的東西,但他認(rèn)為這個示例程序中存在一些毫無必要的復(fù)雜元素,所以他將多余部分剔除。這種拆解并不常見,但在情理之中。就連史蒂夫據(jù)以得出結(jié)論的討論環(huán)節(jié)都非常簡略。請注意斯科特是如何介紹我的示例程序的:他用寥寥數(shù)語向史蒂夫講述了接下來的工作內(nèi)容,引導(dǎo)他把注意力轉(zhuǎn)向我這里,并告訴他即將做演示的人是誰。接著,我又用最簡單而必要的詞語將史蒂夫的注意力吸引至需要他關(guān)注的地方。在此之后,史蒂夫認(rèn)真地看了軟件,問了我一個很精辟的問題,以確定鍵盤是否能變得更加簡潔。對簡潔的追求是有目的的。盡管史蒂夫已經(jīng)是一個高科技公司的首席執(zhí)行官,但他還是把自己當(dāng)作普通的消費者,而消費者根本不會在意軟件行業(yè)內(nèi)部的諸多復(fù)雜細(xì)節(jié)。如今,人們已經(jīng)被日常煩瑣的事務(wù)困擾,他不希望蘋果的軟件給消費者增加額外的負(fù)擔(dān)。想象一個場景,主角是每天忙于日常生活的母親,這一天,她心中記掛著她16歲的兒子,她的兒子在寄宿高中上學(xué),十分想家,卻只能自己照顧自己。這位母親奔跑在上班的路上,由于路上交通堵塞,她很有可能會遲到,她有一份報告要在下午提交,而在趕往下一場會議的路上,她需要再回復(fù)一封郵件。史蒂夫認(rèn)為,如果她擁有一部沒有裝載那么多不實用的功能的手機,她的工作會做得很好。他相信將非必要的功能從手機里面清除將使人們?nèi)菀讓W(xué)會使用手機,也會給手機的日常使用帶來便利。他希望產(chǎn)品和軟件能自己說話,因為在大多數(shù)情況下,沒有人會站在一個首次體驗軟件的人的身后,指導(dǎo)他認(rèn)真地辨別每一個功能的作用。當(dāng)然,在蘋果零售店里,每位員工都做好了隨時回答問題的準(zhǔn)備,但是,如果消費者在看到軟件的時候就能立刻使用它,那不是更好嗎?史蒂夫通過示例評審來判斷每種功能是否符合這一基本使用標(biāo)準(zhǔn)。當(dāng)他給我明確的反饋,要我把其中一種鍵盤從iPad示例程序中刪除時,我覺得這帶來的影響絕不僅限于更加簡潔。這意味著我們可以取消巴斯設(shè)計的切換動畫,去掉zoom鍵,清除所有關(guān)于在不同情境下會出現(xiàn)何種鍵盤的困惑。比如,iOS需要記住你在Notes應(yīng)用里使用了“更大按鍵”鍵盤,在郵件應(yīng)用中使用了“更多按鍵”鍵盤;這些鍵盤的選擇應(yīng)該被存儲在哪些應(yīng)用場景里,而不需要被存儲在哪些場景里。這些問題變得更復(fù)雜且沒有意義,因為它們沒有簡單的答案。史蒂夫認(rèn)為,解決問題的最好方式就是避免提出這些問題。史蒂夫標(biāo)志性的決斷力滲透在蘋果的日常工作中。他選擇斯科特、格雷格、亨利和巴斯等人在他身邊工作,部分原因是這些人無須長時間思考便可以給出合理的決定。當(dāng)史蒂夫向我提問時,他在測試我的決斷力以及判斷我是否有能力將現(xiàn)有的示例程序改進(jìn)得更優(yōu)秀。會議室里面沒有人插話,因為史蒂夫只看向我一個人,回答問題最有效率的方式就是由我來開口。我回答了,他隨之結(jié)束了我的示例演示環(huán)節(jié)。一旦史蒂夫給出了他的決定,所有人就都知道再跟他爭辯肯定吃力不討好,這不是因為史蒂夫太固執(zhí)而無法接受相反的觀點,而是因為這樣做無異于在現(xiàn)有的方案上增加復(fù)雜的東西,這幾乎沒有勝算。如果斯科特、亨利、格雷格和巴斯不清楚該在什么時候保持沉默,那么他們不可能坐在密室的沙發(fā)上。巴斯從未抱怨過自己設(shè)計的切換動畫被刪除,見證很多優(yōu)秀的成果被砍掉也是他工作的一部分。示例評審這項工作流程也是由史蒂夫發(fā)起的,即使他不在,它也能成為我們在產(chǎn)品開發(fā)過程中使用的標(biāo)準(zhǔn)流程。就像在密室里一樣,整個軟件開發(fā)部門都盡可能地保證會議和團隊的規(guī)模足夠小,以保證工作效率,以及踐行“以最小的成本做最多的事情”這條原則。史蒂夫?qū)κ纠u審的頻繁要求催生了不計其數(shù)的示例程序,每一個示例都有其演示者和決策者。所有示例程序的存在使得整個軟件團隊始終聚焦在開發(fā)最優(yōu)秀的產(chǎn)品上。這些全都?xì)w功于史蒂夫。他在我離開前說出的那句“謝謝”向我表明,我的示例程序就是他想要的結(jié)果。這個會議是富有成效而且果斷的,這種模式是值得被記住和效仿的。每每回想起這次iPad示例演示,我的嘴角都忍不住上揚,史蒂夫在會議中僅僅說了四句話,卻教會了我太多道理。第2章初入蘋果蘋果的上級主管們正在焦急地等待我們的消息——一份簡介、一種進(jìn)步的跡象,或者任何可以說明我們?nèi)〉眠M(jìn)展的消息。很久之后我才知道,斯科特當(dāng)時已經(jīng)開始懷疑我們是否能勝任了,很慶幸當(dāng)時的我并不知道,因為在無法做出任何突破的一個月后,我自己已經(jīng)感受到了巨大的壓力。示例程序是我們在蘋果工作的重要工具和手段。我們用它來發(fā)掘現(xiàn)有概念的潛力,探索新概念,展示進(jìn)度,發(fā)起討論以及驅(qū)動產(chǎn)品決策。在剛就職蘋果公司的幾個星期內(nèi),我被一個精妙絕倫的示例程序震驚了,這是我第一次見到這家公司是如何制作軟件的。由此,我意識到并理解了示例程序可以在創(chuàng)意和技術(shù)工作中扮演多么重要的角色。鸚鵡螺沒有吹響如果是那樣,我的人生也將因此而變得不同。在加入蘋果以前,我在一家名字叫Eazel的創(chuàng)業(yè)公司工作,我們的目標(biāo)是開發(fā)一套簡單易用的操作系統(tǒng),這套系統(tǒng)可以作為蘋果和微軟系統(tǒng)之外另一個免費的選擇。Eazel的核心團隊成員是曾在20世紀(jì)80年代參與初代蘋果計算機開發(fā)的程序員,包括蘋果計算機的首位軟件經(jīng)理巴德·特里布爾以及軟件奇才安迪·赫茨菲爾德。安迪的圖像化用戶界面代碼,使得Mac計算機在當(dāng)時以文本模式進(jìn)行交互的主流計算機產(chǎn)品中脫穎而出。那些伙伴是我心目中的英雄,因此我決定加入其中與他們共事。他們設(shè)計的蘋果計算機軟件傳達(dá)出的優(yōu)雅和簡潔是促使我成為一名程序員的主要動力。創(chuàng)辦Eazel的想法來自安迪,他的創(chuàng)業(yè)念頭則來自推廣自由軟件的動力——安迪與斯托爾曼一樣,都是理想主義者。他通過開發(fā)文件和圖標(biāo)管理器使Linux成為微軟系統(tǒng)和蘋果系統(tǒng)真正意義上的競爭對手。安迪將他的項目命名為“鸚鵡螺”,它可以像文字處理器、制表軟件一樣幫助Eazel用戶尋找文件、閱讀郵件以及安排項目日程,也可以完成很多新奇的任務(wù),比如記錄一些數(shù)碼照片等。Eazel公司將鸚鵡螺加入GNOME計劃(一個致力于軟件自由化的松散聯(lián)盟,由個人和公司組成),參與GNOME計劃的成員將為我們正在開發(fā)的計算機系統(tǒng)提供其他軟件。要成為GNOME計劃的一部分,鸚鵡螺必須獲得GPL的許可,這對于作為商業(yè)實體的Eazel來說具有很重要的影響。鸚鵡螺進(jìn)入市場以后,用戶可以免費下載使用,因此公司必須找到其他賺錢方式。不出意外的話,這些方式包括開發(fā)可以向用戶收費的專業(yè)軟件,比如一套原機云服務(wù),它的功能包括為用戶提供軟件自動更新及在線文件儲存等服務(wù)。這些服務(wù)將由Eazel數(shù)據(jù)中心提供,用戶必須付費使用。這個想法是希望通過把免費的鸚鵡螺及其他免費軟件打包來吸引人們?yōu)镋azel的特有功能付費。當(dāng)時正處于互聯(lián)網(wǎng)創(chuàng)業(yè)的高潮階段,對Linux和自由軟件的熱情、充裕的風(fēng)險投資基金以及創(chuàng)始人與初代蘋果計算機的聯(lián)系等因素融合在一起,構(gòu)成了一幅美好的愿景,讓我相信Eazel會成為下一個改變世界的偉大公司。我們確實有過那樣的機會,但最終還是搞砸了。我們從未實現(xiàn)最初設(shè)定的任何一個崇高的目標(biāo)。失敗的原因有很多,但其中最大的敗筆應(yīng)該是我們沒有將軟件視為整體產(chǎn)品,而是將它們視為一組獨立的項目,我們從未找到整合這些零散軟件的方式。沒有什么事情是一帆風(fēng)順的。我們的軟件升級功能有很多故障,經(jīng)常在軟件升級的時候破壞程序。為鸚鵡螺與云服務(wù)建立連接的代碼也完全不起作用。鸚鵡螺團隊在與GNOME計劃成員合作時也屢屢遇到問題——GNOME這種松散的組織結(jié)構(gòu)和非營利導(dǎo)向,使得其成員不可能和我們一樣,追求利潤或者對合作保持高熱度,這也導(dǎo)致我們幾乎無法按照既定計劃實現(xiàn)上線目標(biāo)。種種挫折導(dǎo)致我們不斷地將上線時間延后。在我進(jìn)入公司幾個月之后,這些問題變得越來越難以避免,為了讓產(chǎn)品盡快成形,管理層開始向其他人求助。一個星期五的下午,我坐在公司小會議室里等著會見一位可能對我們有幫助的人。就在這個星期的前幾天,我發(fā)現(xiàn)隔壁的小屋子里貼了一張寫有“唐·莫爾頓”這個名字的紙,下周一這個叫“莫爾頓”的人即將成為鸚鵡螺項目的新主管,當(dāng)晚我在公司月度聚會上第一次見到了唐。他很快發(fā)現(xiàn)他的名字被寫錯了。他從我身邊經(jīng)過,徑直走向他的隔間,劃掉紙上潦草的筆跡,重新寫下“唐·梅爾頓”。唐是一位頗有街頭信譽(streetcred)的極客,因為他曾在公共廣播公司播出的《代碼奔騰》紀(jì)錄片中露過幾次面。這部紀(jì)錄片敘述了瀏覽器之戰(zhàn)的歷史——在網(wǎng)絡(luò)瀏覽器剛興起之時,網(wǎng)景和微軟兩家公司爭奪網(wǎng)絡(luò)瀏覽器的市場控制權(quán)。20世紀(jì)90年代,越來越多的人使用計算機上網(wǎng),微軟公司開始擔(dān)心計算機用戶習(xí)慣于使用當(dāng)下最流行的網(wǎng)景瀏覽器,從而使網(wǎng)景公司獲得更高的利潤和更大的市場影響力。微軟試圖通過把微軟操作系統(tǒng)和自己研發(fā)的IE瀏覽器進(jìn)行捆綁銷售來阻擋網(wǎng)景的進(jìn)攻,當(dāng)時微軟操作系統(tǒng)的市場占有率超過90%,微軟寄希望于在計算機預(yù)裝了瀏覽器的情況下,人們不會再向網(wǎng)景公司支付現(xiàn)金購買產(chǎn)品。突然間,網(wǎng)景如果想繼續(xù)在網(wǎng)絡(luò)瀏覽器這個自己一手創(chuàng)建的新領(lǐng)域站住腳,就必須使用全新的策略。作為反擊,網(wǎng)景決定公開其瀏覽器的源代碼,希望這種自由且可獲取的代碼能夠成為所有基于互聯(lián)網(wǎng)的應(yīng)用程序約定俗成的標(biāo)準(zhǔn)。如果可行,這種方式可能會帶來一些技術(shù)支持合約、咨詢協(xié)議以及其他不直接綁定瀏覽器的賺錢的業(yè)務(wù)。這種代碼開源的策略是受到自由軟件運動的啟發(fā)而產(chǎn)生的,但它并非理查德·斯托爾曼所認(rèn)同的方式。斯托爾曼希望代碼自由成為一種政治和社會福利,他理想中的軟件應(yīng)該是屬于自由國度的,而對于網(wǎng)景來說,代碼開源是一種挽救公司業(yè)績下滑的手段。這就像把源代碼變成了免費的啤酒,而真正的目的是通過舉辦啤酒狂歡節(jié)來贏利。歷史證明這種方式無濟于事,網(wǎng)景并沒有以一家獨立的公司的形式存活下來。網(wǎng)景徹底公開了瀏覽器的源代碼,并為其冠以新的名字——Mozilla(摩斯拉瀏覽器)。Mozilla的成功得益于我們的新任經(jīng)理唐的工作,在公開源代碼前,他負(fù)責(zé)將所有的“臟話”從源代碼中清除。網(wǎng)景必須在公開源代碼之前將“臟話”從中清除這件事情,也給我們提供了一窺軟件開發(fā)文化的窗口。即使是在我撰寫本書的時候,大多數(shù)程序員也都是一群剛從大學(xué)校園里走出來的年輕人,為了滿足不切實際的進(jìn)度要求,他們需要通過喝咖啡來支撐長時間的編程工作,在21世紀(jì)初,這種情況可能有過之而無不及。當(dāng)他們非常疲憊但時間緊迫時,他們的壞脾氣開始爆發(fā),不成熟的心智擊敗專業(yè)精神,技術(shù)層面或其他方面的紛爭開始出現(xiàn)在軟件中。使用駝峰式命名法時,程序員經(jīng)常會將若干個單詞集合成一個,一種具有代表性的不恰當(dāng)?shù)恼Z言可能是這樣編譯的:cleanUpBobsSh_tStormHeIsAF__kingTurdBlossom();由于擔(dān)心源代碼一旦公開,這些糟糕的語言就可能損害軟件的形象,網(wǎng)景公司的管理層發(fā)布了一項命令:代碼中所有的臟話都必須被清除。凈化代碼是一項重大任務(wù)。唐被指定執(zhí)行這一任務(wù),他說自己是最適合這項工作的人,因為他實在太喜歡說臟話了。唐找到并清除了所有的臟話,但是開放代碼并沒有挽救網(wǎng)景在瀏覽器之戰(zhàn)中的命運。網(wǎng)景輸?shù)袅诉@場戰(zhàn)爭。眼看網(wǎng)景就要失敗了,唐開始尋找新的工作機會。當(dāng)他加入Eazel時,軟件開發(fā)進(jìn)度的延遲并非我們面臨的唯一難題。公司的現(xiàn)金流也開始變得緊張起來,Eazel沒有產(chǎn)品可供出售,前一輪的融資資金也即將消耗殆盡。我們的高管忙于引入新的投資,最開始的一段時間,他們還會每隔幾周給員工更新一下融資進(jìn)度信息。后來他們變安靜了,太安靜了。讓我們快進(jìn)幾個月:由于沒有風(fēng)險投資者開出支票,在Eazel推出鸚鵡螺1.0的當(dāng)天,公司解雇了2/3的員工。唐和我屬于仍被保留在公司內(nèi)的一小群人,公司的高管一直在試圖出售公司,我們又繼續(xù)工作了3個月,直到他們出售公司的計劃宣告失敗。代碼中包含了一句臟話。——譯者注蘋果的瀏覽器替代計劃唐和我都失業(yè)了,但是我們成了朋友,我們可沒有在硅谷的高爾夫球場上瞎晃,而是一直在找工作。很快,我們聽說蘋果公司正在招聘。這家位于庫比蒂諾的計算機公司為Eazel的前員工召開了專場招聘會,我記下了一些經(jīng)理的電話號碼準(zhǔn)備跟進(jìn),永遠(yuǎn)比我更聰明的唐卻有其他想法。之后的事情,就是時任蘋果公司平臺體驗部門總監(jiān)斯科特·福斯特爾對我進(jìn)行的面試。在iPod和iPhone問世前,這個部門負(fù)責(zé)蘋果計算機的用戶界面,F(xiàn)inder、郵件等系統(tǒng)內(nèi)置的應(yīng)用程序,以及第三方開發(fā)者開發(fā)程序時使用的軟件框架。當(dāng)我到達(dá)蘋果辦公區(qū)參加面試時,斯科特已經(jīng)坐在位于辦公室一角的辦公桌前了。當(dāng)我走進(jìn)辦公室時,他轉(zhuǎn)向我,身體向前傾,好像一個職業(yè)拳擊手在等待下一回合的開始。我們面對面地互相做了自我介紹。由于我一直擔(dān)心自己的面試能力,因此提前準(zhǔn)備了一份道具——我最新編寫的軟件程序,一個可以在蘋果全新系統(tǒng)MacOSX中運行的拼圖游戲。斯科特試用了我的程序,看起來他很喜歡。接著,關(guān)于軟件的問題如雨點一般打在我身上,這就像年輕的拳王阿里在打一套左右組合拳,其速度和痛感令人難以招架。“你是如何設(shè)計算法來制作新拼圖塊兒的?”“你用了什么樣的技術(shù)使得整個動畫如此平滑流暢?”“你使用的是Cocoa框架、Carbon框架,還是混合框架?”整個面試過程節(jié)奏很快,我盡全力追趕他的節(jié)奏。后來我才知道,斯科特一貫如此。你一定要嚴(yán)加防守,否則他連珠炮一般的問題會讓你驚慌失措。幾天后,唐和我開車去了位于森尼韋爾的計算機文化書店,唐想要挑選一本書。我試著從他口中問出他在蘋果面試的結(jié)果,以及他是否得到了關(guān)于我的面試反饋信息,但他如銅墻鐵壁一般三緘其口。當(dāng)離開書店回到車上后,唐遞給我一本《JavaScript:權(quán)威指南(第三版)》,封面上的逼真的犀牛非常顯眼。他說:“你覺得為蘋果制作一個網(wǎng)絡(luò)瀏覽器怎么樣?你感興趣嗎?”我當(dāng)然感興趣。等等,MacOSX不是已經(jīng)有網(wǎng)絡(luò)瀏覽器了嗎?是的,的確有,但那是微軟IE瀏覽器。早在4年前,蘋果和微軟做了一筆交易,IE被嵌入Mac系統(tǒng)。1997年8月,在波士頓召開的Macworld大會上,史蒂夫·喬布斯在公開演講時宣布了這一決定,史蒂夫甚至邀請比爾·蓋茨通過視頻連接出現(xiàn)在大會屏幕上。就在那一天,蓋茨承諾微軟向蘋果提供支持,在接下來的5年中,微軟會為蘋果計算機開發(fā)Office軟件,向蘋果投資1.5億美元,同意蘋果計算機安裝IE瀏覽器并將其作為默認(rèn)瀏覽器來使用。除了足足有20英尺高的蓋茨影像如同“老大哥”一樣籠罩在會場上這個令人尷尬的場景,這筆交易對于蘋果來說是很劃算的,這給當(dāng)時正飽受唱衰輿論的蘋果帶來了一張重振市場信心的支持票。幾個月前,《連線》雜志在封面上刊登了一張著名圖片:彩色的“蘋果”標(biāo)志被帶刺的鐵絲環(huán)繞起來,在其下方有一個醒目的標(biāo)題——祈禱。2001年夏天,蘋果的基礎(chǔ)更加堅實了,這得益于MacOSX的完工、iMac的成功,以及即將在4個月后問世的iPod給人帶來的希望。史蒂夫和斯科特迫切希望繼續(xù)保持這種勢頭,認(rèn)為互聯(lián)網(wǎng)將成為未來計算機、通信以及商業(yè)的重要部分,希望蘋果能在這一迅速崛起的技術(shù)領(lǐng)域占據(jù)一席之地。他們需要隨時隨地按照自己的意愿對公司互聯(lián)網(wǎng)軟件進(jìn)行升級的自主性和靈活性,研發(fā)內(nèi)部瀏覽器是這個戰(zhàn)略的第一步。他們想把微軟IE瀏覽器替換掉。馴服Mozilla從唐和我加入蘋果的那一天起,這個瀏覽器替代計劃就成了我們的工作。這項工作包含了兩個階段的目標(biāo):第一階段,我們需要制作出一個網(wǎng)絡(luò)瀏覽器的應(yīng)用;第二階段,我們要研發(fā)出一整套網(wǎng)絡(luò)技術(shù)工具包,這套工具包可以讓蘋果第三方軟件開發(fā)者更輕松地在自己的軟件中添加網(wǎng)絡(luò)功能,無論是下載文本、圖片,還是呈現(xiàn)整個網(wǎng)絡(luò)頁面。簡單地說,網(wǎng)絡(luò)瀏覽器的確能夠讓用戶在網(wǎng)上沖浪變得更加便利和簡單。從程序員的角度來看,網(wǎng)絡(luò)瀏覽器是極為復(fù)雜的。由于我從未做過類似的工作,為了讓我盡快步入正軌,唐專門為我舉辦了一個“迷你新兵訓(xùn)練營”。在我們每天早上7點鐘去店里買咖啡的途中,唐會為我全面介紹網(wǎng)絡(luò)瀏覽器的每一個子系統(tǒng):內(nèi)容(文本和圖像)、設(shè)計(字體、顏色和布局)、腳本(動態(tài)行為,例如在提交一個表格前對其進(jìn)行檢查)。他向我介紹了這些在技術(shù)領(lǐng)域內(nèi)需要用到的已公布的標(biāo)準(zhǔn):超文本標(biāo)記語言(HTML)、層疊樣式表(CSS)和Java腳本編程語言。此外,他還向我講述了如何將這些軟件組合起來以創(chuàng)造復(fù)雜的網(wǎng)頁。在唐的引導(dǎo)下,我對這個領(lǐng)域的了解逐漸深入。我發(fā)現(xiàn)這項開發(fā)瀏覽器的任務(wù)對于僅有兩個人的團隊來說似乎是不可能完成的,尤其是在我得知網(wǎng)景瀏覽器制作團隊規(guī)模非常大的時候。毫無疑問,微軟IE瀏覽器的團隊也一定是兵強馬壯的。而我們的團隊只有兩人,我們怎么可能完成這項任務(wù)呢?唐讓我不要擔(dān)心,因為我們是站在巨人的肩膀上,不會像瀏覽器先驅(qū)網(wǎng)景公司那樣從零開始。自由軟件運動和瀏覽器之爭使得網(wǎng)景公司公開了Mozilla瀏覽器的源代碼,這意味著我們兩人可以借用公開代碼。我們可以就任何想要的細(xì)節(jié)去下載和評估軟件,Mozilla的許可意味著我們可以在自己的項目上借用他們的代碼?;ヂ?lián)網(wǎng)上還有一些其他開源的網(wǎng)絡(luò)瀏覽器項目,我們把這些項目當(dāng)作調(diào)查對象,將其列入計劃。此外,還有一些付費獲取的軟件可供評估。即使在盡職調(diào)查計劃中有很多軟件可供參考,Mozilla仍是我們首要的參考對象,主要是因為唐對其代碼很熟悉。唐對我們的工作很有信心,認(rèn)為我們可以勝任原本在網(wǎng)景需要很大的團隊才能完成的工作。隨著討論的深入,我意識到唐對Mozilla有一種愛恨交織的感情。從好的方面來看,Mozilla在網(wǎng)絡(luò)科技領(lǐng)域投入了巨大的資源,我們可以避免重復(fù)工作而直接利用其成果;但從另一方面來看,源代碼數(shù)據(jù)庫實在太大了,比我和唐在Eazel合作開發(fā)的軟件不知道要大多少倍。由于聽了唐對背景技術(shù)知識的介紹,我認(rèn)識到了網(wǎng)絡(luò)瀏覽器是一個大型編程項目的事實,我也接受了必須學(xué)習(xí)和掌握所有新代碼這件事情。的確,當(dāng)我下載了Mozilla之后,對源代碼的第一感覺就是規(guī)模龐大——接近150萬行。此前,我做過項目的規(guī)模連它的1/4都不到。若每頁紙打印30行,一共需要5萬張紙才能容得下全部代碼。想象一下,這是在強迫你閱讀大量復(fù)習(xí)資料,然后去參加一場可能從任何一行字里提取問題的考試。不管怎樣,這就是我的工作,我最好還是趕緊行動起來,但我很快就遇到了障礙。Mozilla無法在MacOSX上被構(gòu)建,也就是說,雖然我擁有Mozilla瀏覽器的全部編程源代碼,但當(dāng)我嘗試將這些代碼變成可以在剛剛問世三個月的新系統(tǒng)上運行的應(yīng)用程序時,我發(fā)現(xiàn)完全沒有辦法實現(xiàn)。顯然,從來沒有熟悉Mozilla的人這樣嘗試過。蘋果計算機微不足道的市場占有率阻礙了我們。我在互聯(lián)網(wǎng)上尋求幫助,但沒有找到任何有用的東西,而且我們的項目是保密的,我不可能像普通程序員那樣在在線信息板上發(fā)布問題,甚至也不能在蘋果公司內(nèi)部向其他同事求助。在經(jīng)歷了幾天的失敗后,我宣布自己遇到了無法逾越的障礙。我向唐匯報了自己毫無進(jìn)展的現(xiàn)狀,此時他正忙著與一些可能愿意合作的閉源供應(yīng)商協(xié)商,希望他們許可蘋果使用其瀏覽器代碼。唐仍然傾向于使用Mozilla的開源代碼解決方案,主要出于對價格的考慮,他認(rèn)為比起其他付費軟件動輒幾百萬美元的價格,免費軟件更容易“賣給”管理層。與此同時,蘋果的上級主管們正在焦急地等待我們的消息——一份簡介、一種進(jìn)步的跡象,或者任何可以說明我們?nèi)〉眠M(jìn)展的消息。很久之后我才知道,斯科特當(dāng)時已經(jīng)開始懷疑我們是否能勝任了,很慶幸當(dāng)時的我并不知道,因為在無法做出任何突破的一個月后,我自己已經(jīng)感受到了巨大的壓力。唐和我面面相覷,他說自己要出去度假一個星期,這是他在來蘋果前就計劃好的。他希望我能夠在這一個星期里閉關(guān),盡我最大的努力,在MacOSX里面重建Mozilla。我開始全身心地投入。我做了非常詳細(xì)的筆記,在代碼上花了大量時間。當(dāng)唐回到辦公室后,我向他提交了一份名為《構(gòu)建蜥蜴:使Mozilla在MacOSX上運行的50個步驟》的文件。每一步都很重要。有些步驟看起來實在妙極了,尤其是在列表中間的一步:重建我的一個編程環(huán)境——C語言函數(shù)庫。這一步就好像是在軟件里面做大腦移植。它讓構(gòu)建蜥蜴看起來不那么像一份技術(shù)文件,更像一份低成本怪獸電影的惡魔腳本。好消息是,這些步驟在某種程度上起作用了,一步一步走下來,我可以制作出一個網(wǎng)絡(luò)瀏覽器的圖標(biāo),并能使之出現(xiàn)在桌面上;而壞消息是這個怪物一般的應(yīng)用程序無法運行。用鼠標(biāo)雙擊圖片時,Mozilla會啟動,但無論我如何嘗試,瀏覽器都會立即崩潰,無法加載網(wǎng)頁。我開始排查問題出在哪里,當(dāng)我陷入幾百萬行代碼中時,我感到了絕望。在進(jìn)行市面上可見的瀏覽器評估時,我們同時也在招募其他人加入團隊。我們被批準(zhǔn)聘用更多的程序員,甚至在官方招聘信息發(fā)布之前就已經(jīng)開始招聘了。唐認(rèn)識一些在網(wǎng)景公司工作的有瀏覽器開發(fā)經(jīng)驗的人,我們也共同認(rèn)識一些曾在Eazel工作但仍未敲定下一份工作的非常優(yōu)秀的工程師,我們還很順利地找到了一些內(nèi)部推薦的候選人。同時,我們面臨一個新挑戰(zhàn):說服那些有很多好機會的人接受一份我們暫時還不能透露具體內(nèi)容的工作。唐的方法是通過眨眼向?qū)Ψ竭M(jìn)行暗示,并告訴對方這是一份“重量級工作”。所有人都拒絕了我們。曾在網(wǎng)景工作過的那些人讀懂了唐的眼神中隱含的意思,但沒有人想要再做一個瀏覽器。最近在Mozilla身上栽的跟頭讓我理解他們?yōu)槭裁磿鲞@樣的選擇。10×程序員就在嘗試馴服Mozilla的過程中,我遇到了另外一位候選人——理查德·威廉姆森,他一開口就告訴我他知道如何快速得到結(jié)果。他用一口已經(jīng)被20多年在美國的生活經(jīng)歷沖淡了的不列顛口音的英語,向我講述了他自己的經(jīng)歷。早在十幾歲時,他就創(chuàng)辦了自己的軟件公司,后來,在斯沃斯莫爾學(xué)院讀了幾年書后,他決定休學(xué),并在史蒂夫·喬布斯創(chuàng)辦的軟件公司NeXT工作了一年。在完成學(xué)業(yè)又回到NeXT后,他時常接到大人物直接安排的工作。比如,有一次史蒂夫派他到日本去與合作伙伴商談為NeXT計算機設(shè)計一個擴展網(wǎng)卡的業(yè)務(wù),他圓滿完成了任務(wù)。理查德說出的每一個單詞里都蘊藏著自信,他的經(jīng)歷看起來也支撐得起這份自信。他和我同齡,但當(dāng)他創(chuàng)辦自己的公司的時候,我還在每天玩電子游戲。在20歲出頭的年紀(jì),他就已經(jīng)在日本為NeXT達(dá)成了一項跨國交易。那時我也在日本,但我只是一個剛拿到大學(xué)文憑,背著包教英語的長發(fā)青年。但是理查德是真的這么能干嗎?還是說他只是一個紙上談兵的人?我想先了解一些他的工作再做決定,我問了他一些在工作中遇到的技術(shù)性問題以及解決過程,每一次他都能很快找到解決方案。我觀察到他會用特定的手勢來強調(diào)自己的答案(見圖2-2),他的兩只手的食指和小指伸出,兩手指尖相對,兩手之間保持與肩寬相等的距離。接著,他把兩只手放在一起,隨機搖動手臂。當(dāng)兩只手十指相扣放在胸前時,他接著搖晃手臂,但此時兩只手臂是同步的,看起來就像發(fā)動機通過驅(qū)動軸向輪子傳輸動力一樣。我每問一個問題,他都會重復(fù)一遍這一整套動作,好像對他來說,開發(fā)一款軟件就像做驅(qū)動軸的動作一樣簡單。圖2-2理查德的特定手勢面試后我去找唐,并告訴他我并不確定是否應(yīng)該相信理查德的話。唐對我說,斯科特·福斯特爾的上司伯特蘭·賽萊特在NeXT工作時曾與理查德共事,并且對他評價非常高。唐對理查德在面試中的表現(xiàn)有非常深刻的印象,因此希望他能加入團隊。但他也尊重我的顧慮,建議我和理查德通個電話,再聊一次。和面試時一樣,在后續(xù)的電話中,理查德依然給出了信心滿滿的回答,我腦海中浮現(xiàn)出他用肩膀夾住耳邊的手機以騰出兩只手來做驅(qū)動軸動作的情景。掛掉電話后,我仍然不確定是否應(yīng)該吸納這位成員,但是我沒有強有力的反對理由,所以我點頭同意,理查德正式成為我們團隊中的第三名成員。在我周而復(fù)始地對Moz

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論