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

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
 
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

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 

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