我想说这么一个故事。在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 II、TRS-80或者IBM PC 5150的BASIC解释器上面编程,要困难得多。到八十年代中期,Borland已经开始普及Turbo Pascal等带有强大类库和灵便编辑器的语言。虽然我们不能确切地肯定Steve Jobs离开Apple之前是否已经着手Mac OS System 5,但最终Mac OS System 5的核心特性完全落入他的构想:多任务和HyperCard。后者是一种革命性的软件建造新方法,采取了“面向对象”和“模型驱动”的开发范式:
HyperCard里面的编程语言叫做HyperTalk,它是面向对象的。对象置身于消息传播的路径所构成的一个层级结构之中,响应由用户或者系统本身产生的各种消息。
HyperCard的基本概念是一“叠”虚拟的“卡片”。卡片上记载着数据,就像真的索引卡片簿一样。它的布局引擎概念上近似于现在快速开发 (RAD)环境中所谓的“窗体”[……] 它有一个特殊的“Home”叠(后来网站首页的雏形)用来启动各种应用,有一个代码仓库存放各种共享脚本,还有一个配置各种首选项的设施。
HyperCard不仅仅是一个数据库系统。每张卡片可以有自己的独特布局,好比你在真的索引卡片上面也可以填写规定以外的信息。希望在同一叠的所 有卡片上都显示的元素,可以放进一个特殊的背景层里面;也可以把背景相同的卡片归为一组,共享背景层。背景的内容除了图片(背景最开始的用途就是“背景图 片”)、对象,还可以包含字段、按钮、(静态)文本、(可编辑的)文本框等等常见的GUI元素。然后每张卡片可以在它的文本字段、图片字段里面容纳各种数据,就像数据库一样。
到了1985年Steve创立NeXT之后,这些概念才算真正羽翼丰满。被昵称为“the cube”的第一款NeXT工作站于1989年推出市场。Tim Berners-Lee对此有这样的评价:
NeXT是一台非凡的机器。NeXT一下子引入了许多(甚至太多)新事物——可替换的光存储、Objective-C、针对音响和电影的DSP、Mach 核心、PC上的unix、Display Postscript显示系统、InterfaceBuilder等等。确实它的价格一直很贵,光盘也被证明不可靠。可到最后,拯救Apple的还是 Steve和NeXTSTEP。这说明认准了好东西就应该坚持,谁知道哪天它就成了主流呢。
他还说道:
在NeXT上面编写WorldWideWeb客户端异常简单。系统本身就带了 Text Object模块,这是 一个可编辑、多字体的编辑器。我只需要子类化出来一个超文本对象,然后加上互联网相关代码就行了。设计软件菜单什么的完全不费吹灰之力,也就是在 InterfaceBuilder里面拖放几下子。应用程序的代码框架是自动生成的。这就是平台的作用:在平台上面做出来的东西,没了它不是完全做不了, 但那可就辛苦多了。
InfoQ的编辑Alex Blewitt在上世纪九十年代初有过一台NeXTStation,他是这么说的:
NeXTSTEP的 操作系统功能已经十分完善,它能播放视频、录制声音、内嵌对象。相比之下,NeXTSTEP首发的时候,Windows的第3版还没出来。NeXT的硬件 虽然不怎么实惠,但都是高标准的。标配以太网、24位色的显示器、16位声卡、内置麦克风和音箱(别忘了当时SoundBlaster还没变成通用 API,才是一种刚刚发布的产品而已)。它是价超所值没错——可偏偏第一版的HTTP就是在NeXT机器上面写的。
Steve挑选当时能找到的最好的软硬件,打造了一台划时代的万能机器,几乎领先时代十年之多。这台机器的操作系统NeXTSTEP是当时一些革命性组件的结合体:
Mach核心原先是在卡耐基·梅隆大学,为了支持分布式计算和并行计算而发展起来的一个先进的操作系统。虽然Mach保持与Unix兼容,但它的目 标之一是绕开Unix“一切都是文件”的概念,因为这个概念被日渐证明不符合实际。从作为Mach前身的Accent项目开始,进程间通信(IPC)就极 受重视,最终Mach针对性地提出了我们现在非常熟悉的一套新概念:
它和UNIX有一个重要的区别,UNIX下的工具处理文件,而Mach下的工具处理“任务”。Mach把更大部分的操作系统代码移出内核,放入用户空间,结果形成一个大大缩小了的内核,术语“ 微内核”随之兴起。Mach的进程——或者叫“任务”——有别于传统的操作系统,可以由很多的线程组成。虽然对于现在系统来说非常普通,但Mach是第一个这样定义任务和线程的系统。
还有一样根本区别:
端口概念和对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早期一个著名的使用例子。
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是最早的的对象-关系映射工具之一。
当InfoQ让我简短总结一下当年在NeXT的经历,当作对Steve的追思,我就知道这是一件吃力不讨好的事情。怎么可能几句话就向不曾躬逢其会 的人解释清楚那个地方、那个时候的神奇之处?但在这样的时刻面对这样的请求,哪怕再费劲我也要试试。于是我想了一下,大概像我这样的工程师大概都希望知道 给Steve干活是怎么样子吧。
每个人都知道他有极深刻的洞察力,但这么说还不能表达其万一。当Steve走进房间的时候,一切都会变得不一样。我记得有一次,我们在谈持久化对象 存储的事情,说来说去都是对象的序列化和访问机制。然后Steve过来呆了几分钟,领着我们遨游天外,想象用那些工具可以创造出什么样的世界。到他嘴里, 说的就成了图片、视频、声音怎么联系到一起,怎么搜索,怎么合成文档,怎么跟朋友共享。当他离开房间的时候,我们就好像看完一场电影刚亮灯的时候,你要左 右看一会儿,才想起自己在哪里,刚才做了些什么。最后我们的成果是近似于JSON的东西,超前二十年就已经扎根在OpenStep里头,到现在它的衍生产 物还在左右着iOS上的用户体验,Steve当时描绘的一切都已经成为现实。
毫无疑问,他的远见极具启迪力量,但这么说还不足以形容和他共事的感觉。NeXT的每一个人都天资聪颖,拿出优秀的成果是理所当然的事情。一般的领 导看了会流口水,流眼泪或者两者一起流的的成果,Steve却可能不为所动。在Steve身边,你只能做出前无古人,乃至后无来者的产品。其中的关键是他 并不会直接这么告诉你,但只要没达到他认为有可能达到的高度,就会被认为一文不值。他有办法撩动工程师渴望卓越成果的雄心,然后他会一直激励你,暗示你现 在努力得还不够,但他对你有信心。当你把东西拿给他看的时候,他说出来的几个字,或者根本不用说,就让你知道自己还能做得更好,也必须做得更好。当他喜欢 你拿出来的东西,你会有站立在众山之巅的感觉,不仅因为他喜欢,还因为你知道自己是实现了自我突破才能站上那个高度。
Steve是独一无二的人物。我再没遇过任何环境能跟他在NeXT创造的氛围相比拟。那里不只是公司,有点像实验室,有点像游乐场,有点像兄弟会 社,有点像战场,有点像大学图书馆,有点像现代艺术馆,有点像探险基地。我后来在很多地方工作过,不少地方也能激发我的热情和精力,但没有一个地方能达到 NeXT的高度。
Steve Jobs留下的全部遗产还要很长时间才能计算清楚。起初员工们都带着贬义来谈论他的“现实扭曲力场”,指的是他那种凭借说服力和个人魅力令人信奉歪理的特 殊技能。但到了某个时刻,Steve Jobs脑中的世界观突然不再是扭曲的,反而成了一种自我实现的预言。Apple公司的新产品一个接一个地破土而出,一个接一个地改变着我们的行为。 Steve Jobs的“力场”变成了真实的世界,而我们都生活在其中。
不少人对Steve有着负面的看法,但不管怎样,他是过去35年间一直不屈不挠地给无数工程师提出新挑战的一个人,这样的人屈指可数。他激励着工程师们去实践那些冒险的创新念头,取得超越想象的成功。如果没有Steve,今天的个人计算机和电话会变成什么样子?
我们将会记住你。
Think Different。
查看英文原文:A Tribute to Steve Jobs' Contribution to Software Engineering