文 / 王越
Interface Builder,是用于苹果公司 Mac OS X 操作系统的软件开发程序,Xcode 套件的一部分,于 1988 年创立。它的创造者 Jean-Marie Hullot 自称是“一个热爱旅行、充满激情的摄影师”,本篇分享 Hullot 热爱技术的那一面——创造 Interface Builder 的过程。
因势而动
1981年, Jean-Marie Hullot 拿到巴黎第十一大学的计算机科学博士资格后,开始了法国国家信息与自动化研究所(INRIA)的研究生活。
Jean-Marie Hullot 的名字似乎不为大众所熟知,但他设计的 Interface Builder 却深入人心,创造了一个个软件神话。
20世纪 70 年代初,正是面向对象程序设计开始走上历史舞台的时期。许多现代计算机技术的诞生地 Xerox PARC(施乐帕洛阿尔托研究中心)的 Alan Kay、Dan Ingalls、Ted Kaehler 、Adele Goldberg 等人,从 1969 年开始研发一款面向对象的程序语言 Smalltalk,并于 1980 年正式公布。这是一个完整地实现面向对象范型的编程套件,包含了一种面向对象的程序设计语言、一种程序设计库和一个应用开发环境(ADE)。
虽然当时的机器跑得巨慢无比,但 Smalltalk 先进的思想对其他众多的程序设计语言(Objective-C、Actor、Java 和 Ruby)的产生起到了极大的推动作用,对计算机工业界的发展产生了非常深远的影响。我们将会在今后介绍 Objective-C时,详细介绍 Smalltalk 及其对 Objective-C 的影响,这里先一笔带过。
Smalltalk 的发布在业界一石激起千层浪,也给 Jean-Marie Hullot 幼小的心灵带来了巨大的震撼。他立即明白了面向对象思想所代表的先进生产力,一定会改变今后数十年的程序设计流程,他毫不犹豫地成为面向对象编程模式的早期粉丝。
SOS 的助力
那时,Jean-Marie Hullot 使用早期的 Macintosh 计算机进行开发。不过他很快就和其他开发者一样,发现虽然 Mac 的用户界面做得不错,但开发程序实在是太糟糕了。他说:“当 Macintosh 被发明出来时,计算机和先前就大不一样了,你至少需要花 60%~70% 的时间在用户界面部分的代码上。”在 Macintosh 被发明之前,用户界面是相当简单的,只需要在命令行下面打一串字符,计算机就会回应出一行行的信息。所以在那个时代,开发者完全不需要专注于用户界面。而 Mac 一经发布,随之而来的众多的窗口和菜单,让整个世界都不一样了。虽然对于使用最终产品的用户而言是简单方便的,但对于码工来说简直是个噩梦。每次他们需要一个窗口或者菜单,都要从零开始构建。
聪明的 Hullot 开始动脑筋改进 Mac 编写用户程序难的现状。他开发了一个程序,有点像现在 Windows 系统中的“画板”。一侧的工具条,是类似菜单这样的大量可重用的对象;而另一侧,则是程序员想构建的用户程序界面。只要把工具条上的工具拖放到程序界面中,那么类似“打开”、“打印”等相关的功能,就可以被添加到用户界面中。事实上,这个程序,是最早的一批能通过鼠标把控件拖入界面设计窗口实现相应功能的商业程序,是用户界面设计软件的先驱。
这个跨时代的发明被称作 SOS,用 Lisp 语言编写【注:What are we going to called this thing 中认为此时就是 Interface Builder,但据 The NeXTonian 等多处资料表明,在 Steve Jobs 见到以前,该程序名为 SOS】。当时,ExperTelligence 开发了一种叫做 ExperLisp 的方言,SOS 即用此语言写成【注:http://en.wikipedia.org/wiki/Interface_Builder】。
此时 Hullot 忽然意识到,他设计的东西事实上很强大,其重要性简直可以和 Smalltalk 这样的发明相比——Smalltalk 让开发者尝到了面向对象语言的甜头,而 SOS 则是直接把对象放到了开发者手边。有了这么拽的东西,Hullot 意识到如果他只在研究所窝着,那只能让十几个人享受这一成果,而如果他跳槽,把这个工具公开,那对天下的码工来说可是大福音。
诞生之源
经过不断努力,Hullot 找到了一个值得推销自己发明的好地方——剑桥的苹果大学联盟(Apple University Consortium)。这个苹果和大学合作的组织看到 Hullot 的创作后反响很好,就推荐他去见 Jean-Louis Gassee。 Jean-Louis Gassee 是个法国人,时任苹果开发研究院主任,见到 SOS 后也认为这是个好东西,便说服他去美国闯一闯。经过几次的鼓励和推荐,加上美国对 Hullot 来说又不陌生,于是他就买了机票跳上飞机就奔赴美国。
不过当 Jean-Marie Hullot 来到美国加州苹果总部时,他却认为这不是一个工作的好地方——苹果已经是一个很庞大的企业,很难再有所创新发展。他最终决定不留在那儿,转而在美国寻找一个能把这个产品卖出去的人。四处推销之后,找到他用来写 SOS 的 Lisp 解释器的生产商,就是刚才提到的位于 Santa Barbara 的软件公司 ExperTelligence。
事实上,当时的 ExperTelligence 正在寻找合作商卖自已的 Lisp,而 Hullot 也在找合作商卖自已的 SOS,两者一拍即合,随即打电话给 NeXT,共同推销自家的产品。
NeXT 在 Palo Alto 总部的产品市场部人员接待了 Jean-Marie Hullot 和两位来自 ExperTelligence 的员工,被 SOS 的理念镇住,遂打电话请 Steve Jobs 下来看。Jean-Marie Hullot 像复读机一样又把自己的大作秀了一遍。老谋深算的 Steve Jobs 事实上早就看中了 SOS,但他对 ExperTelligence 的 Lisp 一点兴趣都没有。所以他装作对这场演示毫无兴致【注:这有很多引用该文的翻译译错,原文说 nonplussed,字面意思为惊异,但在美国非正式表述中,此字表毫无兴致】,挥挥手就把这三个人打发走了。
但当他们一行人走到停车场时,Steve Jobs 让他手下把 Hullot 追了回来,当他只身回到 NeXT 总部时,发现 Steve Jobs 正恭敬地等着他。
“我想要你计算机上那个程序”【注:http://rixstep.com/2/0/people/】,Steve Jobs 说道:“你大概什么时候能开始给我们工作?”
Hullot 回答说自己翌日就要离开去度假。
“好吧,我两周后给你打电话,”Steve Jobs 说。
“不行,老乔”,Hullot 表示:“我不游美国,我可要环游欧洲,你七个礼拜后再打给我吧。”
Steve Jobs 虽然一骨子傲气,但他明白一个简单的道理:21世纪最缺的是什么——是人才!即使 Jean-Marie Hullot 玩起了大牌,这电话自然还是要打的。Hullot 刚一度完假回来,Steve Jobs 的电话就如期而至。
如此三顾茅庐般的热情,把 Jean-Marie Hullot 感动得第二天就登上了去美国的飞机。合约签了半年,但实际上他最终在 NeXT 整整待了十年。在 NeXT 工作期间,他使用 Objective-C 和 NeXTSTEP 框架重写了 SOS,命名为 Interface Builder。由此,Interface Builder 成为 NeXT 集成开发环境 Project Builder 标准套件之一。
进阶与探索
Interface Builder 和 SOS 一样,提供了一个工具箱,包含一系列用户控件对象。工具箱并不是官方定死的,而是可以任意扩展的,比如如果用户想使用类似 Safari 中的 toolbar,而这不是官方提供的,则下载第三方的 PSMTabBar 即可实现,甚至连 Cappuccino 这样的网页框架也可以用 Interface Builder 来完成设计。开发者只要把控件比如菜单和文本框拖入项目文件就能完成用户界面设计,节省了几乎所有和控件放置有关的代码。
开发者拖拽鼠标,将控件可提供的动作(IBAction)和另一个对象的接口(IBOutlet)连在一起, 则建立了一个绑定。这样,一旦动作被激发(比如用户点了按钮),那接口中相应的方法则会被执行。所以,大量对象关联的代码也能被省去。
有了这样的模式后,Interface Builder 和 Cocoa 可以比后来出现的 Microsoft Visual Studio 或 Qt Designer 等软件走得更远——只要是对象,Interface Builder 就能够操控它们,不需要一定是一个界面的控件。比如,数据库的数据源、队列等,都可以在 Interface Builder 中连接起来,于是很多原本需要上千行的复杂应用(比如用来显示、修改企业中职工姓名、部门、电话、地址、头像等信息 SQL 数据库的用户界面程序),数分钟内就可以写完,不用一行代码。不信?让 1992 年的 Steve Jobs 亲自做给你看【注:http://www.youtube.com/watch?v=j02b8Fuz73A, 第 23 分钟~第 29 分钟】。
NeXT 被 Apple 收购后,苹果把下一代操作系统建立在 NeXTSTEP 的基础上。Objective-C 和 Cocoa 被作为主要框架,而 Interface Builder 和 Project Builder 也因此受到重用。就官方的工具箱而言,支持 Objective-C/Cocoa、Carbon 的 HIToolbox 和 WebObject。
2008年 3 月 27 日,苹果发布首个 iPhone SDK,设计 Cocoa Touch 界面的,也正是 Interface Builder。可以说,Interface Builder 一直随着公司产品的发展而不断拓新。
Jean-Marie Hullot 是在 NeXT 被收购时进入苹果的。Steve Jobs 令他率领在法国的一个小团队,秘密为 Mac OS X 10.2 开发一个办公软件。以往这样量级的程序,都是由苹果加州总部的大班人马完成。而这次,为了向世人表明他的 Interface Builder 有多强大,iCal 横空出世,展示复杂的界面元素(日历、可拖拽的任务、五花八门的分类)和诸多功能(网络同步、Apple Script 脚本控制)可以用相当快速的时间内开发出来【注:http://www.appleinsider.com/articles/07/10/17/road_to_mac_os_x_leopard_ical_3_0.html&page=2】。
最后,在 iCal 小组打完酱油的 Jean-Marie Hullot 荣升苹果软件开发部首席技术官。
Project Builder 在 Mac OS X 10.3 时被重命名为现在大家所熟知的 Xcode。Xcode 3 以前,Interface Builder 使用一种名为 nib 格式的二进制文件格式。不过由于 nib 不能用肉眼读,也不方便使用版本管理工具来管理,所以 Xcode 3 开始新加入一种名为 xib 的文本文件格式,最后再在项目编译阶段输出为 nib 格式。和产生静态界面布局代码的工具(如 MSVC、QtDesigner、 Delphi 等类似的软件)很不同,nib 是不被转译成相应 Objective-C 代码的。用户程序执行时,nib 文件被读入,解包,并且唤醒【注:awake,即载入 nib 会自动调用程序中 awakeFromNib 方法】,所以 nib 文件是在运行时动态加载的。
长期以来,Xcode 环境和 Interface Builder 是两个独立但相互工作的程序。而 2010 年释出的 Xcode 4 预览版中,Xcode 和 Interface Builder 合二为一,成为一个一体化的编程环境。所以现在,开发者甚至可以只用鼠标在用户界面和代码间来回拖拽就能完成,这样一来 Interface Builder 对用户代码的解释也比先前更正确。比早期分离的程序使用起来确实方便很多。
当然,一个负面的影响是,这样用一体化集成开发环境写程序,往往会发现屏幕空间是不够的,所以像我这样用 11 寸 Air 或者 13 寸 Macbook Pro 的人,出去打招呼都不好意思说自己是做 Mac 开发的。
下一个海阔天空
在而后的岁月里,Interface Builder 创造了一个又一个应用软件神话,小到官方教程中的汇率计算器,大到苹果所有的家用、专业软件,都由 Interface Builder 完成。
在风起云涌的 1989 年,欧洲核子研究组织(CERN)工作的科学家 Emilio Pagiola 忽悠经费,买来研究所的第一台 NeXT 计算机——当时 NeXT 计算机在 CERN 可是个新鲜事物——那里的科学家们纷纷前来把玩,普通青年发现里面有全本的韦氏词典,并可自动检查用户输入的拼写错误,技术青年发现它跑的是 Unix 系统,还有一个可读写的光驱,文艺青年更是发现里面居然预装了莎翁全集。不过毕竟像 Emilio Pagiola 这样忽悠巨款买 NeXT 机器的青年不多,所以大家围观完了,也就回去该干嘛干嘛了。
但 Tim Berners-Lee 和别人不一样,他不仅围观了那台计算机,还看到了 Jean-Marie Hullot 设计的 Interface Builder,研究了 Objective-C,发现了面向对象编程范式开发环境的最高成就。这情景让他心中漾起了巨大的波澜,最终化为激情澎湃的投入,汇成了一行行面向对象的代码,一泻千里,奔向未来。
一年后,世界首个 HTTP 服务在 CERN 的 NeXT 计算机运行起来,而使用 Objective-C 和 Interface Builder 所编写的超文本语言编辑器兼浏览器同步发行。他给这个主从式架构起了个好听的名字——World Wide Web(万维网)。
Mac OS X 背后的故事(一)力挽狂澜的 Ellen Hancock
Mac OS X 背后的故事(二)—— Linus Torvalds 的短视
Mac OS X 背后的故事(三)Mach 之父 Avie Tevanian
Mac OS X 背后的故事(四)—— 政客的跨界
Mac OS X 背后的故事(五)上善若水