Programmer Information Needs After Memory Failure
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Programmer Information Needs After Memory Failure

  • 992 views
Uploaded on

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

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

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
992
On Slideshare
992
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
15
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    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

Transcript

  • 1. Chris Parnin Spencer RugaberProgrammer Information Needs After Memory Failure
  • 2. Theory
  • 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. Just to give an example.
  • 5. Musicians can memorize every noteof thousands of songs or long symphonies...
  • 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. Fresh start?
  • 8. Cognitive Neuroscience
  • 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. 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.
  • 14. Prospective Memory
  • 15. Prospective Memory
  • 16. Prospective Memory
  • 17. Prospective Memory
  • 18. CHAPTER 6. SOLUTION ARCHITECTUR Tangential taskstoks
  • 19. CHAPTER 6. SOLUTION ARCHITECTUR Tangential taskstoks Ad-hoc prospective memory aids
  • 20. CHAPTER 6. SOLUTION ARCHITECTUR Tangential taskstoks Ad-hoc prospective memory aids
  • 21. CHAPTER 6. SOLUTION ARCHITECTUR Tangential taskstoks Ad-hoc prospective memory aids
  • 22. Attentive Memory
  • 23. Attentive Memory
  • 24. Attentive Memory
  • 25. Attentive Memory
  • 26. Systematic Change Developers don’t want to use automated tools,they need “touch points” to review and track issues.
  • 27. Associative Memory
  • 28. Associative Memory
  • 29. Associative Memory
  • 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. Episodic Memory
  • 32. Episodic Memory
  • 33. Episodic Memory
  • 34. Episodic Memory
  • 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]
  • 39. Conceptual Memory ...
  • 40. Conceptual Memory ...
  • 41. Novice vs expert golfers
  • 42. Novice vs expert golfers
  • 43. Predictions
  • 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. Lexical
  • 48. Lexical Spatial
  • 49. Lexical Operational Spatial
  • 50. Lexical Operational Spatial Visual
  • 51. Lexical Operational Spatial Visual Structural
  • 52. Lexical Operational Spatial VisualSyntactical Structural
  • 53. Lexical Operational Spatial VisualSyntactical Structural Modalities processed <50-100 ms auto-associated Modalities processed >300ms frequency, salience
  • 54. New Designs
  • 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. 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. 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. 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. 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. 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. 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. Select a session(s)
  • 63. Review, annotate, share
  • 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. Quiz
  • 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/