acm-header
登录

ACM通信

评论文章

PL和HCI:更好的合作


啮合黄金和白银齿轮

信贷:安德烈波波夫

在过去的10年里,计算机科学(CS)社区开发了新颖的编程系统,正在改变我们的世界。数据记者正在使用新的编程工具,通过交互式可视化丰富许多主流媒体。微软Excel是数亿人的主要数据编程环境,现在它附带了一个程序合成工具,可以帮助用户清理和转换数据,使他们不必编写痛苦的电子表格公式。这些项目有一个重要的共同因素:它们的成功是因为它们使编程变得更容易。它们展示了人机交互(HCI)和编程语言(PL)相结合的力量。我们组织了PLATEAU工作坊,这是一个不断发展的社区的一部分,致力于解决这一交叉点的工作。以下是引导我们进入这个混合领域的研究问题:

PL→人机交互Josh Sunshine开始他的职业生涯时是PL研究员,致力于设计Plaid语言。当他试图对Plaid进行用户研究时,他被HCI技术所吸引。他发现用户甚至无法完成简单的任务——语言太难了。从那时起,他的语言设计工作严重依赖于形成型人机交互方法,如上下文查询和自然编程启发。24最终的结果是可用的语言和成功的用户。

HCI→PLElena Glassman在攻读HCI博士学位时,开发了一种可视化学生代码的工具,以帮助教师了解学生解决方案的重叠和不同之处。对于每一项新的编程任务,她都必须构建一个新的分析器,这既繁琐又耗时,而且需要她作为工具设计者的专业知识。后来,一位同事向她介绍了程序合成(PL)。她意识到她可以为自己的工具配备一个基于实例的合成器,这样老师们就可以为自己的作业编写定制的分析器。

HCI→PL在与社会科学家谈论他们的技术挑战时,Sarah Chasins了解到网络抓取是他们为研究获取数据的一大障碍。为了满足社会科学家的需求,她开始用自己的定制语言迭代开发一个演示编程(PBD) Web自动化工具。在工作过程中,每个单独的子问题都需要PL和HCI。例如,结合PL和HCI方法可以实现并行抓取。为了使她的新的并行化结构可用,Sarah将问题描述为一个熟悉的任务(HCI);为了实现它,她编译为并行编程原语(PL)。

PL+HCI研究的上升趋势随着我们观察到的几个关键趋势而到来。首先,语言工程支持的进步使任何人都可以更容易地开发新语言。其次,HCI在方法和理论上的创新使得研究人类执行丰富而复杂的计算任务(如编程)比以往任何时候都更容易,这让我们可以将HCI技术应用到语言开发中。第三,广泛而多样化的新受众正在寻求自动化。

  • 基于这些趋势和我们对该领域的了解,我们确定了几个关键的方向,如图所示,HCI和PL专家应该探索,以充分利用HCI和PL的联合力量:
  • HCI从业者可以从新的工具中受益,这些工具使构建特定于领域的通用编程语言变得容易。然而,用户需要帮助编写安全和正确的程序,而PL技术可以提供帮助。最后,用户可能并不总是想直接编写代码;为了平衡易用性与编程的功能和灵活性,我们的界面应该为用户提供多种方式来表达他们的意图。
  • PL实践者可以使用需求查找技术来确定高影响的问题领域或程序员当前和未来的痛点。他们可以通过认知和行为理论做出更好的设计决策。在没有理论的情况下,他们可以通过利用包含用户反馈的迭代设计周期来做出更好的设计决策。

本文的其余部分描述了阻碍这两个子领域交叉工作的误解,每个子领域如何从另一个子领域中受益,以及成功的PL+HCI结合所带来的戏剧性的研究成功。最后,我们讨论了未来工作的方向以及他们将如何交付重要的新语言和接口。我们的主要结论总结在表1

t1.jpg
表1。为希望集成PL实践的HCI专家和希望集成HCI实践的PL专家提供的主要方向。

回到顶部

我们在这里谈论什么?

HCI致力于创造与计算机交互的新方式,利用计算机增强人与人之间的交互,并研究现有系统如何影响个人和社会。PL涉及编程语言的理论、设计和实现、程序分析和程序转换。本文致力于结合PL和HCI技术来推进这两个领域的目标。然而,许多其他领域和子领域考虑如何使用编程语言为人类服务。我们在这里提供了一些最相关的字段的指针:

软件工程。PL、HCI和软件工程(SE)有一个关键的重叠兴趣:让计算机做我们想做的事情。现代的PL-HCI研究经常在SE的会场结束,因为它们最符合今天的会议景观,但在PL-HCI边界的许多工作自然不符合SE的兴趣范围。特别地,SE主要关注专业软件工程师,许多PL-HCI作品是针对其他受众的。

