SlideShare a Scribd company logo
1 of 67
Chris Parnin         Spencer Rugaber



Programmer Information Needs
    After Memory Failure
Theory
Comprehension theories
        ā€¢ Top-down comprehension model
          [Brooks, Soloway, Ehrlich, 1986]
        ā€¢ Bottom-up comprehension
          [Shneiderman/Mayer 1979, Pennington 1987]
        ā€¢ Opportunistic and systematic strategies
          [Littman et al., Letovsky 1987]
        ā€¢ Integrated meta-model
          [Vans, von Mayrhauser 1995]


                           Storeyā€™s ICPC 2011 Keynote Slide


http://www.slideshare.net/mastorey/icpc-2011-storey-8471063
Just to give an example.
Musicians can memorize every note
of thousands of songs or long symphonies...
Musicians can memorize every note
of thousands of songs or long symphonies...

  Programmers should be able to commit
entire programs to memory in exact detail.
Fresh start?
Cognitive Neuroscience
Cognitive Neuroscience



Understanding how the functions of the physical brain
can yield the thoughts and ideas of an intangible mind.

       George Miller and Michael Gazzaniga
1. Have conversations with
   grounded vocabulary.

2. Make better predictions.

 3. Inspire new interface
     designs and tools.
Information Sources [ICPC 2006, 2009]
        What strategies and sources of information do
       programmers use to recover from interruptions?


                  Developer Tool Use [ICSE 2009/TSE 2011]
      Why arenā€™t refactoring tools used to refactor code?


                  Memory Failures           [PPIG 2010]
     What memory deļ¬ciencies arise from interruptions?


                      Memory Cues            [CHI 2010]

Which cues beneļ¬t programmers recovering from interruptions?


                     Social Memories         [Web2SE 2011]
      How do developers blog about learning experiences?
Information Sources [ICPC 2006, 2009]
          What strategies and sources of information do
         programmers use to recover from interruptions?


Surveys (500 devs), Observational studies (12),
                 Developer Tool Use [ICSE 2009/TSE 2011]
     Why arenā€™t refactoring tools used to refactor code?
   Recorded Logs and Data Analysis (80),
                 User Studies (15)
                    Memory Failures            [PPIG 2010]
Neuroscience Literaturearise from interruptions?
     What memory deļ¬ciencies (100 papers, 5 courses)


                        Memory Cues            [CHI 2010]

  Which cues beneļ¬t programmers recovering from interruptions?


                       Social Memories         [Web2SE 2011]
        How do developers blog about learning experiences?
Some vocabulary for
  conversations.
Prospective Memory
Prospective Memory
Prospective Memory
Prospective Memory
CHAPTER 6. SOLUTION ARCHITECTUR

     Tangential tasks




to
ks
CHAPTER 6. SOLUTION ARCHITECTUR

           Tangential tasks




to
ks
     Ad-hoc prospective memory aids
CHAPTER 6. SOLUTION ARCHITECTUR

           Tangential tasks




to
ks
     Ad-hoc prospective memory aids
CHAPTER 6. SOLUTION ARCHITECTUR

           Tangential tasks




to
ks
     Ad-hoc prospective memory aids
Attentive Memory
Attentive Memory
Attentive Memory
Attentive Memory
Systematic Change




   Developers donā€™t want to use automated tools,
they need ā€œtouch pointsā€ to review and track issues.
Associative Memory
Associative Memory
Associative Memory
Developers use tabs, scroll positions and
     various environmental cues. [KO TSE 2006]




     ā€œI remember ļ¬nding that code,
   I just canā€™t remember where it is!ā€
Episodic Memory
Episodic Memory
Episodic Memory
Episodic Memory
Developers using diff to recover history of changes.


                                        Improved when
                                       done episodically.

                                              [CHI 2009]
                                          Hattori [ICPC 2011]
Developers using diff to recover history of changes.


                                             Improved when
                                            done episodically.

                                                   [CHI 2009]
                                               Hattori [ICPC 2011]




