About
I am a computer scientist, product designer, researcher, and software engineer. I live in San Francisco and work on tools for thought at Notion Labs, inspired by Douglas Engelbart’s vision of better computing for everyone. Previously, I was part of the Early Product Development R&D group at Khan Academy and interned with the Human Experience and Design group at Microsoft Research Cambridge. My research on implicit dependencies in Cascading Style Sheets led to the development of Inactive CSS in Firefox 70, and received a Best Paper Honorable Mention award at UIST. More shenanigans are documented in my CV.
My research interests span programming languages, human factors, learning sciences, and personal computing. I’m interested in programming languages as user interfaces: in short, how language design affects the way people think about and write programs. For instance, I ask questions about the usability of static and gradual type systems, the role of functional programming within computing education, and how provable guarantees might alleviate cognitive load while writing software.
I received my BA in Computer Science from Northwestern University, concentrating in human-computer interaction and theoretical computer science. My studies were supported by scholarships from Google, Microsoft, Palantir, Box, Quip, and others, for which I am grateful, though these companies do not necessarily represent my views. During school I was affiliated with the following research groups:
- Design, Technology, and Research, where I researched CSS inspection with my co-advisors Haoqi Zhang and Nell O’Rourke.
- CS Theory Group, where I researched peer grading algorithms with Jason Hartline.
- Center for Connected Learning, where I worked on NetLogo Web with Jason Bertsche.
I really like browser engines, type systems, public transit, WebAssembly, Rust, Haskell, crossword puzzles, classical music, policy debate, document preparation, cognitive disability advocacy, Nintendo Switch video games, hiking, and critical theory.
Most people call me Slim; you should feel free to do the same.
News
Oct 2019
Firefox 70 is released with Inactive CSS, a new inspection feature which highlights ineffective CSS properties arising from unsatisfied implicit dependencies. This work was directly inspired by Ply. Give it a try!
Sep 2019
Attending Papers We Love Conf and Strange Loop in St. Louis, through generous support from Project Alloy.
Aug 2019
Attending React Rally in Salt Lake City, where I gave an invited talk on WebAssembly entitled “All the memory safety of C combined with all the blazing speed of JavaScript” (slides). The title is a reference to James Iry's timeless blog post.
Jun 2019
Attending OPLSS in Eugene. Say hi if you’re around!
Apr 2019
New CSS inspection features inspired by our research are now available to test on Firefox Nightly, targeting Firefox 69 for a stable release!
Oct 2018
Attending UIST in Berlin, where our paper Ply: A Visual Web Inspector for Learning from Professional Webpages received Best Paper Honorable Mention. I presented this work (recording; slides).
Sep 2018
Attending ICFP, Strange Loop, and RacketCon in St. Louis, via PLMW.
Jul 2018
Attending Curry On! in Amsterdam.
Started an internship at MSR Cambridge.
Jun 2018
I graduated! I was honored to be named Outstanding Senior in Computer Science.
May 2017
Spoke at the Northwestern Big Ideas Forum, “How We Learn About Learning,” with professors Nell O’Rourke and David Uttal, and fellow undergrad Gabby Ashenafi.
Attending CHI in Denver. Ply won first place in the Student Research Competition!
Apr 2017
Received a Microsoft Tuition Scholarship for 2017-18.
Jan 2017
Ply: Visual Regression Pruning for Web Design Source Inspection is accepted to the CHI 2017 SRC.
Projects
Recent escapades in research, development, and coursework.
Ply: Visual Web Inspection
Delta Lab
CSS is syntactically straightforward, but has a steep learning curve and complicated semantics. Inspecting the source of existing webpages can help illustrate concepts, but such webpages are typically too complex to serve as useful learning materials. Drawing inspiration from prior research in both software engineering and the learning sciences, we present a novel web inspection tool and set of techniques for analyzing relevant CSS. We introduce the concept of implicit dependencies between CSS properties, which represent a major source of confusion for programmers. As a result of this work, Mozilla Firefox 70 ships with Inactive CSS to help identify and surface implicit dependencies within the Firefox Developer Tools. Supervised by Haoqi Zhang and Nell O’Rourke. Honorable Mention Paper at UIST 2018, Berlin.
Tracing WebAssembly function calls
With Meg Grasse and mentorship from Nick Fitzgerald and Jim Blandy, we developed a proof-of-concept tool for instrumenting WebAssembly binaries written in Rust to log function calls at runtime.
Spelling correction with prefix tries
A more performant implementation of Peter Norvig's statistical spelling corrector, written in Go using prefix tries.
Theorems in Markdown
Pandoc is my single favorite piece of software. I use it to compile Markdown documents into slideshows, academic papers, course notes, blog posts, and more. Pandoc already handles LaTeX very well, but I wanted to typeset my notes with proper definition, theorem, and lemma environments using Markdown. This filter compiles definition lists into amsthm environments. It's written in Haskell.
Evaluating peer graders
Northwestern University
Most of the literature on peer grading focuses on inferring a true grade from a set of noisy reports. We study a different problem: inferring the skill and effort of reviewers, based on the same grade reports. Our approach builds on the
vancouver
algorithm introduced by Luca de Alfaro and Michael Shavlovsky, using low-rank approximations to factor out reviewer skill and submission clarity. Supervised by Jason Hartline; paper in progress.Classroom exercise reports
Khan Academy
I developed new exercise reports to help teachers visualize student progress and work through problems in the classroom. Mentored by John Resig during my internship at Khan Academy.
Visual regression pruning
Delta Lab
We introduce a visual significance heuristic for removing irrelevant CSS source code during web design reverse-engineering tasks. CHI 2017 Student Research Competition Winner, Denver, Colorado.
Guiding Web Inspection with Tutorial Keyword Frequency
Delta Lab
In order to bridge the gap between web design tutorials and real-world examples, we extend a web inspector to highlight CSS properties frequently mentioned across a given set of tutorials. Google Scholars’ Retreat 2016, Mountain View, California.
SVG Charting Library
LinkedIn
An opinionated Ember.js addon to replace Highcharts with native SVG and DOM APIs. Released addon as a company-wide multiproduct. I worked on this project during my internship at LinkedIn, under the mentorship of Cody Coats and Michail Yasonik.
Predicting the Popularity of User-Generated Discussion Questions
EECS 349: Machine Learning
Using Python with the Reddit API and NLTK library, we collect information about AskReddit posts over a two-week period to analyze what makes a question popular. Alternating decision trees achieve 72.9819 accuracy with 10-fold cross-validation, an improvement over the ZeroR baseline of 51.0708. Features related to the language of the question, time and day of posting, and initial commenting behavior prove most informative. With Sameer Srivastava, Jennie Werner, and Aiqi Liu.
Commentator
Northwestern Debate Institute
End-to-end Google Apps Script-based pipeline for publishing practice debate comments to individual students’ feedback pages. Previously, instructors needed to manually edit the feedback pages for all four students in order to provide feedback from practice rounds. Deployed at the 2015 Northwestern Debate Institute and subsequently adopted for the entire program in 2016.
Teaching
I was a teaching assistant every quarter beginning my sophomore year, sometimes for two courses at once. Terms marked with an asterisk (*) denote a head or sole teaching assistant role.
EECS 396: Software Construction
Spring 2018
Software engineering project-based course with an emphasis on codewalks. With Robby Findler and Christos Dimoulas.
EECS 474: Probabilistic Graphical Models
Fall 2017*
Graduate-level Bayesian and Markov network representation, inference, and learning. With Doug Downey.
EECS 111: Fundamentals of Computer Programming I
Fall 2015, Winter 2016, Fall 2016*, Winter 2017*, Fall 2017*, Winter 2018*
Functional programming using the Racket Student Languages, vacillating between How to Design Programs and SICP. With Ian Horswill and Sara Sood.
- Guide for new EECS 111 TAs
- Fall 2016 Complete Recitation Notes
- Fall 2016 Quiz 1 Review
- Fall 2016 Quiz 2 Review
- Fall 2016 Structural Inheritance Review
- Winter 2017 Quiz 3 Practice Problems
- Winter 2017 Recursion Problem Set
- Winter 2017 Recursion Hints
- Winter 2016 Structural Recursion Notes
- Winter 2016 Map and Filter Notes
EECS 214: Data Structures and Data Management
Spring 2016, Spring 2017, Spring 2018
Data structures and algorithms in C#. With Ian Horswill.
- Spring 2017 Final Topics Piazza AMA
- Spring 2017 BFS vs. Dijkstra Slides
- Spring 2016 Recursive DFS vs. In-Memory Stack
- Spring 2016 ELI5: Big O