Big Code is all the rage. As IDE builders and people who know static analysis, we see a wealth of opportunity to generate data to study how people program. What better way to identify coders’ skills and confusions than to harvest their IDE interactions, compilation attempts, error messages, and code evolution within and across assignments? Won’t this also revolutionize programming education? Unfortunately, this tool-builder’s dream often leaves instructors without essential information: why are students doing what they do? Unpacking this requires understanding students’ design choices in focused contexts, using Little Code and qualitative methods. Our research group studies how students learn program design through Big and Little Data about Big and Little Code. The talk describes studies and results on how students choose program structure, how language choice interacts with program structure, what misconceptions students have about semantics, and how students test programs. Through these, I hope to raise appreciation and questions about balancing the Big and the Little for improving programming education.
I’m interested in various facets of how people learn and use formal systems. My current focus is computing education, with an emphasis on how programming languages impact learning and pedagogy in computing. I’ve also worked on diagrammatic logics for hardware design (late 1990s), modular verification of feature-oriented programs (early 2000s), and reasoning about access-control and privacy policies (mid-late 2000s). Those projects emphasized formal systems over human reasoning. My work in computing education tilts the balance, but is part of the same broad theme.