Observed developer (with poor memory) maintaining timeline.
Developers using diff to recover history of changes.


                                             Improved when
                                            done episodically.

                                                   [CHI 2009]
                                               Hattori [ICPC 2011]




Observed developer (with poor memory) maintaining timeline.



  Preserving and sharing development narratives on blogs.
Developers using diff to recover history of changes.


                                             Improved when
                                            done episodically.

                                                   [CHI 2009]
                                               Hattori [ICPC 2011]




Observed developer (with poor memory) maintaining timeline.



  Preserving and sharing development narratives on blogs.
                                                [Web2SE 2011]
Conceptual Memory




       ...
Conceptual Memory




       ...
Novice vs expert golfers
Novice vs expert golfers
Predictions
Associative Tabs

                   TASK: Navigating unfamiliar code.


INFO NEED:   Need to quickly remember unfamiliar content and locations.


INFO NEED:   Need to quickly recall information based on partial knowledge.
Tabs havenā€™t changed in a while.




Navigation jitter in switching ļ¬les.
Tabs havenā€™t changed in a while.




Navigation jitter in switching ļ¬les.
Lexical
Lexical
          Spatial
Lexical             Operational
          Spatial
Lexical             Operational
          Spatial



                             Visual
Lexical             Operational
          Spatial



                                 Visual



                    Structural
Lexical             Operational
               Spatial



                                      Visual



Syntactical              Structural
Lexical                Operational
               Spatial



                                         Visual



Syntactical                 Structural



                  Modalities processed
               <50-100 ms auto-associated

                 Modalities processed
               >300ms frequency, salience
New Designs
Smart Reminders
    TASK:   Resume blocked and tangential tasks.


   INFO NEED:Need to be able to condition and
automatically monitor when to display reminder.

     INFO NEED: Need to be able to modulate
     the strength of the prompt mechanism.
ded by the visualization.




                    this.ByTimeChecked = true;
                }
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking)
                                                                                                         Refresh reminder list if
            {
                                                                                                         viewport reminder marked
                this.SelectedTabIndex = 1;
                                                                                                         done.
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity)
            {
                this.SelectedTabIndex = 2;
                this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity.
            }
                                                                                                                 new reminder.
            this.SaveCommand = new RelayCommand( 6.5: Viewport
                                         Figure                     notiļ¬cations.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition
                   if (this.SelectedNotificationIndex == 0)
                    {
plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is
                                                                                                                         > ""
 in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder

age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities

as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE.
ded by the visualization.




                    this.ByTimeChecked = true;
                }
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking)
                                                                                                         Refresh reminder list if
            {
                                                                                                         viewport reminder marked
                this.SelectedTabIndex = 1;
                                                                                                         done.
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity)
            {
                this.SelectedTabIndex = 2;
                this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity.
            }
                                                                                                                 new reminder.
            this.SaveCommand = new RelayCommand( 6.5: Viewport
                                         Figure                     notiļ¬cations.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition
                   if (this.SelectedNotificationIndex == 0)
                    {
plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is
                                                                                                                         > ""
 in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder

age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities

as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE.
ded by the visualization.




                    this.ByTimeChecked = true;
                }
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking)
                                                                                                         Refresh reminder list if
            {
                                                                                                         viewport reminder marked
                this.SelectedTabIndex = 1;
                                                                                                         done.
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity)
            {
                this.SelectedTabIndex = 2;
                                                                                   Proximity
                this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity.
            }
                                                                                   Reminder                      new reminder.
            this.SaveCommand = new RelayCommand( 6.5: Viewport
                                         Figure                     notiļ¬cations.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition
                   if (this.SelectedNotificationIndex == 0)
                    {
plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is
                                                                                                                         > ""
 in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder

age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities

as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE.
ded by the visualization.




                    this.ByTimeChecked = true;
                }
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking)
                                                                                                         Refresh reminder list if
            {
                                                                                                         viewport reminder marked
                this.SelectedTabIndex = 1;
                                                                                                         done.
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity)
            {
                this.SelectedTabIndex = 2;
                                                                                   Proximity
                this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity.
            }
          6.1. WORKLETS                                                            Reminder                      new reminder.   71
            this.SaveCommand = new RelayCommand( 6.5: Viewport
                                         Figure                     notiļ¬cations.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition
                   if (this.SelectedNotificationIndex == 0)
                    {
plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is
                                                                                                                         > ""
 in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder

age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities

as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE.

          Figure 6.6: Constrictive reminder. 1) A developer attempts to make a commit in the programming environment. 2)
          The reminder message is displayed and prompts the developer if the reminder is complete or not.