心理学的编程。编程心理学(PoP)社区有着悠久的研究历史,从个体程序员的认知工作到他们如何处理大型代码库,再到他们如何在工程团队中工作。(参见Black-well等。4了解该领域从20世纪60年代末到现在的发展概况。)不幸的是,这项至关重要的工作对主流PL的影响有限。1429本文提倡更多跨越PL和HCI之间界限的工作,但我们希望读者能够认识到,许多同样的论点也适用于跨越PL和PoP之间的学科界限。

计算机科学教育。CS教育(CSEd)的研究,因为它专注于使初学者更容易学习CS的干预措施,通常涉及到编程语言和工具的尝试。例如,以爱丽丝为例9和刮伤32项目,它引发了对基于块的编辑器和结构编辑器的现代兴趣。这种CSEd工作风格通常促进HCI目标的实现,但与SE一样,它强调特定的受众——希望学习c的新手程序员——以及一组特定的目标。

最终用户编程。这个子领域有着悠久而丰富的历史,就像SE和CSEd一样,它强调用户的特定子集。在这种情况下,目标受众不包括专业软件开发人员,还包括其他领域的用户,他们需要为自己的目标提供计算支持。最终用户编程(EUP)中的工作主体可以追溯到“编程的小问题,"26它仍然是一个活跃的领域。1821

PL和HCI的一些交叉工作完全适合这些相关的社区,而有些则不适合。当然,PL和HCI研究人员之间的新合作并不是为实现本文提出的目标所做的第一次努力。17迈尔斯et al .,24和Pane等人,28除了前面提到的作品。然而,本文强调当我们把HCI和PL技术放在同一个表上时,我们可以做的工作是我们无法单独完成的。这些领域的实质性合作——以及与SE、PoP、CSEd和EUP的合作!-为实现可用的语言和强大的接口提供了一条很有前途的途径。我们很高兴看到这些子领域可以一起做什么,因为他们开始了新的一波跨学科合作。

回到顶部

常见的PL + HCI误解

我们首先解决了一些误解,这些误解有时会阻碍对PL好奇的HCI研究者和对HCI好奇的PL研究者。

误解:PL不关心人。这种常见的误解反映了PL研究人员只关心逻辑和证明,或者只关心编译器性能,而不关心人的想法。事实上,该领域在语言特性和开发人员工具方面的许多工作都是由对用户体验的兴趣所驱动的。尽管将HCI技术用于PL问题的工作还相当年轻,但让编程语言和工具变得更可用的兴趣由来已久。例如,整个程序合成社区围绕着这样一个想法兴起:有些编程任务机器比人类更容易,应该把它们交给专门的程序生成工具。

误解:PL只是制作新的通用语言。我们听到的关于PL研究的另一个常见的误解是,它都是关于创建新的通用编程语言。他们问,既然最流行的语言至少已经有20年的历史了,那么编程语言社区有什么影响吗?有些人甚至认为PL研究停滞不前。事实上,在编程语言会议上,只有很小一部分的论文(<1%)讨论新的通用语言设计。大多数研究研究了新的实现技术、程序分析、验证和合成技术、支持语言工程师的工具以及新的语言特性。流行语言在发展过程中利用了这项工作。例如,JavaScript引擎中巨大的性能改进是建立在PL研究人员开发的即时编译技术上的。

误解:PL不能从人为因素研究中受益。一些研究者认为HCI方法不适用于编程语言,因为它们是复杂的习得工件。新语言结构的好处可能只有在大量的教育和经验之后才会出现,而且他们认为HCI方法仅限于终端用户和新手的工具。事实上,HCI方法已经被用于研究从核电站控制系统到增强现实和飞行控制系统的一切。我们从PL从业者那里听到的另一个误解是,HCI方法只对字体、颜色和布局等表面问题有用。HCI不是,也从来没有仅仅局限于表面或视觉特征。它可以包含从用户学习新工具时的心理模型到在用户和工具之间传递的信息类别,再到让用户表达其需求的抽象集的所有内容。

误解:人机交互就是评估。另一个常见的问题是:人机交互只是通过用户研究来评估界面。HCI从未狭隘地专注于纯粹的评估工作。在其40年的历史中,HCI社区已经开发出了在整个迭代设计周期中吸引用户的方法。在设计过程的开始,需求发现和形成性研究提供了低成本的方法来识别现有的痛点并尽早预测可用性问题。在整个设计过程中,大量的HCI方法——例如,启发式评估、认知演练、“绿野仙踪”研究、快速原型、自言自语研究、自然程序推导——可以为开发人员提供更多的信息,以做出更明智的设计决策。

误解:HCI只是实现什么用户他们想要的东西。另一个误解,特别是关于形成性研究的误解是,在设计过程中使用人机交互意味着简单地实现用户说他们想要的。这是史蒂夫·乔布斯,亨利·福特“如果我问人们他们想要什么,他们会说更快的马”的担忧。进行形成性研究并不一定意味着问用户他们想要什么,然后提供他们的要求。一些寻找需求的研究包括倾听用户的请求;但是,大量的研究集中在观察用户在特定环境中的行为,甚至测试关于他们行为的假设。通过原型的迭代设计,研究人员可以让潜在用户接触到他们从未要求和征求反馈的多个假想未来。这些策略使潜在用户能够塑造以前从未存在过的技术,使这些技术走上有用和可用的轨道。

