深圳幻海软件技术有限公司 欢迎您!

这篇罕见的符号编程论文,让你在Jupyter Notebook中手绘草图并变成代码

2023-02-28

当今,打字系统形成了计算机编程的事实标准和主导范式。然而,在编程出现时,最早的计算机编程符号是手写的,而非打出来的。例如,在著名的1945年第一份EDVAC报告中,冯·诺伊曼将图表与文本视作等同。实际上,当打字机界面被用于编程时,符号才被序列化并被称为编程「语言」。最近,康奈尔大学研究团队创建了一个

当今,打字系统形成了计算机编程的事实标准和主导范式。然而,在编程出现时,最早的计算机编程符号是手写的,而非打出来的。例如,在著名的 1945 年第一份 EDVAC 报告中,冯 · 诺伊曼将图表与文本视作等同。实际上,当打字机界面被用于编程时,符号才被序列化并被称为编程「语言」。

最近,康奈尔大学研究团队创建了一个界面,允许用户在计算机代码中手写和画图,这是对传统打字型编程的挑战。

这个笔式界面被称为 Notate,它让基于网络和交互型计算数字笔记本(如 Jupyter notebooks)打开绘图画布,在传统的数字化计算机代码行中手写图。

就运行原理而言,在一个深度学习模型的加持下,Notate 界面连接了手写和文本编程上下文,即手写图中的符号可以引用文本代码,反之亦然。例如,Notate 能识别手写编程符号如「n」,然后将这些符号连接到它们的打字代码。

在具体的案例研究中,研究者演示了在 Jupyter notebook 代码单元内手绘量子电路图。详细介绍视频如下。

视频地址:https://dl.acm.org/doi/10.1145/3526113.3545619

在 10 月 29 日至 11 月 2 日举行的 ACM 用户界面软件和技术研讨会上,Notate 的论文《Notational Programming for Notebook Environments: A Case Study with Quantum Circuits》获得了荣誉提名奖。论文一作为康奈尔大学信息科学博士生 Ian Arawjo。

他表示,「这样一个系统对于数据科学非常有用,尤其适用于绘制草图和图表,然后与文本代码进行互操作。」

论文地址:https://ianarawjo.therottingcartridge.com/docs/Arawjo-Notational-Programming-UIST-2022.pdf

研究概览

本文中,研究者探讨了笔式硬件和机器学习的最新进展如何对一些编程实践进行重新配置。他们表达了这样一个愿景,即称之为符号编程(notational programming)的范式可以支持手写和打出符号之间的连通

因此,研究者认为可能不仅需要开发新的用户界面或者改进对流程图等现有符号的识别,还需要对历史上围绕编程出现的文化实践、表示和观念进行积极的重新配置。

为了探索符号编程,研究者设计了一个 Jupyter notebooks 的扩展——Notate,它能够在代码行内打开绘图画布,并允许函数在本地将画布中的对象接收为参数。Notate 架构传递这些对象作为局部作用域的参考,使得打字变量在手写上下文中被引用,反之亦然。他们将这种交互称为隐式跨上下文引用,通过进一步模糊「输入」和「输出」之间的区域对双峰编程(bimodal programming)以往的工作进行了扩展。

下图为嵌入在 Jupyter notebook 中的系统的主界面,图①为绘图画布在一行代码单元内打开,图②为全屏模式,通过触摸或点击绘图画布访问,图③为基本工具栏。

为了测试具体域中的符号编程界面和隐式跨上下文引用,研究者选择了量子计算,原因在于:量子计算的编程人员即使在打出代码时,也会经常在电路图和文本之间进行转换。Ashktorab 等人的一篇探索性论文注意到了笔式计算在量子计算领域中的应用潜力,但目前并没有出现这样的系统。

Ashktorab 等人论文地址:https://dl.acm.org/doi/10.1145/3290605.3300486

因此,研究者引入了一种 toy 符号 Qaw,它通过自定义门释义、捆绑线和递归等抽象功能增强了量子电路符号。下图为用来编写量子电路的一些常见符号。

研究者使用深度学习和经典计算机视觉技术为 Qaw 的子集实现了一个解释器,如下为 Notate 系统中解释手写量子电路的过程,分为五步完成。

为了验证 Notate 和 Qaw 原型的效果,研究者对 12 名熟悉 Python 和 notebook、但初学量子编程的程序员展开了一项研究。他们给参与者六个复杂度不断增加的电路,并让参与者将它们编写到机器中。研究者发现,几乎所有参与者都认为隐式跨上下文引用概念很直观,但得到的反馈表明还可以进一步改进调试基础设施、界面设计和识别率。

下图为其中一位参与者生成了类似于量子傅里叶变换主体的模式。电路 A 和 C 使用 Qaw 斜杠符号和隐式跨上下文引用实现递归定义。

研究者还将 Notate 和 Qaw 与使用 IBM Qiskit API 进行量子编程的工作流程进行了比较,以验证自己方法的效果。结果表明,对于 Python 程序员而言,Qaw 在性能时间方面能够与 Qiskit 媲美,但仍需进一步研究以了解这些方法的相对优势。

更多技术细节请参阅原论文。