ded by the visualization.




                    this.ByTimeChecked = true;
                }
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking)
                                                                                                         Refresh reminder list if
            {
                                                                                                         viewport reminder marked
                this.SelectedTabIndex = 1;
                                                                                                         done.
            }
            if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity)
            {
                this.SelectedTabIndex = 2;
                                                                                   Proximity
                this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity.
            }
          6.1. WORKLETS                                                            Reminder                      new reminder.   71
            this.SaveCommand = new RelayCommand( 6.5: Viewport
                                         Figure                     notiļ¬cations.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition
                   if (this.SelectedNotificationIndex == 0)
                    {
plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is
                                                                                                                         > ""
 in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder
                                                        Constrictive
                                                          Reminder
age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities

as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE.

          Figure 6.6: Constrictive reminder. 1) A developer attempts to make a commit in the programming environment. 2)
          The reminder message is displayed and prompts the developer if the reminder is complete or not.
Code Narratives
   TASK:   Learning and preserving a new API experience.



   INFO NEED:   Need to recall key events and their order.
INFO NEED:   Need to recall detailed information about event.
Select a session(s)
Review, annotate, share
Tumblr                         Wordpress

http://codenarratives.tumblr.com/post/22999194625/sharing-
        wrappers-with-datacontractjsonserializer-and
http://blog.ninlabs.com/2011/11/auto-blogging-publishing-a-
                 coding-task-to-wordpress-5/
Quiz
Read More

A Cognitive Neuroscience Perspective on Memory for Programming Tasks
                          [PPIG 2010]

                   Background reading on memory:
http://blog.ninlabs.com/2012/02/memory-2-0-a-prelude/

                               Tools:
                  http://blog.ninlabs.com/

More Related Content

