InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

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

作者 Jean-Jacques Dubray 译者 郭晓刚 发布于 2011年10月9日

领域
架构 & 设计
主题
操作系统 ,
模型驱动工程
我想说这么一个故事。在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

译者 郭晓刚 是InfoQ中文站架构社区编辑,创建并终结过数家软件小企业,翻译过多本技术书籍。

我觉得还是要分清哪些是“乔布斯的贡献” 发表人 Zhao Jeffrey 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 李 玉珏 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 Zhao Jeffrey 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 李 玉珏 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 梁 非 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 李 玉珏 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 李 毅 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 qingyong zhou 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 曹 云飞 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 李 毅 发表于
Re: 我觉得还是要分清哪些是“乔布斯的贡献” 发表人 Chen YuGuo 发表于
高要求啊 发表人 无 趣 发表于
感觉在神化一个人,jobs无所不能啊 发表人 zhai duo 发表于
围观 发表人 king anna 发表于
Ruined Thread 发表人 Yang Jason 发表于
21世纪是悲哀的 发表人 Zhou Fan 发表于
我任务apple下面的api变化太快了...对开发人员不友好. 发表人 Lai Mead 发表于
这个论据有谁知道,能否提供一些详细链接? 发表人 zhang joa 发表于
“参与推广”? 发表人 Wang Yuxing 发表于
  1. 返回顶部

    我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 Zhao Jeffrey

    哪些是乔布斯的贡献?哪些是别人在“乔布斯的产品”里做出的贡献。现在都倾向于把Apple看作是乔布斯的一人公司,所有的决定,无论技术上还是非技术上的都是乔布斯的功劳。我们不能轻易地做出“乔布斯”因为“领导”所有“有贡献”这样一个简单结论,否则跟国内很流行的“在XX领导的指点下”,“三个代表指引量子力学发展”论文不是一个套路的么……

  2. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 李 玉珏

    中国有句古话,叫做:“千里马常有,而伯乐不常有”。
    乔布斯可能就是那个伯乐,他不仅是识人,还识技术,这就是他的伟大之处,就是苹果内部,包括那个艾维都承认,如果不是乔布斯,好多技术,创意在其他公司早就被否定了,而只有乔布斯,才能把这些技术,创意变成优雅的产品,再用优雅的方式推销出去。
    现在斯人已逝,来自全世界的尊重不是没有原因的,虽然人无完人,但是乔的贡献,是大大的。

  3. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 Zhao Jeffrey

    乔布斯作为产品经理和销售推广绝对无话可说,但你说XX技术是他发明创造出来的,或是苹果产品对技术的贡献“大部分”应该算在他身上,我觉得实在是过了。你当然可以说“没有乔布斯”就没有苹果产品,这些技术就推广不出去,或者就被否定了。但是,还是得继续分清他到底做了哪些贡献,是有选择技术的眼光?设计技术的思路?识人的眼光?放权的本事(这个……)?否则也只是往造神的方向继续推动罢了。

  4. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 曹 云飞

    是乔布斯的手下在技术上创造了产品,是乔布斯让他的手下得以创造这些产品并把这些产品推销到全世界。谁的贡献大?

  5. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 李 玉珏

    乔是领袖级的人物,几乎公认的天才,不能用评价一般发明家或者企业家的思维方式来考虑,就像我们评价革命时期的毛,他没扛过枪打过仗,但是他定下了策略,指引了方向,凝聚了人心是一样的。龙是大家画的,但是乔点了睛。

    历史评价是历史评价,还是得从大处着眼,宏观一点。
    你要说的具体了,乔把很多人的成果据为己有,这个很多人都这么说,可能也是事实,现在人都死了,如果当事人都不想分得清清楚楚,弄得非得对薄公堂搞得明明白白之类的,我们外人就更不用去细分了,这个和乔人品有关系,呵呵,但是从大处说,只能说瑕不掩瑜吧。

  6. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 李 玉珏

    乔是近几十年来行业的领袖,是领导者,好多技术,好多产品的产生过程他都是亲历者,也许不是他发明的,但是你也不能说和他没关系是吧?
    现在国际国内的主流评价,更多的评价,缅怀,还是主要说他的创新精神,洞察力,执着,完美主义之类的,并没有强调某某某是他发明的,主要还是在精神层面,并不是在具体的某个东西上面,我想,群众的眼睛还是雪亮的。

  7. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 李 毅

    老乔是管理者,你让一个管理者亲手去开发代码,去做硬件,这肯定是不可能的,即使一个技术项目经理,他也不能自己动手去写所有代码,去设计所有硬件。任何一个大项目,所有的功劳不可能时一个人做的,但是总有某些人的贡献是最大的,乔布斯不是神,但是他无疑是他同时代的人里面最优秀的,没有之一。

  8. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 李 毅

    跟国内很流行的“在XX领导的指点下”,“三个代表指引量子力学发展”论文不是一个套路的么…
    ----------------------
    这个就有点虚了,NEXT是乔布斯自己创办的公司,说是在老乔的领导下,一点不为过吧?这个和这旮旯的领导事情不干,最后说成什么都是领导的功劳,应该是两码事情吧

  9. 返回顶部

    高要求啊

    发表人 无 趣

    在Steve身边,你只能做出前无古人,乃至后无来者的产品。其中的关键是他并不会直接这么告诉你,但只要没达到他认为有可能达到的高度,就会被认为一文不值。

  10. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 梁 非

    毛是指毛十八吗

  11. 返回顶部

    感觉在神化一个人,jobs无所不能啊

    发表人 zhai duo

    不过可以长长见识

  12. 返回顶部

    围观

    发表人 king anna

    为什么都是一个套路,只有人死了才会那么大范围的被关注,比如说以前的毕加索,现在是乔。
    这么大范围被关注的人一定了不起,所以过来围观。看了他的一些以前做的讲演,觉得了不起的人的思想的确很了不起。所以我的结论是看完网页,然后关掉它,自己该干嘛干嘛去。成功想复制还得看看自己的能耐,还有天时地利人和。
    最后说一句乔的心境真的很厉害,我觉得甚至比他的成就还要棒。

  13. 返回顶部

    Ruined Thread

    发表人 Yang Jason

    评论开了个好头,没想到还是湮没在老一套的歌功颂德和陈腐的八股之下了,你与他讲技术或者提出对领导者技术成就的质疑,他非要与你谈领导力或是领导力对技术的驾驭,用的词无非是伟大、贡献、领袖、天才...
    我认为这篇文章,尤其是一些人作为缅怀的追述,是无可厚非的,不过要真实理性地评估一个人,还是要做缜密的调查和分析。
    其实不要说别的,光是惊人的洞察力和对技术的热忱(针对领导者而言,不同于其在技术方面的成就)就足以使其做出一定的成就了。而且我坚信要对编程语言做出贡献,编程相关出身并不一定是一个先决条件。

  14. 返回顶部

    21世纪是悲哀的

    发表人 Zhou Fan

    不得不说,过去的50年人类在各个领域的创造力都下降了很多,没有再出现达芬奇,巴赫,笛卡尔,爱因斯坦这样的人物,所以显得乔布斯像神一样。

  15. 返回顶部

    我任务apple下面的api变化太快了...对开发人员不友好.

    发表人 Lai Mead

    虽然对用户很友好.但是对开发人员不友好....
    可见在apple的工程师,都是很吃力的...

  16. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 Chen YuGuo

    完全支持你的看法,我也这么为认为!

  17. 返回顶部

    这个论据有谁知道,能否提供一些详细链接?

    发表人 zhang joa

    它的目标之一是绕开Unix“一切都是文件”的概念,因为这个概念被日渐证明不符合实际

  18. 返回顶部

    Re: 我觉得还是要分清哪些是“乔布斯的贡献”

    发表人 qingyong zhou

    楼上的意见还是很中肯的。

  19. 返回顶部

    “参与推广”?

    发表人 Wang Yuxing

    "参与推广了不少软件技术和编程范式,后来成为当前计算行业、编程语言和软件工程实践的基础要素。" 看第一眼我以为是"这些软件技术和编程范式“都是乔布斯创立的呢,刚想寻找具体的技术和范式的名称,再仔细一看原来是“参与和推广”,我想这就是作者希望读者观看时达到的效果吧。这样说来,我也“参与和推广”了很多编程范式。