Programmer Information Needs After Memory Failure

968 views
866 views

Published on

Insights from cognitive neuroscience into the types of human memory programmers need and how to help them.

Published in: Technology, Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
968
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
16
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Programmer Information Needs After Memory Failure

    1. 1. Chris Parnin Spencer RugaberProgrammer Information Needs After Memory Failure
    2. 2. Theory
    3. 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 Slidehttp://www.slideshare.net/mastorey/icpc-2011-storey-8471063
    4. 4. Just to give an example.
    5. 5. Musicians can memorize every noteof thousands of songs or long symphonies...
    6. 6. Musicians can memorize every noteof thousands of songs or long symphonies... Programmers should be able to commitentire programs to memory in exact detail.
    7. 7. Fresh start?
    8. 8. Cognitive Neuroscience
    9. 9. Cognitive NeuroscienceUnderstanding how the functions of the physical braincan yield the thoughts and ideas of an intangible mind. George Miller and Michael Gazzaniga
    10. 10. 1. Have conversations with grounded vocabulary.2. Make better predictions. 3. Inspire new interface designs and tools.
    11. 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. 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. 13. Some vocabulary for conversations.
    14. 14. Prospective Memory
    15. 15. Prospective Memory
    16. 16. Prospective Memory
    17. 17. Prospective Memory
    18. 18. CHAPTER 6. SOLUTION ARCHITECTUR Tangential taskstoks
    19. 19. CHAPTER 6. SOLUTION ARCHITECTUR Tangential taskstoks Ad-hoc prospective memory aids
    20. 20. CHAPTER 6. SOLUTION ARCHITECTUR Tangential taskstoks Ad-hoc prospective memory aids
    21. 21. CHAPTER 6. SOLUTION ARCHITECTUR Tangential taskstoks Ad-hoc prospective memory aids
    22. 22. Attentive Memory
    23. 23. Attentive Memory
    24. 24. Attentive Memory
    25. 25. Attentive Memory
    26. 26. Systematic Change Developers don’t want to use automated tools,they need “touch points” to review and track issues.
    27. 27. Associative Memory
    28. 28. Associative Memory
    29. 29. Associative Memory
    30. 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!”
    31. 31. Episodic Memory
    32. 32. Episodic Memory
    33. 33. Episodic Memory
    34. 34. Episodic Memory
    35. 35. Developers using diff to recover history of changes. Improved when done episodically. [CHI 2009] Hattori [ICPC 2011]
    36. 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. 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. 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]
    39. 39. Conceptual Memory ...
    40. 40. Conceptual Memory ...
    41. 41. Novice vs expert golfers
    42. 42. Novice vs expert golfers
    43. 43. Predictions
    44. 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. 45. Tabs haven’t changed in a while.Navigation jitter in switching files.
    46. 46. Tabs haven’t changed in a while.Navigation jitter in switching files.
    47. 47. Lexical
    48. 48. Lexical Spatial
    49. 49. Lexical Operational Spatial
    50. 50. Lexical Operational Spatial Visual
    51. 51. Lexical Operational Spatial Visual Structural
    52. 52. Lexical Operational Spatial VisualSyntactical Structural
    53. 53. Lexical Operational Spatial VisualSyntactical Structural Modalities processed <50-100 ms auto-associated Modalities processed >300ms frequency, salience
    54. 54. New Designs
    55. 55. Smart Reminders TASK: Resume blocked and tangential tasks. INFO NEED:Need to be able to condition andautomatically monitor when to display reminder. INFO NEED: Need to be able to modulate the strength of the prompt mechanism.
    56. 56. 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 reminderage. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activitiesas committing a file or building a project, whereas obstructive notifications gate all activity in the iDE.
    57. 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 reminderage. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activitiesas committing a file or building a project, whereas obstructive notifications gate all activity in the iDE.
    58. 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; 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 reminderage. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activitiesas committing a file or building a project, whereas obstructive notifications gate all activity in the iDE.
    59. 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. } 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 reminderage. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activitiesas 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.
    60. 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 Constrictive Reminderage. In general, a constrictive notification differs from a obstructive notification in that constrictive gate certain activitiesas 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. 61. 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.
    62. 62. Select a session(s)
    63. 63. Review, annotate, share
    64. 64. Tumblr Wordpresshttp://codenarratives.tumblr.com/post/22999194625/sharing- wrappers-with-datacontractjsonserializer-andhttp://blog.ninlabs.com/2011/11/auto-blogging-publishing-a- coding-task-to-wordpress-5/
    65. 65. Quiz
    66. 66. Read MoreA 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/

    ×