## 无模式文本编辑与“剪切、复制、粘贴”的历史
文/Larry Tesler
>Larry Tesler 曾先后领导 Xerox PARC、苹果、Amazon 及 Yahoo! 的人机交互项目,他在视觉交互设计过程的思想为许多设计人员、开发人员和研究者带来灵感。他最鲜明的主张莫过于反对交互中的“模式”——这是许多人机交互问题之源——以至于他的网站域名与车牌号都是“nomodes”。假如你使用 VI 编辑器,那么几乎无时无刻不在违背他的主张。他还是我们习以为常的“剪切/复制-粘贴”操作设计者,通过本文你将了解他的思想点滴。假如读者朋友对这个话题感兴趣,可以进一步阅读 Jef Raskin 的著作《人本界面》。
我从事计算机编程工作已经超过50年了,从一开始,我就为那些让用户使用不便的软件而烦恼。作为一名斯坦福大学的学生,我也为施乐帕克、苹果、亚马逊和雅虎公司做一系列的工程任务,改善用户的体验并且制定管理规则。所以,我决定做点什么,来改善目前软件对用户不友好这一现状。
我做过最大的贡献就是发明了现在大家使用最多的剪切/复制-粘贴这个操作,我跟几个同事花了好几年的时间发展了这种操作模式。但是,剪切/复制-粘贴的操作并不是我唯一的贡献,它是图形化用户界面(GUI)操作当中的一个,我将这种操作称为无模式文本编辑(Modeless Text Editing)。
其实,我并不是第一个注意到之前的模式(Mode)会带来很大的错误率,而且我也不是第一个尝试去消除这种出错率又高又繁琐的操作的人。但是对我来说,我却是世界上第一个将降低模式化(mode reduction)作为一份本职工作,或者说作为我的工作使命。我帮助发展了无模式文本编辑的理论基础,通过做出实际的产品来证实了理论的有效性。
### 20世纪60年代
在1960年,当我还是布朗克斯科学高中(the Bronx High School of Science)的一名学生的时候,我第一次接触到了 FORTRAN 编程语言。我非常欣赏它的编译能力,但是它那种非常不直观的界面设计让我使用起来头疼。在1961年,我开始了在斯坦福大学的求学生涯,次年,我发明了一种开拓性的动画语言,使得当时的编程语言的可用性大大提高。这个项目带给我很多可用性研究以及参与式设计(participatory design)方面的经验不久以后,这个消息就传开了,大家都说我是一个非常厉害的程序员,他让一个软件能够简单易用,一些教授和研究生都喜欢来我这咨询。
在1963年,我与他人合作创办了一家软件公司,这家公司是帕罗奥图市(Palo Alto)的黄页中仅有的六家公司之一。在二十世纪60年代,交互式分时技术开始取代批量处理技术,而且指针设备(鼠标)在小型计算机上变得越来越普遍。我其实更喜欢交互式批量处理,但是大部分的交互式程序都有大量的模式,这些模式对我就是绊脚石。于是,我就开始分析指令语言,从而找出是什么原因导致了这些模式和模式错误的出现。
在1968年,我开始在斯坦福人工智能实验室(SAIL)为精神病学家和认知科学家肯 · 科尔比(Ken Colby)工作。Colby 开发了一款叫做 PARRY 的应用程序,它是一个可以模仿一位偏执狂病人的对话程序。在他的团队工作期间,我认识了 Alan Kay、Don Norman、Terry Winograd,以及 David Canfield Smith 等人,他们都是人机交互(HCI)的先驱,同时我对认知心理学也有了一定的了解。
在1969年,我拜访了 Doug Engelbart 创建的增强研究实验中心(Augmentation Research Center),它位于加州门洛帕克的斯坦福研究院(SRI)。Engelbart最近首次公开展示了 NLS 计算机系统(oN-Line System),这是一个建立在分时操作系统上的一个很有远见的原型。这次展示也被大家公认为“所有展示之母”(the mother of demos),其中包括鼠标,平铺窗口,多视图,概述,超文本,协作编辑和视频会议等创新技术。从1968年到1970年,我为当地的一家非营利性公司用剪刀和胶水粘贴了一份季度报告,我当时就在想,花了这么多时间就干了这么点事,如果把“剪刀和胶水”变成“剪切和粘贴操作”那该多好。我想象了一个交互式的设计页面,它就可以实现这个简化过程。
在同一时期,Pentti Kanerva 像我展示了在等离子显示屏上(PDP-10)上运行的全文本编辑器(full-screen text editor)。Kanerva 在上面添加了一个简单的错误恢复命令,叫做 oops(系统执行软中断时会出现)。他还添加了两步移动操作指令:删除步骤将用户指定的文本移动到堆栈顶部;检索步骤将堆栈的顶层元素移至用户指定的位置。在这两个步骤之间,用户可以做任何事情,包括归档,搜索,输入和移动其他文本。虽然 TVEDIT 也并非是完全无模式的,但在我看来,两步移动操作和 oops-like 错误恢复命令可以让一些简单的设计编辑器变得无模式。
### 20世纪70年代
在1971年,人工智能实验室(A.I. Lab)的创办者 Les Earnest 拜托我帮他设计一个能够实现页面制作(page-makeup)的程序语言,从而实现页面自动地编号,并且具有索引,目录,脚注,交叉引用等功能。我当时建议他做成交互式应用,但是他想做成批处理式的系统,我承认这样做会更简单。在连续几个月的紧张工作中,我创建了 PUB(一个文档编辑器)。PUB 是一种嵌入了标签和脚本的标记语言,它在连接有阿帕网(ARPANET)的大学中受到了广泛的欢迎。
1973年,我加入了施乐帕洛阿尔托研究中心(PARC),成为 PARC 在线办公系统(POLOS)团队的成员,在此期间我还花了一些时间与 Alan Kay 的学习研究小组合作研究 Smalltalk。我有兴趣和 Alan Kay 合作研究的一个最重要的原因就是,他发明可重叠的窗口的动机就是想找到一种能够替代模式的操作,这种想法与我不谋而合。POLOS 团队的大部分成员来自施乐公司,他们也是 Engelbart 在斯坦福研究院(SRI)的团队成员。我的老板 Bill English 参与了鼠标的设计,与 Engelbart 合作发表了1968年的文章,并且掌管着著名的 NLS 展示系统。
NLS 系统最开始的设想主要用于设计和修改技术类说明书、源码和其它一些缩略的大纲。对于这些有专业需求的用户而言,这个系统可以说是他们最好的选择。但是,我并不认为它可以被公众所接受,因为公众真正想要的是一种可以编辑信件、备忘录和表格等通用文件的编辑工具,NLS 的指令语句中仍然包含大量的模式。除了文本输入模式(text-entry mode)之外,几乎每个点击操作都会改变模式。
NLS 系统的操作语言的语法是随着时间不断进化的,但它始终还是前缀性(prefix)的操作语言,也就是说在操作对象之前指定操作方式(详见图1和边栏:模式是如何降低可用性的?)。比如说对于删除操作,你需要提前在要删除的段落前告诉 NLS 系统,你要执行删除操作了。当指针结束时,你需要在当前位置点击鼠标按钮,这被称为标记(marking)。三个经常使用的需要标记的操作指令是:
图1 NLS 系统的前缀语法
- 操作一
D(删除)W(单词)<标记要作用的单词>
- 操作二
M(移动)T(文本)<标记源文本的起始位置><标记源文本的结束位置>
<标记移动目标>
- 操作三
I(插入)S(表述)<标记插入目标><点击文本执行插入>
点击代表用户接受当前的指令,可以通过键盘或鼠标调用该指令接受操作,文本(Text)可以针对任意的文本范围,而表述通常指一个段落。当用户用鼠标点击或者键入一个操作时,一条命令行的片段就会记录在一个可见的窗口中。用户可以从窗口中删除最新的命令行或擦除整个命令行,并重新开始。当用户调用时,NLS 将会擦除整个命令行,防止产生进一步的修改,然后,刚才输入的命令就开始执行了。
图2 无模式编辑器的后缀语法
由于移动指令(Move)是一条单一的指令,在输入”M”之前,目标位置和源文件都必须在屏幕上可见才行。当然,复制(Copy)和替换(Replace)操作都有这样的限制。虽然 NLS 在日后的更新中使用了可折叠的大纲这项功能来避免这样的限制,但是这样就造成用户必须提前学习更多的语法规则。我认为,如果我们坚持 NLS 系统的语法规则,别的竞争对手将很快远远超过施乐,因为他们软件的学习能力和易用性将远远强于 NLS。我的大部分同事那时根本不在乎这件事,因为他们觉得 NLS 还挺直观的,因为它具有和英语语法一样的动宾结构。即使语法还可以有很大的改进空间,但是基本的命令行还是得使用 NLS 旧版的指令终端。
在我工作的第一个星期,Bill English 要求我和另一个新人 Jeff Rulifson 一起工作,去开发一款能够改变历史的编辑器。Jeff Rulifson 和我多次会面,我们集思广益。当我表示出对于 NLS 系统的前景的担忧的时候,他竟然说他已经设计好了。他已经开发出了一个能够进行软件测试的临时工具。之后,Engelbart 的团队研究了我们设计的软件的可用性,并做了一些改进。但是他们并没有认真考虑后缀语法(suffix syntax),与前缀语法不同的地方在于,操作方式是在操作对象之后指定的。我告诉了 Rulifson,后缀语法对于错误的恢复有很大的帮助(详见图3、图4)。我总结了下面这两点:
图3 基于 NLS 系统的前缀语法的错误恢复过程
图4 基于无模式编辑器的后缀语法的错误恢复过程
如果一个用户在指定操作对象的时候做出了选择错误,她可以简单的再次重新选择,她没有必要在命令行中对指令做备份,也没有必要删除这条指令重新操作。
如果一个用户在指定操作方式的时候出错了,那么操作的结果能够立刻显示出来。她可以调用另一个回退操作重新指定刚才的操作方式,来纠正她刚才的错误。
我以前从来没有见过比 TVEDIT 的 oops 使用更普遍的错误恢复命令,Rulifson 告诉我,我们 PARC 的一个同事 Warren Teitelman 在他的 LISP 的 shell 脚本中也引入了这种错误恢复指令,这种指令就被称作撤销指令(undo),这种开创性的方式成为了我们的榜样。Rulifson 也和我讨论过在界面中使用图形的问题。他最近读了一本关于符号学的书,书中将一个图标定义为带标签的标签(icon),同时也提到了它与交互式计算的潜在关系。
我们针对 PARC 系统发布了好几个版本的白皮书,这个白皮书被称作“OGDEN”,即“针对非程序员的通用显示编辑器”。同时,我们还提出了桌面和文件夹这种图形化的用户界面。最重要的是,剪贴/复制-粘贴这种无模式的后缀型指令也是我们率先提出的。Rulifson 考虑了我的建议,他最终同意将他之前为 NLS 设计的用户界面变得更加简洁,也让 POLOS 团队的成员更容易理解。在 Barbara Grosz 的帮助下,我研究了包括空白屏幕在内的用户交互体验方法,从而揭示了引起计算机模式的主要原因[。然后,我利用早期版本的 SmallTalk 编程语言,发明了一种打字机式(typewriter-like)的编辑器,它仅仅包含很少的几种模式,让那些从来没接触过计算机的人在五分钟之内就可以学会简单的编辑操作。
#### 模式是如何降低系统的可用性?
在1981年的一篇关于 Smalltalk 的文章中,我将一种模式(mode)定义为“一种持续一段时间的用户交互界面的状态,这种状态与任何特定的对象无关,除了能对操作员的输入进行解释之外,没有其他别的作用”。总共有三种类型的命令语言会产生与模式相关的问题。
- 操作方式作为操作对象的前缀
在许多互系统中最常使用的命令会涉及一个动词(操作方式)和一个对象(所作用的对象),但凡具有语言一致性的操作系统语言,都会具有一种普遍的命令语法,要么是前缀语法要么就是后缀语法。他们的区别就在于,用户是在操作对象之前还是之后指定操作的方式。后缀语法具有明显的可用性优势:因为在用户指定最后一个动词之前,就已经指定好了所要操作的对象,并且该行指令可以立即执行。相反的是使用前缀语法,系统需要先进入一个模式,以等待用户指定操作对象,然后相关的操作才能被执行。跟踪这种模式的变化,将导致严重地分散用户的注意力,以至于耽误手头上的任务。
- 关键含义是模式相关的
一些编程语言可以使用未经修改的字母键去做任何事情,但是想要以字母的方式输入一段文本,至少得需要两种模式:文本模式和指令模式。如果在指令模式下输入未经修改的字母键,但是用户误以为系统正处于文本模式时,那么系统就会发生意外,有时候甚至是灾难性的结果。
- 模式转义是不一致的
用户经常被困在一个模式中,经常会听到这样的抱怨:“我怎样才能摆脱这种模式?”
#### 反对无模式编辑和剪切/复制-粘贴的声音
- 异议1——用户的误操作
在执行剪切操作之后,用户可能会把重要的文本忘记在我们现在经常使用的剪贴板中。之后,她可能使用了剪切或者复制其它文件的操作将剪贴板中的文件丢失了。当然,她没有使用粘贴或者撤销这样的操作。
回应:一个合适的撤销操作或者版本设置将允许恢复意外删除的数据。
- 异议2——实施的成本
当用户使用剪切或者复制操作,然后在指定目的地之前关闭了源文档,那么软件必须保留剪贴板中剪切或者复制材料的副本以及它的字体,图形等,以防随后粘贴的时候需要它。
回应:从1975年到1982年,这的确是一个主要的问题,因为早期的个人电脑只有很少的内存和磁盘空间。但是我们知道,摩尔定律不久将为我们提供足够的内存和处理速度来保存大多数剪贴板中的内容。
回应:其实对于这种担心,软件开发者操的心比用户要多得多。十年以后,我们可以将这个话题转换成复杂性保存的方法。因为每一个系统都有其特有的复杂性,那么问题就在于谁来处理这种问题呢?是用户?应用程序员?还是平台开发者?
- 异议3——速度
如果你正在观看一位 NLS 系统专家在编辑文档,你会看见他的手指在飞速地操作着,而且能听到一连串的键盘和鼠标的敲击声。而当你观看一位使用无模式编辑器专家编辑文档的时候,你会听到单位时间内很少的声音。但是,一些 NLS 的倡导者引用费茨定律(Fitts’s Law),宣称 NLS 系统具有速度优势,并将其归因于操作中需要较少的鼠标操作。
回应:Stu Card 和 Tom Moran 表明,NLS 系统的命令语法需要比 Gypsy 系统更多的操作步骤,有时甚至是两倍,在某些情况下还需要更多的心理准备时间。在1981年,Terry Roberts 和 Moran 做了一项研究,他们比较了经验丰富的 Gypsy 用户和 NLS 用户以及其他六中知名编辑器用户。作者发现,有经验的 Gypsy 用户平均比使用其他编辑器的用户,在更短的时间内执行了一套标准测试任务,这个时间是使用 NLS 编辑器时间的三分之二。因此更少的键盘和鼠标操作是加快编辑速度的必要条件。
- 异议4——缺乏可扩展性。
虽然可以从文本编辑器中删除模式,但却很难从其他类型的软件(如画图软件)中删除模式。 回应:从上文引用的研究中表明,Gypsy 编辑器相比其它文本编辑器更加落后的一个重要的原因就是其功能性不足。但是,这个发现并不能说明无模式编辑的操作方式是不能扩展的,只是当时它还没有被扩展罢了。在苹果 Macintosh 进入市场的十年时间当中,吸引了大量的应用程序来证明无模式操作是可以扩展的。至于图形编辑器,我非常赞成把现实当中的画笔做成虚拟画笔这种操作方式,然后把这种模式反馈到用户一定会查看的用户界面上。
Bill English 要求我把注意力转向 POLOS 系统。施乐公司的教科书出版商 Ginn 要求 PARC 开发两个应用程序,一个用于 galley 编辑,一个用于页面布局系统。Bill English 知道我对这个很感兴趣,所以就让我来做这个项目。并派 Dan Swinehart 做我的助手。我和 Swinehart 曾在 SAIL 一起工作过,他是一个充满激情的和智慧的人。
我的建议是在页面布局系统和 galley 编辑器上同时使用剪切和粘贴功能。而 Ginn 很喜欢管理 galley 编辑,现在我有了一个能接受我观点的观众了。
另一个可喜的转变就是,Ginn 雇佣了一个名叫 Tim Mott 的软件工程师,他在波士顿附近的工场里进行人种研究。1974年,在完成这项研究后,Mott 来到 PARC,帮助我实现 galley 编辑器的开发,它被称之为“Gypsy ”。当他来时,施乐员工的一些个人电脑正在运行 Gypsy 。Charles Simonyi 和 Tom Malloy 得到了一个早期版本的 Bravo 文本编辑器。Bravo 是 WYSIWYG 应用程序的先驱,这个应用程序是 Butler Lampson 和
Simonyi 智慧的结晶。
为了实现 Gypsy 编辑器的功能,我们采用了 Bravo 的源代码,并用无模式的模型替换了原来的模式用户界面。在 Ginn 的请求下,我们添加了粗体、斜体和下划线等类型的操作,以及一个支持版本记录和草稿的文件系统。这个软件花了我几个月的时间才完成。
Gypsy 介绍了一些现在标准的非模式用户界面特征。
- 用户可以在字符之间点击,看到一个闪烁的插入点出现以后,然后开始打字上下拖动来选择文本
- 双击选择单词
- 移动文本只需要两个步骤:剪贴和粘贴
- 拷贝文本也只需要两个步骤:复制和粘贴
- 搜索,键入或者将搜索文本粘贴到可编辑字段中。
当我们开始实现的时候,并没有将所有的交互界面的细节都设计出来,而是希望在开发过程中不断地更新。我没有预料到的是 Mott 的创造能力,以及他同 Ginn 客户间的协调合作能力。举个例子,当我对文字选择的提议没有一个通过时,是他想出了双击的主意。经验教训:一个人不可能知道所有的答案,合作是最佳解决方法。
在 Gypsy 编辑器发展的过程中,PARC 雇佣了 Tom Moran, Stu Card 和 Beverly McHugh。他们注意到我在进行一个颇有用处的研究,就提议为我们未来的研究提供资助,Beverly 的研究对于完善用户界面是非常有价值的。经验教训:有些人能做到比你更好,合作是最好的方式。
当 Gypsy 编辑器在1975年初完成时,Mott 把它交给了 Ginn。用户喜欢它的优点,但也充分暴露了它的缺点。特别是几乎没有代码维护。这是一个工程最基本的要求,作为研究人员的我们却忽视了。经验教训:如果你要把你的研究原型给那些依赖它成长的公司,请确保有计划地对它进行维护。
1975年6月,《商业周刊》发表了一篇名为“未来办公室”的专题文章,提到 Gypsy 编辑器。还提到了剪切和粘贴功能,但只是在 Woodstock 的环境下。这是 Swinehart 在向 Gypsy 提出建议时所开发的办公系统原型。
其他 PARC 的同事在这个基础上继续改进产品,Mott 和我设计了专门的按钮来执行剪切,复制,粘贴和撤销操作。受 William Newman 在他的标记绘画项目中使用弹出式图标网格的启发,Dan Ingalls 在 Smalltalk 中实现了一个非常简单的弹出式菜单,也就是一个包含四中命令的列表。这个菜单演变成了今天常见的右键单击弹出菜单。经验教训:当你认为它很简单的时候,可能会有一种方法让它变得更简单。
Gypsy 编辑器还影响了 BravoX 和 Xerox Star 系统,BravoX 是 Simonyi 在 PARC 开发的 Bravo 系统的继承者。Star 是第一个使用鼠标、位图显示、窗口和文件服务器的商业办公系统。Star 拥有一个完全一致且近乎无模式的用户界面。BravoX 和 Star 都支持 “点击和类型”这种无模式的插入形式,但都没有使用剪切/复制和粘贴功能,在其中的一个版本,Bravo用户可以用比第二代 Gypsy 编辑器用更少的笔画来执行移动或复制步骤。在 Star 中是三步,在 Gypsy 中是四步。通过限制用户在源选择和目标选择之间的操作,来减少执行的步骤。在20世纪80年代早期,施乐的模型编辑器影响了苹果的 Lisa 和 Macintosh 软件的设计,也影响了微软的 Word、Office 和 Windows,随着微软和苹果产品的普及,剪切/复制粘贴和非模态的文本编辑无处不在,甚至现在的智能手机的多点触控屏幕上仍延续了这种模式。设计师们还在尝试用各种不同的方式来移动文本,比如 Word
中的拖放功能。不感兴趣的用户通常可以忽略它的快捷方式。
### 加强版 Gypsy
在 Mott 从 Ginn 回到 PARC 之后,他加入了另外一个项目,我接下来的任务是 Ginn 要求的页面排版系统的设计,我用 Smalltalk 语言写了一个名为 Cypress 的原型。在用户做了选择之后,编辑菜单会自动弹出。就像今天在 smalltalk-76 上实现的 iphone 一样,Cypress 的原型运行得很慢,为了演示它,我们以每秒3帧的速度拍摄视频,并以30帧的速度播放它。
而到那时候,施乐的首要任务已经发生了改变,我个人的兴趣也发生了改变。Ginn 同意等几年,直到他们能在一个维护良好的商业系统上实现网页布局。我开发了 Smalltalk 浏览器,它是当今 IDE(集成开发环境)的祖先。工作之余,我还自学了点计算机知识,并开发了 Commodore PET 的教育应用程序。在1979年12月,史蒂夫 · 乔布斯对 PARC 进行了一次历史性的访问,这促使我重新开始思考我的职业生涯。
1980年代,施乐公司的复印机专利为期已满,公司为了生存而奔波。很明显,除了激光打印机和 STAR 系统,我们不会给市场带来太多的 PARC 的产品,因为它们都是针对商业用户的。
之后我去了苹果,研究 Lisa 的用户界面和应用程序,为了开发 Lisa 用户界面标准,我与颇有才华的 Bill Atkinson 合作,同他分享了我坚持简易风格的理念。在那年夏天的几个星期里,Bill Atkinson 几乎每天晚上都要做一个原型,而我在第二天早上就会做一个可用性研究。Jef Raskin 开始研究一种名为 Macintosh 的概念,他对鼠标持怀疑态度,但还是慷慨地提供了建议和支持。
Lisa 的软件工程师掌握了无模式化的思想以后,找到了使其应用程序无模式化的更好的方法。我的工作就是管理它们,并对交互界面的设计做出正确的决策。
Lisa 对图形化用户界面提供的众多贡献之一是对话框,这是一个向无模式命令提供参数的工具。Rod Perkins 对 Lisa 对话框进行了设计。经典的的对话框可以防止用户在打开时继续工作,这又变成了一种模式。但是对话框中的小部件可以按任何顺序操作,使其成为局部无模式的状态。模式逃逸的方式是一致的,通过点击解除按钮进行一致定位和标记。
在苹果,与 PARC 一样,新的用户界面也有一些怀疑者,其中一些人更喜欢 NLS 的界面风格,但苹果公司想要做自己的产品。“派别战争”就爆发了,但他们没能持续几天。经验教训:如果你需要打一场艰苦的战斗,选择一座小山。
在20世纪70年代,剪贴功能是实现移动和复制操作的一种新方式,而现在这些术语的意思颠倒了过来,用户不会说他们想要“移动”东西,而是说“剪切和粘贴”它们。即使是关于 Star 系统和 NLS 系统或者有移动功能的其他系统的学术著作,也常常把移动/复制操作称为剪贴/复制-粘贴,在计算机时代到来之前,复制和粘贴这两个词是行业术语,复制和粘贴这两个词似乎起源于 Gypsy。而在今天这两个词语都被广泛理解应用。我不知道是谁创造了复制-粘贴操作,或者复制-粘贴错误,但当我用复制-粘贴操作出现错误的时候,我不会责备任何人,因为我没人可以责备。
>致谢:
>
>感谢 William Newman,Bill Duvall,Stuart Card,Charles Simonyi,Jeff Rulifson,Terry Roberts,Charles Irby 和 Tom Malloy 审阅了草稿并提供了准确的更正和深刻的见解,如果还有其他的错误,那都是我的责任。