误解:做HCI太难了。这种误解通常围绕着这样一种想法,即用户研究需要包括几十个人才能有效,或者认为IRB的批准过程是艰苦的。事实上,即使只有少量参与者的研究也能提供重要的见解和评价。关键是要包括足够多的参与者,为我们想要做出的主张提供证据。如果我们为稀有领域的专家建立一个工具,我们可能会运行一个五人的研究,专注于定性的见解。或者,如果我们期望我们的工具对结果有很大的影响,在一个主题内研究中招募10名参与者可能足以显示他们使用实验和控制界面的体验之间的有意义的差异。如果潜在参与者的班级很大,我们可能会进行一个20-25人的中型实验室研究,或者一个专注于定量洞察的大型在线研究。最后,如果我们想要在设计过程中使用一种轻量级的方法去检查我们的理念,那么我们便可以在朋友的肩膀上观察他们并聆听他们使用我们的原型;这种非正式的、n=1的“研究”足以揭示关键的设计缺陷或激发新想法!

IRB的流程因机构而异,但大多数都有官方的低风险(“豁免”)提交类别,因此审批流程轻量级且快速——绝大多数PL+HCI研究都属于这些类别。从事豁免人体受试者研究的同事是一个关于IRB流程的机构特定建议的重要资源。

回到顶部

HCI和PL:一个双向的街道

尽管PL和HCI在合作和共享文献方面的交叉相对较少,但每个社区都开发了可以帮助其他领域的研究人员的技术。在这里,我们描述了HCI概念和技术可以改善PL结果的一些具体方法;PL概念和技术可以改善HCI结果;PL和HCI研究人员可以整合他们的互补专业知识,以推进对两个社区都重要的目标。

PL→HCI: PL支持接口的能力。语言是与计算机通信的强大接口。与典型的基于菜单和按钮的界面不同,语言是组合的:它们提供一组原语和一种组合方法,使用户能够在现有的原语基础上创建新的原语。如果它们是图灵完备的,它们可以描述任何可计算函数。即使非图灵完备语言也可以表示无限空间的函数。虽然gui和语言通常都是围绕着让用户容易地说常见的东西而设计的,但语言也让用户能够说不常见的东西。如果界面自动为用户生成程序(例如,通过程序合成),用户甚至可以与标准的界面元素而不是代码进行交互,并且仍然可以使用编程语言的强大功能。这些pl支持的接口可以帮助我们实现Shneiderman在其开创性的“直接操作”中提出的强大接口的愿景。34特别是,编程语言的表达能力可以激发“探索系统更强大方面的欲望”,而这往往是gui所缺乏的。

建造PLs可以很容易。随着新的、更简单的语言实现支持工具(如语言工作台和解析器生成器)的开发,语言工程变得更容易了。设计与任务相关的抽象并在特定于领域的语言中实例化它们现在只需要极少的培训。对于从一种语言的强大功能和灵活性中受益的HCI工作,这些新的PL工具可以支持接口和系统设计人员制作新的语言、抽象和特定于领域的语言。

使用PLs很容易。PL的进步,如合成和现代重定向,让我们要求用户做一点工作,并获得大量回报。通过使用演示编程和示例编程等技术,用户可以提供非代码规范(例如,输入输出对),并获得一个程序作为回报。有了重新定位的方法,我们可以采用最初用于一个目的的程序,并重用它们来创建新的工件。

请使用正确。PL就像计算机科学的所有其他领域一样,带来了可以帮助解决HCI问题的技术能力。例如,PL社区已经开发了验证技术,他们可以检查的不仅仅是简单的低级属性;它们可以验证功能的正确性、安全性、安全性、可访问性,甚至是对社会规范的遵守,30.以及其他对HCI社区很重要的属性。许多PL技术,如程序分析、bug修复和验证,都可以将任务转移到机器上,减少人类操作员和设计人员的认知负荷。这些复杂的技术已经在专业编程环境中得到了应用。随着越来越多的终端用户开始自动化任务,我们看到了将这些技术应用于他们的计算机和机器人交互的机会。

HCI→PL:迭代、以用户为中心的设计。以用户为中心的设计让我们关注在整个设计过程中评估我们的语言和工具的有用性和可用性,而不仅仅是在最后的评估步骤中。需求发现研究可以让设计师在设计过程开始之前就确定关键需求、障碍和挑战。当我们通过需求发现研究来解决已经被验证的需求时,我们有充分的理由相信我们的语言或工具可以解决实际用户的问题。整个设计过程中的形成性研究让我们在语言或工具构建过程中稳步向可用性发展。在设计过程的多个阶段征求用户的反馈意味着我们不太可能最终使用与用户对立的工具,因为我们已经投入了多年的时间、精力和工程。

