緬懷賈伯斯對軟體行業的貢獻

發表於2011-10-10

注:InfoQ – 郭曉剛

我想說這麼一個故事。在Steve回Apple之前,我和他在NeXT有一次會面。當時去的還有我們公司的首席科學家。開完會出來,我們兩個人在那裡覆盤 剛才的辯論,想找出Steve的漏洞——他肯定不能對嘛。結果沒成功。我倆站在停車場說話,讓他從辦公室瞧見了,又跑過來接著和我們辯。那時候說的是跟 Objective-C程式語言有關的一個技術問題。我也不知道他為什麼對這問題那麼上心。我從來沒見過這種熱情勁頭。Eric Schmidt

很多人會因為Steve Jobs和他的團隊推出、推廣的傑出產品而記住他:Apple II、Macintosh、鐳射印表機、NeXT工作站、數字動畫電影、iMac、iPod、iPhone、iPad。在過去的35年間,很多人的生活因為Steve的貢獻而變得更美好。

從1985年到1997年,Steve在他離開Apple的12年裡,參與推廣了不少軟體技術和程式設計正規化,後來成為當前計算行業、程式語言和軟體工 程實踐的基礎要素。可以說,軟體成為今天這個樣子,也有他的一份功勞,雖然很少有人注意到這一點。我們InfoQ的眾人,希望在此回顧他那些比較不為人 知,但同樣影響深遠的貢獻,以此作為我們最後的致敬。

就在Mac剛出來的時候,人們還普遍認為編寫帶有圖形使用者介面和多工功能的軟體(多工在1987年面市),比起在Apple IITRS-80或者IBM PC 5150的BASIC直譯器上面程式設計,要困難得多。到八十年代中期,Borland已經開始普及Turbo Pascal等帶有強大類庫和靈便編輯器的語言。雖然我們不能確切地肯定Steve Jobs離開Apple之前是否已經著手Mac OS System 5,但最終Mac OS System 5的核心特性完全落入他的構想:多工和HyperCard。後者是一種革命性的軟體建造新方法,採取了“物件導向”和“模型驅動”的開發正規化:[INDENT] HyperCard裡面的程式語言叫做HyperTalk,它是物件導向的。物件置身於訊息傳播的路徑所構成的一個層級結構之中,響應由使用者或者系統本身產生的各種訊息。

HyperCard的基本概念是一“疊”虛擬的“卡片”。卡片上記載著資料,就像真的索引卡片簿一樣。它的佈局引擎概念上近似於現在快速開發 (RAD)環境中所謂的“窗體”[……] 它有一個特殊的“Home”疊(後來網站首頁的雛形)用來啟動各種應用,有一個程式碼倉庫存放各種共享指令碼,還有一個配置各種首選項的設施。
HyperCard不僅僅是一個資料庫系統。每張卡片可以有自己的獨特佈局,好比你在真的索引卡片上面也可以填寫規定以外的資訊。希望在同一疊的所 有卡片上都顯示的元素,可以放進一個特殊的背景層裡面;也可以把背景相同的卡片歸為一組,共享背景層。背景的內容除了圖片(背景最開始的用途就是“背景圖 片”)、物件,還可以包含欄位、按鈕、(靜態)文字、(可編輯的)文字框等等常見的GUI元素。然後每張卡片可以在它的文字欄位、圖片欄位裡面容納各種資料,就像資料庫一樣。
[/INDENT]到了1985年Steve創立NeXT之後,這些概念才算真正羽翼豐滿。被暱稱為“the cube”的第一款NeXT工作站於1989年推出市場。Tim Berners-Lee對此有這樣的評價:[INDENT] NeXT是一臺非凡的機器。NeXT一下子引入了許多(甚至太多)新事物——可替換的光儲存、Objective-C、針對音響和電影的DSP、Mach 核心、PC上的unix、Display Postscript顯示系統、InterfaceBuilder等等。確實它的價格一直很貴,光碟也被證明不可靠。可到最後,拯救Apple的還是 Steve和NeXTSTEP。這說明認準了好東西就應該堅持,誰知道哪天它就成了主流呢。 [/INDENT]他還說道:[INDENT] 在NeXT上面編寫WorldWideWeb客戶端異常簡單。系統本身就帶了Text Object模組,這是 一個可編輯、多字型的編輯器。我只需要子類化出來一個超文字物件,然後加上網際網路相關程式碼就行了。設計軟體選單什麼的完全不費吹灰之力,也就是在 InterfaceBuilder裡面拖放幾下子。應用程式的程式碼框架是自動生成的。這就是平臺的作用:在平臺上面做出來的東西,沒了它不是完全做不了, 但那可就辛苦多了。 [/INDENT]InfoQ的編輯Alex Blewitt在上世紀九十年代初有過一臺NeXTStation,他是這麼說的:[INDENT] NeXTSTEP的 作業系統功能已經十分完善,它能播放視訊、錄製聲音、內嵌物件。相比之下,NeXTSTEP首發的時候,Windows的第3版還沒出來。NeXT的硬體 雖然不怎麼實惠,但都是高標準的。標配乙太網、24位色的顯示器、16位音效卡、內建麥克風和音響(別忘了當時SoundBlaster還沒變成通用 API,才是一種剛剛釋出的產品而已)。它是價超所值沒錯——可偏偏第一版的HTTP就是在NeXT機器上面寫的。 [/INDENT]Steve挑選當時能找到的最好的軟硬體,打造了一臺劃時代的萬能機器,幾乎領先時代十年之多。這臺機器的作業系統NeXTSTEP是當時一些革命性元件的結合體:

