Ph.D. Student Opening

Ready to change education? I’m looking for a hacker interested in completing a teaching-focused Ph.D. under my supervision.

Upon completing your degree, you will be one of the most well-qualified applicants for any teaching-focused faculty position.

You’ll design, create, deploy, maintain, evaluate, and disseminate novel tools and systems that effectively teach students. You’ll immerse yourself in both the practice of teaching computer science and the theory underpinning effective education—keeping in mind that university education costs too much, achieves too little, and is largely unchanged since medieval times. We can and must do better to achieve more efficient and equitable learning outcomes. You already know how to create software—but you’ll get lots of practice at rapid prototyping, rigorous evaluation, critical thinking, written and verbal communication, project leadership, and all the other challenges a doctoral degree incorporates to hone your intellectual and creative abilities. Upon completing your degree, you will be one of the most well-qualified applicants for any teaching-focused faculty position. You’ll also be well prepared to create or join an educational technology company or startup.

Interested? Keep reading!

About You
About You

You’re a hacker. You enjoy creating software to solve problems. You flow around technical obstacles and enjoy learning new things in relentless pursuit of your creative goals. You’re the person who builds the things. You’re proud to be that person.

You also care deeply about education. If you didn’t, you wouldn’t still be reading. Because you know there’s no quick fortunes to be made in teaching. Every teacher is underpaid, and teachers with technical abilities even more so. You could earn more money doing something else—almost anything else.

But you think you might be able to have an impact on education by utilizing your ability to create software. Particularly given that, surveying the current technology landscape in higher education, you find a lot to be frustrated about, and a lot of room for improvement. You’ve probably already done some technical work supporting courses at your undergraduate institution, and have been excited to scratch the surface of how technology can enable effective instruction.

About Me
About Me

As a kid, I built with LEGO. I discovered computer science in college, and it’s been software ever since. I’ve authored and deployed software systems on active volcanoes, created the world’s largest smartphone platform testbed, and currently build and maintain many educational tools and systems.

I believe we can create software that improves education.

I also care deeply about education and helping others discover the transformative power of computing. What really drew me to computer science wasn’t taking classes—it was teaching them. I turned down an early job at Facebook to pursue my doctoral degree, and taught every year during graduate school despite not being required to do so. I initially took a research faculty job intending to do just enough research to get tenure. When that didn’t work, I took a teaching-focused position and never looked back. I believe we can create software that improves education. I believe we have to. My current work reflects that belief.

At Illinois I teach CS 124, the first course in our degree program. It enrolls 2,000 students per year, 80% of them non-majors. I’ve taught the course continuously since 2017, and transformed it completely during that time—from a lecture-based format with somewhat traditional grading, to an asynchronous tutorial-based format grounded in frequent small assessment. These innovative changes have significantly improved student success, lowered failure and drop rates, and reduced performance gaps between students with and without prior experience. I’ve found the freedom and resources here at Illinois to support transformative change in education, and have enjoyed every step of the process of transforming my course.

But I could use some help. That’s where you come in.

How This Might Work
How This Might Work

As my student you’ll be expected to focus your work and innovations on CS 124. I’ve been teaching that course since 2017, and plan to continue for the foreseeable future. You’ll be supported financially as a teaching assistant. In that role, you’ll do student-facing work and have a chance to gain experience in the day-to-day operation of a large course, but also have plenty of time to create and improve educational technology. And you’ll be perfectly positioned to evaluate the impact of your work.

CS 124 represents an open platform for innovation. With the exception of our Discourse forum, every other piece of course infrastructure is under our control—allowing us to gather data, make changes, and evaluate the results. Want to improve our homework autograder? I wrote most of that code, and I can help you get started. Ditto for our online lessons, interactive content, quiz delivery system, debugging question generator, project autograder, online tutoring system, project work monitor, plagiarism analysis framework, staff management tools, and so on. It’s our educational castle in the air, waiting for you to change, improve, and augment. And many of these systems also generate huge datasets, currently multiple years long and unstudied.

As an Illinois graduate student, you’ll be expected to publish research papers describing your work at appropriate venues like SIGCSE. And you’ll need to convince our Computer Science Education faculty that you understand the relevant literature. But as my student, our focus will be on impact—both inside our own classroom, and through dissemination of the tools you create and discoveries you make. Academic publishing may or may not be the best route to impact. We’ll figure it out together. But I confess a strong preference for running code over graphs and figures.

What I’m Working On
What I’m Working On