Similar to Programmer Information Needs After Memory Failure

Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3Paris Android User Group
Ā 
Multi-modal Neural Machine Translation - Iacer Calixto
Multi-modal Neural Machine Translation - Iacer CalixtoMulti-modal Neural Machine Translation - Iacer Calixto
Multi-modal Neural Machine Translation - Iacer CalixtoSebastian Ruder
Ā 
Cocoon Best Practises
Cocoon Best PractisesCocoon Best Practises
Cocoon Best Practisesmr.quinn
Ā 
Agile comparison with requriement approaches
Agile comparison with requriement approachesAgile comparison with requriement approaches
Agile comparison with requriement approachesfungfung Chen
Ā 
iOS: A Broad Overview
iOS: A Broad OverviewiOS: A Broad Overview
iOS: A Broad OverviewChris Farrell
Ā 
EclipseCon Eu 2015 - Breathe life into your Designer!
EclipseCon Eu 2015 - Breathe life into your Designer!EclipseCon Eu 2015 - Breathe life into your Designer!
EclipseCon Eu 2015 - Breathe life into your Designer!melbats
Ā 
lecture10-patterns.ppt
lecture10-patterns.pptlecture10-patterns.ppt
lecture10-patterns.pptAnkitPangasa1
Ā 
lecture10-patterns.ppt
lecture10-patterns.pptlecture10-patterns.ppt
lecture10-patterns.pptbryafaissal
Ā 
Cut your Dependencies - Dependency Injection at Silicon Valley Code Camp
Cut your Dependencies - Dependency Injection at Silicon Valley Code CampCut your Dependencies - Dependency Injection at Silicon Valley Code Camp
Cut your Dependencies - Dependency Injection at Silicon Valley Code CampTheo Jungeblut
Ā 
Cut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
Cut your Dependencies with Dependency Injection - .NET User Group OsnabrueckCut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
Cut your Dependencies with Dependency Injection - .NET User Group OsnabrueckTheo Jungeblut
Ā 
MUSA: A Middleware for User-driven Service Adaptation
MUSA: A Middleware for User-driven Service AdaptationMUSA: A Middleware for User-driven Service Adaptation
MUSA: A Middleware for User-driven Service AdaptationLuca Sabatucci
Ā 
Hibernate Interview Questions
Hibernate Interview QuestionsHibernate Interview Questions
Hibernate Interview QuestionsSyed Shahul
Ā 
Hibernate reference1
Hibernate reference1Hibernate reference1
Hibernate reference1chandra mouli
Ā 
Design patterns
Design patternsDesign patterns
Design patternsmudabbirwarsi
Ā 
Testing method pptx
Testing method pptxTesting method pptx
Testing method pptx02LabiqaIslam
Ā 
Hibernate interview questions
Hibernate interview questionsHibernate interview questions
Hibernate interview questionsvenkata52
Ā 
Eclipse Day India 2010 - UI Patterns in Eclipse
Eclipse Day India 2010 - UI Patterns in EclipseEclipse Day India 2010 - UI Patterns in Eclipse
Eclipse Day India 2010 - UI Patterns in Eclipsedeepakazad
Ā 
Cut your Dependencies with Dependency Injection for East Bay.NET User Group
Cut your Dependencies with Dependency Injection for East Bay.NET User Group Cut your Dependencies with Dependency Injection for East Bay.NET User Group
Cut your Dependencies with Dependency Injection for East Bay.NET User Group Theo Jungeblut
Ā 

Similar to Programmer Information Needs After Memory Failure (20)

Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Ā 
Multi-modal Neural Machine Translation - Iacer Calixto
Multi-modal Neural Machine Translation - Iacer CalixtoMulti-modal Neural Machine Translation - Iacer Calixto
Multi-modal Neural Machine Translation - Iacer Calixto
Ā 
Cocoon Best Practises
Cocoon Best PractisesCocoon Best Practises
Cocoon Best Practises
Ā 
Agile comparison with requriement approaches
Agile comparison with requriement approachesAgile comparison with requriement approaches
Agile comparison with requriement approaches
Ā 
iOS: A Broad Overview
iOS: A Broad OverviewiOS: A Broad Overview
iOS: A Broad Overview
Ā 
EclipseCon Eu 2015 - Breathe life into your Designer!
EclipseCon Eu 2015 - Breathe life into your Designer!EclipseCon Eu 2015 - Breathe life into your Designer!
EclipseCon Eu 2015 - Breathe life into your Designer!
Ā 
lecture10-patterns.ppt
lecture10-patterns.pptlecture10-patterns.ppt
lecture10-patterns.ppt
Ā 
lecture10-patterns.ppt
lecture10-patterns.pptlecture10-patterns.ppt
lecture10-patterns.ppt
Ā 
Cut your Dependencies - Dependency Injection at Silicon Valley Code Camp
Cut your Dependencies - Dependency Injection at Silicon Valley Code CampCut your Dependencies - Dependency Injection at Silicon Valley Code Camp
Cut your Dependencies - Dependency Injection at Silicon Valley Code Camp
Ā 
Cut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
Cut your Dependencies with Dependency Injection - .NET User Group OsnabrueckCut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
Cut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
Ā 
MUSA: A Middleware for User-driven Service Adaptation
MUSA: A Middleware for User-driven Service AdaptationMUSA: A Middleware for User-driven Service Adaptation
MUSA: A Middleware for User-driven Service Adaptation
Ā 
Raptor 2
Raptor 2Raptor 2
Raptor 2
Ā 
Hibernate Interview Questions
Hibernate Interview QuestionsHibernate Interview Questions
Hibernate Interview Questions
Ā 
Hibernate reference1
Hibernate reference1Hibernate reference1
Hibernate reference1
Ā 
Design patterns
Design patternsDesign patterns
Design patterns
Ā 
Testing method pptx
Testing method pptxTesting method pptx
Testing method pptx
Ā 
Are homes smart if they are aware?
Are homes smart if they are aware?Are homes smart if they are aware?
Are homes smart if they are aware?
Ā 
Hibernate interview questions
Hibernate interview questionsHibernate interview questions
Hibernate interview questions
Ā 
Eclipse Day India 2010 - UI Patterns in Eclipse
Eclipse Day India 2010 - UI Patterns in EclipseEclipse Day India 2010 - UI Patterns in Eclipse
Eclipse Day India 2010 - UI Patterns in Eclipse
Ā 
Cut your Dependencies with Dependency Injection for East Bay.NET User Group
Cut your Dependencies with Dependency Injection for East Bay.NET User Group Cut your Dependencies with Dependency Injection for East Bay.NET User Group
Cut your Dependencies with Dependency Injection for East Bay.NET User Group
Ā 

