文档章节

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

zjf_sdnu
 zjf_sdnu
发布于 2011/10/15 08:26
字数 4473
阅读 33
收藏 1

作者 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。

本文转载自:http://www.infoq.com/cn/news/2011/10/steve-jobs-contribution

zjf_sdnu
粉丝 4
博文 13
码字总数 0
作品 0
烟台
私信 提问
苹果输了商标官司,「Steve Jobs」成了一个服装品牌

摘要 意大利的两个年轻人把乔布斯的名字注册成了商标,「Steve Jobs」现在成了一个服装品牌。 「乔老爷子不会同意这样做的。」 每当苹果在产品上做出一些糟糕的设计时,总会有人这样说。「S...

刘丢丢
2017/12/29
0
0
知识图谱之关系抽取之PCNN——tensorflow实现

知识图谱( Knowledge Graph)以结构化的形式描述客观世界中概念、实体及其关系,将互联网的信息表达成更接近人类认知世界的形式,提供了一种更好地组织、管理和理解互联网海量信息的能力。上...

王鹏你妹
03/02
0
0
[译文]史蒂夫.乔布斯是个伪君子

Dusty Wilson 发表了一篇关于史蒂夫.乔布斯 (Steve Jobs) 的评论,转译如下: 丹尼斯.里奇 (Dennis Ritchie) 是 C 语言的共同发明人, 而后者基本上可以说是整个计算机行业的基础. 他也是 UNIX...

红薯
2011/11/07
6K
53
苹果内部文件揭露 7 寸 iPad 构想

苹果与三星本月开庭的互控侵权官司陆续揭露了彼此内部的通讯数据,其中,苹果的邮件显示该公司高层从2010年便多次提出7寸iPad的构想,还在邮件中指出Steve Jobs最后看似已经很能接受此一提案...

it224
2012/08/06
2.2K
8
下次再和女友聊起乔布斯 她可能会拿出一件衣服!

对于果粉来说,Steve Jobs不仅仅是一个人的名字,它甚至成为了承载苹果时代情怀的一个载体。 而在12月28日,Steve Jobs这一名字正式属于某意大利服装品牌创始人Vincenzo 和 Viacomo Barbato ...

m7720eiosi6oa9
2017/12/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MongoDB系列-在复制集(replication)以及分片(Shard)中创建索引

关注我,可以获取最新知识、经典面试题以及微服务技术分享   在使用MongoDB时,在创建索引会涉及到在复制集(replication)以及分片(Shard)中创建,为了最大限度地减少构建索引的影响,在副本...

ccww_
27分钟前
18
0
SAP HANA数据库multi container模式JDBC链接connection refused

报错如下信息 com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: Cannot connect to jdbc:sap://xxx.xxx.xxx.xxx:30015 [Cannot connect to host xxx.xxx.xxx.xxx:30015 [C......

flash胜龙
52分钟前
37
0
c++ 虚基类

c++ 虚基类 p556

天王盖地虎626
58分钟前
93
0
k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的...

Andy-xu
今天
85
0
seata源码阅读笔记

seata源码阅读笔记 本文没有seata的使用方法,怎么使用seata可以参考官方示例,详细的很。 本文基于v0.8.0版本,本文没贴代码。 seata中的三个重要部分: TC:事务协调器,维护全局事务和分支...

东都大狼狗
今天
48
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部