人类认知和行为理论,设计启发式。根据用户的直接观察做出每一个设计决策将是昂贵的,耗时的,不切实际的。设计启发式,例如,Green等人。12描述交互系统中设计师反复发现的对可用性至关重要的元素,如系统状态的可见性或“撤销”操作的能力。人类认知和行为理论预测用户在我们为他们构建的任何系统中会做什么、不会做什么和不能做什么。与设计启发式一样,理论预测是缩小我们设计空间的指导方针,并形成当用户和系统最终交互时可能违反或不违反的预期。一些编程工具已经基于特定于编程的行为理论进行了设计,例如:理解程序员如何回溯使研究人员能够在集成开发人员环境(ide)中开发选择性撤销。37开发更多更深入的理论可以为整个编程语言社区带来好处。

评估:超越用户研究。许多编程系统开发人员都热衷于宣扬它们对用户的优势。HCI开发了许多方法来评估这些主张。这些包括传统的实验室用户研究,但也包括低成本的启发式方法,更深入的长期案例研究,35以及对用户日志等现场数据的严格分析。为了支持最有力和最令人兴奋的主张,我们可能需要多种评估方法——例如,通过用户日志获取大规模数据,通过实验室研究了解没有上下文的日志统计信息。有兴趣了解更多关于我们可以应用于编程交互的各种人为因素评估的读者可以阅读Myers等人的优秀文章“程序员也是用户:改进编程工具的以人为中心的方法”。25

HCI→PL:在一些领域中,HCI和PL目前都推动了技术的发展,尽管这些进展并不总是跨学科划分共享。在这些领域,我们希望创造一种更丰富的交叉传粉文化,相信两个群体都能从对方的研究成果中受益。

抽象设计。每个子领域都有自己的文化和设计目标。他们都贡献了对用户重要的功能,但通常是不同的功能集。PL社区在开发模块化、可重用的抽象方面有很深的专业知识。HCI社区在开发易于学习或与目标用户现有心理模型相匹配的抽象方面具有深厚的专业知识。由于跨越两个领域的抽象设计的丰富历史,这些形式的专业知识的结合有希望交付有用的、可用的和强大的抽象。

交互和非交互环境。需要混合使用交互和非交互模式的编程环境在现实世界中很常见。例如,程序员在一个相对非交互的文本窗口中起草代码,然后通过与他们选择的编辑器的交互重构相同的代码。HCI发展了丰富的交互式计算环境理论,而PL长期以来一直在研究如何塑造语言,为非交互式编程环境提供良好的体验。对于需要这两种模式的现代编程系统,PL和HCI专业知识的结合提供了我们需要的指导(另外,请参阅侧栏“我们可以简单地阶段HCI和PL专业知识吗?”)。

回到顶部

一切顺利时的样子

将HCI和PL专业知识放在一起,可以让我们应对任何一个领域都无法单独完成的挑战。本节将重点介绍这些领域的结合如何使我们能够将编程带给新的受众,改善新手和专家的编程体验,并调整人与机器之间的劳动分工。

PL+HCI将编程的力量带给了新的受众。Non-coders想要的程序。他们想要收集、分析和可视化数据的程序;控制自己的手机、电脑和其他设备的程序;消除无聊、重复的任务的程序。但就目前而言,普通成年人的编程技能与编写他们想要或需要的程序所需的技能之间仍然存在差距。

PL和HCI技术的结合可以通过大幅减少自动化重要任务所需的编程技能来缩小这一差距。现代领域特定语言将简单但有用的程序引入到诸如建立网站等领域36或自动化智能家庭行动(IFTTT)。通过人机交互,我们可以了解用户愿意和能够提供的输入类型;有了PL,我们可以发明技术,把这些输入转化为用户需要的程序。现代程序合成已经使非程序员能够通过与手机的对话建立新的语音助手技能;20.写一个学生项目的反馈,将反馈传播到其他学生项目;15通过演示如何刮取一行来从Web上刮取大型数据集;7通过给出一些转换项或单元格的例子来转换和清理数据;1319并通过提供数据集来可视化或建模数据集。623

PL+HCI允许我们使用形式推理来创造更丰富的编程体验。一些开始于编程语言理论或实现的工作最终发明了新的编程交互技术。Smalltalk对象模型的简单性使语言设计人员能够开发许多我们现在认为理所当然的新颖编程便利—例如,集成开发环境、反射和单元测试框架。17从努力使不完整的程序具有良好类型开始的工作,最终可以让我们构建对部分程序和完整程序同样有效的编程环境。27从创建程序输入和输出之间的双向映射开始的工作,可以让我们构建编程环境,在这个环境中,用户可以通过编辑代码或调整图表进行编程。16通过深入考虑编程的形式化模型,我们最终可以产生更丰富的交互式编程系统。


PL和HCI技术的结合可以极大地减少自动化重要任务所需的编程技能。


