blankyao's blog

Review | End-user programming

April 12, 2020

由于疫情的原因,ACM Digital Library 免费开放 3 个月,正好前几个月了解了一些 Less Code 相关的产品,对这个领域很感兴趣,就从 ACM DL 里面找了很多相关的论文,虽然论文基本上还没读,但是找到了几个研究相关领域的机构,算是最近一周繁忙的工作之余最大的收获了,倍感欣慰。在检索的过程中看到了 Ink & Switch 这个机构,其官网的介绍如下:

We are an industrial research lab working on digital tools for creativity and productivity.

Computers can aid humans in our most noble endeavors: art, science, thinking, self-improvement. But today’s dominant computing platforms increasingly work against the needs of creative professionals.

Ink & Switch is working on this problem.

这段介绍非常符合我的胃口,计算机是一项非常伟大的发明,经过几十年的发展,计算领域看起来已经很成熟了,我们有可以连接全世界的社交网络,有唾手可得的在线视频,有各个领域专业的生产力工具,有遍地开花的 AI,但是,这个领域依然有很大的潜力没有发挥出来,特别是对于终端用户来说,终端用户在现阶段还只是用软件开发者开发出来的软件按设计好的方式来完成工作,而这些,远没有发挥出计算机的「计算」能力。

今天这篇文章是对 Ink & Switch 发表的 End-user programming 的 review.


当前的软件应用就像是电器:我们只能使用开发者设计好的功能。如果我们每个人都能够进入我们喜欢的应用内部去修改它会怎么样?或者甚至是根据我们当前的需求实时创建新的应用?

这就是终端用户编程(end-user programming)。其历史可以追溯到 19 世纪 60 年代类似 Smalltalk 和 Logo 的编程环境,从那时起就有了包括 Unix, spreadsheet, Hypercard 以及 HTML 的巨大成功。今天,像 Zapier, Coda 以及 Siri Shortcuts 正在尝试新的用来进行自动化以及动态建模的方法。

但是尽管有这 40 年来的商业产品、开源以及学术工作,我们仍未达到终端用户编程的乌托邦。事实上,恰恰相反:今天我们的计算设备的可编程性以及可自定义性比以往更加的小。

Why end-user programming?

强大的计算能力

在高级用户的计算生活中,他们经常想要简单的扩展。比如给 Instagram 增加下载功能、设置窗口的直播、生成家庭厨房的食谱和购物清单、给插画制作以时间戳命名的备份。

桌面应用、Web 应用以及手机应用都在不同程度上像电器一样密封起来,让用户远离内部。如果没有一个使用某个已有功能的按钮,用户只能去祈求开发者。有一些像 Vim 或者 Emacs 的工具允许用户进行自定义,但是大部分应用是没有的,而且即使有,也只是暴露出给开发者用的编程 API. 在使用工具和自定义工具之间有一个巨大的深渊。

Ink & Switch 相信软件应该以一种简单、日常的方式进行自定义,用户也希望进行自动化、自定义或者甚至是创建自己的工具而无需过多的仪式。历史已经给了我们一些案例。

成功的故事

Unix 命令行工具是典型的终端用户编程环境。由小工具构建的操作系统,带有命令行界面,用户可以在每次交互时编写即席程序。如果你想创建一个以时间戳命名的文件,可以用 touch 和 date 结合在一起瞬间完成。

和 Unix 一样普遍的是电子表格,电子表格是很多人第一次遇到带有变量以及迭代概念的计算机代码的地方。电子表格可以用作项目管理、联系人管理、运输和接收以及许多小型企业的表格生成的临时数据库。编写这些程序的人都是领域专家,而不是专业的软件工程师。

Hypercard 是一个受人喜爱但是没获得商业上的成功的产品(看了下网站上的介绍,现在依然有人在这个方向上努力)。

最后一个是 web: HTML, CSS, Javascript 以及 PHP. Wordpress, Geocities, 以及 Squarespace, 再加上低成本的 FTP 共享主机,这种创建软件的方式已经证明了其可行性

和普通编程的不同之处

终端用户编程是由有动机的高级用户完成的,他们可能是也可能不是专业的程序员,给自己或者分享给同事自己修改或者创建一些随时可以使用的工具。用户不应该跨越巨大的鸿沟才能够对软件进行自定义,也不应该切换到「程序员思维」,而是保持在应用的上下文,他们可以和他们的工作想想法保持的更近。

现有技术和三个特征

具象化

制作软件最大的困难是需要程序员掌握非常多的抽象。程序员必须在思维上对数据结构以及程序的流程进行建模,然后把他们转换为符号表示 —— 代码。但是对于一般用户来说,需要花更多的时间以及脑力在编程之外的另一个领域。我们需要让这些用户留更多的空间去思考他们所投入的领域,而不是程序和数据的建模。

其中一种方式就是具象化。可以在可视化编程中看到程序语法和流程的具象化的身影,比如 Scratch,MaxMSP 以及 OpenMusic.

具象化指的是,让编程元素体现的更加具体和直观。电子表格让数据更加具体和直观,Scratch 让程序元素以及元素之间的连接更加具体和直观,MaxMSP 让流程的执行更加具体和直观,Swift Playgrounds 让每一行代码的执行结果更加具体和直观。

实时系统

在传统的软件开发中,工程师执行一次保存、编译、执行通常要花数秒、数分钟甚至更长时间。但是终端用户程序员需要更加的实时。

电子表格在这一点表现出了开创性的做法,电子表格作者通过在单元格中输入公式并按回车键来「运行」工作表,不需要任何多余的动作,整个表格会重新计算。

In-place 工具链

用户可以直接编辑他们的程序,而无须安装其他工具或者程序。此外,他们应该能够使用与他们的日常工作尽可能接近的接口和抽象集。

In-place 工具链不仅仅是预先安装好的工具,真正困难的是允许用户使用他们在日常使用应用程序时已经学习到的概念和界面范例。

就像 Unix,用户在日常使用中学习输入命令,编辑文本文件以及复制、移动、删除文件和目录。当他们可以编写程序时,他们可以使用相同的概念和界面,因为 Unix 脚本文件就是保存到文本文件的一系列命令,这些文件可以被复制、移动、编辑、删除,就像其他文件一样。

(这里省略掉 Ink & Switch 做的实验性产品 Capstone 的介绍)

总结

终端设备编程依然是当今计算设备的梦想。在工业界和学术界做的大量工作表明这是一个非常难的问题,Ink & Switch 通过研究有很多积极性的发现,比如可视化编程的强大、实时系统带来的魔幻体验,以及将常驻任务具象为机器人,并表示为用户所熟知的卡片。同时还有一些比较悲观的发现,那就是依然需要独立的工具链、可视化的卡片排列很快会变得乱七八糟、API 设计以及文档也将是一个巨大的挑战。


Written by blankyao who lives and works in Amoy building useful things.