现在的位置: 首页 > 综合 > 正文

缅怀Steve Jobs对软件行业的贡献

2011年05月16日 ⁄ 综合 ⁄ 共 6404字 ⁄ 字号 评论关闭
我想说这么一个故事。在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。后者是一种革命性的软件建造新方法,采取了“面向对象”和“模型驱动”的开发范式:

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的高度。

Wired如此总结:

Steve Jobs留下的全部遗产还要很长时间才能计算清楚。起初员工们都带着贬义来谈论他的“现实扭曲力场”,指的是他那种凭借说服力和个人魅力令人信奉歪理的特 殊技能。但到了某个时刻,Steve Jobs脑中的世界观突然不再是扭曲的,反而成了一种自我实现的预言。Apple公司的新产品一个接一个地破土而出,一个接一个地改变着我们的行为。 Steve Jobs的“力场”变成了真实的世界,而我们都生活在其中。

不少人对Steve有着负面的看法,但不管怎样,他是过去35年间一直不屈不挠地给无数工程师提出新挑战的一个人,这样的人屈指可数。他激励着工程师们去实践那些冒险的创新念头,取得超越想象的成功。如果没有Steve,今天的个人计算机和电话会变成什么样子?

我们将会记住你。

Think Different。

查看英文原文:A Tribute to Steve Jobs' Contribution to Software Engineering

抱歉!评论已关闭.