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