<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>An Exploration of Data-Driven Hint Generation in an Open-Ended Programming Problem</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Thomas W. Price</string-name>
          <email>twprice@ncsu.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Tiffany Barnes</string-name>
          <email>tmbarnes@ncsu.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>North Carolina State University</institution>
          ,
          <addr-line>890 Oval Drive, Raleigh, NC 27606</addr-line>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Data-driven systems can provide automated feedback in the form of hints to students working in problem solving environments. Programming problems present a unique challenge to these systems, in part because of the many ways in which a single program can be written. This paper reviews current strategies for generating data-driven hints for programming problems and examines their applicability to larger, more open-ended problems, with multiple, loosely ordered goals. We use this analysis to suggest directions for future work to generate hints for these problems.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        While problems in many domains result in well-connected
networks, this is not always the case. Programming
problems have a large, often in nite, space of possible states.
Even a relatively simple programming problem may have
many unique goal states, each with multiple possible
solution paths, leaving little overlap among student solutions.
Despite this challenge, a number of attempts have been
made to adapt the Hint Factory to programming problems [
        <xref ref-type="bibr" rid="ref12 ref16 ref9">9,
12, 16</xref>
        ]. While these approaches have been generally
successful, they are most e ective on small, well structured
programming problems, where the state space cannot grow too
large. This paper explores the opposite type of problem: one
that has a large state space, multiple loosely ordered goals,
unstructured output and involves creative design. Each of
these attributes poses a challenge to current data-driven hint
generation techniques, but they are also the attributes that
make such problems interesting, useful and realistic. In this
paper, we will refer to these as open-ended programming
problems. We investigate the applicability of current
techniques to these problems and suggest areas for future
research.
      </p>
      <p>The primary contributions of this paper are 1) a review of
current data-driven hint generation methods for
programming problems, 2) an analysis of those methods'
applicability to an open-ended problem and 3) a discussion of the
challenges that need to be addressed before we can expect
to generate hints for similar problems.</p>
    </sec>
    <sec id="sec-2">
      <title>2. CURRENT APPROACHES</title>
      <p>
        Current approaches to generating data-driven programming
hints, including alternatives to the Hint Factory [
        <xref ref-type="bibr" rid="ref10 ref13 ref17">10, 13, 17</xref>
        ],
can be broken down into three primary components:
1. A representation of a student's state and a method
for determining when one state can be reached from
another, meaning they are connected in the network
2. An algorithm that, given a student's current state,
constructs an optimal path to a goal state. Often we
simplify this to the problem of picking the rst state on
that path
3. A method to present this path, or next state, to the
student in the form of a hint
For the purposes of this paper, we limit our discussion to
the rst step in this process. (For a good discussion of the
second step, see an analysis by Piech et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ],
comparing path selection algorithms.) While in some domains this
rst step is straightforward, in programming tasks,
especially open-ended problems, it is likely the most
challenging. The simplest approach is to take periodic snapshots of
a student's code and treat these as states, connecting
consecutive snapshots in the network. However, because two
students' programs are unlikely to match exactly, this
approach is likely to produce a very sparse, poorly connected
network, making it di cult to match new students to prior
solution attempts. A variety of techniques have been
presented to address this problem, which can be grouped into
three main strategies: canonicalization, connecting states
and alternative state de nitions.
      </p>
    </sec>
    <sec id="sec-3">
      <title>2.1 Canonicalization</title>
      <p>
        Canonicalization is the process of putting code states into