PL+HCI产生了关于人与机器之间劳动分工的更好的决策。计算机在某些任务上比人类做得更好,反之亦然。随着计算技术的进步和教育的发展,这种情况发生了变化。在编程的经典模型中,程序员指示机器,机器执行指令。现代编程工具可以以新的和创造性的方式将编程任务划分到人与机器之间。例如,推断机器人是否遵守人类社会规范(例如,保持眼神交流)通常是人类程序员的工作,但新的人机交互工作将这项任务交给了验证者,30.有效地建立防止程序员违背他们自己的设计目标的护栏。综合工具允许用户提供输入输出示例和其他非代码规范,如果这些规范比代码本身更容易提供的话。Halide项目不需要人类手工编写低级图像处理管道31允许程序员用高级语言编写,将低级调度细节委派给计算机。新一代工具利用了一系列不同的技术,从程序合成和机器学习到特定领域的语言和程序验证。

回到顶部

障碍

要实现PL和HCI联合的愿景,有两个关键障碍。首先,大多数PL和HCI研究人员缺乏彼此的工具和方法的知识。这些领域的工作的先决条件是互不相干的。许多,甚至是大多数PL或HCI的研究人员进入其中一个子领域,甚至没有学习其他子领域的基础知识。

其次,PL和HCI社区对严密性的要求并不总是一致的。我们需要两个社区的知识,以便有选择地适当应用每个社区的标准。并不是所有的任务都应该在一小时的受控用户研究中进行精确的评估。并非所有的主张都需要数学证明。如果我们要求作者勾选那些对我们之前看到的单个子领域的贡献有意义而对他们正在提供的新贡献没有意义的复选框,我们就有扼杀令人兴奋的新研究的危险。

我们相信,了解这两个领域及其交集是解决这两个障碍的最佳方法。我们希望这篇文章对PL+HCI研究的一瞥能启发读者了解更多。想要了解推动这一领域向前发展的各种贡献的读者——我们应该接受进入我们最喜欢的场所的各种论文的读者——应该继续阅读下一节,了解我们如何推进高效集成HCI和PL的愿景。

回到顶部

我们下一步要去哪里?

在本节中,我们将展示这个混合领域现在应该走向何方的愿景。我们着重介绍几种利用PL和HCI的组合优势的贡献类型。想要参与PL+HCI领域的读者可以继续阅读关于如何贡献的指南。我们为那些有HCI背景和PL背景的人提供了具体的建议。

PL实践者:考虑以下贡献类型。我们相信一些关键的贡献类型具有显著改善PL实践的潜力。通过借鉴HCI的技术,PL实践者可以生产出更有影响力的语言和工具,使他们的语言更适合新手和专家使用,并使未来的语言设计者更容易生产出可用的语言。

Need-finding研究。需求发现研究帮助我们对目标人群的需求产生丰富的理解,并最终确定实际用户需要解决的问题。上下文查询、访谈、调查、日志数据分析、论坛和StackOverflow分析、探索性用户研究——所有这些都可以揭示重要的用户需求。需求发现在塑造从D3到成功的PL项目中发挥了重要作用5和织女星33FlashFill。13在最好的情况下,需求发现研究产生的需求分析不仅对激励单个项目有用,而且对整个研究界都有用。

HCI和SE社区已经针对不同的用户群体发布了独立的需求查找论文。PL社区使用不同的技术服务不同的人群、不同的问题。我们已经开始看到针对这些人群、问题和技术的优秀的需求发现论文,但我们只是触及了表面。22

贡献:针对人群、环境和任务的独立的需求发现研究特别适合于新颖的编程语言研究。

认知与行为理论的转移与发展。心理学、认知科学、语言学和许多其他领域研究人类认知的特征。他们的工作提供了关于人类认为容易、困难和不可能的推理类别的理论,无论是否经过训练。在PL设计领域,对程序员如何编写程序的科学理解可以指导我们更好的语言和工具设计。在20世纪70年代,PoP领域开始为这个方向建立基础,他们的工作为我们指出了学习现代高级语言可以重用的方法。这一领域的关键工作仍在继续,借鉴了软件工程、心理学、CS教育和HCI方面的工作。尽管语言设计很少激发当前这一领域的工作,但我们看到了设计实验以产生语言相关理论的巨大机会。

引导理论发展的一种方法是从其他学科借鉴或改编理论。从心理学和经济学到认知科学、组织行为学和学习科学的社会科学提供了可以应用于编程的行为理论。在其他学科中,将理论从一个领域改编或转移到另一个领域的论文是很常见的。我们不知道在编程语言文献中有这样的例子,但在HCI中有很多这样的论文1和软件工程。2当我们建立或适应编程的行为理论时,语言设计者可以基于预测的用户行为来进行设计决策,而不是直接对目标用户进行实验,从而快速地使语言更有用和可用。

贡献:理论发展和理论转移,用于预测人类在与编程系统交互过程中的认知和行为。

