原文

Personal Computing – Alan Kay 1975

提醒: 阅读原文需注意 18-19、20-21 页装订反了.

译文

简介

想象一下,在一个普通笔记本大小的便携包装中,拥有一台你自己的知识操纵器。如果它有足够的能力超越你的视觉和听觉,有足够的能力储存成千上万页的参考资料、诗歌、信件、食谱、图画、动画、乐谱、波形、动态模拟以及其他你想创造的、记忆的和改变的东西,你将如何使用它?

几年前,我们将这些长期以来的愿望具体化为一个设计理念,它是关于一个名叫 Dynabook 的个人动态媒介(personal dynamic medium)。我们相信,Dynabook 所需的硬件能力在十年后必将得到满足,但人机通信的进展以目前的速度继续下去,它将很难被数以百万计的潜在用户使用。

尤其是,我们希望我们的用户包括 5、6 岁的儿童和 非计算机专业人群(noncomputer specialists),如秘书、图书管理员、建筑师、音乐家、家庭主妇、医生等等。我们强烈地感到,Dynabook 的主要设计问题在于通信领域,而不是新的硬件结构。

由于很难用 “亚里士多德的方式”(躺在吊床上思考)来设计这样一个综合全面的系统;我们和 PARC 的其他人一起,设计并建造了许多独立自足的 Interim(临时) Dynabooks,以便为我们的想法提供一个坚实的测试平台。这些机器是我们的实验性通信媒介 – Smalltalk 的环境。Interim Dynabooks 和 Smalltalk 都已被儿童和成人使用。

设计背景

设计这种更高级别的个人元媒介(metamedium)的第一次尝试,是在 1967-69 年开发的 FLEX 设备。从计算机科学最先进的研究角度来看,许多硬件和软件都是成功的,但正如通常的情况一样,缺乏足够的表达能力,无法对普通用户真正有用。当时开始出现了 Papert 和 Feurzeig 的开创性工作,即通过给孩子们一个既有趣又有意义的思考环境来帮助他们学习如何思考。

他们选择了一台分时(time-shared)计算机,并设计了一种简单而全面的语言,称为 LOGO,它结合了 JOSS 和 LISP 的一些最佳特点。使用 LOGO,孩子们(8-12 岁之间)学会了控制一些令人兴奋的活动:一个能画画的机器人海龟(turtle),一个更快的 CRT 版本的海龟,和一个简单的音乐发生器。

LOGO 作品在几个方向上散发着令人信服的兴奋。

首先,孩子们真的可以为海龟和音乐盒编程,做一些严肃的事情。这些程序使用符号代表对象,包含循环和递归,在选择策略之前需要对替代策略进行相当程度的可视化,并涉及互动发现和消除他们想法中的 “bugs”。正如 Papert 所指出的,孩子们正在进行真正的数学行为,其种类、范围和水平是许多大学毕业生从未达到的。

其次,孩子们喜欢它! 对话的互动性质、他们处在控制位置、他们正在做真正的事情而不是玩玩具或解决"学校"问题,代码运行导致的视觉和听觉效果,都为他们带来了巨大的成就感。他们的注意力是以小时而不是分钟来衡量的。

在看到孩子们突然发现他们是对世界采取行动的主动者,而不是被支配的东西之后,很明显,下一次设计个人电脑的尝试应该以儿童为中心。

首先,让儿童作为用户,将使表达性交流的问题成为焦点,这些问题曾给 FLEX 机器带来困难。此外,也许可以发现为什么使用 LOGO 的孩子们在命名和参数、合理划分他们的问题方面有一些自己的困难,以及为什么他们似乎达到了一个瓶颈:他们可以设计和编写某些类型的建设性程序,但从未达到可以做一个真实系统的程度。

再者,儿童真正需要的计算和表达能力,比大多数成年人在使用分时系统时愿意接受的要多;分时系统能直接提供的最好东西是缓慢地控制粗糙的绿色线框图和(更粗糙的)方波"音乐"。另一方面,孩子们已经习惯了高带宽的媒介,如手指画、水彩、彩色电视、真正的乐器和高保真唱片。如果"媒介就是信息",那么低带宽分时的信息就是"胡话"!

我们的方法

一开始,我们就承认设计一个真正有用的(日常使用的)动态媒介是一个困难但极有价值的问题,需要多年时间和几个完整的临时软硬件系统来设计、建造和测试它。我们的方法是:

1 概念化一个 “圣杯” 版本的终极 Dynabook 在未来应该是什么样的。

这个图景将提供一个集合点和目标,提醒我们在生产中间系统的过程中,我们正在努力做什么。

对 FLEX 机器[4]的一种推断(和压缩)

2 在人的因素、感知心理学、物理学和语言设计方面进行研究,这是任何认真尝试临时系统的前提。

很少有显示器是利用人类视觉系统的任何知识来设计的,也没有许多人工语言是在非印欧模式上开发的。

关于 Dynabook 应该是什么样子的概述,包括显示需求和语言设计的原则,参见[4]

3 设计一个 Dynabook 的临时版本,并建造相当数量的 Dynabook。

我们觉得这一步和下一步是我们研究中的关键步骤。我们必须尽快接近孩子和成人,以免被自己的假设和期望带入歧途。

