Handwritten Text Recognition for manuscripts and early printed texts
Evaluating Cues for Resuming Interrupted Programming TAsks
1. Evaluating Cues for Resuming Interrupted Programming Tasks Chris Parnin, Georgia Institute of Technology Robert DeLine, Microsoft Research
2. INTERRUPTIONS Interruptions force rapid suspension of task memory -- which, for programmers, is large and complex. But for programmers, task memory is so large, even a lunch break can be a problem.
3. EXAMPLE A programmer makes several changes, one of which contains an error. Goes to lunch Running code crashes, but forgot “what was changed”? Spends 15 minutes trying to remember.
4. TASKS Managers 100s tasks with few documents. Programmers Few tasks with 100s documents.
7. RESEARCH APPROACH 1) Survey programmers to identify current strategies and new approaches. 2) Experimentally evaluate current strategies, and compare with current research approaches.
8. SURVEY 15 questions composed of both fixed and open-responses. 371 developers from Microsoft and 42 from various companies responded.
11. RESUMPTION STRATEGIES Return to last method modified, and navigate to related code to jog your memory. Use markers or notes. View source code difference. Run program and examine its output or UI.
12. RESUMPTION STRATEGIES Return to last method modified, and navigate to related code to jog your memory. Use markers or notes. View source code difference. Run program and examine its output or UI. cue-seeking, searching for reminders while reactivating mental context. 10-15 minutes before first edit (based on recorded sessions)
13. HELP! Programmers wanted: Better help for viewing work history: (recent code changes, documents, summaries) Didn’t want as much: Instant replays, task planning tools, smart reminders.
14. WORK HISTORY var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); Record document switches, actions. Record state of document after each action. var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
15. CURRENT APPROACH var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" Uses semantic cues. www.eclipse.org/mylyn
16. ALTERNATIVE APPROACH var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); var first = line.Points.First(); var last = line.Points.Last(); returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); SAVE Use both episodic and semantic cues. xmlns:d="http://schemas.microsoft.com/expression/blend/2008" var last = line.Points.Last();
18. PARTICIPANTS 15 participants (one female only) Age (range 31 to 56) [39 avg.] Professional developers working in Washington Puget Sound area.
19. Make block fall all the way down with space key. Make ghosts stop moving when eating power pellet. Make monster reappear if missed shot. TASKS
20. METHOD Participant in 2 hour session, beginning with training on tools. Programmers use assigned condition to help resume task (could take notes). Programmers interrupted shortly after making edit, moving on to next task.
21. RESULTS Near 2-to-1 task completion rate (either cues) over notes. (chi, p < 0.1) 7,7,4 Near 2-to-1 resumption speed (DOI) over notes. (no significance) 2.5, 3.5, 4.5 minutes Subjective ratings highest for timeline, notes, then DOI. (t-test, p <0.001) Next slide
26. DOI TREEVIEW Fast, but incomplete. Seemed to support familiarity memory, clicking on locations without remembering what’s there. “I wouldn’t remember this if I had to come back in 5 minutes”
27. CONTENT TIMELINE Slower, but restorative. Users worked backwards in their task state with this view. Seemed to support restoring episodic and prospective memory. “The history of the [timeline] and diffs are very useful and did the most help in restarting”
28. COMMENTS AND FEEDBACK “I wouldn’t have to write down the location, just what needs to be done” DOI Treeview should explain how I used item: Edit, Find, Navigation, Debug Step-through Content Timeline should include: filtering, pinning, annotation, and sharing.
29. FUTURE BEYOND Excel/Word Summaries Sharing Work Experiences Episodic Buffer Monitor Pen and multitouch-based interactions and annotations Temporal and semantic zoom Subvocalization (inner voice)
In another study we did on programmers, we found that programmers would typically work each day with between 50-80 methods,which are named sections of a code document. 60% of switches between methods, would require switching to a new document.This creates a frequent pattern of switching and searching: the perfect recipe for disorientation.
Impact? 15 minutes.
Impact? 15 minutes.
Impact? 15 minutes.
Here is what one programmer did to cope. S.H.
Render recent history as degree-of-interest.
Render recent history as episodes (i.e. summaries of content).
Writing notes require recreating context: Paper notes referred to code symbols (65% of lines)