今天,打字系统形成了计算机编程事实上的标准和主导范式。然而,当编程出现时,最早的计算机编程符号是手写的,而不是打字的。例如,在著名的1945年第一份EDVAC报告中,冯诺依曼将图表等同于文本。事实上,当打字机接口用于编程时,符号被序列化,被称为编程“语言”。最近,康奈尔大学的一个研究小组创建了一个界面,允许用户手写和绘制计算机代码,这是对传统打字编程的挑战。基于笔的界面称为Notate,它允许用于基于Web和交互式计算的数字笔记本(例如Jupyter笔记本)打开绘图画布,以便在传统的数字化计算机代码行中手写图表。在工作原理上,在深度学习模型的加持下,Notate接口打通了手写和文本编程的语境,即手写图中的符号可以引用文本代码,反之亦然。例如,Notate识别手写的编程符号,如“n”,然后将这些符号连接到它们的键入代码。在一个具体的案例研究中,研究人员展示了在Jupyternotebook代码单元内手绘量子电路图。详细介绍视频如下。视频地址:https://dl.acm.org/doi/10.1145/3526113.3545619Notate的论文《Notational Programming for Notebook Environments: A Case Study with Quantum Circuits》在10月29日-11月2日的ACM用户界面软件与技术研讨会上获得了荣誉奖。论文一饰演IanArawjo,aPh.D.康奈尔大学信息科学系学生。他说,“这样的系统对数据科学非常有用,尤其是绘制草图和图表,然后与文本代码进行互操作。”论文地址:https://ianarawjo.therottingcartridge.com/docs/Arawjo-Notational-Programming-UIST-2022.pdf研究概述在这篇论文中,研究人员探讨了笔硬件和机器学习的最新进展如何重新配置??一些编程实践。他们表达了一种愿景,即一种称为符号编程的范例可以支持手写和打字符号之间的连接。因此,研究人员建议,不仅可能需要开发新的用户界面或改进对流程图等现有符号的识别,而且还需要积极重新配置历史上围绕编程出现的文化实践、表征和观念。为了探索符号编程,研究人员设计了一个Jupyternotebooks扩展,Notate,它在一行代码内打开一个绘图画布,并允许函数在本地接收画布中的对象作为参数。Notate架构将这些对象作为局部范围引用传递,使类型化变量在手写上下文中被引用,反之亦然。他们将这种交互称为隐式跨上下文引用,并通过进一步模糊“输入”和“输出”之间的区域来扩展之前关于双峰编程的工作。下图为Jupyternotebook内嵌系统的主界面。图①显示了在一行代码单元中打开的绘图画布。图②显示了通过触摸或单击绘图画布访问的全屏模式。图③显示了基本工具栏。为了测试具体领域中的符号编程接口和隐式跨上下文引用,研究人员选择了量子计算,因为量子计算的程序员即使在键入代码时也经常在电路图和文本之间切换。Ashktorab等人的探索性论文。注意到笔计算在量子计算领域的潜力,但尚未出现这样的系统。Ashktorab等人的论文地址:https://dl.acm.org/doi/10.1145/3290605.3300486因此,研究人员引入了一个玩具符号Qaw,增强了量子电路符号。下图显示了一些用于编写量子电路的常用符号。研究人员使用深度学习和经典计算机视觉技术为Qaw的一个子集实现了解释器。下面是在Notate系统中手写量子电路的讲解过程,分为五个步骤。为了测试Notate和Qaw原型的有效性,研究人员对12名熟悉Python和笔记本但不熟悉量子编程的程序员进行了研究。他们为参与者提供了6个复杂程度不断增加的电路,并让他们将它们编程到机器中。研究人员发现,几乎所有参与者都认为隐式跨上下文引用的概念很直观,但反馈表明可以在调试基础设施、界面设计和识别率方面进一步改进。下图显示了其中一位参与者生成的模式类似于量子傅里叶变换的主题。电路A和C使用Qaw斜杠符号和隐式交叉上下文引用实现递归定义。研究人员还将Notate和Qaw与使用IBMQiskitAPI的量子编程工作流程进行了比较,以验证他们的方法。结果表明,就Python程序员的性能时间而言,Qaw与Qiskit相当,但需要进一步研究以了解这些方法的相对优势。有关更多技术细节,请参阅原始论文。