More from Chris Parnin

Crowd Documentation - How Programmer Social Communities are Flipping Software...
Crowd Documentation - How Programmer Social Communities are Flipping Software...Crowd Documentation - How Programmer Social Communities are Flipping Software...
Crowd Documentation - How Programmer Social Communities are Flipping Software...Chris Parnin
Ā 
DESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESSDESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESSChris Parnin
Ā 
Building usage contexts from interaction history
Building usage contexts from interaction historyBuilding usage contexts from interaction history
Building usage contexts from interaction historyChris Parnin
Ā 
A Catalogue of Code Smell Visualizations
A Catalogue of Code Smell VisualizationsA Catalogue of Code Smell Visualizations
A Catalogue of Code Smell VisualizationsChris Parnin
Ā 
Resumption strategies
Resumption strategiesResumption strategies
Resumption strategiesChris Parnin
Ā 
Are Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping ProgrammersAre Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping ProgrammersChris Parnin
Ā 
Subvocalization -- Towards Hearing the Inner Thoughts of Developers
Subvocalization -- Towards Hearing the Inner Thoughts of DevelopersSubvocalization -- Towards Hearing the Inner Thoughts of Developers
Subvocalization -- Towards Hearing the Inner Thoughts of DevelopersChris Parnin
Ā 
Java Generics Adoption: How New Features are Introduced Championed or Ignored
Java Generics Adoption: How New Features are Introduced Championed or IgnoredJava Generics Adoption: How New Features are Introduced Championed or Ignored
Java Generics Adoption: How New Features are Introduced Championed or IgnoredChris Parnin
Ā 
Evaluating Cues for Resuming Interrupted Programming TAsks
Evaluating Cues for Resuming Interrupted Programming TAsksEvaluating Cues for Resuming Interrupted Programming TAsks
Evaluating Cues for Resuming Interrupted Programming TAsksChris Parnin
Ā 
Cognitive Neuroscience of Memory for Software Engineers
Cognitive Neuroscience of Memory for Software EngineersCognitive Neuroscience of Memory for Software Engineers
Cognitive Neuroscience of Memory for Software EngineersChris Parnin
Ā 

More from Chris Parnin (11)

