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.
Want to know when I post new essays? Subscribe here.
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.
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.
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.
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.
How and why we run untrusted Java bytecode in a secure in-process sandbox. (tl;dr: It's fast.)
A single exam isn't the solution to assessment. It's the problem.
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.
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.
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.
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.
Why are college courses structured so differently from classes in high-school? And does introducing more structure help our students learn better?
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.
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.
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.
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.
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.
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.
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.
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.