迭代优化。我们可以在整个PL设计过程中向用户学习。形成性研究使设计人员能够在实现一个完整的系统之前向用户学习。例如,我们可以使用不完整的原型进行形成性用户研究,了解用户在哪里出错,以及哪些功能可以帮助他们。这样的研究可以帮助我们在投入大量精力开发形式主义、证明、编译器和其他高投入的工件之前,确保我们的语言设计是可用的、可学习的、不易出错的。在设计过程中征求用户反馈的方法包括调查、访谈、小组讨论、自然编程启发、自言自语研究、“绿野仙踪”研究(其中由人扮演编译器的角色)以及使用其他低成本原型的研究。我们甚至可以在不招募用户的情况下评估一些相同的问题,例如,通过认知演练或启发式评估。HCI场馆经常发表论文描述这种形成性的研究和产生的设计。通过形式化方法迭代改进的编程语言设计同样应该在文献中找到一席之地。8作为设计师,我们应该尽早并经常从用户那里获得输入。

贡献:语言和工具设计以用户为中心,迭代的设计过程为指导。

PL摘要。随着对计算机感兴趣的新的、更广泛的、更多样化的受众,我们面临着该领域历史上令人兴奋的时刻。随着我们开发更多在本文中描述的贡献类型,我们准备提供有用的、可用的编程语言和工具来解决高影响的问题。综合起来,这三种贡献类型,总结在表2他告诉我们:挑选好的问题,发展人类能力和行为的理论,在缺乏理论的时候经常获得用户反馈。

t2.jpg
表2。PL从业者可以从HCI中学到什么?这个表总结了我们利用HCI技术可以产生的三类PL贡献。

HCI从业者:考虑以下贡献类型。展望未来,我们希望看到一些贡献在HCI社区中变得更常见,因为HCI越来越多地利用PL的进步。有了新的PL技术,HCI从业者可以交付更强大和灵活的接口,帮助用户避免重要类型的故障,并提供进入计算世界的可访问的新途径。

PL-backed接口。在通常可能设计GUI的地方,考虑为用户提供一种语言—特定于领域的编程语言或提供语言关键组件的图形UI:原语和组合方法。从这里开始,我们将把具有原语和组合方法的接口类(无论它们是文本的还是图形的)称为pl支持的接口。

pl支持的接口提供了强大的功能和灵活性,实现了其他UI类型无法支持的新交互。想想D3之类语言的成功故事5和织女星。33这本来可以封装在创作工具中,但却要牺牲一些表现力和用户控制。随着语言设计和实现工具的进步——包括对领域特定语言、语言扩展和嵌入式语言的支持——现在提供pl支持的接口要容易得多。10

贡献:开发或研究语言作为ui。

使pl支持的ui更安全的护栏。为用户提供强大的、灵活的pl支持的接口可以增强他们的能力,但也可能使他们犯新的错误。我们可以通过在ui中构建护栏(防止或捕获错误、bug和坏结果的工具)来解决这个问题。为了实现这一目标,PL提供了丰富的技术来帮助程序员,从验证(例如,验证机器人控制程序使机器人符合人类社会规范30.)到程序分析(例如,一个电子表格扩展,根据与附近其他公式的差异来识别可能的电子表格错误3.或者自动生成电子表格测试11).

贡献:开发或研究用于强制或鼓励pl支持接口的正确使用的技术。

pl支持的ui的非代码输入。尽管提供PL支持的接口可以提供强大的新计算体验,但要帮助用户释放PL的全部潜力,通常需要的不仅仅是一种设计良好的语言。我们可以通过基于非代码规范编写代码的PL工具帮助用户编写复杂的程序。程序综合范式,如演示编程、实例编程和操纵编程,为用户提供了表达其意图的替代方法。例如,海伦娜7用户演示了如何在标准的Web浏览器中收集他们的目标数据集的第一行,Helena合成了一个程序,该程序可以遍历数千或数百万个网页来收集完整的数据集。因此,通过演示编程使社会科学家和其他领域的专家能够从Web上收集他们需要的数据。利用新的PL技术,我们可以为编程设计新的接口,并最终将编程的力量带给新的受众。

贡献:开发或研究从非代码规范创建代码的技术。

PL→HCI摘要。我们对pl支持的接口在未来HCI中的潜力感到兴奋。随着我们的用户面临越来越复杂的新计算任务,现在是时候把以人为中心的语言交到更多用户手中了。这三种贡献类型汇总在一起表3,提供一个简单的外卖信息:给用户PLs,但帮助他们负责任地使用PLs,不要只期望代码。

t3.jpg
表3。HCI从业者可以从PL借鉴什么?下表总结了利用PL技术可以产生的三类HCI贡献。