Mach核心原先是在卡耐基·梅隆大學,為了支援分散式計算和平行計算而發展起來的一個先進的作業系統。雖然Mach保持與Unix相容,但它的目 標之一是繞開Unix“一切都是檔案”的概念,因為這個概念被日漸證明不符合實際。從作為Mach前身的Accent專案開始,程式間通訊(IPC)就極 受重視,最終Mach針對性地提出了我們現在非常熟悉的一套新概念

  • 任務”是“執行緒”執行所需若干系統資源組成的一個物件。
  • 執行緒”是單一的執行單元,存在於任務的上下文之中,並且共享任務的資源。
  • ”是用於任務之間通訊的受保護的訊息佇列;任務擁有各自埠的傳送和接收許可權
  • 訊息”是帶型別的資料物件的集合,它們只能被髮送到埠,而不能指定傳送到具體的任務或執行緒。

它和UNIX有一個重要的區別,UNIX下的工具處理檔案,而Mach下的工具處理“任務”。Mach把更大部分的作業系統程式碼移出核心,放入使用者空間,結果形成一個大大縮小了的核心,術語“微核心”隨之興起。Mach的程式——或者叫“任務”——有別於傳統的作業系統,可以由很多的執行緒組成。雖然對於現在系統來說非常普通,但Mach是第一個這樣定義任務和執行緒的系統。 [/INDENT]還有一樣根本區別:[INDENT] 埠概念和對IPC的運用,可能是Mach與傳統核心最根本的區別所在。UNIX下的核心呼叫由所謂的syscall或者trap操作構成。程式通過在記憶體中的規定位置放置資料,然後引發一個fault—— fault是一種錯誤。系統一開始啟動的時候就設定好核心作為所有fault的“負責人”,所以當程式引發fault的時候,核心就會接管過來,首先檢查 傳遞給它的資訊,然後執行指令。[……]利用IPC來傳遞訊息有利於執行緒和併發。因為任務由多個執行緒組成,使用IPC機制的程式碼又被放線上程內部,所以 Mach可在訊息處理前後凍結和解凍執行緒。這種設計有利於把系統分佈到多個處理器之上,既可以像大多數Mach訊息那樣直接通過共享記憶體來傳遞,也可以在 必要的時候增加一點程式碼把訊息複製到別的處理器上。傳統核心不好實現這樣的分散式構造,因為系統要保證不同處理器上的不同程式不會寫入同一塊記憶體。 Mach實現起來卻很容易而且概念清晰,因為它把“訪問訊息所在那塊記憶體”的過程,變成了“埠”這個系統基本元素。 Display PostScript(DPS)是一套螢幕顯示系統,由Adobe和NeXT在1987年合作開發,同時它也是Adobe的一個正式產品。顧名思義,DPS利用PostScript(PS) 影像處理模型和語言來生成螢幕上的圖形,不過因應使用者互動的需要做了一定的改動。如今在Apple的OS X作業系統裡面,中央視窗伺服器只把視窗圖形快取為PDF,已經不再執行PostScript程式碼。而在當時,PostScript提供的高階圖形語言給 開發者帶來極大的好處,很容易就能建立出高質量、帶互動能力的文字和圖形顯示,顯示結果還能原樣生成PostScript文件並最終列印出來。對於當時正 為列印應用程式生成的WYSIWYG文件而困擾的人們來說,這是革命性的創造。

