Identifying Effective Program Comprehension Strategies through Gaze Transitions over Syntactic Elements
本研究通过分析转换为抽象语法树节点间转换的眼动追踪数据,揭示了成功的程序理解相较于失败的尝试,表现出在语法元素之间具有更具系统性的注视转换模式。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正在试图解开一个复杂的谜题,但你不是用双手,而是用眼睛。这篇论文就像是一个侦探故事,研究人员观察了人们在尝试理解计算机代码时,他们的眼睛是如何移动的。他们想找出:一个“聪明”的阅读者的眼动轨迹,与一个陷入困境的人相比,有什么不同?
以下是他们研究结果的拆解,使用了简单的类比。
设置:像看地图一样阅读代码
通常,当科学家研究人们如何阅读代码时,他们只看眼睛落在屏幕上的位置(比如看着地图说,“他们在左上角盯着看”)。
但这个团队使用了一种特殊的工具,将这些屏幕坐标转化为语法节点(syntax nodes)。可以这样理解:
- 旧方法: “这个人正在看地图上的红点。”
- 新方法: “这个人先看了看桥梁,然后看了看隧道,接着看了看山脉。”
他们将原始的眼动数据转化为了一个关于读者如何在代码结构的不同部分之间跳转的故事(例如从一个“循环”跳到一个“函数”)。
实验:代码迷宫
他们给 14 名学生提供了 16 个不同的编程谜题。有些很简单(就像一个简单的迷宫),有些很难(就像一个带有陷阱和死胡同的迷宫)。
- 目标: 回答关于这段代码会执行什么操作的问题。
- 分组: 他们将结果分为两组:正确解决谜题的人(获胜者)和没能解决的人(挣扎者)。
随后,他们分析了两组人的“视线路径”,以观察获胜者的眼动方式是否与挣扎者不同。
发现 #1:“For 循环”之舞
在编程中,“for 循环”就像一个食谱,它说:“做这一步,检查是否应该停止,然后更新你的进度。”它包含三个主要部分:
- 开始(初始化)
- 检查(条件)
- 更新(改变计数器的步骤)
挣扎者做了什么:
他们倾向于看“开始”和“检查”,但经常忽略“更新”。这就像开车,检查了时速表和油门,却从未看一眼挡位。他们错过了那个真正让车前进的部分。
获胜者做了什么:
他们的动作更加有系统性。他们频繁地观察“更新”部分,然后跳回去检查“开始”或“检查”。
- 类比: 想象一位厨师在品尝汤。挣扎者品尝了食材,却忘了在加盐后尝一下汤底。获胜者尝了盐,然后立即再次品尝汤底,看看味道发生了怎样的变化。他们在动作(更新)与结果(条件)之间建立了联系。
启示: 要理解一个循环,你不能只看规则;你必须观察规则是如何改变现状的。
发现 #2:“方法”高速公路
代码通常由不同的“方法”(执行特定任务的小型代码块)构建而成。有时,一个方法会调用另一个方法,就像经理要求员工完成一项任务一样。
挣扎者做了什么:
当代码变得复杂时,挣扎者往往会陷入他们自己的循环中。他们会在两个方法之间来回跳跃,反复进行,就像在滚轮上奔跑的仓鼠。他们困在了局部对话中,无法看到大局。
获胜者做了什么:
获胜者遵循了代码的交通流。
- 跟随调用: 如果方法 A 调用了方法 B,获胜者的眼睛会自然地从 A 移动到 B,就像跟着面包屑的痕迹走一样。
- 反向追踪: 有趣的是,获胜者还会做一些独特的事情:他们有时会向后看。如果代码从方法 A 走向方法 B,获胜者有时会从 B 看回 A。
- 类比: 想象一位侦探正在破案。挣扎者只是向前走在街上。而获胜者向前走,去看嫌疑人去了哪里,但随后又会向后走,去看嫌疑人是从哪里来的,通过检查脚印来确保整个故事逻辑通顺。
启示: 成功的阅读者不仅仅是逐行阅读;他们会追踪不同部分之间的关系,有时会通过向后看,来验证数据是如何传递的。
核心结论
这项研究表明,精通阅读代码不仅仅在于掌握词汇;更在于你的眼睛如何移动。
- 挣扎者就像是那些只看风景却忽略了景点之间联系的游客。
- 获胜者则像是导游,他们清楚地知道各个景点是如何连接的——他们会检查循环中的“更新”,追踪函数之间的“调用”,甚至通过向后看,来确认路径是否成立。
论文最后总结道,如果你想提高理解代码的能力,你应该尝试养成这些“结构化”的用眼习惯:检查循环中的更新,并追踪函数之间的连接,即使这意味着需要向后看,也要确保整个故事的逻辑能够自洽。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。