![]()
|
Abstract 1. Introduction We believe that the appropriate starting point in the design of an algorithm animation system is to examine the tasks instructors perform and the context of these tasks. We have therefore adopted a contextual design [1] approach, in which the first step is to study the user’s existing tasks and workflow. Design proposals are made with the objective of improving the existing system, while a careful attempt is made not to displace aspects of the existing workflow process that enable the tasks to be accomplished. We believe that this design methodology will result in algorithm animation teaching tools that are far more relevant to the needs of both instructors and students. In a similar vein, Hundhausen has conducted ethnographic studies of how students construct algorithm animations, and used the results in the design of SALSA and ALVIS [7]. Another issue that impacts the use of algorithm animation systems is the time it takes to author an animation. The average instructor lacks the free time to create algorithm animations. Some systems, for example Samba [11], have attempted to address this issue, but it appears to be largely unresolved. In one study, Hundhausen found that students took an average of 33 hours to produce a Samba animation [7]. One must write code to create, display, and modify data structures such as graphs and trees in all but a few systems such as JAWAA [10] and Object-TRAKLA [8]. We have attempted to minimize authoring time by providing an extensible library of visual data structure objects, and a set of simple operations that facilitate access to these objects. 2. Examining Instructional
Tasks Our present approach to videotape analysis is to divide topics (e.g., binary search trees) into subtopics (e.g. binary search tree insertion), and divide the subtopics into segments - for example, an introductory discussion, examples, further discussion, and analysis. We identify the tasks performed in each segment and the time spent on each task, noting any use of diagrams. We also record the use of annotations and gestures used in conjunction with the diagrams. An example of this is the following summary of the binary search tree deletion video session: |
|
![]() |
![]()
|
![]() |
![]() |
![]() Thus far, we have observed data structure diagrams being used in (a) tracing algorithms, sometimes without a written algorithm, (b) discussing or describing properties of the data structures or algorithms, and (c) deriving or confirming theoretical analysis of algorithms. These findings are summarized in Table 1. |
![]() |
![]() |
![]()
|
![]() Table 1. A summary of task types for each subtopic. |
![]() |
![]() We have found that data structure diagrams can be abstract, concrete, or both. An abstract diagram typically contains no data and is often a compact representation of a data structure. An example of this is the use of a triangle to represent a tree. A concrete representation shows all of the important data, for example all the key values in the data structure diagram. Some diagrams are part concrete and part abstract, for example, a concrete tree with an abstract subtree. As shown in Table 1, we have also observed a number of types of annotations and gestures. For example, annotations are used to track variable values during tracing and highlight sections of data structures while gestures are used to identify elements that are being accessed or compared, and to indicate properties such as the number of elements, path followed, etc., for an entire data structure diagram or part thereof. We recorded the time spent doing various types of tasks, as summarized in Table 2. The time spent using diagrams (tracing or joint use) varied considerably over the topics observed thus far, but in almost every case it is a substantial portion of total time spent. Note that the percentages add up to more than 100% unless joint time is excluded, because joint time is time spent on more than one task (one of which involves diagrams). |
![]() |
![]() |
|
![]() Table 2. Percentage of time spent on each type of task. |
![]() |
![]() We are still in the process of analyzing the students' notes. All we can say at this time is that some students decide to take sparse notes, or none at all, preferring to try to observe the lecture, while others try to take detailed notes but often fail to capture the many changes made to the diagrams and algorithm traces. |
![]() |
![]() |
|
![]() Figure 1. An algorithm below is waiting for the user to select a directed graph from the canvas on the left. |
![]() |
5. Authoring |
|
![]() |
|
|
![]() |
![]() The present implementation language is Java because of its widespread use in computer science education, and its support for user interface development. The first step in preparing an algorithm visualization is to replace the data structures we wish to display with equivalent SKA data structures, seen in the lower part of Figure 2. Next, the instructor writes a pseudocode equivalent of the code. The level of detail or style of the pseudocode does not matter, since the pseudocode is merely displayed, not executed. We annotate the source code by placing showAlgLine() calls to mark which line of pseudocode corresponds to which line of code. If we want to get a data structure from the canvas, we replace the input routines with a canvas inputVizDS() call. Any extra animation calls (e.g. to highlight some element) are then added. The code is then compiled with the relevant SKA libraries. Developing a new visual data structure class is more difficult, though we have attempted to provide a framework that simplifies their development, particularly for user interface operations. We expect to provide enough data structure classes to fulfill the most common needs, with more classes coming on stream over time. |
![]() |
![]() |
|
![]() |