iPhone讓Objective-C和NeXTSTEP類庫(帶NS字首的那些)煥發了第二春。在1989年的時候,這可是遠遠超前於時代的一個軟體開發環境,直到兩年之後才開始遇到像樣的競爭對手PowerBuilder。 Objective-C是Brad Cox和Tom Love在上世紀八十年代初期發明的一種反射式、物件導向的程式語言,相當於在C語言上面增加了Smalltalk風格的訊息機制。NeXT開發的 AppKit和Foundation Kit類庫內含豐富功能,比如非常完善的容器類。Interface Builder這個模型驅動、基於MVC的圖形使用者介面設計器則堪稱NeXT開發環境的基石。

Interface Builder最早於1988年作為NeXTSTEP 0.8的一部分出現。它的創造者是Jean-Marie Hullot,一開始是用Lisp開發的。Interface Builder屬於頭一批允許通過滑鼠來排布按鈕選單視窗等介面物件的商品化應用程式。Tim Berners-Lee開發WorldWideWeb網路瀏覽器算是Interface Builder早期一個著名的使用例子。[INDENT] Apple Computer公司1996年收購NeXT之後,在其新作業系統Mac OS X中採用了OpenStep環境。其中除了Objective-C,還包括NeXT的Objective-C開發工具Project Builder(後來經過擴充套件,成為現今的Xcode)和介面設計工具Interface Builder。即便是Cocoa API這個當前最重要、開發最活躍的Objective-C環境,仍然大部分建基於OpenStep的介面物件。 ]WebObjects同樣是相當領先時代的創新。這個史上第一的動態HTML應用伺服器由Bruce Ong、Nico Popp、Charles d’Harcourt和Fran?ois Jouaux四個人用Objective-C開發而成。它在資料庫訪問方面非常依賴Enterprise Object Framework。作為對比,同樣做應用伺服器的Kiva公司1995年創立,1997年被Netscape收購;一家名為Weblogic的初創小企業在1997年末向市場上推出Tengah伺服器

有一些現在常見的瀏覽器特性和快捷鍵組合可以追溯到NeXTSTEP的慣例。HTML 1.0和2.0的基本佈局選項源自NeXT的Text類的特性。Doom遊戲的關卡設計器WAD是在NeXT機器上面開發的。先進的電子表格軟體Lotus Improv是在NeXT機器上開發的。有個叫Altsys Virtuoso的軟體也是在NeXT機器上開發的,它的第2版被移植到Mac OS和Windows,成了Macromedia FreeHand第4版。MCI電信公司的“朋友家庭計劃”用NeXTSTEP開發後臺的支撐軟體。甚至連控制半導體層積這樣的工作,也可以找到NeXTSTEP的身影,比如Riber公司的Accessible軟體(第2.5節)和休斯實驗室的EpiCenter軟體

到NeXTSTEP開發告一段落的時候,它成功地執行在Motorola 68000系列、Intel x86、Sun SPARC和HP PA-RISC等不同體系的處理器上;以它為基礎的OS X作業系統也在2001年正式釋出。

