分页符:计算笔记本中的多单元作用域
荣誉提名研究背景与问题
-
作者发现的问题或挑战: 编程人员通常在使用 Jupyter Notebook 时因大量全局变量而遭遇困惑,例如需要追踪变量、避免覆盖常用变量以及理解运行顺序。这种对全局状态的依赖可能引发难以理解、调试和组织代码的问题。此外,Notebook 编程环境中用户对函数作用域的使用较少,部分原因是函数无法跨多个单元使用,并且会限制互动性和探索式编程行为。
-
为什么这个问题很重要: Notebook 编程作为数据科学和探索式编程的主流工具,面临简化代码管理与维持高互动性的双重需求。如果不解决这些问题,开发规模较大的 Notebook 项目可能会成为一项复杂且容易出错的任务。此外,全局变量难以管理可能会对协作和结果的重复性产生负面影响。
-
研究动机与相关工作: 现有研究发现,Notebook 用户倾向于避免在函数中组织代码,而通过全局变量共享状态。这种实践容易导致运行状态混乱,特别是当 Notebook 变得较为复杂时。此外,Notebook 编程环境更强调探索性工作流,如通过多单元构建代码并交互式调整其效果。然而,传统编程中的函数作用域与这些探索性行为不兼容。
解决方案
-
作者提出的解决方案: 作者设计了一种新的语言构造 "Pagebreaks",允许用户在 Jupyter Notebook 中为多个单元创建非全局作用域。Pagebreaks 将某些单元的变量限制在其定义范围内,但允许通过显式导出变量以供后续单元使用,相比于函数,Pagebreaks 保留了用户在 Notebook 中的探索式行为。
-
解决方案的创新之处:
- Pagebreaks 在不影响 Notebook 的探索式工作流(如交替版本、代码和输出交错等)的同时提供了非全局作用域。
- 它允许将作用范围限于多个连续单元,而不是单一函数的作用范围。
- 通过变量导出机制专门解决了变量重定义问题,使得变量在作用范围外为只读状态,从而减少冲突和混乱。
- 提供了与 Notebook 用户行为紧密结合的设计,例如线性组织作用域,以保持 Notebook 独特的运行顺序优势。
-
实施步骤与技术:
- 设计要求: 保留 Notebook 用户的探索式工作流,同时提供更好的变量管理方式。
- 系统实现: 将 Pagebreaks 实现为 Jupyter 和 IPython 的插件,通过调整程序的 AST(抽象语法树),为每个 Pagebreaks 添加唯一前缀以管理它们的作用域。
- 操作机制: 用户通过界面标记 Pagebreaks,变量在作用范围内自由使用,但需要显式导出才能被后续单元读取。
- 可视化功能: 提供背景颜色、视觉层次以及按钮等图形化界面元素,以帮助用户组织程序。
研究成果
-
具体成果:
- 开发了 "Pagebreaks" 插件,在 Notebook 环境中为多单元创建作用域。
- 进行了为期两周的用户研究,观察 5 位参与者如何使用 Pagebreaks,以及它解决的问题。
- 发现 Pagebreaks 提升了用户组织和管理 Notebook 程序的能力,同时并未干扰用户的既有探索式行为。
-
与现有解决方案相比的优势:
- 解决全局变量管理难题,但保留了 Notebook 的互动性。
- 提供了比函数作用域更灵活的单元组织模式,可实现跨单元变量共享。
- 支持改进 Notebook 调试流程,帮助隔离问题而不干扰当前的程序状态。
-
实验或评估结果: 参与者指出 Pagebreaks 可以帮助追踪变量并减少名称冲突,同时对代码分段和文件组织有所帮助。研究发现,Pagebreaks 是对 Notebook 用户行为的自然扩展,它在解决变量混乱问题的同时并未牺牲用户熟悉的互动性。
-
局限性与未来方向:
- 研究有较少的参与者和有限的使用时长,未能覆盖更广泛的 Notebook 编程行为。
- Pagebreaks 尚未支持用户自定义颜色和样式设置。
- 未来方向包括增加对导出变量的高亮显示功能和扩展 Pagebreaks 的应用范围。
- 后续研究可探讨 Pagebreaks 的长期使用对 Notebook 编程行为的影响,以及如何进一步简化其使用流程。
通过本论文的研究工作,作者有效展示了如何为 Notebook 编程构造结合用户、语言和环境需求的新型语言功能,同时保留探索性工作流的灵活性。这为未来设计针对性编程环境提供了重要参考。
研究问题 / 现实痛点
这篇论文在当前问题库中对应的问题线索。
研究问题
3现实痛点
1- 程序员在Notebook中因全局变量影响难以追踪变量和避免命名冲突。分类: 编程助手与多轮代码支持同类问题arrow_forward
- 100%
利用注释促进代码理解
UIST '22· 知识工作者工具与工作流 +1
- 100%
Lorgnette:创建可塑形代码投影
UIST '23· 知识工作者工具与工作流 +1
- 75%
计算交互:理论与实践
CHI '18· 计算方法在HCI中的应用
- 75%
基于模型的回溯交互技术评估
CHI '24· 计算方法在HCI中的应用
- 75%
小步进示例实时编程
UIST '20· 计算方法在HCI中的应用
- 60%
大规模可视化API使用示例
CHI '18· 交互式数据可视化 +1
- 60%
Doppio:追踪应用程序开发中的用户界面流程和代码更改
CHI '18· 知识工作者工具与工作流 +1
- 60%
指向你周围的所有地方:全覆盖显示器中鼠标和光线投射指向的选择性能
CHI '18· 知识工作者工具与工作流 +1
- 60%
来自1.36亿次按键的打字观察
CHI '18· 用户研究方法(访谈、调查、观察) +1
- 60%
从现有代码中交互式提取示例
CHI '18· 开源协作与代码审查 +1
基于研究子主题与职业分类的 Jaccard 相似度(≥60%)