a standardized form, often by removing semantically
unimportant information, so that trivial di erence do not prevent
two states from matching. Rivers and Koedinger [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] present
a method for canonicalizing student code by rst
representing it as an Abstract Syntax Tree (AST). Once in this form,
they apply a number of functions to canonicalize the code,
including normalizing arithmetic and boolean operators,
removing unreachable and unused code, and inlining helper
functions. After performing this canonicalization on a set
of introductory programming problems, they found that a
median 70% of states had at least one match in the
network. Jin et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] represent a program's state as a Linkage
Graph, where each vertex is a code statement, and each
directed edge represents an ordering dependency, determined
by which variables are read and assigned to in each
statement. This state representation allows the Hint Factory to
ignore statement orderings which are not important to the
execution of the program. Lazar and Bratko [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] use the
actual text of Prolog code to represent a student's state,
and then canonicalize the code by removing whitespace and
normalizing variable names.
      </p>
    </sec>
    <sec id="sec-4">
      <title>2.2 Connecting States</title>
      <p>
        Even with canonicalization, a student requesting a hint may
not match any existing state in the network. In this case, we
can look for a similar state and create a connection between
them. Rivers and Koedinger [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] use normalized string edit
distance as a similarity metric between two program states.
They connect any two states in the network which have at
least 90% similarity, even if no historical data connect these
states. Additionally, they use a technique called path
construction to generate new solution paths from a given state
to a nearby, unconnected goal state by searching for a series
of insertions, deletions and edits to their AST that will
transform it into the goal state [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. They also use this method
to discover new goal states which may be closer to the
student's current state. Jin et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] use a similar technique
to transform their Linkage Graphs to better match the
current state of a student when no direct matches can be found
in the interaction network. Piech et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] use path
construction to interpolate between two consecutive states on
a solution path which di er by more than one edit. This
is useful to smooth data when student code is recorded in
shapshots that are too far apart.
      </p>
    </sec>
    <sec id="sec-5">
      <title>2.3 Alternate State Definitions</title>
      <p>
        Another approach is to forego the traditional code-based
representation of a student's state, and use an alternate
definition. Hicks and Peddycord [
        <xref ref-type="bibr" rid="ref12 ref7">7, 12</xref>
        ] used the Hint Factory
to generate hints for a programming game called Bots, in
which the player writes a program to direct a robot through
various tasks in a 3D level. They chose to represent the state
of a player's program as the nal state of the game world
after the program was executed. They compared the
availability of hints when using this \world state" model with a
traditional \code state" model, and found that using world
states signi cantly reduced the total number of states and
increased the availability of hints. The challenge with this
approach, as noted by the authors, is the generation of
actionable hints. A student may be more capable of making a
speci c change to her code than determining how to e ect
a speci c change in the code's output.
      </p>
    </sec>
    <sec id="sec-6">
      <title>3. AN OPEN-ENDED PROBLEM</title>
      <p>
        The above techniques have all shown success on smaller,
