+ All Categories
Home > Technology > Evaluating Cues for Resuming Interrupted Programming TAsks

Evaluating Cues for Resuming Interrupted Programming TAsks

Date post: 22-Apr-2015
Category:
Upload: chris-parnin
View: 852 times
Download: 0 times
Share this document with a friend
Description:
 
31
EVALUATING CUES FOR RESUMING INTERRUPTED PROGRAMMING TASKS Chris Parnin, Georgia Institute of Technology Robert DeLine, Microsoft Research
Transcript
Page 1: Evaluating Cues for Resuming Interrupted Programming TAsks

EVALUATING CUES FOR RESUMING INTERRUPTED PROGRAMMING

TASKSChris Parnin, Georgia Institute of Technology

Robert DeLine, Microsoft Research

Page 2: Evaluating Cues for Resuming Interrupted Programming TAsks

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.

INTERRUPTIONS

Page 3: Evaluating Cues for Resuming Interrupted Programming TAsks

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.

EXAMPLE

Page 4: Evaluating Cues for Resuming Interrupted Programming TAsks

Managers 100s tasks with few documents.

Programmers Few tasks with 100s documents.

TASKS

Page 5: Evaluating Cues for Resuming Interrupted Programming TAsks

Typical program with 56 sub-projects.Note: sub-folders not expanded.

DOCUMENTS

Page 6: Evaluating Cues for Resuming Interrupted Programming TAsks

What do programmers forget and how can we remind them?

RESEARCH GOAL

Page 7: Evaluating Cues for Resuming Interrupted Programming TAsks

1) Survey programmers to identify current strategies and new approaches.

2) Experimentally evaluate current strategies, and compare with current research approaches.

RESEARCH APPROACH

Page 8: Evaluating Cues for Resuming Interrupted Programming TAsks

15 questions composed of both fixed and open-responses.

371 developers from Microsoft and 42 from various companies responded.

SURVEY

Page 9: Evaluating Cues for Resuming Interrupted Programming TAsks

MarkersReminders

TOP PROSPECTIVE MEASURE:NOTE-TAKING

Page 10: Evaluating Cues for Resuming Interrupted Programming TAsks

S.H.

Page 11: Evaluating Cues for Resuming Interrupted Programming TAsks

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.

Page 12: Evaluating Cues for Resuming Interrupted Programming TAsks

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)

Page 13: Evaluating Cues for Resuming Interrupted Programming TAsks

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.

Page 14: Evaluating Cues for Resuming Interrupted Programming TAsks

WORK HISTORY

var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new 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();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new 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"

Record document switches, actions.

Record state of document after each action.

Page 15: Evaluating Cues for Resuming Interrupted Programming TAsks

Uses semantic cues.

www.eclipse.org/mylyn

CURRENT APPROACH

SpaceInvadersSpaceInvaders

ReferencesApp.icoAssemblyInfo.csBomb.csBullet.csForm1.cs

Form1.resxForm1

TestBulletCollisionMoveInvadersHandleKeystimer1_Tick

GameObject.csHighScore.csInvader.csInvaderRow.cs

InvaderRowCollisionTestMoveDown

LivesIndicator.csMan.cs

ManGetBulletStart

Saucer.cs

var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new 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();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new 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"

Page 16: Evaluating Cues for Resuming Interrupted Programming TAsks

Use both episodic and semantic cues.

ALTERNATIVE APPROACH var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new 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();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

var first = line.Points.First(); var last = line.Points.Last();

return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

var last = line.Points.Last();

SAVE

Page 17: Evaluating Cues for Resuming Interrupted Programming TAsks

EXPERIMENT

Do semantic and episodic-based cues from work history help resumption?

Page 18: Evaluating Cues for Resuming Interrupted Programming TAsks

PARTICIPANTS

15 participants (one female only)

Age (range 31 to 56) [39 avg.]

Professional developers working in Washington Puget Sound area.

Page 19: Evaluating Cues for Resuming Interrupted Programming TAsks

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

Page 20: Evaluating Cues for Resuming Interrupted Programming TAsks

METHODParticipant in 2 hour session,

beginning with training on tools.

Programmers interrupted shortly after making edit,moving on to next task.

Programmers use assigned condition to help resume

task(could take notes).

Page 21: Evaluating Cues for Resuming Interrupted Programming TAsks

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

Page 22: Evaluating Cues for Resuming Interrupted Programming TAsks

RATINGS

0.0

1.0

2.0

3.0

4.0

5.0

speed details durability overall

DOI

content

note

Participants completing no tasks, rated notes highest:

Experienced programmers create better history.

Page 23: Evaluating Cues for Resuming Interrupted Programming TAsks

“There is something wrong, I don’t know what I missed”

this.keyUp = keyUpHandler;

FORGETTING

Page 24: Evaluating Cues for Resuming Interrupted Programming TAsks

5 minutes pass…but too little time to finish.

“I remember finding that code, I just can’t remember where it is!”

FORGETTING

Page 25: Evaluating Cues for Resuming Interrupted Programming TAsks

NOTES

Notes restore goals well, but context poorly.

Page 26: Evaluating Cues for Resuming Interrupted Programming TAsks

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”

SpaceInvadersSpaceInvaders

ReferencesApp.icoAssemblyInfo.csBomb.csBullet.csForm1.cs

Form1.resxForm1

TestBulletCollisionMoveInvadersHandleKeystimer1_Tick

GameObject.csHighScore.csInvader.csInvaderRow.cs

InvaderRowCollisionTestMoveDown

LivesIndicator.csMan.cs

ManGetBulletStart

Saucer.cs

Page 27: Evaluating Cues for Resuming Interrupted Programming TAsks

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”

Page 28: Evaluating Cues for Resuming Interrupted Programming TAsks

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.

Page 29: Evaluating Cues for Resuming Interrupted Programming TAsks

BEYONDExcel/Word Summaries

Sharing Work Experiences

FUTURE

Episodic Buffer Monitor

Pen and multitouch-based interactions and annotations

Temporal and semantic zoom

Subvocalization (inner voice)

Page 30: Evaluating Cues for Resuming Interrupted Programming TAsks

QUESTIONS

EVALUATING CUES FOR RESUMING INTERRUPTED PROGRAMMING

TASKSChris Parnin, Robert DeLine

Page 31: Evaluating Cues for Resuming Interrupted Programming TAsks

Task Completion

Task 1 Task 2 Task 3 Total

DOI treeview

3 2 2 7

Content timeline

1 4 2 7

Notes-only

1 2 1 4

Total 5 8 5

Failure Causes

Problem Solving

Relocation

Mistakes Total

DOI treeview

1 0 1 2

Content timeline

2 0 0 2

Notes-only

1 2 2 5

Total 4 2 3


Recommended