Cited by 18Logic, programming, and type systemsSoftware Engineering ResearchSoftware Engineering Techniques and Practices

How statically-typed functional programmers write code

Open access
Lubin, Justin, Chasins, Sarah E.·2021·Proceedings of the ACM on Programming Languages

Abstract

How working statically-typed functional programmers write code is largely understudied. And yet, a better understanding of developer practices could pave the way for the design of more useful and usable tooling, more ergonomic languages, and more effective on-ramps into programming communities. The goal of this work is to address this knowledge gap: to better understand the high-level authoring patterns that statically-typed functional programmers employ. We conducted a grounded theory analysis of 30 programming sessions of practicing statically-typed functional programmers, 15 of which also included a semi-structured interview. The theory we developed gives insight into how the specific affordances of statically-typed functional programming affect domain modeling, type construction, focusing techniques, exploratory and reasoning strategies, and expressions of intent. We conducted a set of quantitative lab experiments to validate our findings, including that statically-typed functional programmers often iterate between editing types and expressions, that they often run their compiler on code even when they know it will not successfully compile, and that they make textual program edits that reliably signal future edits that they intend to make. Lastly, we outline the implications of our findings for language and tool design. The success of this approach in revealing program authorship patterns suggests that the same methodology could be used to study other understudied programmer populations.

The claims and statistics of this paper haven’t been checked yet.

Run the check — free, no account needed. It reads the open-access text and checks the sources it cites.

A few free checks a day · papers already verified open instantly · results are public

Integrity signals

Registry

Crossref · 10.1145/3485532

Cites

6 of 6 references verified0 citation errors · 0 not checkable

Statistics

Claims the paper makes

The claims and statistics of this paper haven’t been checked yet.

Run the check — free, no account needed. It reads the open-access text and checks the sources it cites.

A few free checks a day · papers already verified open instantly · results are public

Claims other papers make about this one

Each is checked against this paper’s own text: does it say what the citing paper says it does?

  • Grounded theory has recently been adopted to study phenomena in software engineering and programming languages.

    “has recently been adopted to study phenomena in software engineering [Stol et al. 2016] and programming languages [Lubin and Chasins 2021].”

    From Grounded Copilot: How Programmers Interact with Code-Generating Models (2023) · cites this paper as [Lubin and Chasins 2021]

Self-check

Percentages, sums and reported differences re-computed from the paper’s own numbers.

The self-check needs the paper’s full text.

Cites

Flagged first, then by citations

