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 deficiencies arise from interruptions?


                      Memory Cues            [CHI 2010]

Which cues benefit 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 deficiencies (100 papers, 5 courses)


                        Memory Cues            [CHI 2010]

  Which cues benefit 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 finding 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 files.
Tabs haven’t changed in a while.




Navigation jitter in switching files.
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                     notifications.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notifications 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 notifications are defined as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

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

age. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activities

as committing a file or building a project, whereas obstructive notifications 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                     notifications.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notifications 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 notifications are defined as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

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

age. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activities

as committing a file or building a project, whereas obstructive notifications 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                     notifications.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notifications 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 notifications are defined as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

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

age. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activities

as committing a file or building a project, whereas obstructive notifications 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                     notifications.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notifications 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 notifications are defined as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

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

age. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activities

as committing a file or building a project, whereas obstructive notifications 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                     notifications.
                () =>
                {
                    this.Reminder.ReminderMessage = this.Message;

he design of the obstructive notifications 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 notifications are defined as preventing performance
                        this.Reminder.NotificationType = NotificationType.Viewport;

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

as committing a file or building a project, whereas obstructive notifications 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

iOS: A Broad Overview
iOS: A Broad OverviewiOS: A Broad Overview
iOS: A Broad Overview
Chris 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
 
Hibernate Interview Questions
Hibernate Interview QuestionsHibernate Interview Questions
Hibernate Interview Questions
Syed Shahul
 
Hibernate reference1
Hibernate reference1Hibernate reference1
Hibernate reference1
chandra mouli
 

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

DESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESSDESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESS
Chris 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 Programmers
Chris 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 TAsks
Chris 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

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
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...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

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 deficiencies arise from interruptions? Memory Cues [CHI 2010] Which cues benefit 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 deficiencies (100 papers, 5 courses) Memory Cues [CHI 2010] Which cues benefit 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 finding 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 files.
  • 46. Tabs haven’t changed in a while. Navigation jitter in switching files.
  • 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 notifications. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notifications 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 notifications are defined as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notifications is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must first review a reminder age. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activities as committing a file or building a project, whereas obstructive notifications 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 notifications. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notifications 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 notifications are defined as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notifications is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must first review a reminder age. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activities as committing a file or building a project, whereas obstructive notifications 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 notifications. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notifications 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 notifications are defined as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notifications is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must first review a reminder age. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activities as committing a file or building a project, whereas obstructive notifications 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 notifications. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notifications 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 notifications are defined as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notifications is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must first review a reminder age. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activities as committing a file or building a project, whereas obstructive notifications 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 notifications. () => { this.Reminder.ReminderMessage = this.Message; he design of the obstructive notifications 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 notifications are defined as preventing performance this.Reminder.NotificationType = NotificationType.Viewport; tain activities, they are only enabled for activity-based reminder conditions. An example of an constrictive notifications is > "" in Figure 6.6, where a developer is prevented from committing a source code change and must first review a reminder Constrictive Reminder age. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activities as committing a file or building a project, whereas obstructive notifications 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