4 使沟通的媒介尽可能的简单有力。

它应该比 LOGO 更简单,但更强大(质的提升)。它应该比最先进的、用于严肃系统设计的 “成人” 编程语言具有更强的表达能力。它应该尽可能地对所有可以想象的模拟 “中立”。

5 通过大量的短期项目来探索这样一个系统的有用性,这些项目涉及许多用户,年龄从 4 岁到 60 岁,来自不同的背景,有不同的需求和目标。

这一阶段将涉及开发各种模拟媒介,旧新媒介都有;寻找方法来教授系统中的想法;进行用户研究,试验同龄人的教学(例如 13 岁的孩子教 12 岁的孩子),等等。

我们所进行的一些项目在[6,7,8]中进行了探讨

6 根据我们之前的研究,重新扩展系统,并开始思考下一个临时版本。

我们的指导思想之一是做许多可以工作的版本,而不是一下子就尝试一个长期的 “完整解决方案”,这样做可能永远得不到一个可工作的系统。

7 我们目前的计划是建立一个社区资源中心,其中包括一些临时的 Dynabook 系统,在学校和操场 “交通” 模式(’traffic’ patterns)附近的开放式和封闭式商店使用。

为了弄懂儿童/成人如何思考他们的世界,我们需要进行一系列的纵向研究,研究动态媒介的日常/随意使用如何影响人们的做事方式(和他们的生活)。

我们目前期望在不久的将来开始建立这个设施

Interim Dynabook 和 Smalltalk

Interim(临时) Dynabook 是一个完全独立(self-contained)的系统,是根据模拟和人类因素(human factors)的实验设计的整体。对用户来说,它就像一个小盒子(里面可插入一个包含约 1500 页可操作存储的磁盘存储器),与一个非常清晰的高分辨率黑白 CRT 或一个较低分辨率的高质量彩色显示器相连。

其他输入设备包括标准打字机键盘、“和弦"键盘(用于发送同时的信号)、“鼠标”(在桌子上移动时输入位置),以及各种用于演奏音乐的风琴式键盘。这些新的输入设备可以很容易地连接起来,通常不需要为它们建立一个硬件接口。

视觉输出是通过显示器实现的,听觉输出是通过一个内置的数模转换器实现的。转换器连接到一个标准的高保真放大器和扬声器。

我们将在下一节中看到,Interim Dynabook 的功能足够强大,能够制作实时的半音(half-tone)视频动画,以及实时的多声部乐音( musical-tone)合成。

Smalltalk 是一种非常简单、全面的模拟动态模型的方法。大多数编程语言的内置基元(如数字、文件、数据结构等),在 Smalltalk 中,实际上是由更全面的想法建立的模拟,包括进程中的状态、使用消息的通信以及类和实例。

它的两个基本目标是:简单的事情应该非常简单,人们不应该为了做明显的事情而阅读手册;而且,复杂的事情应该非常可能,全面的交互式系统应该很容易被编程,而不需要 “头发或祈祷”。

正如本文后面所看到的,Smalltalk 是一种成功的 “可扩展语言”,因为它完全专注于通过描述来表示事物的意义,获得其句法可扩展性是 免费 的。