Crowd Documentation - How Programmer Social Communities are Flipping Software...
Crowd Documentation - How Programmer Social Communities are Flipping Software...Crowd Documentation - How Programmer Social Communities are Flipping Software...
Crowd Documentation - How Programmer Social Communities are Flipping Software...
Ā 
DESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESSDESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESS
Ā 
Building usage contexts from interaction history
Building usage contexts from interaction historyBuilding usage contexts from interaction history
Building usage contexts from interaction history
Ā 
A Catalogue of Code Smell Visualizations
A Catalogue of Code Smell VisualizationsA Catalogue of Code Smell Visualizations
A Catalogue of Code Smell Visualizations
Ā 
Resumption strategies
Resumption strategiesResumption strategies
Resumption strategies
Ā 
Are Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping ProgrammersAre Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping Programmers
Ā 
Subvocalization -- Towards Hearing the Inner Thoughts of Developers
Subvocalization -- Towards Hearing the Inner Thoughts of DevelopersSubvocalization -- Towards Hearing the Inner Thoughts of Developers
Subvocalization -- Towards Hearing the Inner Thoughts of Developers
Ā 
Java Generics Adoption: How New Features are Introduced Championed or Ignored
Java Generics Adoption: How New Features are Introduced Championed or IgnoredJava Generics Adoption: How New Features are Introduced Championed or Ignored
Java Generics Adoption: How New Features are Introduced Championed or Ignored
Ā 
Evaluating Cues for Resuming Interrupted Programming TAsks
Evaluating Cues for Resuming Interrupted Programming TAsksEvaluating Cues for Resuming Interrupted Programming TAsks
Evaluating Cues for Resuming Interrupted Programming TAsks
Ā 
Cognitive Neuroscience of Memory for Software Engineers
Cognitive Neuroscience of Memory for Software EngineersCognitive Neuroscience of Memory for Software Engineers
Cognitive Neuroscience of Memory for Software Engineers
Ā 
Code Pad
Code PadCode Pad
Code Pad
Ā 

Recently uploaded

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
Ā 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
Ā 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service šŸø 8923113531 šŸŽ° Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service šŸø 8923113531 šŸŽ° Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service šŸø 8923113531 šŸŽ° Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service šŸø 8923113531 šŸŽ° Avail...gurkirankumar98700
Ā 
Finology Group ā€“ Insurtech Innovation Award 2024
Finology Group ā€“ Insurtech Innovation Award 2024Finology Group ā€“ Insurtech Innovation Award 2024
Finology Group ā€“ Insurtech Innovation Award 2024The Digital Insurer
Ā 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
Ā 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
Ā 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
Ā 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
Ā 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
Ā 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
Ā 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
Ā 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
Ā 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
Ā 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
Ā 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
Ā 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
Ā 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
Ā 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel AraĆŗjo
Ā 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
Ā 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
Ā 