Research works printed but not linked: 66

  1. Beth Adelson and Elliot Soloway. 1985. The Role of Domain Experience in Software Design. Transactions on Software Engineering (Nov. 1985). https://doi.org/10.1109/TSE.1985.231883 · DOI
  2. Steve Adolph, Philippe Kruchten, and Wendy Hall. 2012. Reconciling Perspectives: A Grounded Theory of How People Manage the Process of Software Development. Journal of Systems and Software (June 2012). https://doi.org/10.1016/j.jss. 2012.01.059 · DOI · Paper page
  3. John R. Anderson, Robert Farrell, and Ron Sauers. 1984. Learning to Program in LISP. Cognitive Science (April 1984). https://doi.org/10.1016/S0364-0213(84)80013-0 · DOI
  4. Jon Awbrey and Susan Awbrey. 1995. Interpretation as Action: The Risk of Inquiry. Inquiry: Critical Thinking Across the Disciplines 1 (Feb. 1995). https://doi.org/10.5840/inquiryctnews199515125 · DOI
  5. Alan Baddeley. 2007. Working Memory, Thought, and Action. https://doi.org/10.1093/acprof:oso/9780198528012.001.0001 · DOI · Paper page
  6. Titus Barik, Denae Ford, Emerson Murphy-Hill, and Chris Parnin. 2018. How Should Compilers Explain Problems to Developers? In European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE). https://doi.org/10.1145/3236024.3236040 · DOI
  7. Shraddha Barke, Hila Peleg, and Nadia Polikarpova. 2020. Just-in-Time Learning for Bottom-up Enumerative Synthesis. Proceedings of the ACM on Programming Languages (PACMPL), Issue OOPSLA (Nov. 2020). https://doi.org/10.1145/3428295 · DOI
  8. Kent Beck, Ron Crocker, Gerard Meszaros, John Vlissides, James O. Coplien, Lutz Dominick, and Frances Paulisch. 1996. Industrial Experience with Design Patterns. In International Conference on Software Engineering (ICSE). https://doi.org/ 10.1109/ICSE.1996.493406 · DOI
  9. Roman Bednarik and Markku Tukiainen. 2006. An Eye-Tracking Methodology for Characterizing Program Comprehension Processes. In Symposium on Eye Tracking Research & Applications (ETRA). https://doi.org/10.1145/1117309.1117356 · DOI
  10. Hugh Beyer and Karen Holtzblatt. 1997. Contextual Design: Defining Customer-Centered Systems. Morgan Kaufmann Publishers Inc.
  11. Francisco Enrique Vicente Castro and Kathi Fisler. 2016. On the Interplay Between Bottom-Up and Datatype-Driven Program Design. In SIGCSE Technical Symposium. https://doi.org/10.1145/2839509.2844574 · DOI
  12. Francisco Enrique Vicente Castro and Kathi Fisler. 2020. Qualitative Analyses of Movements Between Task-Level and Code-Level Thinking of Novice Programmers. In SIGCSE Technical Symposium. https://doi.org/10.1145/3328778.3366847 · DOI
  13. Kathy Charmaz. 2006. Constructing Grounded Theory: A Practical Guide Through Qualitative Analysis. SAGE Publishing Inc.
  14. Simon P. Davies. 1991. Characterizing the Program Design Activity: Neither Strictly Top-down nor Globally Opportunistic. Behaviour & Information Technology (May 1991). https://doi.org/10.1080/01449299108924281 · DOI
  15. Simon P. Davies and Adrian M. Castell. 1994. From Individuals to Groups Through Artifacts: The Changing Semantics of Design in Software Development. In User-Centred Requirements for Software Engineering Environments, David J. Gilmore, Russel L. Winder, and Françoise Détienne (Eds.). https://doi.org/10.1007/978-3-662-03035-6_2 · DOI
  16. Françoise Détienne. 2002. Software Design Ð Cognitive Aspect. https://doi.org/10.1007/978-1-4471-0111-6 · DOI
  17. Robert G. Farrell, John R. Anderson, and Peter L. Pirolli. 1984. Learning to Program Recursion. In Proceedings of the Sixth Annual Cognitive Science Meetings.
  18. Kathi Fisler and Francisco Enrique Vicente Castro. 2017. Sometimes, Rainfall Accumulates: Talk-Alouds with Novice Functional Programmers. In International Conference on Computing Education Research (ICER). https://doi.org/10.1145/ 3105726.3106183 · DOI
  19. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, and Grady Booch. 1995. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional.
  20. David J. Gilmore. 1990. Expert Programming Knowledge: A Strategic Approach. In Psychology of Programming, J.-M. Hoc, T.R.G. Green, R. Samurçay, and D.J. Gilmore (Eds.). https://doi.org/10.1016/B978-0-12-350772-3.50019-7 · DOI
  21. Matthías Páll Gissurarson. 2018. Suggesting Valid Hole Fits for Typed-Holes (Experience Report). In International Symposium on Haskell (Haskell). https://doi.org/10.1145/3242744.3242760 · DOI
  22. Thomas R. G. Green and Marian Petre. 1996. Usability Analysis of Visual Programming Environments: A 'Cognitive Dimensions' Framework. Journal of Visual Languages & Computing (June 1996). https://doi.org/10.1006/jvlc.1996.0009 · DOI
  23. Yann-Gaël Guéhéneuc. 2006. TAUPE: Towards Understanding Program Comprehension. In Conference of the Center for Advanced Studies on Collaborative Research (CASCON). https://doi.org/10.1145/1188966.1188968 · DOI
  24. Raymonde Guindon. 1990. Designing the Design Process: Exploiting Opportunistic Thoughts. HumanśComputer Interaction (1990). https://doi.org/10.1080/07370024.1990.9667157 · DOI
  25. Raymonde Guindon, Herb Krasner, and Bill Curtis. 1987. Breakdowns and Processes during the Early Activities of Software Design by Professionals. In Empirical Studies of Programmers: Second Workshop.
  26. Prateek Hejmady and N. Hari Narayanan. 2012. Visual Attention Patterns during Program Debugging with an IDE. In Symposium on Eye Tracking Research and Applications (ETRA). https://doi.org/10.1145/2168556.2168592 · DOI
  27. Rashina Hoda, James Noble, and Stuart Marshall. 2013. Self-Organizing Roles on Agile Software Development Teams. Transactions on Software Engineering 3 (March 2013). https://doi.org/10.1109/TSE.2012.30 · DOI · Paper page
  28. Sami Jantunen and Donald C. Gause. 2014. Using a Grounded Theory Approach for Exploring Software Product Management Challenges. Journal of Systems and Software (Sept. 2014). https://doi.org/10.1016/j.jss.2014.03.050 · DOI · Paper page
  29. Robin Jeffries, Althea A. Turner, Peter G. Polson, and Michael E. Atwood. 1981. The Processes Involved in Designing Software. In Cognitive Skills and Their Acquisition (1st ed.).
  30. Shoaib Kamil, Alvin Cheung, Shachar Itzhaky, and Armando Solar-Lezama. 2016. Verified Lifting of Stencil Computations. In Programming Language Design and Implementation (PLDI). https://doi.org/10.1145/2908080.2908117 · DOI
  31. Amy J. Ko. 2003. A Contextual Inquiry of Expert Programmers in an Event-Based Programming Environment. In Extended Abstracts on Human Factors in Computing Systems (CHI EA). https://doi.org/10.1145/765891.766135 · DOI
  32. Amy J. Ko and Brad A. Myers. 2003. Development and Evaluation of a Model of Programming Errors. In Symposium on Human Centric Computing Languages and Environments. https://doi.org/10.1109/HCC.2003.1260196 · DOI
  33. Thomas D. LaToza, Maryam Arab, Dastyni Loksa, and Amy J. Ko. 2020. Explicit Programming Strategies. Empirical Software Engineering (July 2020). https://doi.org/10.1007/s10664-020-09810-1 · DOI
  34. Stanley Letovsky. 1987. Cognitive Processes in Program Comprehension. Journal of Systems and Software (Dec. 1987). https://doi.org/10.1016/0164-1212(87)90032-X · DOI
  35. Colleen M. Lewis. 2012. The Importance of Students' Attention to Program State: A Case Study of Debugging Behavior. In International Conference on International Computing Education Research (ICER). https://doi.org/10.1145/2361276.2361301 · DOI
  36. Justin Lubin. 2021. How Statically-Typed Functional Programmers Author Code. In Extended Abstracts on Human Factors in Computing Systems. https://doi.org/10.1145/3411763.3451515 · DOI
  37. Justin Lubin and Ravi Chugh. 2019. Type-Directed Program Transformations for the Working Functional Programmer. In Workshop on Evaluation and Usability of Programming Languages and Tools (PLATEAU), Sarah Chasins, Elena L. Glassman, and Joshua Sunshine (Eds.). https://doi.org/10.4230/OASIcs.PLATEAU.2019. · DOI
  38. Justin Lubin, Nick Collins, Cyrus Omar, and Ravi Chugh. 2020. Program Sketching with Live Bidirectional Evaluation. Proceedings of the ACM on Programming Languages (PACMPL), Issue ICFP (Aug. 2020). https://doi.org/10.1145/3408991 · DOI
  39. Michael Muller. 2014. Curiosity, Creativity, and Surprise as Analytic Tools: Grounded Theory Method. In Ways of Knowing in HCI, Judith S. Olson and Wendy A. Kellogg (Eds.). https://doi.org/10.1007/978-1-4939-0378-8_2 · DOI
  40. Brad A. Myers, Amy J. Ko, Thomas D. LaToza, and YoungSeok Yoon. 2016. Programmers Are Users Too: Human-Centered Methods for Improving Programming Tools. Computer (2016). https://doi.org/10.1109/MC.2016.200 · DOI · Paper page
  41. Brad A. Myers, John F. Pane, and Amy J. Ko. 2004. Natural Programming Languages and Environments. Communications of the ACM (2004). https://doi.org/10.1145/1015864.1015888 · DOI
  42. Marie-Hélène Nienaltowski, Michela Pedroni, and Bertrand Meyer. 2008. Compiler Error Messages: What Can Help Novices? In SIGCSE Technical Symposium. https://doi.org/10.1145/1352135.1352192 · DOI
  43. John F. Pane and Brad A. Myers. 2000. Tabular and Textual Methods for Selecting Objects from a Group. In International Symposium on Visual Languages (VL/HCC). https://doi.org/10.1109/VL.2000.874379 · DOI
  44. Candy Pang, Abram Hindle, and Denilson Barbosa. 2020. Understanding Devops Education with Grounded Theory. In International Conference on Software Engineering: Software Engineering Education and Training (ICSE-SEET). https: //doi.org/10.1145/3377814.3381711 · DOI
  45. Peter Pirolli. 1986. A Cognitive Model and Computer Tutor for Programming Recursion. HumanśComputer Interaction 4 (Dec. 1986). https://doi.org/10.1207/s15327051hci0204_3 · DOI
  46. Peter L. Pirolli and John R. Anderson. 1985. The Role of Learning from Examples in the Acquisition of Recursive Programming Skills. Canadian Journal of Psychology (1985). https://doi.org/10.1037/h0080061 · DOI
  47. Catherine Kohler Riessman. 1993. Narrative Analysis. SAGE Publishing Inc.
  48. Paige Rodeghero, Cheng Liu, Paul W. McBurney, and Collin McMillan. 2015. An Eye-Tracking Study of Java Programmers and Application to Source Code Summarization. Transactions on Software Engineering (Nov. 2015). https://doi.org/10. 1109/TSE.2015.2442238 · DOI
  49. Paige Rodeghero and Collin McMillan. 2015. An Empirical Study on the Patterns of Eye Movement during Summarization Tasks. In International Symposium on Empirical Software Engineering and Measurement (ESEM). https://doi.org/10.1109/ ESEM.2015.7321188 · DOI
  50. Tobias Roehm, Rebecca Tiarks, Rainer Koschke, and Walid Maalej. 2012. How Do Professional Developers Comprehend Software? In International Conference on Software Engineering (ICSE). https://doi.org/10.1109/ICSE.2012.6227188 · DOI
  51. Ogunleye O. Samuel. 2009. MobiNET: A Framework for Supporting Java Mobile Application Developers through Contextual Inquiry. In International Conference on Adaptive Science Technology (ICAST). https://doi.org/10.1109/ICASTECH.2009. 5409746 · DOI
  52. Todd Sedano, Paul Ralph, and Cécile Péraire. 2017. Lessons Learned from an Extended Participant Observation Grounded Theory Study. In International Workshop on Conducting Empirical Studies in Industry (CESI). https://doi.org/10.1109/ CESI.2017. · DOI
  53. Armando Solar-Lezama, Rodric Rabbah, Rastislav Bodík, and Kemal Ebcioğlu. 2005. Programming by Sketching for Bit-Streaming Programs. ACM SIGPLAN Notices (June 2005). https://doi.org/10.1145/1064978.1065045 · DOI
  54. Armando Solar-Lezama, Liviu Tancau, Rastislav Bodik, Sanjit Seshia, and Vijay Saraswat. 2006. Combinatorial Sketching for Finite Programs. In International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS). https://doi.org/10.1145/1168857.1168907 · DOI
  55. Elliot Soloway and Kate Ehrlich. 1986. Empirical Studies of Programming Knowledge. In Readings in Artificial Intelligence and Software Engineering, Charles Rich and Richard C. Waters (Eds.). https://doi.org/10.1016/B978-0-934613-12-5.50042-2 · DOI
  56. James C. Spohrer and Elliot Soloway. 1986. Novice Mistakes: Are the Folk Wisdoms Correct? Communications of the ACM (July 1986). https://doi.org/10.1145/6138.6145 · DOI
  57. James C. Spohrer and Elliot Soloway. 1989. Simulating Student Programmers. In International Joint Conference on Artificial Intelligence (IJCAI).
  58. Jeffrey Stylos and Brad A. Myers. 2008. The Implications of Method Placement on API Learnability. In International Symposium on Foundations of Software Engineering (FSE). https://doi.org/10.1145/1453101.1453117 · DOI
  59. Kyle Thayer, Sarah E. Chasins, and Amy J. Ko. 2021. A Theory of Robust API Knowledge. Transactions on Computing Education (Jan. 2021). https://doi.org/10.1145/3444945 · DOI · Paper page
  60. Simon Thompson. 2004. Refactoring Functional Programs. In Advanced Functional Programming (AFP). https://doi.org/10. 1007/11546382_9 · DOI
  61. Emina Torlak and Rastislav Bodik. 2014. A Lightweight Symbolic Virtual Machine for Solver-Aided Host Languages. ACM SIGPLAN Notices (June 2014). https://doi.org/10.1145/2666356.2594340 · DOI
  62. Cathy Urquhart and Walter Fernandez. 2006. Grounded Theory Method: The Researcher as Blank Slate and Other Myths. In International Conference on Information Systemcs (ICIS). https://aisel.aisnet.org/icis2006/31
  63. Willemien Visser. 1987. Strategies in Programming Programmable Controllers: A Field Study on a Professional Programmer. In Empirical Studies of Programmers, G. Olson, S. Sheppard, and E. Soloway (Eds.). Anneliese von Mayrhauser and A. Marie Vans. 1995. Program Comprehension During Software Maintenance and Evolution. Computer (Aug. 1995). https://doi.org/10.1109/2.402076 · DOI
  64. Jacqueline Whalley and Nadia Kasto. 2014. A Qualitative Think-Aloud Study of Novice Programmers' Code Writing Strategies. In Conference on Innovation & Technology in Computer Science Education (ITiCSE). https://doi.org/10.1145/2591708.2591762 · DOI
  65. Bin Xie and Gavriel Salvendy. 2000. Review and Reappraisal of Modelling and Predicting Mental Workload in Single-and Multi-Task Environments. Work & Stress (2000). https://doi.org/10.1080/026783700417249 · DOI · Paper page
  66. Shehnaaz Yusuf, Huzefa Kagdi, and Jonathan I. Maletic. 2007. Assessing the Comprehension of UML Class Diagrams via Eye Tracking. In International Conference on Program Comprehension (ICPC). https://doi.org/10.1109/ICPC.2007.10 · DOI

