這篇罕見的符號(hào)編程論文,讓你在Jupyter Notebook中手繪草圖并變成代碼
當(dāng)今,打字系統(tǒng)形成了計(jì)算機(jī)編程的事實(shí)標(biāo)準(zhǔn)和主導(dǎo)范式。然而,在編程出現(xiàn)時(shí),最早的計(jì)算機(jī)編程符號(hào)是手寫的,而非打出來的。例如,在著名的 1945 年第一份 EDVAC 報(bào)告中,馮 · 諾伊曼將圖表與文本視作等同。實(shí)際上,當(dāng)打字機(jī)界面被用于編程時(shí),符號(hào)才被序列化并被稱為編程「語言」。
最近,康奈爾大學(xué)研究團(tuán)隊(duì)創(chuàng)建了一個(gè)界面,允許用戶在計(jì)算機(jī)代碼中手寫和畫圖,這是對(duì)傳統(tǒng)打字型編程的挑戰(zhàn)。
這個(gè)筆式界面被稱為 Notate,它讓基于網(wǎng)絡(luò)和交互型計(jì)算數(shù)字筆記本(如 Jupyter notebooks)打開繪圖畫布,在傳統(tǒng)的數(shù)字化計(jì)算機(jī)代碼行中手寫圖。
就運(yùn)行原理而言,在一個(gè)深度學(xué)習(xí)模型的加持下,Notate 界面連接了手寫和文本編程上下文,即手寫圖中的符號(hào)可以引用文本代碼,反之亦然。例如,Notate 能識(shí)別手寫編程符號(hào)如「n」,然后將這些符號(hào)連接到它們的打字代碼。
在具體的案例研究中,研究者演示了在 Jupyter notebook 代碼單元內(nèi)手繪量子電路圖。詳細(xì)介紹視頻如下。
視頻地址:https://dl.acm.org/doi/10.1145/3526113.3545619
在 10 月 29 日至 11 月 2 日舉行的 ACM 用戶界面軟件和技術(shù)研討會(huì)上,Notate 的論文《Notational Programming for Notebook Environments: A Case Study with Quantum Circuits》獲得了榮譽(yù)提名獎(jiǎng)。論文一作為康奈爾大學(xué)信息科學(xué)博士生 Ian Arawjo。
他表示,「這樣一個(gè)系統(tǒng)對(duì)于數(shù)據(jù)科學(xué)非常有用,尤其適用于繪制草圖和圖表,然后與文本代碼進(jìn)行互操作?!?/span>
論文地址:https://ianarawjo.therottingcartridge.com/docs/Arawjo-Notational-Programming-UIST-2022.pdf
研究概覽
本文中,研究者探討了筆式硬件和機(jī)器學(xué)習(xí)的最新進(jìn)展如何對(duì)一些編程實(shí)踐進(jìn)行重新配置。他們表達(dá)了這樣一個(gè)愿景,即稱之為符號(hào)編程(notational programming)的范式可以支持手寫和打出符號(hào)之間的連通。
因此,研究者認(rèn)為可能不僅需要開發(fā)新的用戶界面或者改進(jìn)對(duì)流程圖等現(xiàn)有符號(hào)的識(shí)別,還需要對(duì)歷史上圍繞編程出現(xiàn)的文化實(shí)踐、表示和觀念進(jìn)行積極的重新配置。
為了探索符號(hào)編程,研究者設(shè)計(jì)了一個(gè) Jupyter notebooks 的擴(kuò)展——Notate,它能夠在代碼行內(nèi)打開繪圖畫布,并允許函數(shù)在本地將畫布中的對(duì)象接收為參數(shù)。Notate 架構(gòu)傳遞這些對(duì)象作為局部作用域的參考,使得打字變量在手寫上下文中被引用,反之亦然。他們將這種交互稱為隱式跨上下文引用,通過進(jìn)一步模糊「輸入」和「輸出」之間的區(qū)域?qū)﹄p峰編程(bimodal programming)以往的工作進(jìn)行了擴(kuò)展。
下圖為嵌入在 Jupyter notebook 中的系統(tǒng)的主界面,圖①為繪圖畫布在一行代碼單元內(nèi)打開,圖②為全屏模式,通過觸摸或點(diǎn)擊繪圖畫布訪問,圖③為基本工具欄。
為了測(cè)試具體域中的符號(hào)編程界面和隱式跨上下文引用,研究者選擇了量子計(jì)算,原因在于:量子計(jì)算的編程人員即使在打出代碼時(shí),也會(huì)經(jīng)常在電路圖和文本之間進(jìn)行轉(zhuǎn)換。Ashktorab 等人的一篇探索性論文注意到了筆式計(jì)算在量子計(jì)算領(lǐng)域中的應(yīng)用潛力,但目前并沒有出現(xiàn)這樣的系統(tǒng)。
Ashktorab 等人論文地址:https://dl.acm.org/doi/10.1145/3290605.3300486
因此,研究者引入了一種 toy 符號(hào) Qaw,它通過自定義門釋義、捆綁線和遞歸等抽象功能增強(qiáng)了量子電路符號(hào)。下圖為用來編寫量子電路的一些常見符號(hào)。
研究者使用深度學(xué)習(xí)和經(jīng)典計(jì)算機(jī)視覺技術(shù)為 Qaw 的子集實(shí)現(xiàn)了一個(gè)解釋器,如下為 Notate 系統(tǒng)中解釋手寫量子電路的過程,分為五步完成。
為了驗(yàn)證 Notate 和 Qaw 原型的效果,研究者對(duì) 12 名熟悉 Python 和 notebook、但初學(xué)量子編程的程序員展開了一項(xiàng)研究。他們給參與者六個(gè)復(fù)雜度不斷增加的電路,并讓參與者將它們編寫到機(jī)器中。研究者發(fā)現(xiàn),幾乎所有參與者都認(rèn)為隱式跨上下文引用概念很直觀,但得到的反饋表明還可以進(jìn)一步改進(jìn)調(diào)試基礎(chǔ)設(shè)施、界面設(shè)計(jì)和識(shí)別率。
下圖為其中一位參與者生成了類似于量子傅里葉變換主體的模式。電路 A 和 C 使用 Qaw 斜杠符號(hào)和隱式跨上下文引用實(shí)現(xiàn)遞歸定義。
研究者還將 Notate 和 Qaw 與使用 IBM Qiskit API 進(jìn)行量子編程的工作流程進(jìn)行了比較,以驗(yàn)證自己方法的效果。結(jié)果表明,對(duì)于 Python 程序員而言,Qaw 在性能時(shí)間方面能夠與 Qiskit 媲美,但仍需進(jìn)一步研究以了解這些方法的相對(duì)優(yōu)勢(shì)。
更多技術(shù)細(xì)節(jié)請(qǐng)參閱原論文。