论文标题
用于基于块的编程的综合任务
Synthesizing Tasks for Block-based Programming
论文作者
论文摘要
基于块的视觉编程环境在向K-12学生引入计算概念方面起着至关重要的作用。在这些环境中,关键的教学挑战之一是为与所需的难度和锻炼特定编程概念相匹配的学生设计新的练习任务。在本文中,我们正式化了综合视觉编程任务的问题。特别是,给定一个参考的视觉任务$ \ rm t^{in} $及其解决方案代码$ \ rm c^{in} $,我们提出了一种新颖的方法来自动生成一个$ \ {(\ rm t^{out},\ rm c^{out})与解决方案代码的新任务$ rm clm c^{out} $ \ rm t^{out} $在概念上相似,但视觉上不同。我们的方法基于这样的认识,即从视觉任务到其解决方案代码的映射是高度不连续的。因此,直接将参考任务$ \ rm t^{in} $生成新任务是徒劳的。我们的任务综合算法是通过首先突变代码$ \ rm c^{in} $进行操作,以获得一组代码$ \ {\ rm c^{out} \} $。然后,该算法通过代码$ \ rm c^{out} $执行符号执行,以获取视觉任务$ \ rm t^{out} $;此步骤使用Monte Carlo树搜索(MCTS)过程来指导符号树中的搜索。我们通过\ emph {code.org}挑战的参考任务进行了广泛的经验评估和用户研究来证明我们的算法的有效性和用户研究。
Block-based visual programming environments play a critical role in introducing computing concepts to K-12 students. One of the key pedagogical challenges in these environments is in designing new practice tasks for a student that match a desired level of difficulty and exercise specific programming concepts. In this paper, we formalize the problem of synthesizing visual programming tasks. In particular, given a reference visual task $\rm T^{in}$ and its solution code $\rm C^{in}$, we propose a novel methodology to automatically generate a set $\{(\rm T^{out}, \rm C^{out})\}$ of new tasks along with solution codes such that tasks $\rm T^{in}$ and $\rm T^{out}$ are conceptually similar but visually dissimilar. Our methodology is based on the realization that the mapping from the space of visual tasks to their solution codes is highly discontinuous; hence, directly mutating reference task $\rm T^{in}$ to generate new tasks is futile. Our task synthesis algorithm operates by first mutating code $\rm C^{in}$ to obtain a set of codes $\{\rm C^{out}\}$. Then, the algorithm performs symbolic execution over a code $\rm C^{out}$ to obtain a visual task $\rm T^{out}$; this step uses the Monte Carlo Tree Search (MCTS) procedure to guide the search in the symbolic tree. We demonstrate the effectiveness of our algorithm through an extensive empirical evaluation and user study on reference tasks taken from the \emph{Hour of Code: Classic Maze} challenge by \emph{Code.org} and the \emph{Intro to Programming with Karel} course by \emph{CodeHS.com}.