Cited by

Sorted by citations

Authors
Lubin, J., & Chasins, S. E.
Affiliations
University of California, Berkeley (US)
Venue
Proceedings of the ACM on Programming Languages
Published
2021-10-15
Volume
5
Issue
OOPSLA
Pages
1-30
ISSN
2475-1421 (ISSN-L)
OpenAlex
W3206925941
Cited by
18
References
6
Citations by year
2026: 4 · 2025: 5 · 2024: 4 · 2023: 4 · 2022: 1
FWCI
0.80
Type
journal article
Language
en
Open access
Locations
Proceedings of the ACM on Programming Languages (publishedVersion, cc-by)
Funders
NSF (1752814, CA-HDR 2029457, CA-HDR 1936731, CA-HDR 2033558)
Topics
  • Physical Sciences › Computer Science › Artificial Intelligence › Logic, programming, and type systems
  • Physical Sciences › Computer Science › Information Systems › Software Engineering Research
  • Physical Sciences › Computer Science › Information Systems › Software Engineering Techniques and Practices
Keywords
type systems, domain modeling, compiler feedback, program editing, language design, tool design

About these checks

Registry, retraction, Cites and statistics results are computed, not judged, with one exception: a printed reference that no index lists is read once by a model before it counts as a citation error. Claims are extracted by a model and kept only when their quote appears verbatim in the text; each cited source is then checked, with a model’s help, for whether it says what the claim relies on. Those verdicts can be wrong — read the claim’s quote and the cited source before relying on one.

Statistics and arithmetic are recomputed, not judged.

Confidence bands are shown only for fields calibrated on our annotated test set. None is calibrated yet, so no band is shown.

What counts as a claim ›How we measure confidence ›How we check this ›

Are you an author, or do you see a problem with this page? Request a review