InfoQ採訪了Jack Greenfield,他曾任Rose的總架構師,現任Microsoft的Principal Architect ,於1989到1994年間就職於NeXT,領導Enterprise Object Framework的開發工作。Enterprise Object Framework是最早的的物件-關係對映工具之一。[INDENT] 當InfoQ讓我簡短總結一下當年在NeXT的經歷,當作對Steve的追思,我就知道這是一件吃力不討好的事情。怎麼可能幾句話就向不曾躬逢其會 的人解釋清楚那個地方、那個時候的神奇之處?但在這樣的時刻面對這樣的請求,哪怕再費勁我也要試試。於是我想了一下,大概像我這樣的工程師大概都希望知道 給Steve幹活是怎麼樣子吧。

每個人都知道他有極深刻的洞察力,但這麼說還不能表達其萬一。當Steve走進房間的時候,一切都會變得不一樣。我記得有一次,我們在談持久化物件 儲存的事情,說來說去都是物件的序列化和訪問機制。然後Steve過來呆了幾分鐘,領著我們遨遊天外,想象用那些工具可以創造出什麼樣的世界。到他嘴裡, 說的就成了圖片、視訊、聲音怎麼聯絡到一起,怎麼搜尋,怎麼合成文件,怎麼跟朋友共享。當他離開房間的時候,我們就好像看完一場電影剛亮燈的時候,你要左 右看一會兒,才想起自己在哪裡,剛才做了些什麼。最後我們的成果是近似於JSON的東西,超前二十年就已經紮根在OpenStep裡頭,到現在它的衍生產 物還在左右著iOS上的使用者體驗,Steve當時描繪的一切都已經成為現實。

毫無疑問,他的遠見極具啟迪力量,但這麼說還不足以形容和他共事的感覺。NeXT的每一個人都天資聰穎,拿出優秀的成果是理所當然的事情。一般的領 導看了會流口水,流眼淚或者兩者一起流的的成果,Steve卻可能不為所動。在Steve身邊,你只能做出前無古人,乃至後無來者的產品。其中的關鍵是他 並不會直接這麼告訴你,但只要沒達到他認為有可能達到的高度,就會被認為一文不值。他有辦法撩動工程師渴望卓越成果的雄心,然後他會一直激勵你,暗示你現 在努力得還不夠,但他對你有信心。當你把東西拿給他看的時候,他說出來的幾個字,或者根本不用說,就讓你知道自己還能做得更好,也必須做得更好。當他喜歡 你拿出來的東西,你會有站立在眾山之巔的感覺,不僅因為他喜歡,還因為你知道自己是實現了自我突破才能站上那個高度。

Steve是獨一無二的人物。我再沒遇過任何環境能跟他在NeXT創造的氛圍相比擬。那裡不只是公司,有點像實驗室,有點像遊樂場,有點像兄弟會 社,有點像戰場,有點像大學圖書館,有點像現代藝術館,有點像探險基地。我後來在很多地方工作過,不少地方也能激發我的熱情和精力,但沒有一個地方能達到 NeXT的高度。
Wired如此總結: Steve Jobs留下的全部遺產還要很長時間才能計算清楚。起初員工們都帶著貶義來談論他的“現實扭曲力場”,指的是他那種憑藉說服力和個人魅力令人信奉歪理的特 殊技能。但到了某個時刻,Steve Jobs腦中的世界觀突然不再是扭曲的,反而成了一種自我實現的預言。Apple公司的新產品一個接一個地破土而出,一個接一個地改變著我們的行為。 Steve Jobs的“力場”變成了真實的世界,而我們都生活在其中。 [不少人對Steve有著負面的看法,但不管怎樣,他是過去35年間一直不屈不撓地給無數工程師提出新挑戰的一個人,這樣的人屈指可數。他激勵著工程師們去實踐那些冒險的創新念頭,取得超越想象的成功。如果沒有Steve,今天的個人計算機和電話會變成什麼樣子?

我們將會記住你。
Think Different。

 

相關文章