About Me

Photo of Geoffrey Challen

Hi, I’m Geoff! I love to teach, and I love to build. I teach students to build—with code and AI. And I build things that help them learn.

I post essays on teaching, technology, and the overlap between the two. I try to keep my essays on teaching accessible to teachers who don’t build, and my essays on technology interesting to builders who don’t teach.

Teaching
Teaching

I’m currently teaching faculty at the University of Illinois. I teach our first course on computer science for majors and students with a deep interest in the subject. You might call it CS1. We call it CS 124.

My course enrolls several thousand students per year. Almost its entire tech stack has been created specifically to support and scale the course learning objectives—including custom systems for interactive instruction, homework authoring and autograding, quiz design and delivery, student support, and large-assignment autograding. I get to build most of these things, and it’s huge fun.

Both content and assessments are structured to provide students with daily practice and reinforcement, comprising daily lessons and homework problems, weekly proctored quizzes incorporating multiple programming questions, and a longer multi-part programming project.

After fifteen weeks, students who enter my course with no prior programming experience can successfully complete moderately-difficult programming problems under proctored conditions—such as simple class design, binary tree and linked list operations, and sorting algorithms such as Quicksort partition.(1). They have also completed an Android programming project, demonstrating their ability to successfully work in an unfamiliar and challenging environment and correctly modify and extend existing source code. Since I began teaching CS1 success rates in my course have remained high while success rates in later courses have risen.

I am also active in working to improve the curriculum surrounding my course. I led a team of teaching faculty colleagues in a successful effort to redesign our introductory programming sequence, changes that begin in Fall 2021. Our modifications focused on improving equity between majors and non-majors proceeding through our early courses, and on providing early opportunities for students to engage in independent group projects.

In response to the 2020 COVID-19 pandemic I completely redesigned my course in an asynchronous online format. The benefits have been enormous. The online format has allowed us to more effectively engage students each day, improved accessibility by allowing the course to scale further, and produced materials that are more maintainable and a course that is more manageable. I will never go back to lecturing.

More recently, the emergence of AI coding agents has prompted another major evolution. In Spring 2026, I replaced traditional CS 124 programming assignments with an independent project—where each student designs and builds their own unique Android application using AI coding agents. Students learn to write effective prompts, validate AI-generated code through testing, and recognize when an AI is off track, while weekly proctored quizzes ensure they still develop genuine programming ability.

I also created a brand new course: CS 199 UAI: Using and Understanding AI. UAI teaches non-technical students to use AI to create websites, music, data analyses, and more—while exploring how AI works and what it means for society. One of its most distinctive features is the use of conversational assessments: AI-conducted dialogues that replace traditional exams. The Spring 2026 pilot will continue as a permanent course, CS 108: Exploring Generative AI, that I’ll first teach in Spring 2027.

I’m also designing CS 199 ASK: Conversational Programming, a Fall 2026 course for anyone who wants to build things—no prerequisites, no prior experience, no code. Students learn to work like architects: exploring problems, designing solutions, prototyping with AI, critiquing what emerges, iterating through conversation, and validating with real users. With AI handling the syntax, the ability to create can finally be distributed to everyone—not just those willing to learn to think like a machine.

Beyond individual courses, I’m leading the design of a new Applied Computing degree at Illinois—a proposed four-year undergraduate program organized around studio-based design, a required domain concentration, breadth in studio art, moral reasoning, literature, and advanced writing, and a capstone thesis with public defense. The degree prepares students to use AI to build for the domains they care about, and is proposed as a school-level collaboration spanning the Siebel School, the School of Art and Design, Gies, and the iSchool.

Coding
Coding

Most importantly, if you don’t like to program, don’t teach people to program.

I love to create technology! Both because it allows me to create incredible things, and to create those things beautifully. Programming can and should be fun. And anyone who teaches programming should both find it fun and do a fair bit of it themselves—which kind of go together, if you think about it. I don’t go as far as arguing that we should teach everyone to program. But I do think that, if you don’t like programming, at least consider whether you are doing it wrong. And if you teach programming and your students don’t like it, then consider whether you are teaching it wrong. Most importantly, if you don’t like to program, don’t teach people to program.

Since mid-2025, I do essentially all of my programming with Claude Code. This has fundamentally changed how I work—I spend more time designing and less time implementing, and I’m able to take on projects that would have been impractical before. I built the entire UAI course platform through conversational programming with Claude, and I use it daily across all of my projects.

My programming projects are almost entirely in support of my courses. Most of them fall into one of two categories—tools to help efficiently generate content or assessments, and ways to create more interactive engaging learning environments.

I maintain both frontend and backend systems—both interactive course websites and the microservices that support them. I use React TypeScript and the frameworks Gatsby and NextJS for my frontend websites and a mix of Kotlin and TypeScript for my backend servers. I try to use Kotlin as much as possible, and definitely whenever I need the JVM. However, the ability to share easily share type definitions between frontend and backend code does cause me to continue to maintain some smaller backend systems in TypeScript. Hopefully integration between TypeScript and Kotlin will improve in the future allowing me to migrate more of my backend systems to Kotlin.

Kotlin is a beautiful, sophisticated language.

At present Kotlin is my programming language of choice. Kotlin is a beautiful, sophisticated language. It supports many different programming paradigms without being overly opinionated, allowing you to write an effective mix of imperative, object-oriented, and functional code. As a language, Kotlin also makes many extremely good design decisions. Writing it brings me joy. You should try it!

I use Python for recipe programming to perform data analysis. I avoid it otherwise. I think that types and the ability to create something real with an interface are extremely important components of CS1. To me, that makes Python not the best choice. If you like Python’s clear syntax, consider using Kotlin, which combines the best bits of Python (clarity, built-in collections, functional-style programming) and Java (types, libraries, Android).

I’m a huge fan of ANTLR and use it heavily in multiple projects to support static analysis of Java and Kotlin source code.

I deploy containerized backend services to a private cloud managed using Kubernetes. Even as a solo developer I rarely feel intimidated by Kubernetes, and it allows me to deploy new code faster and more accurately than I would be able to otherwise, while also helping load balance across my private cloud. I deploy my JVM libraries using JitPack, since Maven seems like a mess.

I use Discourse as a course forum. I don’t use Piazza, because Piazza is not a forum.

This site is built using Next.js and deployed on my private Kubernetes cluster.

Personal
Personal

I was born Geoffrey Werner-Allen. I used that name professionally until I married Suzanna Chapman, and we became the Challens. My high-school cross country team nicknamed me “gwa”, and I signed emails with those initials until it started confusing people and then for many years afterward.

My wife and I share a beautiful old house in Champaign, Illinois, with a sweet cat Xyz, an even sweeter dog Gracie, and memories of our former love dog Chuchu. For me programming is a hobby as well as a profession. But I also enjoy cooking(2) and eating, exercise, reading, music, and ultimate frisbee. My wife and I follow the Wahl’s protocol. We have both done our fair share of travel but are rethinking that recently, for a variety of reasons. Suzanna and I rehabbed an entire small home on Buffalo’s West Side, including installing and finishing an entire wood floor, drywalling a ceiling, and a fair amount of trim and electrical work. It’s fun to remember, but next time I’ll leave that to the professionals.

My favorite musical artists include Jen Wasner (Flock of Dimes, Wye Oak), Justin Vernon (Bon Iver, Big Red Machine), ODESZA, the entire boygenius trio (particularly Julien Baker), Grimes, Fiona Apple, Middle Kids, Sylvan Esso, and many more. I listen to John in the Morning on KEXP daily. You are not alone!