Geoffrey Challen
My professional goal is to teach computer science to as many people as possible, and to inspire them to use their skills to change the world for the better.
Department of Computer Science University of Illinois Thomas M. Siebel Center for Computer Science 201 North Goodwin Avenue, Urbana, IL, 61801-2302
Email: | [email protected] |
Phone: | 716.464.2749 |
Website: | https://geoffreychallen.com |
Public Course Materials: | https://learncs.online |
Primary Course Website: | https://cs124.org |
CV: | https://geoffreychallen.com/CV |
Promotional Materials: | https://www.geoffreychallen.com/promotion |
Previous Research Group Website: | https://bluegroup.systems |
Google Scholar Profile: | https://geoffreychallen.com/scholar |
My online CV is always more up-to-date than any paper copy.
Appointments and PreparationAppointments and Preparation
I’m a Teaching Professor at the University of Illinois. My appointment is 60% teaching, 20% scholarship, and 20% service. My focus is teaching at scale.
At this particular moment in computing history, what we need is not more computer power—we need more computer people. My goal is to create courses that excite, train, and retain these new computer scientists. I focus on instructional approaches that can scale to large numbers of students using limited human resources. I apply my own skills as a computer scientist to this task, by building novel tools and systems that create interactive and engaging learning environments.
My CS1 course currently enrolls over 2000 students per year. Since I began teaching the course in Fall 2017, enrollment has doubled, drop rates have fallen, success rates have increased, student performance in later courses has improved, a gender performance gap has disappeared, students are practicing and learning more, the amount of content covered has increased, we have introduced Kotlin as a language option alongside Java, and hundreds of staff members have made contributions that help diversify the voice with which the course speaks.
Previous PositionPrevious Position
From 2011–2017 I worked in mobile systems as a research professor at the University at Buffalo. My research group designed, built, and evaluated novel computer systems. We focused on smartphones, since they represent the most pervasive and powerful distributed system ever deployed. My previous group’s website is the best source of information about my prior research, and includes project descriptions, copies of all of our published papers and funded grant proposals, information about the courses that we created and taught, and details about former group members.
Academic AppointmentsAcademic Appointments
- 2024-: Teaching Professor, University of Illinois
- 2017–2024: Associate Teaching Professor, University of Illinois
- 2011–2017: Assistant Professor, University at Buffalo
Professional PreparationProfessional Preparation
- 2010–2011, Postdoctoral Associate, Massachusetts Institute of Technology (MIT). Supervised by Hari Balakrishnan.
- 2010, Ph.D, Computer Science, Harvard University. Dissertation: “Data Fidelity and Resource Management for Data-Rich Sensor Networks”. Advised by Matt Welsh.
- 2003, AB, Physics, Harvard University.
TeachingTeaching
Over 14 semesters at Illinois I have taught a total of 8,962 students(1). I have focused my efforts on expanding and improving our CS1 course for majors and students with deep interest in the material—previously numbered CS 125 and now CS 124.
Additional information about each course is linked off its main website. Data about student success in each course and detailed student evaluation results available by request. For more details, please review my teaching statement.
OverviewOverview
Only primary teaching assignments are listed.
- Fall 2021–: “CS 124: Introduction to Computer Science I” (Renumbered Course) (University of Illinois)
- Fall 2017–Summer 2021: “CS 125: Introduction to Computer Science” (University of Illinois)
- Fall 2016: “CS 199: How the Internet Works” (New Course) (University at Buffalo)
- Spring 2011–Spring 2017: “CS 421: Introduction to Operating Systems” (University at Buffalo)
Course and Curricular Innovations and ImprovementsCourse and Curricular Innovations and Improvements
Links in the items below are usually to pages on learncs.online
, which contains a publicly-accessible version of the materials and innovations I’ve developed to support my university CS1 course at Illinois, CS 124.
- 2023: Began work adding support for automated test evaluation to our homework autograder
- 2023: Added profiles of diverse computer scientists to our daily lessons as part of a CS People series
- 2022: Integrated debugging exercises throughout our CS1 daily lessons
- 2022: Upgraded our online quiz tool to add improved quiz security features and provide more practice content
- 2022: Made most of our highly-successful CS1 materials publicly available at https://www.learncs.online/
- 2022: Established a successful course staff mentorship program
- 2022: Created a practice page providing students with access to our entire library of over 700 small programming problems
- 2021: Officially introduced Kotlin as a new language option for CS 124, with parallel lessons, content, and assessments running alongside our existing Java materials
- 2021: Created a new tool for generating small debugging challenges, allowing successful student submissions to existing homework problems to generate large numbers of new, interesting, and autogradeable questions
- 2021: Created a series of introductory Kotlin lessons to complement and eventually run side-by-side with our existing Java lessons
- 2020: Developed a new interactive walkthrough format for deploying live coding explanations and soliciting contributions from course staff
- 2020: Created a new online quiz system to support remote Zoom proctoring
- 2020: Restructured CS 125 to support asynchronous instruction in a daily interactive lesson format
- 2020: Designed and developed a new framework accelerating the development of small Java programming problems
- 2020: Created an efficient online help system to support students after CS 125 transitioned online
- 2019: Authored and deployed the first multi-part Android programming project for CS 125
- 2019: Deployed CS 125 on local cloud infrastructure providing enhanced scalability and robustness
- 2019: Developed a new Java and JVM playground backend and toolkit to support interactive programming exercises in CS 125
- 2019: Reauthored our on-demand Git autograder for larger CS 125 assignments to run deployed on Kubernetes
- 2018: Began authoring a large and growing library of small Java homework problems to support CS 125
- 2018: Developed a Java autograder and programming problems for CS 125 quizzes
- 2018: Created on-demand Git autograder for CS 125 assignments
- 2017: Created on-demand Subversion autograder for CS 125 assignments
- 2016: Implemented novel video delivery and tracking systems for internet-class.org, the website supporting a new course on the internet
- 2015–2016: Developed
test161
, a new testing framework for operating system assignments using the OS/161 instructional operating system
Semester-by-Semester DetailsSemester-by-Semester Details
Below I provide a summary of the enrollment for each semester I’ve taught CS1 at Illinois, along with a detailed description of various changes and improvements made to the course each term. Note that we usually try to deploy substantial changes to course materials and infrastructure in the fall.
CS 124: Spring 2023CS 124: Spring 2023
Enrollment: 767 Format: Asynchronous online with both online and in-person support, frequent small assessment Languages: Kotlin, Java
- Added profiles of diverse computer scientists to our daily lessons and weekly quizzes as part of a CS People series.
- Began work on support for adding support for autograding test suites for all of the 700 questions in our problem library.
- Transitioned the course website to a new static site framework to improve login integration and avoid library deprecation.
- Deployed several new code quality analysis features.
- Completed work on Kotlin syntactic feature analysis, achieving parity with Java in preparation for a new feature-based code quality analysis pipeline.
- Began work with Leon Li and Katie Cunningham to analyze data on student usage of online tutoring resources.
CS 124: Fall 2022CS 124: Fall 2022
Enrollment: 1235 Format: Asynchronous online with both online and in-person support, frequent small assessment Languages: Kotlin, Java
- Fully incorporated debugging challenges throughout the daily lessons, alongside an updated set of homework problems.
- Completed work on several new quiz security features, in particular a focus-tracking system that automatically closes a student’s assessment when it loses focus more than a configurable number of times.
- Began work with Rachel Zhou and Luc Paquette on processing data from our daily lessons to analyze how students develop preferences for different instructors.
CS 124: Spring 2022CS 124: Spring 2022
Enrollment: 608 Format: Asynchronous online, frequent small assessment Languages: Kotlin, Java
- Began work on debugging challenges generated from our growing library of student solutions to our homework problems.
- Released our CS1 materials publicly at
learncs.online
. - Improved the staff mentoring program to connect junior and senior course staff members, including involving mentors in staff scheduling to help reduce absenteeism.
- Began work on improved quiz security features to better secure our online assessments.
CS 124: Fall 2021CS 124: Fall 2021
Enrollment: 1288 Co-Instructor: Colleen Lewis Format: Asynchronous online, frequent small assessment Languages: Kotlin, Java
- Introduce Kotlin as a language option alongside Java, requiring the development of a parallel set of lessons, homework, and assessments, and project.
- Colleen Lewis joined as a co-instructor and provided a complete set of alternate explanations for Java-language content.
- Worked with Colleen Lewis to update several course policies, including enabling students to collaborate on homework problems and on the machine project.
- Prepared data collection from the daily lessons to examine how students develop preferences when explanations from multiple instructors are available.
CS 125: Spring 2021CS 125: Spring 2021
(Course website no longer online.)
Enrollment: 523 Format: Asynchronous online, frequent small assessment Language: Java
- Continued improving and stabilizing the systems supporting the new course format launched in Fall 2020.
CS 125: Fall 2020CS 125: Fall 2020
(Course website no longer online.)
Enrollment: 942 Format: Asynchronous online lessons, frequent small assessment Language: Java
- Relaunched the course in a new asynchronous online daily lesson format to support student success during the pandemic, comprising daily interactive lessons integrating text, code playgrounds, interactive walkthroughs, homework problems, and video explanations.
- Deployed a novel homework autograder enabling rapid authoring and accurate evaluation of programming exercises.
- Transitioned to a new quizzing and proctoring tool integrating the homework autograder and multiple-choice questions designed to support efficient and secure online assessment.
- Integrated the online tutoring tool directly into the new course website, further lowering the bar for students to ask questions and receive one-on-one assistance.
- Completed and deployed a new service enabling continuous saving of student work in online code editors, to support student coding on the homework problems and during quizzes.
CS 125: Spring 2020CS 125: Spring 2020
Enrollment: 380 Format: Synchronous online lectures, frequent small assessment Language: Java
- Transitioned the course online mid-semester due to onset of the COVID-19 pandemic.
- Over spring break, completed the first version of our online tutoring site to allow staff to efficiently provide remote support.
- Began preparing for fully-online instruction the next semester.
CS 125: Fall 2019CS 125: Fall 2019
Enrollment: 696 Format: Synchronous lectures, frequent small assessment Language: Java
- Deployed the first iteration of the Android machine project, a multi-part assignment where students build a complete Android app through multiple weekly checkpoints, in a process that more accurately reflects real-world software development.
- Created and deployed our first distributed cloud-native continuous autograder, which we have continued to use to perform on-demand containerized grading of student Android programming assignments.
- Migrated all course backend systems to new server infrastructure running in our own private cloud managed using Kubernetes.
CS 125: Spring 2019CS 125: Spring 2019
Enrollment: 459 Format: Synchronous lectures, frequent small assessment Language: Java
- Began work on an initial version of Jeed as an improved backend for the in-class programming examples embedded in the lecture slides.
- Improved the test suites for the Android programming assignments.
CS 125: Fall 2018CS 125: Fall 2018
Enrollment: 742 Format: Synchronous lectures, frequent small assessment Language: Java
- Created and deployed an initial set of ~60 daily programming exercises to accompany and support the CS 125 course content.
- Wrote an additional ~45 small programming exercises to accompany each weekly assessment, marking the first time that every CS 125 quiz included programming questions.
- Eliminated the high-stakes final exam, completing a transition to frequent small assessment.
- Established a course tutoring center in a dedicated 40-seat room in the basement of the Siebel Center, replacing a woefully undersized office used for the purpose in previous semesters.
- Created several new assignments, including an adapation of a previous photo manipulation assignment to Android, and a molecule-naming assignment using graph traversal, developed with course staff member Ben Nordick.
CS 125: Spring 2018CS 125: Spring 2018
Enrollment: 439 Format: Synchronous lectures, high-stakes assessments Language: Java
- Rewrote all lectures to use interactive online materials and integrate participation tracking and in-class programming examples into classroom presentations.
- Deployed the first version of what became Jeed to support web-based exploration of Java code snippets through safe and high-speed untrusted code execution.
- Completed and deployed continuous assignment autograding.
- Deployed the first CS 125 online gradebook.
- Developed Java autograding support for PrairieLearn to enable programming questions on weekly quizzes, which had previously been entirely multiple-choice questions.
- Introduced Android programming to the course with new labs and assignments.
- Held the first ever CS 125 Project Fair, featuring 165 Android projects developed by teams of students.
- Moved the final exam to the computer testing center (CBTF), enabling autograded programming questions and reducing staff grading burden.
- Updated course development tools, replacing Eclipse with IntelliJ and Subversion with Git and GitHub Classroom.
- Began a course developer program with 10 students working on projects including new assignments, a new project fair, plagiarism detection, and data analysis.
- Created several new assignments on imperative programming, functions, and Android programming using APIs.
CS 125: Fall 2017CS 125: Fall 2017
Enrollment: 698 Co-Instructors: Bill Chapman, Lawrence Angrave Format: Synchronous lectures, high-stakes assessment Language: Java
- Updated course assignments and infrastructure while Bill Chapman and Lawrence Angrave gave the lectures.
- Rewrote and updated all assignments to use a modern build system (Gradle), exhaustive test cases, linter (
checkstyle
), and modern Java idioms. - Rewrote all lab activities to better match course content and use online (rather than printed) materials.
- Designed and deployed a new course website and forum.
- Began work on a continuous Git autograder and online grade return system integrated into the course website.
- Created several new assignments covering photo manipulation, object-oriented programming, and recursion.
- Began work on a fast and safe Java small code execution engine, originally based on the Janino high-speed Java compiler.
University at Buffalo (2011–2016)University at Buffalo (2011–2016)
During my five years at UB I taught a total of 1150 students—an average of 104 per semester—and offered four different courses to beginning undergraduates, advanced undergraduates and graduate students. Despite being extremely challenging and required for undergraduate computer science majors, my course on computer operating systems was among the most popular in the department and a favorite of both graduate and undergraduate students. My graduate seminar on rotating topics in mobile systems attracted a small group of motivated students and recruited sev-eral new Ph.D. students into my group, while giving advanced undergraduates the chance to explore research topics. In Fall 2016 I introduced a new course on the internet to freshman undergraduates.
My UB online teaching portfolio has information about these and other teaching- related activities at UB. I also have copies of a teaching statement and statements of course effectiveness and improvement that I prepared in 2016.
Curriculum DevelopmentCurriculum Development
- 2020–: Led a team of faculty that proposed and passed a significant revision to the core programming sequence at the University of Illinois. The revision created several new courses and improved the accessibility of the computer science degree program for non-majors.
- 2016–2017: Led the Curriculum Development Committee which proposed and passed a significant revision to the undergraduate curriculum at the University at Buffalo. The revision created several new courses and updated several others to overall produce a more relevant and engaging undergraduate degree program.
- 2016: designed and deployed “CS 199: How the Internet Works”, a undergraduate course at the University at Buffalo.
ProjectsProjects
Please see my projects page or my statement on scholarly activites for more details.
-
learncs.online
is the public version of the materials developed to support CS 124—my CS1 course at Illinois. -
Interactive walkthroughs are a novel way to deliver live coding demos online while preserving code interactivity. They’ve also allowed us to create a vibrant and diverse community of instructional voices.
-
Questioner is a novel tool allowing us to write programming exercises 10x faster and more accurately than previous approaches. It leverages the fact that, when authoring homework problems, the solution is known, and can be used to both generate and validate a testing strategy.
-
Code quality autograding allows us to provide students with automated feedback on not just correctness, but also on multiple aspects of quality: linting (format checking), cyclomatic complexity, runtime and memory efficiency, source line counts, dead code detection, and recursion and feature analysis.
-
Autogenerated debugging exercises provide students with nearly-unlimited debugging practice, improving their ability to identify small mistakes, work with unfamiliar code, and apply minimal fixes.
-
Autogenerated testing exercises will provide students with the chance to practice writing test suites. Writing test suites is not only a critical component of software creation, but provides students the opportunity to demonstrate their understanding of a problem, as well as learn to think defensively by anticipate corner cases and problematic inputs.
-
Our online tutoring site efficiently connects students with staff for one-on-one tutoring sessions, and has become a primary way that we support my CS1 course’s asynchronous format.
-
Jeed, the speedy JVM execution and analysis toolkit, is a central component supporting all of our other Java and Kotlin tools. It allows running untrusted code in a secure sandbox 1000 times faster than other approaches, and also supports a large and growing collection of source and bytecode analysis tools.
ServiceService
For more details, please review my service statement.
- 2022–: Published a freely-available public version of my CS1 materials at
learncs.online
. - 2021–2022: Served as the first teaching faculty chair of the teaching faculty hiring committee. Improved our ad and promotional materials, and made significant changes to the hiring process to improve our ability to identify excellent instructors.
- 2021: Helped organize the inaugural Illinois Computer Science Summer Teaching Workshop.
- 2011–present: Service on departmental committees including undergraduate studies, faculty hiring, diversity, curriculum revision, and others.
MentoringMentoring
-
2020– Mentored Assistant Teaching Professor Brad Solomon
-
2020– Mentored Assistant Teaching Professor Michael Nowak
-
2017– Mentored dozens of senior staff members for CS 125/4, and supervised over 2000 undergraduate and graduate course staff
Invited TalksInvited Talks
-
2022: Western Canadian Conference on Computing Education (WCCCE): How the Pandemic (Permanently) Transformed My Teaching (Video, Slides)
-
2022: Illinois Computer science Summer Teaching Workshop (iCSTWS): All the Reasons for Frequent Small Assessment (Video, Slides)
FundingFunding
Earlier grants are listed here.
- 2021–2022: Interactive Code Walkthroughs, $10K from the Grainger College of Engineering through the Strategic Instructional Innovations Program (SIIP). PI with Tiffani Williams and Michael Nowak.
- 2020–2022: Revising the CS Introductory Programming Sequence, $8.5K from the Grainger College of Engineering through the Strategic Instructional Innovations Program (SIIP). Co-PI with Michael Nowak, Carl Evans, Margaret Fleck, Michael Woodley, and Craig Zilles.
- 2017–: CAREER: Harnessing Implementation Flexibility to Enable Runtime Adaptation, $537K from the National Science Foundation. Sole PI.
Prior to 2017Prior to 2017
Prior to 2017 I led the blue Systems Research Group at the University at Buffalo. My previous CV picks up where this one ends.