I’m interested in anything we can do with technology to improve education, particularly computer science education. If you have aligned but complementary interests, all the better. But here are a few of the ideas I’m thinking about at the moment(1). You can also examine the materials I submitted for promotion to full teaching professor in spring 2024.

Adaptive Quizzing: My course gives weekly computer-based quizzes in the Illinois computer-based testing facility (CBTF). Quizzes include a mixture of programming, debugging, and multiple-choice questions. Weekly proctored assessment provides significant benefits, helping students stay on track and enabling timely outreach to those who fall behind.

Currently every student takes the same quiz. But not every student learns at the same rate, or grasps the same concepts at exactly the same time. And even while the semester schedule constraints means that we need to get everyone to the finish line together, it’s likely that some students will benefit from some additional time flexibility along the way. I’d like to deploy adaptive quizzes, where each student sees a slightly-different quiz each week combining questions on new material with reinforcement questions on older material they might not have quite finished learning yet. This opens up exciting challenges, particularly balancing reinforcement of earlier concepts against keeping students moving forward.

Solution-Generated Autograding: Many current autograders use hand-written tests to evaluate submissions. But there’s a better way: use an instructor-provided solution to generate the tests, an approach I call solution-generated autograding. Solution-generated autograding enables rapid creation of accurate programming questions and autograders, and facilitates code quality analysis and test-writing questions as well. It’s a powerful approach that’s allowed us to rapidly author over 800 accurate Java and Kotlin programming questions, providing students with ample opportunities to hone their programming skills.

Currently our implementation of this idea is limited to the kind of self-contained programming problems we assign in an introductory course. However, it should work just as well on larger assignments, although there are likely to be both technical and conceptual challenges to broadening this approach.

Effectively Generating Lots of Questions: Students learning basic skills benefit from a lot of practice. Think of worksheets used to teach math with hundreds of basic arithmetic questions. What’s the equivalent for introductory programming?

One thing is clear: generating huge corpuses of practice problems can’t be done quickly one question at a time. We need to use technology to accelerate the process. As one example, I’ve built a tool for generating debugging challenges by applying source code mutation to transform our huge library of correct student submissions to programming exercises to an even larger library of debugging practice exercises. We have execution tracing capabilities that can likely be leveraged to create large numbers of code tracing questions. And this is a place where GAI seems poised to play an important role—by directly generating questions, or by modifying existing question stems to create similar problems, or in other ways we’ll dream up together.

Interactive Walkthroughs: A central component of how we teach introductory computer science online is using what we call interactive walkthroughs. These combine an audio track and an animated editor, allowing the instructor to explain code that they are writing and manipulating while maintaining the code as editable throughout. Unlike live coding videos, where code text has been reduced to pixels, interactive walkthroughs allow students to pause at any point, interact with the code to perform their own experiments, and then restart the explanation when they’re ready.

There are several opportunities in this direction we could explore together. One is to make our current interactive walkthrough technology more widely available, a goal that aligns nicely with the steadily-increasing number of programming languages that can run entirely in the browser without requiring a backend execution server. The second challenge would be to broaden this instructional approach to capture more complex environments and environments. Currently we’re limited to the Ace online editor, which is sufficient for manipulating the small snippets of code used to teach introductory computer science. But more advanced courses would probably need to record the manipulation of an entire IDE such as VS Code, as well as tracking the states of computational environments more complex than just standard output.

AI to Support Learning: Generative AI platforms are already quite powerful and improving constantly, creating a wide-open space for technological innovation to support student learning in a variety of ways. At the same time, we want to ensure that we’re teaching students using AI not just teaching students how to use AI, and that we maintain the humanity that accompanies person-to-person contact and support.

My class already makes heavy use of our computer-based testing facility, allowing us to evaluate authentic student understanding in a GPT-free environment. This puts us in an excellent position to ensure that new pedagogical approaches that utilize AI don’t compromise core course learning outcomes.

Still Interested?
Still Interested?

Please get in touch! Introduce yourself and provide a portfolio of your technical work for me to review. If it seems like a good fit, I’ll reach out and we’ll set up a time to chat further.

Eventually you’ll need to officially apply to the University of Illinois for admission to the computer science graduate program. However, I will only recommend students for admission who I have had contact with beforehand. Fit is important for any mentoring relationship, and I also need to ensure that you have the technical abilities I’m seeking. Also note that at this point I’m only looking for a single student, since I want to focus my time on working closely with one person.