I post essays here on teaching, technology, and the overlap between the two.

I try to keep my essays on teaching accessible to teachers who don't program, and my essays on technology interesting to programmers who don't teach.


2024-03-21: Ditch the Demo

Live teaching demonstrations are an ineffective way to interview teaching faculty. There's a better approach.

2023-06-14: Large Courses Should Be Better

Large university courses must and can be better. But they also fail in predictable ways, negatively affecting large numbers of students.

2023-02-11: A Help Site Story

When the pandemic hit, we scrambled to create an effective approach to providing one-on-one support online. The process also led me to some insights about help site design, community building in CS1, and possible paths towards increasing diversity in our field.

2022-12-27: Evaluating Teaching Faculty Positions: Part 3

There's a ton of variation between teaching faculty positions. If you want a good one, here are some additional important questions to ask, related to teaching assignments, broadening participation, and institutional support.

2022-11-18: Evaluating Teaching Faculty Positions: Part 2

There's a ton of variation between teaching faculty positions. If you want a good one, here are some additional important questions to ask, related to contracts, pay, and leadership opportunities.

2022-10-28: Evaluating Teaching Faculty Positions

There's a ton of variation between teaching faculty positions. If you want a good one, here are some of the important questions to ask.

2022-06-17: The Need for Jeed

How and why we run untrusted Java bytecode in a secure in-process sandbox. (tl;dr: It's fast.)

2022-04-17: Eliminate Final Exams

A single exam isn't the solution to assessment. It's the problem.

2022-04-08: My CS1 Backend

I've created an interactive, immersive, and effective online learning experience for my CS1 students. As the first installment in a multi-part series, I'll provide an overview of my course infrastructure, and discuss a bit about how I got to this crazy place.

2021-11-26: Windows Line Ending

In today's advertures in maintaining your own CS1 infrastructure, how Windows line endings and a persistent student combined to bring down our entire homework grading backend.

2021-11-21: CS1 in Kotlin

In Fall 2021 we began offering Kotlin as a language option in my CS1 course. Kotlin has proven to be a great choice, and represents a substantial improvement over other popular options like Python and Java.

2021-08-13: Grade Uncertainty

Grade uncertainty represents the amount of uncertainty students have about how they are doing in a course. Reducing grade uncertainty has proven positive in my courses, even if it has had some interesting side effects.

2021-07-30: Poorly Structured

Why are college courses structured so differently from classes in high-school? And does introducing more structure help our students learn better?

2021-07-23: Computerized Testing for CS1

Nothing has been more transformative for my CS1 course than frequent computerized assessments. Including programming questions on weekly proctored quizzes keeps students on track while also helping support many other unproctored assessments. Initially facilitated by an on-campus testing center, we've now successfully transitioned that component of the course online. I'll talk about how and why to use computerized assessments in CS1.

2021-07-16: Quantifying CS1

Finding ways to measure success or failure is important when teaching any course, but particularly when teaching CS1. I outline five metrics that I use to evaluate CS1, describe how and why to collect them, and present results from my own course.

2021-07-09: Creating Course Community

Not every course needs a community. But I've found that building one among my course staff has made my course both more effective for students and rewarding for myself. Here's how and why we create community in CS1.

2021-07-02: One For All

Teaching large courses can have enormous impact. But it's easy for an instructor's effectiveness to decrease as the number of students grows. The trick is to avoiding this is to focus on the things that benefit all students—one for all—and avoid those that only benefit a few students—all for one.

2021-06-24: Quantity Over Quality

Programming is a skill, and if you want students to get better at it, you need to encourage them to practice. A lot. But also discourage them from focusing too much on quality too early.

2021-06-17: Why I Don't Use Piazza

Piazza is not a forum. It doesn't build community, and it's design goals are oriented around enabling students to extract answers from course staff without engaging in the dialogue that builds understanding. If you are still using Piazza, please consider other much better alternatives.

2021-06-10: Chalkface Nostalgia

With the pandemic seemingly drawing to a close, at least in the United States, it’s disappointing to see university students, administrators, and even instructors longing to return to outmoded and ineffective instructional methods. It’s not just a return to classrooms. It’s a return to lecturing, which we know doesn't work.

2021-06-03: Recipe Programming

Recipe programming comprises working of a set of instructions to produce a program that achieves some desired outcome. While recipe programming is powerful and useful, it should not be confused with teaching the basics of programming, particularly when teaching introductory computer science courses.