培养HCI + PL研究。我们相信前面讨论的六种贡献类型——需求查找、行为理论、迭代细化、pl支持的接口、护栏和从非代码中创建代码——可以促进人机交互和编程语言,它们代表了这两个子领域的重要新前沿。我们希望投资于这些贡献类型。作为个人和社区,我们应该采取什么行动来生产更多这样的工作?

  • 对于新的或有抱负的PL+HCI研究人员:对于新的研究人员,本文描述了代表重要但尚未开发的贡献的工作类别。你是否带来了能帮助你写理论转移论文的专业知识?“护栏”纸吗?由于我们的社区正在开放这些话题,现在是考虑这些方向的好时机。如果你想试试这条路,那就开始参加演讲吧。如果你对HCI更熟悉,就选一门PL课程;如果你对PL更熟悉,就选一门HCI课程;或者选一门HCI-PL交叉领域的新课程。开始跨界协作。如果有必要,想办法以多个但实质一致的片段发布工作,以触及两个领域。
  • 评审人员:本文概述了为什么这些贡献类型是必要的,为什么它们有望丰富这两个字段。我们鼓励您阅读更多关于这些主题的文章,但我们希望这篇文章足以让您在拒绝这些贡献之前三思而后行,即使这些论文最初给您的印象是不同寻常的或前所未有的。
  • 对于顾问和导师:我们越来越多地发现,研究人员的成功不是因为他们的跨学科研究,而是因为他们的跨学科研究。考虑在这一领域工作的学生并没有牺牲就业前景。随着这两个社区的审稿人对PL和HCI领域的工作越来越开放,将学生限制在单一领域的理由也越来越少。
  • 对于整个研究界来说:像VL/HCC、PLATEAU、PPIG和LIVE这样的场馆在PL和HCI的交叉领域有很长的认可和评估工作的记录。然而,这项工作需要出现在旗舰会议上才能蓬勃发展。这些旗舰会议应该邀请具有PL+HCI专业知识的审稿人,并基于适当的证据标准严格评估工作。
  • 对于整个业界和从业员群体:我们希望看到强大的pl支持的接口和可用的编程语言到达真正的用户。我们应该投入大量资源和工程努力,让人类更容易控制计算机。很少有公司的工程团队同时处理语言设计和语言可用性问题。如果你出售一个产品——云计算资源、数据分析套件——人们通过编程使用这些产品,或者人们想要自动化这些产品,那就组建一个工程团队,加入PL和HCI专家。

回到顶部

结论

计算机为我们提供了服务、科学成果和通信方式,没有它们我们就无法实现这些——但许多现代与计算机的交互感觉受到了限制。许多用户觉得他们是在为机器服务,而不是相反。即使是专业的程序员,仍然要花费大量的时间来处理命令行或处理令人痛苦的系统管理任务。如果我们在PL+HCI方面取得成功,我们这些编程专家、新手和以前没有接触过的用户都将更容易快速、准确地向计算机传达我们的意图。我们将更容易召集计算机来实现数十亿个令人兴奋和多样化的人类目标。

回到顶部

参考文献

1.Alkhatib, A.和Bernstein, M.街道级别算法:政策和决策之间差距的理论。在计算系统中的人为因素。

2.Barik, T., Ford, D., Murphy-Hill, E.和Parnin, C.编译器应该如何向开发人员解释问题?在欧元联席会议。软件工程会议与Symp。软件工程基础, 2018年。

3.Barowy, D., Berger, E.和Zorn, B. Excelint:自动查找电子表格公式错误。在美国计算机学会程序设计语言论文集(2018), 1-26。

4.A.布莱克威尔,彼得,M.和L.丘奇。五十年的编程心理学。实习生。131 . c(2019年11月),52 - 63;http://oro.open.ac.uk/62027/

5.Bostock, M., Ogievetsky, V.和Heer, J. D3数据驱动文档。IEEE反式。可视化与计算机图形学, 12(2011), 2301-2309。

6.全概率程序的数据驱动综合。在2017计算机辅助验证会议记录。施普林格国际出版。

7.查斯,S.,穆勒,M.和博迪克,R.鲁西隆:《抓取分布式分级网络数据》。在2018年赛普会录。用户界面软件与技术。

8.Coblenz, M., Aldrich, J., Myers, B.和Sunshine, J.跨学科编程语言设计。在2018年实习生会议记录。计算机协会。关于编程和软件的新思想、新范式和反思(前进!), 133 - 146。

9.Cooper, S., Dann, W.和Pausch, R. Alice:一个介绍编程概念的3d工具。j .第一版。科学。科尔。15, 5(2000年4月),107-116。

10.Erdweg, S.等。语言工作台的艺术状态。在2013年实习生会议记录。软件语言工程。

11.Fisher, M, Rothermel, G, Brown, D, Cao, M, Cook, C, Burnett, M。将自动化测试生成集成到WYSIWYT电子表格测试方法中。ACM反式。Softw。Eng。Methodol。152(2006年4月),150-194;https://doi.org/10.1145/1131421.1131423

12.Green, T.和peter, M.可视化编程环境的可用性分析:一个“认知维度”框架。J.视觉语言与计算机, 2(1996), 131-174。

13.Gulwani。S.使用输入输出示例在电子表格中自动处理字符串。在《交响乐团议事录》编程语言原理, 2011年。

