Blog Articles
I write about software engineering, academia, startups, AI, product design, and usability.
(RSS feed)
- Academia, startups, big tech, and back again (5/17/2026)
- Dear researchers: Is AI all you've got? (2/22/2026)
- Simulating the ladybug clock puzzle (1/17/2026)
- I canceled my book deal (12/31/2025)
- Langjam Gamejam: Build a programming language and then use it to make a game in 7 days (11/28/2025)
- The design space of AI coding tools (10/18/2025)
- My startup diary: Techstars (10/12/2025)
- We are starting a company to rethink email (9/15/2025)
- Baby's first type checker (8/31/2025)
- Assessing students in the era of AI (8/10/2025)
- 100 blog posts, 6 years, 5 million views (6/19/2025)
- What makes a good side project? (6/16/2025)
- The fastest way to detect a vowel in a string (6/13/2025)
- Mapping latitude and longitude to country, state, or city (6/3/2025)
- Where are the proactive AI coding tools? (5/4/2025)
- The design of software engineering course projects (4/28/2025)
- My 25-year adventure in AI and ML (12/31/2024)
- Mirror: An LLM-powered programming-by-example programming language (11/17/2024)
- Ad hoc tools for gathering prompt context (9/30/2024)
- Evaluating your AI models in the wild (8/24/2024)
- The blog posts I haven't written (yet) (7/21/2024)
- Can ChatGPT do data science? (7/14/2024)
- Rejoining academia (7/10/2024)
- Optimizing a bignum library for fun (7/9/2024)
- Making a bignum library for fun (6/13/2024)
- CodeAid: A classroom deployment of an LLM-based programming assistant (5/19/2024)
- Exploring 50 user interfaces for AI code suggestions (5/7/2024)
- How I would redesign Copilot Workspace (4/29/2024)
- Mistakes that data science students make (4/28/2024)
- Learning to code with and without AI (3/31/2024)
- Acquired in 99 days (3/7/2024)
- Satirical ways to measure academics (2/19/2024)
- The pain points of building a copilot (2/4/2024)
- Leaving Microsoft (12/16/2023)
- Machine learning of GUIs at scale (10/31/2023)
- A raycasting engine in 7 easy steps (9/30/2023)
- Particle playground (8/6/2023)
- Stopping at 90% (7/31/2023)
- Bespoke GUIs on the fly (7/26/2023)
- PM is the choose-your-own-adventure role (6/30/2023)
- Why I started (and stopped) making games (6/19/2023)
- My first superoptimizer (5/29/2023)
- Data wrangling with Data Wrangler (5/20/2023)
- The future of programming: Research at CHI 2023 (4/27/2023)
- What does a research grant pay for? (4/9/2023)
- Don't trap me in a chat window (3/16/2023)
- Hofstadter: An esoteric programming language with concurrency, regex, and web requests (3/13/2023)
- AI-generated code needs permission labels (2/28/2023)
- Papers on the UX of AI programming assistants (2/20/2023)
- Natural language is the lazy user interface (1/27/2023)
- The pain points of teaching computer science (1/16/2023)
- My first experience using Swift, SwiftUI, and XCode (1/2/2023)
- Challenging algorithms and data structures every programmer should try (12/21/2022)
- My future teaching statement (11/22/2022)
- Does experience make you a better programmer? (10/30/2022)
- Programming as play (10/19/2022)
- Coding with Copilot for acceleration and exploration (10/10/2022)
- Why is it hard to learn another programming language? (10/8/2022)
- Monthly obsessions (10/4/2022)
- An AI assistant for command line errors (9/24/2022)
- Measuring demand for a feature: An economics approach (8/29/2022)
- My HCI toolbox: Methods for designing and evaluating UIs (7/31/2022)
- Learning HTML was too hard so I made a compiler instead (6/29/2022)
- Computational notebooks research at CHI 2022 (5/13/2022)
- Take my app ideas (4/19/2022)
- The project with a single 11,000-line code file (4/3/2022)
- Amplifying others (3/27/2022)
- A study guide for software engineering students (3/14/2022)
- What a $500,000 grant proposal looks like (2/21/2022)
- Leaving academia (1/6/2022)
- Lessons from my PhD (12/27/2021)
- "This project will only take 2 hours" (11/8/2021)
- Paradox of the perfect code editor (10/15/2021)
- When users never use the features they asked for (9/29/2021)
- Building solutions to problems that no one knows exist yet (8/28/2021)
- Technical blogs worth reading (7/29/2021)
- Gamification, life, and the pursuit of a gold badge (6/24/2021)
- Stack Overflow knows your future problem (6/17/2021)
- Why I prefer making useless stuff (5/22/2021)
- An inquisitive code editor: Overcome bugs before you know you have them (5/11/2021)
- A theory of how developers seek information (4/24/2021)
- All my career rejections (3/21/2021)
- Navigate your code like it's 2021 (3/3/2021)
- Why is it so hard to see code from 5 minutes ago? (2/18/2021)
- Python strings are immutable, but only sometimes (2/15/2021)
- Can you make a basic web app without googling? I can't (1/29/2021)
- More challenging projects every programmer should try (12/20/2020)
- Progress bars still lie: Please fix them (11/23/2020)
- List of human-centered software engineering dissertations (11/22/2020)
- Parsing RISC-V assembly (10/26/2020)
- Useful functions for game development (9/21/2020)
- Implementing cosine in C from scratch (7/19/2020)
- Let's make a Teeny Tiny compiler, part 3 (7/5/2020)
- Let's make a Teeny Tiny compiler, part 2 (6/5/2020)
- Let's make a Teeny Tiny compiler, part 1 (5/5/2020)
- Books I recommend to my software engineering students (2/29/2020)
- Hey Dropbox, why can't I compare file versions like this? (1/27/2020)
- What's wrong with computational notebooks? (1/19/2020)
- Going viral on Reddit and Hacker News (12/28/2019)
- Challenging projects every programmer should try (12/11/2019)
- Design patterns for hacking together prototypes: Facilitator (10/27/2019)
- Design patterns for hacking together prototypes: Catch All (10/7/2019)
- Design patterns for hacking together prototypes: Object Dictionaries (9/30/2019)
- Is optional null better? (9/4/2019)
- The 8 lessons I learned from releasing 8 video games (7/17/2019)
- Quick start guide to research on human factors of software engineering (7/7/2019)
- Type inference has usability problems (6/27/2019)
- What I got from 5 internships during grad school (9/9/2018)
- Faculty interview questions I asked and got asked (5/14/2018)
- My favorite Wikipedia articles about science (11/11/2016)