Smalltalk 的主要脉络可以追溯到 CDL 中新的控制思想与 FLEX 及其前身的结合: Sketchpad、SIMULA、JOSS 和 B5000 [18,1-3,12-16-J.

Interim Dynabook 轮廓图

在讨论我们目前系统背后的想法之前,我们先介绍一下过去两年里孩子和成人所创作的一些项目。

一个菜单驱动的绘画项目: 12 岁的孩子编写的程序

这是我们的孩子完成的第一个真正的系统;后来又有很多。这个孩子在做这个项目的时候并没有看过我们的任何绘画程序。她在接触 Smalltalk 的早期就决定,如果鼠标能告诉笔该去哪里,就应该能画画,而且是反复地画。第二天早上她就来了,写了这个程序,第一次就成功了。之后,她变得非常聪明,找到了将每一种可能的程序情况转化为绘画的方法。拥有各种画笔和颜料的想法是她提出的;拥有一个可用的重复性 “菜单” 的概念是由我们提出的,实现菜单的方法是由她设计和编程的。

这是我们第一次发现,Smalltalk 的构件实际上比目前大多数编程系统中更传统的 “名词/动词”(“数据结构/函数”)的原始想法更强大,更容易为天真(naive)的程序员所使用。

一个编舞/羽毛球系统

这个孩子接下来设计了一类可以单独或一起控制的舞者,然后将他们编排成各种舞蹈。接下来,她设计了一个 “木偶” 类(class),有手腕、肘部、肩部、踝部、膝盖和髋部关节。其中两个更复杂的人物被用于她的实时羽毛球模拟。

一个插图系统: 12 岁孩子编写的程序

这是一个由我们的孩子完成的最复杂的系统之一。图形对象可以被定位、旋转、缩放,可以有任何数量的边,图像接受系统可以产生的任何颜色,整个系统是由提示菜单控制的。注意物体上的 “亮按钮”,它是用鼠标 “抓取” 和移动物体的场所。

太空大战: 10-12 岁的孩子编写的程序

只要有图形显示器与数字计算机相连,太空大战就会自发地出现。过去的几年中,孩子们已经完成了许多不同的版本,从和平的登月和货船舰队,到成熟的游戏。星域(包括新星和超新星)形成一个有趣的背景。

一个飞行模拟器:15 岁的孩子编写的程序。

这个相当复杂的系统使用了一个实际的飞行模型,这个模型是学生在一本航空学入门书中找到的。人工地平线位于面板的顶部,上面是倾斜度。‘杆’、踏板和油门都可以通过鼠标来抓取。一组镜头显示飞机处于慢速翻滚状态,然后通过操控操纵杆进行修正。

窗口和不同字体的不同效果

前面显示的飞行模拟器使用 Smalltalk 窗口来显示仪器值和地平线。每个窗口都有一个 Smalltalk 对象作为其内容;它们可以被移动、拉伸、重叠和编辑。

我们的目标之一是 Dynabook 在任何重要方面都不比纸张差。Dynabook 是灵活的,允许它的用户描述知识的呈现方式,包括量身定做的印刷质量字体。任何字符字体都可以被描述为黑白点的矩阵。如果显示器的光照度足够高,而且分辨率足够高,那么在正常的观看距离上,这些点的边角就不会被察觉。在这里,我们看到一种正在创建的字体,以及一些可用字体的文本显示。

归档和编辑

Dynabook 中的每个描述(description)都可以以完全统一的方式被检索、显示和编辑。每一类对象(文本、图片、字体、电影、音乐)通过调用自己的方法在屏幕上显示自己来响应 show 消息。显示的对象会主动观察光标是否进入它们的边界,如果光标进入,edit 消息就会被发送到该对象。以类似于 show 消息的方式,每一类对象都可以用自己适当的方式对 edit 消息做出反应。

如果对象是文本,就会调用一个易于使用和修改的 “无模式” 文本编辑器,并自动进行调整。 绘图和绘画(drawings and paintings)都有自己的简单编辑器,正如音乐乐谱、音色等。一个文件只是一个相关对象的集合,它可以按内容自动交叉归类,这些内容包括标题、作者、日期范围、选定的键(keys),以及文件所有者希望的任何其他内容。一个新的对象类别可以以完全独立的方式添加到文档中,因为系统的任何部分都不需要被告知;相反,新的类别只是采用了传统的协议,能够对标准的消息 showhascursoredit 进行响应,用本地方法实现这些目标。

这个系统的当前版本能够自动交叉归档数以万计的对象,包括按内容索引的文本文件、Smalltalk 系统本身、个人记录、书籍等等。如例子所示,检索是通过简单地将关于文件的已知信息填入一个空白模板来完成的;系统将检索出符合描述的文件集合。

曲线

Smalltalk 有一类海龟(turtles),它们可以在屏幕上爬行,留下(或不留下)可变宽度的彩色墨水轨迹。海龟有一个位置、一个方向、一个笔尖状态(抬笔或落笔)、一个墨水颜色、一个边界,以及用户可能喜欢的任何其他属性。海龟可以转动一个相对的角度,可以在它的方向上走一段距离,可以到达一个位置,等等。

一个强大的想法(从 LOGO 中借来的)是,海龟是无坐标的,因为走和转向完全是相对于海龟的当前状态。因此,海龟生活在曲线世界中。直线曲率为 0,圆有恒定的曲率,线性变化的曲率产生美丽的平滑曲线。这可以与笛卡尔世界形成对比,在笛卡尔世界中,0 产生 0,斜坡产生直线,圆和简单的曲线需要一个二次方。

动画和音乐

动画、音乐和编程可以被认为是动态过程的不同感官视角。它们的共同结构在 Smalltalk 中是显而易见的,它为表达这些想法提供了一个中性框架。所有的系统都同样可以通过 “手” 或程序来控制;绘画/绘图(drawing/painting)由鼠标或 曲线和区域程序 来指导;音乐事件由类似钢琴的键盘或动态 “乐谱” 来启动。音色是音乐表达的 “颜料”,因为它们包含了不同乐器为管弦乐带来的特质和气氛。

由动画师编程的图片动画系统

几位专业的动画师带着对 “魔法板”(magic-slate) 的长期梦想访问了我们,这将使他们能够通过简单的"挥舞双手”(字面意义)来创造高质量的动画。他们希望在已经运行的动画中绘制图片,以便最大限度地利用 “phi” 效应(它导致动画的主要动作是帧之间的变化)。

由音乐家编程的音频动画系统

动画可以被认为是通过时间对视觉图像的协调平行控制。同样地,可以想象一个代表和控制音乐图像的系统,它与视觉世界有非常强的相似性。音乐是设计和控制音调图像(音高和持续时间的变化),这些图像可以被涂上不同的颜色(音色变化);它具有同步性和协调性,在音频和空间可视化之间有非常密切的关系。

音色合成

我们使用几种方法来实时制作高质量的音色;这两种方法都允许任意的瞬态,许多独立的并行声音,并且完全由程序制作:不使用特殊的硬件。其中最有趣的是允许独立动态控制频谱、频率、振幅,以及将被听到的特定的准音集合。

乐谱采集和编辑 1:动态采集和乐谱制作。

这是一个由经验丰富的音乐家的新手程序员编写的乐谱采集系统,该系统直接从实时弹奏音乐键盘获得的数据中生成传统乐谱。

乐谱采集和编辑 2:一个全面的音乐编辑器

标准的音乐记谱法有很多缺点:必须记住大量的符号,衔接不容易显示(不用杂乱无章的休止符),精确的持续时间控制是非常繁琐的记谱,五线谱偏向于某些键,而且孩子们很难看出听起来相似的和弦确实是相同的。因此,我们大部分的音乐编辑都是用一种更简单的记谱法,用长度来显示持续时间。

这些系统对儿童和成人都有许多好处。

语义很容易理解,因为它们有意地来自现实世界的拟人化。音频和视觉世界之间以及艺术和科学之间的强烈相似性得到了强调,因为在这两个世界中实际使用的是一种单一的语言描述。

儿童可以通过学习绘画和游戏获得技能和协调性。这些系统将为他们展示和重放他们刚刚尝试的东西,然后让他们将自己的努力与更专业的模型进行比较,这与网球或滑雪教学的方式很类似。

由于许多“肮脏的工作”是自动化的,因此可以在获得肌肉专业知识的同时学习随时间变化的构图艺术和技能。这不是假肢,而是放大器。

我们对天真的用户的经验

Smalltalk 的用户包括 6-15 岁的儿童和成年人,其中既有计算机专家,也有非计算机领域的专家(noncomputer specialists)。虽然我们对儿童的跟踪时间不够长,无法确定他们使用 Smalltalk 的经历是否从质上改变了他们看待和思考世界的方式,但我们从我们的经验中得出了一些主观结论。

首先,最重要的是,编程能力是人类天生的能力。每个人都可以做到这一点。

使用 Radia Perlman 的按钮盒,我们看到三四岁的孩子有意识地计划和 “写” 出画图的符号程序。八岁的孩子做登月的模拟,十岁的孩子做他们自己的太空战,十二岁的孩子设计和实现整个系统的插图、编排和模拟。我们的一个 15 岁的孩子最近完成了一个相当复杂的互动飞行模拟器(它使用空气动力学模型从一个状态移动到下一个状态)。秘书们已经成功地计划并为编辑和检索系统增加了新"特性",艺术家们,过去曾经尝试过,但都失败了(用BASIC等),现在已经能够将他们的一些渴望转化为他们想法的运行模拟。

只有一些人觉得这很了不起,这才了不起。

编程是这样一种行为: 以符号方式交流 对过程的描述,它与 “自然” 语言的行为完全相同。我们应该能够有把握地猜测,所遇到的大多数问题将是语言性质的问题(例如,像学习法语那样),而不是由于学习者的智力问题。

第二,我们已经看到与编程和调试有关的技能和与设计有关的技能之间有明显的区别。

打个比方。Smalltalk 可以被比作一个可扩展的 Tinker Toy(Thinker Toy?)套件。它包含了一些简单的想法,一些已经建成的支柱和连接器,以及一些可塑的塑料,用于制造意想不到的积木;对于我们所有的用户来说,这些都是显而易见的,可以用来建造简单的理想结构。他们在塑造新的结构元素方面也没有任何困难(这在 Smalltalk 中是很容易和自动的)。

我们可以想象,孩子们在使用 Tinker Toy 套件时非常开心(他们确实是这样做的),而且在这个过程中,他们学到了关于事物如何连接在一起以及如何在三维世界中进行操作的有价值的、更加典型的想法。

在 Smalltalk 提供的 “Thought-D” 世界中,儿童似乎也有同样的体验。

一个成年的结构设计师可以用他的 Tinker Toy 套件来测试一种新的想法,即为一种新的桥梁设计拱形跨度。设计师在经过几次试验后,会用他的 Tinker Toy 模型成功地跨越一大片区域,而且在这个过程中不乏扩展 Tinker Toy 套装的动力。

计算机系统设计人员发现,Smalltalk 是一种极其容易使用、友好的方式,可以将他们的(有时非常复杂的)想法变为现实。

假设现在我们把一个成年人带进了 Tinker Toy 套件。在成功制作了几个 “儿童型” 模型之后,这个成年人决定制作一座巨大的桥梁。结果大败而归,我们可以有把握地原因归结为:不是因为这个成年人缺乏 “智慧”,而是因为他对与大型结构有关的设计知识一无所知。毕竟,一群 “最聪明” 的设计师和建筑商花了 5000 多年的时间才发明了斜拉式拱门和托架 — 任何孩子今天都能读到并理解的想法。

‘不会编程’的成年人在用 Smalltalk 编程时没有任何问题。当他们尝试那些他们根本不了解结构的项目时,他们确实遇到了困难。

这个寓言说明了当前教学思想中关于智力崇拜的一个主要误区:表现(performance)、技能(skill)和 “先天能力”(innate ability) 之间存在令人难以置信的混淆。

我们教儿童和成人编程的方法,加上 Smalltalk 描述动态情况的简单和非常中性的基础,已经消除了许多与词汇、位置保持(place-holding)、抽象、语法等有关的通常的 “语言” 问题,并使我们能够更接近 “真正的问题”,这些问题涉及新手设计师给这个新领域带来的那种可视化、结构和技能。

所有这些都表明,教师的首要目标(在学会倾听之后)是找到方法来帮助学习者在他们的头脑中发展出一套良好的方法,其核心是理解现有的设计和创造新的设计。

开发一种假肢(prosthetic),试图去理解 那些并不真正理解他们所要描述的事物的人 所做的解释和描述,将非常困难,而且相当不美观。 如果人们学会了一些强大的技术和技能(也许借助于媒介)来实现可视化、部分和整体化、计划化、符号化、操作化和避免调试,那么表明人们在处理他们的世界时可以惊人地更有效,这似乎更漂亮。

我们在教学中使用的一些原则

这些想法在许多地方和许多文化中都有。我们从自己的经验和这些人的作品中得出这些观点: 铃木小提琴(Suzuki violin)方法、O.K.Moore、Piaget、Furth、Bruner、Minsky、Papert

1 听取学生的意见。

我们认为教学涉及到帮助学生调整他的知识结构以适应新的情况,如果我们不在一开始就试着去了解 gossamer 模式,我们自己和学生肯定会有一个不愉快的旅程。

目前 Smalltalk 中的许多做事方式都是直接来自于对孩子们的倾听。作为一个 “可扩展” 的系统,Smalltalk 可以很容易地 “成为” 我们希望的任何类型的工具。我们自己已经对它进行了多次重塑。

2 不要教任何必须在以后忘掉(unleaned)的东西。

根据我们的经验,人类非常不善于忘掉任何一种技能,无论是肌肉层面还是精神层面。这个原则是每个音乐教师都非常了解的。特别是要避免 “诱人的类比”,因为这些类比后来又会出现问题。

我们教的是 “直接” 的 Smalltalk,与成人学习的系统完全相同。孩子们最初接触到的例子和方法与最复杂的成人系统非常相似。

3 不要让学生的学习进度需要在将来进行补救。

原则 2 基本上是说:不要简化到说谎的地步;原则 3 是其推论,即:不要把学生放到一个让他感到愚蠢和无能的境地,因为还没有奠定足够好的基础。大多数孩子并不比成年人更了解技能、结构、智力之间的区别,在新的情况下,他们很容易感到愚蠢而不是不熟练。

4 在可能的情况下,抓住现有的有成果(fruitful)的结构;如果存在不结果实(unfruitful)的概念,不要取消教学,而是提供全新的正交概念。

大多数孩子都知道字典并用它查询一个词的含义。意思可以是对一个被动关系的解释,也可以是一个动态行为。事实上,数学和编程中的每一个想法都可以很容易地仅仅用面向字典的术语来解释;这是一个富有成果的、有用的概念,对孩子们使用它是有意义的。

其他许多 “自然语言” 的语言结构最终是致命的,我们要避免这样做。这方面的例子有。“名词”、“动词”、“代词”、“转折词”,以及它们在大多数编程语言中的对应物:数据结构、函数和控制结构、变量、对名称的类型标记,等等。相反,我们立即给孩子们一个运行中的例子,这个例子直接展示了 Smalltalk 中的状态-进程-与消息沟通的更有成效的概念。

5 不要俯视学生的肩膀。

除了避免 “将学生置于枪口之下” 的明显原因外,表演和创造之间也有很大的区别。在音乐中,这被称为即兴创作和作曲的区别。我们对与设计导向和计划过程(不慌不忙/目标导向/反思的)更感兴趣,而不是对 “用脚思考” 的演奏家所获得的更肤浅的效果感兴趣。

我们捕捉学生的每一个动作,并可以在以后为我们的眼睛重放他们的会话(session)。我们告诉每个学生我们是这样做的,但捕捉的过程是完全看不见的,因此很快就被忽略了。

6 教导和展示看待境况的多种视角(Perspectives)。

所有年龄段的新生设计师都有一个典型的问题,有一种强烈的倾向,将他们所有的短时记忆都投入到对某种境况的特定观点(Perspectives)中。如果这是一个没有结果的观点,他们就很难 “跳出来”,甚至已经告诉他们这是无效的。我们觉得皮亚杰的 “倾斜的玻璃” 的例子更多的是由于缺乏多视角观察的实践,而不是生理上不成熟的结果。

关于设计方法论的一个惊人之处在于,“同时” 使用一个视角和它的双重性要比单独使用任何一个视角都更收获。

一个非常全面的例子是西方科学中的整体-部分的集合(wholes-as-collections-of-parts)和东方哲学思想中的整体-整体(wholes-as-wholes)的双重性。

西方科学本身有一个重要的二元论方面:分析(或自上而下)与合成(或自下而上);这两者都强调差异和边界:是一种粒子理论。东方哲学强调的是同一性和联系:是一种场论。随着对更复杂系统的研究,这两个学派之间的明显差异在作为二元特征的基本同一性中变得模糊。

人类的神经系统会产生两个方向的反应:

一个 “线性” 理论,对于简单的模型,如用砖头砌成的墙,是很有用的,但在更有趣的领域里,它就显得很糟糕了。那些主要方法论以线性模型为中心的人,其典型反应是试图对描述进行 “修补”(或在其上添加圆环),而不是重新集中他们的内在视野。

泰姬陵的线性理论是,砖块被带到了空地上,然后加在一起,直到建筑物出现!这很难看出泰姬陵是如何出现的。很难看到泰姬陵(或人类胚胎)的设计过程如何能够被富有成效地描述为简单装配概念的补丁集合。

另一方面,相对论哲学更像是这两种观点的大组合。每个事物都是其他事物,因为它们只是 “相同” 空间的局部几何状态,反之,有一个与相对距离和速度相关的场滞后和衰减,这使得物体和部件的概念可以合理考虑。

我们试图部分地本着原则 2 的精神,在孩子们开始接触 Smalltalk 时,就向他们展示设计思想的这两个方面。

人类与媒介

以嵌入媒介的信息形式 存储、检索、操作知识的 “设备” 已经存在了几千年。 人们用它们来与他人和自己来交流思想和审美感受。尽管思考是在人脑中进行,但外部媒介的作用是将思想具体化,并通过反馈,增加思考的实际路径。在一种媒介中发现的方法经常提供强有力的隐喻,为其他媒介中的概念提供新的视角。

每条信息都是对某些想法的模拟。它可能是表象(representational)的或抽象的,孤立的或有背景(context)的,静态的或动态(dynamic)的。一种媒介的特定本质非常依赖于信息被嵌入、改变和查看的方式。

计算机最初被设计用来做算术计算;一个强大的想法是通过在一个可写存储器中持有的算法描述来控制计算的概念。更加强大的是这个推论:

计算机的内容是对过程的描述;计算机模拟任何描述性模型的细节的能力意味着,如果嵌入和查看方法提供得足够好,作为媒介本身看待的计算机可以是所有其他媒介。

这个 “口袋宇宙”(我们喜欢的一种比喻)如果没有形而上学,也需要一种认识论。

导致 Smalltalk 的一些观察

递归设计的基本原则是:使各部分具有与整体相同的力量和能力(power and capabilities)。

这个 “整体” 是一台数字计算机,一个黑盒子,我们向它发送消息并接收回复,它包含了进程中的状态。

从外部看,我们对这个黑盒子用来发送回复(reply)的方法不甚了解。当我们请求

sine 30

我们不知道回复是通过查表、切比雪夫近似、求和序列还是这些方法的组合来计算的。事实上,我们并不真正关心,只要预期的回复能一致/快速地回来,并且不干扰我们可能还在做的其他事情。

将愿望(语义概念)与方法(实用概念)分开的原则是 Smalltalk 的核心。

有趣的是,大多数编程语言的 “数据结构”、“函数” 和 “控制结构”… 部分都不具有与整体相同的力量;相反,它们是对计算机概念的稀释。

Smalltalk 的 五个简单想法

1 只有对象。

数字 3、4.5、1.245e14 是对象;以下词语(words)也是:this、identifier、sine、file34;集合也是: (this is a collection of words);以及文字字面片断:’this is a piece of text’。

2 每个对象都有记忆力。

事实上,每个对象都掌管着它的知识,它如何被表示,以及它如何可能被使用。每个对象都有一些方法将自己与其他对象区分开来。例如,代表数字 3 的对象可能在它的记忆中以某种方式存储了数量 3;代表数字 4.5 的对象可以使用相同或不同的技术来记忆数量 4.5

3 对象通过发送和接收消息相互交流。

前三个想法构成了对计算机概念的递归。观点(3)实际上包含了观点(2),但为了清楚起见,这两个观点都被包括在内。

在 Smalltalk 中,向一个对象发送消息时,首先要说明这个对象,然后是消息。

3 sign

向对象 “3” 发送一条由 “sign” 组成的消息。对消息的响应完全由接收者决定。我们可能希望每个正数都能一致地回应 ‘+’。

一个 “强大的想法” 是将具有类似属性的对象分组到类(class)中的概念,这样就可以对它们进行一般性的讨论。在 Smalltalk 中,我们目前发现了另外两个想法。

4 每个对象都属于一个类。

因此,一个类就是一个对象(来自 1);还必须有一个 class: class(来自 4)。 ‘明显的’类包括数字、单词(words)、集合、文件、文本。更加奇特的类包括字体字符、图片、笔、集合、段落、窗口、文件、音色、声音、合唱,当然还有 class 类,其成员包含数字、单词等的定义。

Smalltalk 中每个对象的部分内存里存有其类成员的知识。

5 一个类是向该类中的对象发送合法消息的接收者的集合,再加上产生回复的方法。

有很多方法可以实现想法 5。我们已经尝试了几种。我们目前的方法具有最小的神秘性,并且需要最小的信仰,来理解和使用类。

为了定义一个类的描述,我们使用一个包含条目(entries)的字典的概念,每一个条目都是一个特定消息的检测器和回复器。因此,类描述只是前面描述的消息系统所处理的许多种类的文档(documents)之一。

数字的类描述中的一个条目可能是:

儿童和 Smalltalk

我们向成人和儿童教授 Smalltalk 的基本方法是向他们展示一个简单的、正在运行的 Smalltalk 类和属于 “t”(?译者注: 看不清) 的对象的例子。在他们 “玩” 了一段时间后,我们让他们 “猜” 类的定义,最后他们在描述中添加一个新特性。在编辑一个已经运行的程序的过程中,新用户学到了不少关于描述形式的东西,否则我们就必须以一种神秘的方式来解释。

首先,我们让他们输入:

👉joe <- box

屏幕上出现一个正方形。我们说: 你刚刚做了一个叫’joe’的盒子(box)。现在他们试试:

joe grow 30

盒子 “joe” 也相应生长。我们说: 你刚刚向 “joe” 发送了一条它能理解的消息。而它也作出了相应的反应。

joe turn 45

这是另一个 “joe” 明白的消息。

eachtime (joe turn 25)

现在,学生已经制作了一个简单的 “电影”,可以通过 “escape” 键终止。

👉jill <- box

屏幕上出现了另一个正方形。

jill grow - 10

jill 变小了

jill turn 50

‘jill’ 就像 ‘joe’ 那样转动。因此,‘jill’ 和 ‘joe’ 都可以收到类似的消息并产生类似的反应。

jill is ? (box)

当被问及它代表什么类型的物体时,‘jill’ 发回了 ‘box’ 的答案。

joe is ? (box)

‘joe’ 也一样

eachtime : joe turn 25. jill turn - 11.

产生一个具有有限情节的双对象动画。

现在我们让孩子们猜测 “box” 类的一般描述可能是什么样子的。他们已经看到了五个例子:make-a-new-one、grow、turn、draw、undrax 都调用了一组不同的动作。由于我们一直在使用 “message” 这个词,孩子们不难猜测到 “box” 至少有五个部分,每个部分都涉及到一个特定的动作。我们引入了 “看” message 的想法,看看里面有什么。最后,我们要求他们输入:

show box

来看看 ‘box’ 的描述到底是什么样子的:

显示了可以发送给 ‘box’ 类里任何成员的各消息。

各种图标符号是由我们教的第一组孩子编出来的,目的是为了澄清他们心中的重要想法。

我们没有试图让孩子们以任何生硬的方式来理解这个定义,而是告诉他们关于以上符号的一些情况(👉:几乎没提)。 然后,我们要求他们看看是否能想象出如何让任何盒子移动到屏幕上的某个地方。

他们用 ‘grow’ 和 ’turn’ 作为模型。他们对新方法的第一次阐述通常是非常喜欢的。

他们说:

如果我们自己在消息中看到 “move” 这个词,那么我们让自己取消画图(因为我们要去别的地方),我们做一些事情来改变我们对自己所处位置的认识,然后我们重新画自己[就像在 “grow"或 “move” 中一样]。

现在他们仔细看了看描述顶部的名字,其中前两个已经被用于 ‘size’ 和 ’tilt’。‘positionleft’ 和 ‘positiondown’ 看起来很有希望(特别是在我们的一些暗示下)。现在他们已经准备好理解 ‘draw’ 和 turtle(🌝)。‘嘿,看到 turtle 拿起它的笔,走到’positionleft’和’positiondown’,然后把它的笔放下,画出一个正方形(他们通过自己的尝试发现了后者)。

看起来他们只需要通过从消息中接收新的数字来改变 ‘positionleft’ 和 ‘postitiondown’ ,与之前的例子完全类似。他们写道:

在这一点上,我们没有让他们去学习编辑器,而是为他们提供了一个简单的类,让他们更新: addto。所以他们实际上是在输入:

当他们尝试以下代码时,一切顺利:

joe move 400 100

我们用尽可能长的时间来与孩子们达到这一点(通常是 1 或 2 次)。虽然对他们的短期记忆有相当大的压力,但与更多的自下而上的方法相比,好处是巨大的。自下而上的原子式方法。从这里开始,有许多路径可以遵循:

我让他们试试

1
2
mouse left (344)
mouse down (112)

以及它们的缩略形式

1
2
ml (344)
md (112)

这些是以 “left” 和 “down” 表示的鼠标位置与屏幕右上角的偏移量,他们尝试:

joe move ml md

而 “joe” 则指哪打哪! 许多孩子自发地 看到 他们可以用 “eachtime” 来连续进行这些操作。

eachtime (joe move ml md)

而’joe’ 也随之而来! 更有趣的是,许多人看到他们可以’画画’,只需从以前的定义中删除 ‘SELF undraw.‘一行。他们现在已经准备好使用编辑器了,它以一种结构化的方式处理程序,并自动确保括号级别是一致的。当这一切完成后,他们已经做出了一个可控的’画笔’,它可以有各种尺寸和方向(通过做’grow’和’turn’)。此外,他们知道,他们可以创建大量量身定做的画笔,并给它们命名。

类和实例的力量现在开始显现。

我们的孩子通常要花 6 到 8 次时间在这个富有成效的区域进行探索。这一点很重要,因为我们的经验表明,学习编程的过程是一个小的飞跃,中间有一个 高原期 ,在这个高原期,学生们很难 看到 新的东西。这让我们想起了获得音乐或体育技能的典型进展。由于高原地区非常重要,有必要确保在建立内部 协调性 的同时有大量有趣的事情可以做。否则,在获得足够的技能使新领域真正变得有趣之前,就有可能产生厌倦情绪。

孩子们通常会操作 ‘box’ 描述的每个部分。他们改变 ‘shape’ 的程序来画三角形和其他多边形,从而从后门学习’海龟(turtle)几何’。他们可能会把 ‘shape maker’ 完全变成另一个类,并在盒子描述中添加另一个参数 ‘shape’。

一段时间后,火箭船和飞机的形状取代了多边形。新的消息被添加进来,比如:飞行、弹跳、打开、关闭,等等。他们发现,他们只需要不断地在位置保持器上添加一些小的常数,就可以得到一个简单的线性运动的动画。

在 Smalltalk 中,一切都无一例外地表现为类的活动实例,而且,“box” 类是大多数已经存在的 Smalltalk 类的 “原型”。数字、海龟、字典结构、“集合篮子”、调度器,都很像 “box”。当孩子们准备好发明他们自己的类时,他们不仅有一袋子技巧,而且有相当全面的方法来表达他们自己的想法。

我们觉得这就是为什么他们能够在如此早的年龄和相对较低的水平上处理许多与系统设计有关的概念。

人工语言 vs. 自动编程

这篇论文是关于所有年龄段的非计算机专业人员的个人计算(Personal Computing)的个人计算机。我们将我们的方法描述为:提供非常强大的手段,通过人工语言来表达用户的愿望和方法,而不是提供一个自动编程的系统,尽管这两个领域之间的区别并不那样清晰。

不久前,FORTRAN 和 ALGOL 被誉为 “自动编程” 系统,因为它们将许多讨厌的汇编代码任务自动化,例如子程序、算术评估、存储分配、文件和输入输出。

在这个有限的意义上,Smalltalk 是一种 “自动编程” 语言,因为它比 60 年代的 “高级” 语言更能处理用户的背景需求。然而,70 年代的 “自动编程” 有着不同的内涵,它与构建运行程序的 “人工语言” 方法形成了鲜明的对比。

自动编程 VS. 人工语言

自动编程 人工语言
马虎的(自然的)话语 清晰的(相当干脆的)的话语
“智能”: (准)人类模式 简单性、一致性、通用性
问题领域的知识 关于描述性质的知识
自然语言语义学(名词,动词,…) 模型-描述性语义 (过程中的状态,通信,…
陈述式 一些命令式的序列

我们喜欢后者,不仅因为它可以工作,而且因为它是一个 “友好的工具”(在 Illich 的意义上):像 Smalltalk 这样的系统的内部结构比 20 年代的 T 型福特汽车更容易被用户阅读和修改,而且不令人生畏。

我们不太喜欢自然语言编程和描述,因为我们觉得大多数自然语言都缺乏清晰度和重点(它们毕竟是为了谈论农业和奶牛而发明的)。

一个显著的例外是 Jong.gwo-huah 或普通话,其特征和符号是所有人类语言中最 “正交” 的组织。在印欧语系的意义上,汉语没有转折词、名词、动词或介词。有一个非常小的基本词汇和一个具有巨大表达和隐喻能力的简单句法。

从梵语开始,到拉丁语,再到罗曼斯语;英语比任何一种语言都更像汉语,而且每一个世纪都变得更像。

结尾

我们认为,人与人和人与机器之间交流的一个有希望的未来是发展一种简单的面向人类的人工语言,它具有强大的表达能力。需要这种语言的原因与 16-20 世纪产生数学(作为一种人工语言)的原因相同:世界上不仅有新的想法和看待它们的方法,而且旧的框架削弱了它们的表达和交流。

Smalltalk 离我们所需要的还差得远;它只是展示了未来可能出现的情况,足以激励进一步的设计。

感谢

特别感谢 Dan Ingalls,他将 Smalltalk 的理念带到了生活中;感谢 Adele Goldberg,她热心地管理着孩子和其他无数的事情;感谢 Chris Jeffers,他的 “属性” 很特别(只有他知道所有东西在哪里);感谢学习研究小组(LRG)和 PARC 其他部门的所有人员,他们在 Smalltalk 和 Interim Dynabook 上努力工作。

长期工作人员

  • Adele Goldberg
  • Dan Ingalls
  • Chris Jeffers
  • Alan Kay
  • Diana Merry
  • John Shoch
  • Dick Shoup

访客

  • Ron Baecker
  • Dennis Burke (age 12)
  • Barbara Deutsch
  • Marian Goldeen (age 13)
  • Susan Hammett (age 12)
  • Bruce Horn (age 15)
  • Tom Horsley
  • Lisa Jack (age 12)
  • Ted Kaehler
  • Kathy Mansfield (age 12)
  • Eric Martin
  • Steve Purcell
  • Dave Robson
  • Steve Saunders
  • Bob Shur
  • Dave Smith
  • Bonnie Tenenbaum
  • Steve Weyer

来自PARC的其他小组

  • Patrick Baudelaire
  • David Boggs
  • Bill Bowman
  • Larry Clark
  • Jim Cucinitti
  • Peter Deutsch
  • Bill English
  • Bob Flegal
  • Ralph Kimball
  • Bob Metcalfe
  • Ed McCreight
  • Mike Overton
  • Alvy Ray Smith
  • Bob Sproull
  • Larry Tesler
  • Chuck Thacker
  • Truett Thach