14.Hansen, M., Lumsdaine, A.,和Goldstone, R.认知架构:编程心理学的前进之路。在ACM实习生论文集。计算机协会。关于编程和软件的新思想、新范式和反思,前进!2012年,27-38。ACM,纽约,纽约,美国;https://doi.org/10.1145/2384592.2384596

15.Head, A., Glassman, E., Soares, G., Suzuki, R., Figueredo, L., D'Antoni, L.,和Hartmann, B.使用混合计划程序合成大规模编写可重用代码反馈。在四人会议记录thACM会议。学习@规模, 2017年。

16.亨佩尔,B.,卢宾,J.,卢,G.和丘夫,R.杜斯:结构化编辑的轻量级用户界面。在2018年实习生会议记录。软件工程设计。, 2018年。

17.Smalltalk的早期历史。编程语言的历史1996年——511 - 598。

18.Ko, A.,等。终端用户软件工程的最先进水平。ACM第一版。测量员43, 3(2011年4月);https://doi.org/10.1145/1922649.1922658

19.Le, V.和Gulwani, S. FlashExtract:一个实例数据提取框架。在编程语言的设计与实现。

20.Li, T, Radensky, M., Jia, J., Singarajah, K., Mitchell, T.和Myers, B. Pumice:一种从自然语言和演示中学习概念和条件的多模态代理。在2019年赛普的会议记录。用户界面软件与技术。

21.H.利伯曼,Paternò, F.和伍尔夫,V.。最终用户开发(人机交互系列)。施普林格Verlag,柏林,海德堡,2006年。

22.Ma'ayan, D., Ni, W., Ye, K., Kulkarni, C.和Sunshine, J.领域专家如何为工具设计创建概念图和含义。在计算系统中的人为因素。

23.Moritz, D., Wang, C., Nelson, G., Lin, H., Smith, A., Howe, B.和Heer, J.将可视化设计知识形式化为约束:draco中的可操作和可扩展模型。IEEE反式。可视化与计算机图形学, 1(2018), 438-448。

24.Myers, B., Pane, J.和Ko, A.自然编程语言和环境。Commun。ACM 47, 9(2004年9月),47-52;https://doi.org/10.1145/1015864.1015888

25.Myers, B., Ko, A., LaToza, T.和Yoon, Y.程序员也是用户:以人为中心的方法改进编程工具。电脑497(2016)。

26.Nardi, b .编程的小问题:终端用户计算的视角。麻省理工学院出版社,剑桥,马萨诸塞州,1993年。

27.Omar, C, Voysey, I., Hilton, M., Aldrich, J.和Hammer, M. Hazelnut:一个双向类型的结构编辑器微积分。在2017年赛普会录。编程语言原理。

28.Pane J.和Myers, B.新手编程系统设计中的可用性问题。项目状态报告,1996年8月。

29.编程心理学对语言设计的影响:项目现状报告,2000年6月。

30.Porfirio, D. Sauppé, Albarghouthi, A.和Mutlu, B.创作和验证人机交互。在2018年赛普会录。用户界面软件与技术。

31.Ragan-Kelley, J., Barnes, C., Adams, A. Paris, S., Durand, F.和Amarasinghe, S. Halide:一种在图像处理管道中优化并行性、局部性和重计算的语言和编译器。在程序设计语言设计与实现, 2013年。

32.Resnick, M.等人。Scratch:面向所有人的编程。Commun。ACM 5211(2009年11月),60-67;https://doi.org/10.1145/1592761.1592779

33.Satyanarayan, A., Moritz, D., Wongsuphasawat, K.和Heer, J. Vega-lite:交互式图形的语法。IEEE反式。可视化与计算机图形学, 1(2016), 341-350。

34.直接操作:超越编程语言的一步。电脑16, 8(1983), 57-69。

35.评价信息可视化工具的策略:多维深度的长期案例研究。在2006 AVI研讨会论文集超越时间和错误:信息可视化的新评估方法, 1 - 7。

36.Verou, L., Zhang, A.和Karger, D. Mavo:通过编写html创建交互式数据驱动的web应用程序。在2016年赛普会刊。用户界面软件与技术。

37.Yoon, Y.和Myers, B.支持代码编辑器中的选择性撤销。在2015年实习生会议记录。软件工程相依。

回到顶部

作者

莎拉·e·Chasinsschasins@cs.berkeley.edu)是美国加州大学伯克利分校电子工程与计算机科学的助理教授。

埃琳娜·l·格拉斯曼glassman@seas.harvard.edu)是美国剑桥市哈佛大学拉德克利夫高等研究院的计算机科学助理教授和Stanley A. Marks和William H. Marks助理教授。

约书亚阳光sunshine@cs.cmu.edu)是美国宾夕法尼亚州匹兹堡市卡内基梅隆大学计算机科学学院的高级研究员。

回到顶部


cacm_ccby.gif这部作品是根据法律授权的https://creativecommons.org/licenses/by-nc/4.0/

数字图书馆是由计算机协会出版的。版权所有©2021 ACM, Inc.


没有发现记录

Baidu
map