well-structured problems, with ample data. We want to
investigate their applicability to an open-ended problem, as
described in Section 1, where this is not the case. The
purpose of this paper is not to create actionable hints, nor are
we attempting to show the failures of current methods by
applying them to an overly challenging task. Rather, our
purpose is exploratory, using a small dataset to identify
areas of possible future work, and challenges of which to be
mindful when moving forward with hint generation research.
We collected data from a programming activity completed
by 6th grade students in a STEM outreach program called
SPARCS [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. The program, which meets for half-day
sessions approximately once a month during the school year,
consists of lessons designed and taught by undergraduate
and graduate students to promote technical literacy. The
class consisted of 17 students, 12 male and 5 female.
The activity was a programming exercise based on an Hour
of Code activity from the Beauty and Joy of Computing
curriculum [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. It was a tutorial designed to introduce novices
to programming for the rst time. The exercise had users
create a simple web-based game, similar to whack-a-mole,
in which players attempt to click on a sprite as it jumps
around the screen to win points. The exercise was split into
9 objectives, with tutorial text at each stage. Students were
not required to nish an objective before proceeding. A
nished project required the use of various programming
concepts, including events, loops, variables and conditionals.
The students used a drag-and-drop, block-based
programming language called Tiled Grace [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], which is similar to
Scratch [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. The user writes a program by arranging code
blocks, which correspond directly to constructs in the Grace
programming language. The editor also supports switching
to textual coding, but this feature was disabled. A
screenshot of the activity can be seen in Figure 1.
      </p>
      <p>During the activity, the students were allowed to go through
the exercise at their own pace. If they had questions, the
students were allowed to ask for help from the student
volunteers. Students were stopped after 45 minutes of work.
Snapshots of a student's code were saved each time it was
run and periodically throughout the session. Occasional
technical issues did occur in both groups. One student had
severe technical issues, and this student's data was not
analyzed (and is not re ected in the counts above). Students
produced on average 148.5 unique code states and
accomplished between 1 and 6 of the activity's objectives,
averaging 3.2 objectives per student.</p>
    </sec>
    <sec id="sec-7">
      <title>4. ANALYSIS</title>
      <p>We attempted to understand the applicability of each of the
techniques discussed in Section 2 to our dataset. However,
since the output of our program was a game that involved
nondeterminism, we felt it would be inappropriate to
attempt to represent a program's state as the result of its
execution. We therefore focused on the rst two strategies,
canonicalization and connecting states.</p>
    </sec>
    <sec id="sec-8">
      <title>4.1 Canonicalization</title>
      <p>Our initial representation of a student's code state was a
tree, where each code block was a node, and its children
included any blocks that were nested inside of it. In this way,
our representation was similar to Rivers and Koedinger's
ASTs. To get a baseline for the sparsity of our dataset,
we rst analyzed the code states without performing any
canonicalization. We calculated the total number of states
in the interaction network and the percentage which were
only reached by one student. Of those states reached by
multiple students, we calculated the mean and median
number of students who reached them. We also calculated the
percentage of each student's states that were unreached by
any other student in the dataset.</p>
      <p>
        We then canonicalized the data by removing variable names
and the values of number and string literals. Our problem
featured very few arithmetic or logical operators, and these
were generally not nested, so we did not normalize them,
as suggested by Rivers and Koedinger [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. We reran our
analyses on the canonicalized data. To ensure that we had
e ectively removed all unimportant ordering information,
we recursively sorted the children of each node in the tree.
This e ectively removed any ordering information from a
student's code state, and kept only hierarchical information.
This is somewhat more extreme than the Linkage Graphs of
Jin et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], and it does allow two meaningfully di
erTotal States
% Unique
Mean NU Count
Median NU Count
Mean % Path Unique
Standard Deviation
ent code states to be merged in the process. We therefore
see this as an upper bound on the value of removing
unimportant orderings from a code state. We recomputed our
metrics for the ordered-canonicalized interaction network as
well. The results can be seen in Table 1. Our later analyses
use the unsorted, canonicalized code representation.
These results indicate that canonicalization does little to
reduce the sparsity of the state space, with students spending
most of their time in states that no other student has seen.
For comparison, recall Rivers and Koedinger found 70% of
states in a simple programming problem had a match after
canonicalization [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], though they were using a much larger
dataset. In our dataset, it is unlikely that we would be able
to nd a direct path from a new student's state to a goal
state in order to suggest a hint.
      </p>
    </sec>
    <sec id="sec-9">
      <title>4.2 Connecting States</title>
      <p>
        To address this, we explored the feasibility of connecting a
new student's state to a similar, existing state in the
network. It is unclear how close two code states should be
before it is appropriate to connect them as in [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], or to
generate a path between them as in [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. It certainly
depends on the state representation and distance metric used.
Rather than identifying a cuto and measuring how often
these techniques could be applied, we chose to visualize the
distance between two students and make qualitative
observations. Because our code states were already represented
as trees, we used Tree Edit Distance (TED) as a distance
metric. While Rivers and Koedinger reported better success
with Levenshtein distance [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], we believe that TED is the
most appropriate distance metric for block code, where tree
edit operations correspond directly to user actions.
For each pair of students, A and B, we created an N by M
distance matrix, D, where N is the number of states in A's
solution path, and M is the number of states in B's solution
path. Di;j = d(Ai; Bj), where d is the TED distance
function, Ai is the ith state of A and Bj is the jth state of B.
We used the RTED algorithm [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] to calculate the distance
function, putting a weight of 1.0 on insertions, deletions and
replacements. We also omitted any state which was identical
to its predecessor state. We normalized these values by
dividing by the maximum value of Di;j , and plotted the result
as an image. Three such images can be seen in Figure 2.
We also calculated the \path" through this matrix that passes
through the least total distance. This does not represent a
path through the interaction network, but rather an
alignment between the states of student A and those of student
B. Each pixel of the line represents a pairing of a state
from A with a state from B, such that these pairings are
contiguous and represent the smallest total distance. While
we do not suggest applying this directly as a strategy for
hint generation, it serves an a useful visual indicator of the
compatibility of two students for hinting purposes.
An alternate approach would have been to pair each state in
the interaction network with its closest pair from any other
student, and use this as a measure of how sparse the network
was. We chose to compare whole students, rather than
individual states, because we felt that the former could lead to
strange hinting behavior. Imagine, for instance, that a
student requests a hint, which initially points to a state from
student B, but at the very next step requests a hint that
points instead to student C. Perhaps the attributes that
make the student's state similar to that of B are di erent
from those that make the state similar to C. The resulting
hints would be at best confusing, and at worst con icting.
1
2
4
5
6
A visual inspection of these matrices reveals that while many
student pairs are quite divergent, some show a notable
closeness throughout the exercise. In order to quantify these
results, we developed a set of distance metrics between
students. First, the distance matrix and the minimum-distance
\path" were calculated for the two students. The path is
comprised of pairs of states, and for each pair, we recorded
the tree edit distance between the states. From this list of
distances, we calculated the mean, median and maximum
distances between the two students. We looked at each
objective in the exercise, and isolated the relevant subpath of
each student who completed that objective. We paired each
of these subpaths with the most similar subpath in the set,
using the mean, median and max distance metrics. Table 2
shows the average values of these minimized pairs of
students, using each metric. Objective 3, and objectives 7-9
were omitted, as too few students completed them.
      </p>
    </sec>
    <sec id="sec-10">
      <title>5. DISCUSSION</title>
      <p>We have attempted to apply a meaningful canonicalization
to our state space, which did serve to reduce the number
of states by 30.4%. However, as seen in Table 1, even
after the strongest canonicalization, over 90% of the states in
the interaction network had only been reached by one
student, with an average 78.9% of the states in each student's
solution path being unique to that student. It seems that
our approach to canonicalization is insu cient to produce a
meaningful reduction of the state space, though it is possible
a more stringent canonicalization would be more e ective.
Connecting existing states seems to be a more promising
approach, giving us the ability to link new states to previously
observed states, even when they do not match exactly. Our
distance matrices indicate that some students take parallel,
or slowly diverging solution paths, which suggests that they
may be useful to each other in the context of hinting. As
shown in Figure 2, students are often closest together when
completing the same objective. This may seem self-evident,
but it does indicate that our distance metric is
meaningful. It is more di cult to put the actual TED values into
context. Students get, on average, farther away from their
closest paired student as they complete more objectives, but
this average distance does not exceed 8 tree edits during the
rst 6 objectives. To put that number into context, during
this same time students do not, on average, get more than
19 tree edits away from the start state. This suggest that
there is certainly hint-relevant knowledge in these paired
students, but that it may be di cult to harness this knowledge
to generate a hint.</p>
    </sec>
    <sec id="sec-11">
      <title>5.1 Limitations</title>
      <p>It is important to note that this analysis is an exploratory
case study, and makes no strong claims, only observations.
We studied data from only 17 novice programmers, and the
problem we analyzed was highly complex, involving multiple
control structures, loosely ordered objectives, and
unstructured output. This makes the problem quite dissimilar from
previous problems that have been been studied in the
context of hint generation, making it di cult to determine what
observations should be generalized.</p>
    </sec>
    <sec id="sec-12">
      <title>5.2 Future Work</title>
      <p>
        Rivers and Koedinger [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], as well as Jin et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] note
the limitations of their methods for larger problems, and
each suggest that breaking a problem down into
subproblems would help to address this. Lazar and Bratko [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]
attempted this in their Prolog tutor by constructing hints for
individual lines of code, which were treated as independent
subproblems. Similarly, we may be able to isolate the
subsection of a student's code that is currently relevant, and
treat this as an independent problem. The hierarchical
nature of block-based coding environments lends itself to this
practice, making it an appealing direction for future work.
Our work makes the simplifying assumption that unweighted
TED is a reliable distance metric for code, but future work
should investigate alternative metrics. This might include a
weighted TED metric, which assigns di erent costs to
insertions, deletions and replacements, or even to di erent types
of nodes (e.g. deleting a for-loop node might cost more than
a function call node). Regardless of the metric used, once
two proximate states are identi ed, it is still an open
question how this information can be best used for hint
generation. It is possible to construct a path between the states
and direct a student along this path. However, future work
might also investigate how to extract hint-relevant
information from one state and apply it to a similar state directly.
Because of the nature of our problem's output, we did not
explore non-code-based state representations, as described
in Section 2.3. It would still be worth investigating how this
might be applied to open-ended problems. For instance, a
code state could be represented as a boolean vector,
indicating whether the code has passed a series of Unit Tests,
and hints could direct the student to the current aw in
their program. However, creating actionable hints from this
information would pose a signi cant challenge.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>T.</given-names>
            <surname>Barnes</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Stamper</surname>
          </string-name>
          .
          <article-title>Toward Automatic Hint Generation for Logic Proof Tutoring Using Historical Student Data</article-title>
          .
          <source>In Intelligent Tutoring Systems (ITS)</source>
          , pages
          <fpage>373</fpage>
          {
          <fpage>382</fpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>T.</given-names>
            <surname>Barnes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Stamper</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Lehman</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Croy</surname>
          </string-name>
          .
          <article-title>A pilot study on logic proof tutoring using hints generated from historical student data</article-title>
          .
          <source>In Proceedings of the 1st Annual International Conference on Educational Data Mining (EDM)</source>
          , pages
          <fpage>1</fpage>
          <issue>{5</issue>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>V.</given-names>
            <surname>Catete</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Wassell</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Barnes</surname>
          </string-name>
          .
          <article-title>Use and development of entertainment technologies in after school STEM program</article-title>
          .
          <source>In Proceedings of the 45th ACM technical symposium on Computer science education</source>
          , pages
          <volume>163</volume>
          {
          <fpage>168</fpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>M.</given-names>
            <surname>Eagle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Johnson</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Barnes</surname>
          </string-name>
          .
          <article-title>Interaction Networks: Generating High Level Hints Based on Network Community Clustering</article-title>
          .
          <source>In International Educational Data Mining Society</source>
          , pages
          <fpage>164</fpage>
          {
          <fpage>167</fpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>D.</given-names>
            <surname>Fossati</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B. D.</given-names>
            <surname>Eugenio</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Ohlsson</surname>
          </string-name>
          .
          <article-title>I learn from you, you learn from me: How to make iList learn from students</article-title>
          .
          <source>In Arti cial Intelligence in Education (AIED)</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>D.</given-names>
            <surname>Garcia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Harvey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Segars</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>How</surname>
          </string-name>
          . AP CS Principles Pilot at University of California, Berkeley. ACM Inroads,
          <volume>3</volume>
          (
          <issue>2</issue>
          ),
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>A.</given-names>
            <surname>Hicks</surname>
          </string-name>
          , B.
          <string-name>
            <surname>Peddycord</surname>
            <given-names>III</given-names>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Barnes</surname>
          </string-name>
          .
          <article-title>Building Games to Learn from Their Players: Generating Hints in a Serious Game</article-title>
          .
          <source>In Intelligent Tutoring Systems (ITS)</source>
          , pages
          <fpage>312</fpage>
          {
          <fpage>317</fpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>M.</given-names>
            <surname>Homer</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Noble</surname>
          </string-name>
          .
          <article-title>Combining Tiled and Textual Views of Code</article-title>
          .
          <source>In Proceedings of 2nd IEEE Working Conference on Software Visualization</source>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>W.</given-names>
            <surname>Jin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Barnes</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Stamper</surname>
          </string-name>
          .
          <article-title>Program representation for automatic hint generation for a data-driven novice programming tutor</article-title>
          .
          <source>In Intelligent Tutoring Systems (ITS)</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>T.</given-names>
            <surname>Lazar</surname>
          </string-name>
          and I. Bratko.
          <article-title>Data-Driven Program Synthesis for Hint Generation in Programming Tutors</article-title>
          .
          <source>In Intelligent Tutoring Systems (ITS)</source>
          . Springer,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>M.</given-names>
            <surname>Pawlik</surname>
          </string-name>
          and
          <string-name>
            <given-names>N.</given-names>
            <surname>Augsten</surname>
          </string-name>
          .
          <article-title>RTED: a robust algorithm for the tree edit distance</article-title>
          .
          <source>Proceedings of the VLDB Endowment</source>
          ,
          <volume>5</volume>
          (
          <issue>4</issue>
          ):
          <volume>334</volume>
          {
          <fpage>345</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>B.</given-names>
            <surname>Peddycord</surname>
          </string-name>
          <string-name>
            <given-names>III</given-names>
            ,
            <surname>A. Hicks</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Barnes</surname>
          </string-name>
          .
          <article-title>Generating Hints for Programming Problems Using Intermediate Output</article-title>
          .
          <source>In Proceedings of the 7th International Conference on Educational Data Mining (EDM</source>
          <year>2014</year>
          ), pages
          <fpage>92</fpage>
          {
          <fpage>98</fpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>C.</given-names>
            <surname>Piech</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Sahami</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Huang</surname>
          </string-name>
          , and
          <string-name>
            <given-names>L.</given-names>
            <surname>Guibas</surname>
          </string-name>
          .
          <article-title>Autonomously Generating Hints by Inferring Problem Solving Policies</article-title>
          .
          <source>In Learning at Scale (LAS)</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Resnick</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Maloney</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Andres</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Rusk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Eastmond</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Brennan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Millner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Rosenbaum</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Silver</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Silverman</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Kafai</surname>
          </string-name>
          .
          <article-title>Scratch: programming for all</article-title>
          .
          <source>Communications of the ACM</source>
          ,
          <volume>52</volume>
          (
          <issue>11</issue>
          ):
          <volume>60</volume>
          {
          <fpage>67</fpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>K.</given-names>
            <surname>Rivers</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Koedinger</surname>
          </string-name>
          .
          <article-title>A canonicalizing model for building programming tutors</article-title>
          .
          <source>In Intelligent Tutoring Systems (ITS)</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>K.</given-names>
            <surname>Rivers</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Koedinger</surname>
          </string-name>
          .
          <article-title>Automatic generation of programming feedback: A data-driven approach</article-title>
          . In The First Workshop on
          <article-title>AI-supported Education for Computer Science</article-title>
          (AIEDCS
          <year>2013</year>
          ),
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>K.</given-names>
            <surname>Rivers</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Koedinger</surname>
          </string-name>
          .
          <article-title>Automating Hint Generation with Solution Space Path Construction</article-title>
          .
          <source>In Intelligent Tutoring Systems (ITS)</source>
          , pages
          <fpage>329</fpage>
          {
          <fpage>339</fpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>J.</given-names>
            <surname>Stamper</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Eagle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Barnes</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Croy</surname>
          </string-name>
          .
          <article-title>Experimental evaluation of automatic hint generation for a logic tutor</article-title>
          .
          <source>Arti cial Intelligence in Education (AIED)</source>
          ,
          <volume>22</volume>
          (
          <issue>1</issue>
          ):3{
          <fpage>17</fpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>