Recently uploaded (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
Ā 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Ā 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service šŸø 8923113531 šŸŽ° Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service šŸø 8923113531 šŸŽ° Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service šŸø 8923113531 šŸŽ° Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service šŸø 8923113531 šŸŽ° Avail...
Ā 
Finology Group ā€“ Insurtech Innovation Award 2024
Finology Group ā€“ Insurtech Innovation Award 2024Finology Group ā€“ Insurtech Innovation Award 2024
Finology Group ā€“ Insurtech Innovation Award 2024
Ā 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
Ā 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Ā 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
Ā 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
Ā 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
Ā 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
Ā 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Ā 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
Ā 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Ā 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Ā 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
Ā 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Ā 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
Ā 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Ā 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
Ā 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
Ā 

Programmer Information Needs After Memory Failure

  • 1. Chris Parnin Spencer Rugaber Programmer Information Needs After Memory Failure
  • 3. Comprehension theories ā€¢ Top-down comprehension model [Brooks, Soloway, Ehrlich, 1986] ā€¢ Bottom-up comprehension [Shneiderman/Mayer 1979, Pennington 1987] ā€¢ Opportunistic and systematic strategies [Littman et al., Letovsky 1987] ā€¢ Integrated meta-model [Vans, von Mayrhauser 1995] Storeyā€™s ICPC 2011 Keynote Slide http://www.slideshare.net/mastorey/icpc-2011-storey-8471063
  • 4. Just to give an example.
  • 5. Musicians can memorize every note of thousands of songs or long symphonies...
  • 6. Musicians can memorize every note of thousands of songs or long symphonies... Programmers should be able to commit entire programs to memory in exact detail.
  • 9. Cognitive Neuroscience Understanding how the functions of the physical brain can yield the thoughts and ideas of an intangible mind. George Miller and Michael Gazzaniga
  • 10. 1. Have conversations with grounded vocabulary. 2. Make better predictions. 3. Inspire new interface designs and tools.
  • 11. Information Sources [ICPC 2006, 2009] What strategies and sources of information do programmers use to recover from interruptions? Developer Tool Use [ICSE 2009/TSE 2011] Why arenā€™t refactoring tools used to refactor code? Memory Failures [PPIG 2010] What memory deļ¬ciencies arise from interruptions? Memory Cues [CHI 2010] Which cues beneļ¬t programmers recovering from interruptions? Social Memories [Web2SE 2011] How do developers blog about learning experiences?
  • 12. Information Sources [ICPC 2006, 2009] What strategies and sources of information do programmers use to recover from interruptions? Surveys (500 devs), Observational studies (12), Developer Tool Use [ICSE 2009/TSE 2011] Why arenā€™t refactoring tools used to refactor code? Recorded Logs and Data Analysis (80), User Studies (15) Memory Failures [PPIG 2010] Neuroscience Literaturearise from interruptions? What memory deļ¬ciencies (100 papers, 5 courses) Memory Cues [CHI 2010] Which cues beneļ¬t programmers recovering from interruptions? Social Memories [Web2SE 2011] How do developers blog about learning experiences?
  • 13. Some vocabulary for conversations.
  • 18. CHAPTER 6. SOLUTION ARCHITECTUR Tangential tasks to ks
  • 19. CHAPTER 6. SOLUTION ARCHITECTUR Tangential tasks to ks Ad-hoc prospective memory aids
  • 20. CHAPTER 6. SOLUTION ARCHITECTUR Tangential tasks to ks Ad-hoc prospective memory aids
  • 21. CHAPTER 6. SOLUTION ARCHITECTUR Tangential tasks to ks Ad-hoc prospective memory aids
  • 26. Systematic Change Developers donā€™t want to use automated tools, they need ā€œtouch pointsā€ to review and track issues.
  • 30. Developers use tabs, scroll positions and various environmental cues. [KO TSE 2006] ā€œI remember ļ¬nding that code, I just canā€™t remember where it is!ā€
  • 35. Developers using diff to recover history of changes. Improved when done episodically. [CHI 2009] Hattori [ICPC 2011]
  • 36. Developers using diff to recover history of changes. Improved when done episodically. [CHI 2009] Hattori [ICPC 2011] Observed developer (with poor memory) maintaining timeline.
  • 37. Developers using diff to recover history of changes. Improved when done episodically. [CHI 2009] Hattori [ICPC 2011] Observed developer (with poor memory) maintaining timeline. Preserving and sharing development narratives on blogs.
  • 38. Developers using diff to recover history of changes. Improved when done episodically. [CHI 2009] Hattori [ICPC 2011] Observed developer (with poor memory) maintaining timeline. Preserving and sharing development narratives on blogs. [Web2SE 2011]
  • 41. Novice vs expert golfers
  • 42. Novice vs expert golfers
  • 44. Associative Tabs TASK: Navigating unfamiliar code. INFO NEED: Need to quickly remember unfamiliar content and locations. INFO NEED: Need to quickly recall information based on partial knowledge.
  • 45. Tabs havenā€™t changed in a while. Navigation jitter in switching ļ¬les.
  • 46. Tabs havenā€™t changed in a while. Navigation jitter in switching ļ¬les.
  • 47.
  • 49. Lexical Spatial
  • 50. Lexical Operational Spatial
  • 51. Lexical Operational Spatial Visual
  • 52. Lexical Operational Spatial Visual Structural
  • 53. Lexical Operational Spatial Visual Syntactical Structural
  • 54. Lexical Operational Spatial Visual Syntactical Structural Modalities processed <50-100 ms auto-associated Modalities processed >300ms frequency, salience
  • 56. Smart Reminders TASK: Resume blocked and tangential tasks. INFO NEED:Need to be able to condition and automatically monitor when to display reminder. INFO NEED: Need to be able to modulate the strength of the prompt mechanism.
  • 57. ded by the visualization. this.ByTimeChecked = true; } } if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking) Refresh reminder list if { viewport reminder marked this.SelectedTabIndex = 1; done. } if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity) { this.SelectedTabIndex = 2; this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity. } new reminder. this.SaveCommand = new RelayCommand( 6.5: Viewport Figure notiļ¬cations. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition if (this.SelectedNotificationIndex == 0) { plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE.
  • 58. ded by the visualization. this.ByTimeChecked = true; } } if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking) Refresh reminder list if { viewport reminder marked this.SelectedTabIndex = 1; done. } if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity) { this.SelectedTabIndex = 2; this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity. } new reminder. this.SaveCommand = new RelayCommand( 6.5: Viewport Figure notiļ¬cations. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition if (this.SelectedNotificationIndex == 0) { plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE.
  • 59. ded by the visualization. this.ByTimeChecked = true; } } if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking) Refresh reminder list if { viewport reminder marked this.SelectedTabIndex = 1; done. } if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity) { this.SelectedTabIndex = 2; Proximity this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity. } Reminder new reminder. this.SaveCommand = new RelayCommand( 6.5: Viewport Figure notiļ¬cations. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition if (this.SelectedNotificationIndex == 0) { plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE.
  • 60. ded by the visualization. this.ByTimeChecked = true; } } if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking) Refresh reminder list if { viewport reminder marked this.SelectedTabIndex = 1; done. } if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity) { this.SelectedTabIndex = 2; Proximity this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity. } 6.1. WORKLETS Reminder new reminder. 71 this.SaveCommand = new RelayCommand( 6.5: Viewport Figure notiļ¬cations. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition if (this.SelectedNotificationIndex == 0) { plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE. Figure 6.6: Constrictive reminder. 1) A developer attempts to make a commit in the programming environment. 2) The reminder message is displayed and prompts the developer if the reminder is complete or not.
  • 61. ded by the visualization. this.ByTimeChecked = true; } } if (this.Reminder.Condition.Type == Conditions.ConditionType.Tasking) Refresh reminder list if { viewport reminder marked this.SelectedTabIndex = 1; done. } if (this.Reminder.Condition.Type == Conditions.ConditionType.Proximity) { this.SelectedTabIndex = 2; Proximity this.ConfigureProximityViewModel.NotificationPath = (this.Reminder.Condition as Conditions.Proximity. } 6.1. WORKLETS Reminder new reminder. 71 this.SaveCommand = new RelayCommand( 6.5: Viewport Figure notiļ¬cations. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notiļ¬cations are straight-forward. The message box appears as soon as the reminder condition if (this.SelectedNotificationIndex == 0) { plicable, blocking the main view until dismissed. Because constrictive notiļ¬cations are deļ¬ned as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notiļ¬cations is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must ļ¬rst review a reminder Constrictive Reminder age. In general, a constrictive notiļ¬cation differs from a obstructive notiļ¬cation in that constrictive gate certain activities as committing a ļ¬le or building a project, whereas obstructive notiļ¬cations gate all activity in the iDE. Figure 6.6: Constrictive reminder. 1) A developer attempts to make a commit in the programming environment. 2) The reminder message is displayed and prompts the developer if the reminder is complete or not.
  • 62. Code Narratives TASK: Learning and preserving a new API experience. INFO NEED: Need to recall key events and their order. INFO NEED: Need to recall detailed information about event.
  • 65. Tumblr Wordpress http://codenarratives.tumblr.com/post/22999194625/sharing- wrappers-with-datacontractjsonserializer-and http://blog.ninlabs.com/2011/11/auto-blogging-publishing-a- coding-task-to-wordpress-5/
  • 66. Quiz
  • 67. Read More A Cognitive Neuroscience Perspective on Memory for Programming Tasks [PPIG 2010] Background reading on memory: http://blog.ninlabs.com/2012/02/memory-2-0-a-prelude/ Tools: http://blog.ninlabs.com/

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n