supporting opportunistic programmers with better
play

Supporting Opportunistic Programmers with Better Visualizations - PowerPoint PPT Presentation

Supporting Opportunistic Programmers with Better Visualizations VISSOFT 2016 Joel Brandt Adobe Research Creative Technologies Lab Open or shared IP, ongoing collaborations with universities Graphics, HCI, Vis, ML/AI, Programming Languages


  1. Supporting Opportunistic Programmers with Better Visualizations VISSOFT 2016 Joel Brandt Adobe Research

  2. Creative Technologies Lab § Open or shared IP, ongoing collaborations with universities § Graphics, HCI, Vis, ML/AI, Programming Languages § 22 Researchers, 9 Research Engineers § ~70 academic publications per year at CHI, UIST, SIGGRAPH, CVPR, ICCV, ICML, etc. § ~15 major contributions to Adobe products per year § 50-60 Ph.D.-student-level interns per year § Expect to grow by about 10 technical staff in 2017

  3. research.adobe.com

  4. “good grief, I don’t even remember the syntax for forms!”

  5. Frequent Information Access subjects time (minutes) [Brandt CHI 09]

  6. Frequent Information Access subjects time (minutes) [Brandt CHI 09]

  7. Frequent Information Access 19% of time spent using Web ( σ = 15.1 minutes) Used for 18 distinct tasks ( σ = 9.1) [Brandt CHI 2009]

  8. Opportunistic Programmers

  9. Designers… http://flickr.com/photos/royalsapien/2387707860/

  10. Scientists… http://flickr.com/photos/niosh/2492023651/

  11. Makers… http://www.flickr.com/photos/samthor/3198975900/

  12. By 2012: 13 million who program as part of their job… …but only 3 million who are professional programmers [Scaffidi 2005]

  13. Vast increase in information resources Democratization of access and distribution

  14. How do we redesign the programming experience?

  15. just-in-time learning is common examples are important [Brandt CHI 2009]

  16. Empirical Systems Work Building

  17. Blueprint Code Search in the Editor [Brandt CHI 2010]

  18. Results Write code faster in directed tasks… 57 vs. 121 seconds to first code paste Wilcoxon-Man-Whitney statistic = 2.38, p < .01, Task completion time strongly correlated with time of first paste Spearman correlation coeff. = 0.52, p < .01

  19. Results …and the code is better! worst best Wilcoxon-Mann-Whitney statistic = 2.15, p < .02 blueprint control

  20. milliseconds matter [Brutlag 2009, O’Hara 1998]

  21. Codelets Interactive Examples In collaboration with Stephen Oney and Brad Myers at Carnegie Mellon University [Oney CHI 2012]

  22. User Study: Method § 20 participants § conducted remotely § between subjects § control group: pointed to jQM docs § treatment group: used exemplar examples § two parts (will only present part one) 51

  23. User Study: Results 30 25 20 Control 15 Codelets 10 5 0 Time (m) # refreshes

  24. 12 10 Time (m), lower is better 8 Control 6 Codelets 4 2 0 page & button page list button

  25. 12 10 Time (m), lower is better 8 Control 6 Codelets 4 2 0 page & button page list button

  26. 55

  27. 12 10 Time (m), lower is better 8 Control 6 Codelets 4 2 0 page & button page list button

  28. Codelets users § did not read accompanying text § had two usage patterns § leaving codelet open § closing codelet and then editing code 58

  29. Codelets API § Editor exposes API § 3 rd parties implement examples § Not implemented by editor § Uses HTML & JS § What most examples are already in 59

  30. let’s implement one:

  31. <codelet> <head> <title> Creating an int </title> <keywords> int </keywords> <type> block </type> <lang> c </lang> meta-information & interactivity (Javascript) <script>$(function() { attach_input_to_mark($(“input#name_inp]”), “name” ); attach_input_to_mark($(“input#val_inp ]”), “value” ); });</script> </head> <body> <example> int <mark id=“name” /> = <mark id=“value” />; </example> example code & documentation (HTML) <page> Name : <input type=“text” id=“name_inp” /> <br /> Value: <input type=“text” id=“val_inp” /> </page> </body> </codelet>

  32. <codelet> <head> <title> Creating an int </title> <keywords> int </keywords> <type> block </type> (meta-information) <lang> c </lang> <script>$(function() { attach_input_to_mark($(“input#name_inp]”), “name” ); interactivity (Javascript) attach_input_to_mark($(“input#val_inp ]”), “value” ); });</script> </head> <body> <example> int <mark id=“name” /> = <mark id=“value” />; </example> example code & documentation (HTML) <page> Name : <input type=“text” id=“name_inp” /> <br /> Value: <input type=“text” id=“val_inp” /> </page> </body> </codelet>

  33. <codelet> <head> <title> Creating an int </title> <keywords> int </keywords> <type> block </type> (meta-information) <lang> c </lang> <script>$(function() { attach_input_to_mark($(“input#name_inp]”), “name” ); interactivity (Javascript) attach_input_to_mark($(“input#val_inp ]”), “value” ); });</script> </head> <body> <example> int <mark id=“name” /> = <mark id=“value” />; (example code) </example> <page> Name : <input type=“text” id=“name_inp” /> <br /> documentation (HTML) Value: <input type=“text” id=“val_inp” /> </page> </body> </codelet>

  34. <codelet> <head> <title> Creating an int </title> <keywords> int </keywords> <type> block </type> (meta-information) <lang> c </lang> <script>$(function() { attach_input_to_mark($(“input#name_inp]”), “name” ); interactivity (Javascript) attach_input_to_mark($(“input#val_inp ]”), “value” ); });</script> </head> <body> <example> int <mark id=“name” /> = <mark id=“value” />; (example code) </example> <page> Name : <input type=“text” id=“name_inp” /> <br /> Value: <input type=“text” id=“val_inp” /> (documentation) </page> </body> </codelet>

  35. <codelet> <head> <title> Creating an int </title> <keywords> int </keywords> <type> block </type> (meta-information) <lang> c </lang> <script>$(function() { attach_input_to_mark($(“input#name_inp”), “name” ); attach_input_to_mark($(“input#val_inp ”), “value” ); (interactivity) });</script> </head> <body> <example> int <mark id=“name” /> = <mark id=“value” />; (example code) </example> <page> Name : <input type=“text” id=“name_inp” /> <br /> Value: <input type=“text” id=“val_inp” /> (documentation) </page> </body> </codelet>

  36. <codelet> <head> <title> Creating an int </title> <keywords> int </keywords> <type> block </type> <lang> c </lang> <script>$(function() { attach_input_to_mark($(“input#name_inp”), “name” ); attach_input_to_mark($(“input#val_inp ”), “value” ); });</script> </head> <body> <example> int <mark id=“name” /> = <mark id=“value” />; </example> <page> Name : <input type=“text” id=“name_inp” /> <br /> Value: <input type=“text” id=“val_inp” /> </page> </body> </codelet>

  37. Results In the lab, participants complete tasks involving example code 43% faster Examples have a lifetime: they’re useful throughout the entirety of a project

  38. Theseus Always-On JavaScript Debugging In collaboration with Thomas Lieber and Rob Miller at MIT [Lieber CHI 2014]

  39. Programmers iterate rapidly [Brandt IEEE Software 09]

  40. Results Debugging is hard because user’s mental model is different than program logic Always-on visualizations help programmers build & maintain an accurate mental model

  41. Vesta Using Runtime Traces to Improve Documentation and Testing In collaboration with Jan-Peter Krämer and Jan Borchers at RWTH Aachen University [Krämer CHI 2016]

  42. Results All documentation created with Vesta was correct, compared to only 60% in control condition Vesta could generate significant portions of all unit tests, including tests that were written in control condition

  43. Blueprint Codelets Theseus Vesta

  44. Growing importance on fast information access and just-in-time skill acquisition

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend