Geoffrey Challen

About Me

Photo of Geoffrey Challen

Hi, I’m Geoff! I love to teach, and I love to code. I teach students to code, and I write code that helps them learn. My goal is to teach as many students as possible. I do this by creating interactive learning environments that scale.

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 program, and my essays on technology interesting to programmers who don’t teach.


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 a 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.


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

I love to program! 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.

My programming projects are almost entirely in support of my CS1 course. 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 containerizer 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 Vercel. I recommend both highly!


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 named Xyz and our 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, and music. 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 a 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. Next time I’ll leave that to the professionals.

My favorite bands include Bon Iver, Flock of Dimes (and Wye Oak), ODESZA, the entire boygenius trio (particularly Julien Baker), Grimes, Fiona Apple, Middle Kids, and many more. I listen to John in the Morning on KEXP daily. You are not alone!