TL;DR:
Applied Scientist at AWS, volunteer bike mechanic at Cyclab, and sometimes professor. Rust expert. Tandem bicycle enthusiast. Sometimes writes.
Contact
Me, Otherwise
Selected Projects
Rust Programming Language
I'm passionate about expanding and leveraging Rust's language features to improve the safety and ergonomics of programming in Rust. I led the Amazon's Rust observability initiative, and currently lead the Rust Project's safe transmutation and field safety tooling initiatives. I maintain two widely-used Rust libraries (zerocopy and itertools) and a bevy of seldom-used ones, too.
Pyret Programming Language
I developed Pyret's best-in-class error messages, its language-level support for tabular data, an autograding system that runs on a supercomputing cluster, and an IDE that helps students develop great tests before they begin their implementation work!
Digital Archival at Brown University
I ran the Inning Club, a guerilla archival collective devoted to preserving that which Brown University's staff archivists miss. Since 2013, the Club has dissected Brown's secret societies, interviewed countless alumni, and has accumulated more than 5,000 photographs (spanning decades!) of students crawling through Brown's tunnels and peering out from its roofs.
In 2016, I published Liber Brunoniana, a 21st-century remix of Brown University's authoritative dead-tree encyclopedia.
In 2020, I rescued six years of student activities documentation from destruction just before Brown University shut down its online student activities management system. I'm now working with the Brown Digital Repository to make my high-fidelity archive available to future researchers. (Huge kudos to the WebRecorder project!)
Vox Solaris Electric Organ
In the Spring of 2018, I had just finished a paper and my advisor was out of the country for a week—what's a bored CS PhD student to do? Hack up an electric organ, of course!
Vox Solaris is a MIDI electric organ constructed from the PC motherboard speakers of the ~80 pipes desktop computers in Brown's Sun Lab. I developed an ALSA MIDI driver for beep
ing the motherboard speaker, a utility for blasting MIDI notes over a network, and a MIDI demultiplexer for distributing the keyboard's polyphonic output into monophonic streams for each computer. Our department's technologist-and-pianist extraordinaire Ben Nacar gave a live performance on it!
Writing
Besides my academic publications (see below), I maintain a blog, and previously had a column in the Brown Daily Herald. Between the two, I've written about Rust tricks, practical data science, privacy, and student traditions. My work on privacy and surveillance was the subject of local news coverage.
Dissertation
- Executable Examples: Empowering Students to Hone Their Problem Comprehension (2022)
-
Draft. Further updates will be made.
- Advisor
- Shriram Krishnamurthi
- Readers
- Kathi Fisler, Mark Guzdial, Tim Nelson, Joe Politz
- Downloads
- Dissertation
- Abstract
-
Students often tackle programming problems with a flawed understanding of what the problem is asking. Some pedagogies attempt to address this by encouraging students to develop examples in the form of input–output assertions (henceforth "functional examples"), independent of (and typically prior to) developing and testing their implementations. However, without an implementation to run examples against, examples are impotent and do not provide feedback. Consequently, students may be inclined to begin their implementations prematurely—a process whose comparatively ample feedback may mask underlying misunderstandings and instill a false sense of progress.
In this dissertation, I demonstrate that providing students with timely feedback on their functional examples incentivizes them to develop functional examples, improves the quality of their test cases, and may improve the correctness of their implementations.
Academic Publications
- Using Relational Problems to Teach Property-Based Testing (2021)
-
Editors’ Choice Award
- Co-Authors
- Tim Nelson, Shriram Krishnamurthi
- Downloads
- Paper
- Abstract
-
The success of QuickCheck has led to the development of property-based testing (PBT) libraries for many languages and the process is getting increasing attention. However, unlike regular testing, PBT is not widespread in collegiate curricula. We find that the use of “relational” problems — those for which an input may admit multiple valid outputs — easily motivates the use of PBT. We also notice that such problems are readily available in the computer science pantheon of problems (e.g., many graph and sorting algorithms).
- DOI
- 10.22152/programming-journal.org/2021/5/9
- Will Students Write Tests Early Without Coercion? (2020)
-
- Co-Authors
- Shriram Krishnamurthi
- Downloads
- Paper
- Abstract
-
Students faced with a programming task often begin their implementation without a sufficient understanding of the problem. Several prior papers suggest that formulating input–output examples before beginning one’s implementation is the key to averting problem misunderstandings, but that students are loath to actually do it. Is outright coercion instructors’ only hope to convince students to follow this methodology and hence help themselves?
We conjecture that students’ reluctance may stem from the disaffordances of their programming environments. In this work, we augment the student’s programming environment to encourage examples-first development, and design a novel measure to assess students’ adherence to this methodology. We apply these measures to students using our modified environment in a semester-long course, and find high voluntary adherence, especially relative to the literature’s low expectations.
- DOI
- 10.1145/3428029.3428060
- Executable Examples for Programming Problem Comprehension (2019)
-
- Co-Authors
- Shriram Krishnamurthi
- Downloads
- Paper
- Abstract
-
Flawed problem comprehension leads students to produce flawed implementations. However, testing alone is inadequate for checking comprehension: if a student develops both their tests and implementation with the same misunderstanding, running their tests against their implementation will not reveal the issue. As a solution, some pedagogies encourage the creation of input–output examples independent of testing—but seldom provide students with any mechanism to check that their examples are correct and thorough.
We propose a mechanism that provides students with instant feedback on their examples, independent of their implementation progress. We assess the impact of such an interface on an introductory programming course and find several positive impacts, some more neutral outcomes, and no identified negative effects.
- DOI
- 10.1145/3291279.3339416
- Who Tests the Testers? (2018)
-
- Co-Authors
- Shriram Krishnamurthi, Kathi Fisler
- Downloads
- Paper
- Abstract
- Instructors routinely use automated assessment methods to evaluate the semantic qualities of student implementations and, sometimes, test suites. In this work, we distill a variety of automated assessment methods in the literature down to a pair of assessment models. We identify pathological assessment outcomes in each model that point to underlying methodological flaws. These theoretical flaws broadly threaten the validity of the techniques, and we actually observe them in multiple assignments of an introductory programming course. We propose adjustments that remedy these flaws and then demonstrate, on these same assignments, that our interventions improve the accuracy of assessment. We believe that with these adjustments, instructors can greatly improve the accuracy of automated assessment.
- DOI
- 10.1145/3230977.3230999
- Error Messages Are Classifiers (2017)
-
- Co-Authors
- Shriram Krishnamurthi
- Downloads
- Paper Talk
- Abstract
- We take the perspective that error reports are really classifiers of program information. They should therefore be subjected to the same measures as other classifiers (e.g., precision and recall). We formalize this perspective as a process for assessing error reports, describe our application of this process to Pyret, and present a preliminary study on the utility of the resulting error reports.
- DOI
- 10.1145/3133850.3133862