Learning to Become a Great Teacher

A Q&A with Northwestern Computer Science assistant professor of instruction Connor Bain

What's the difference between someone who's great in their field and someone who's a great teacher in their field? Do those qualities perfectly overlap? Or are they different?

Connor BainNorthwestern Engineering’s Connor Bain seeks to answer these questions.

Bain joined Northwestern Computer Science (CS) as an assistant professor of instruction in 2021, after earning the first doctoral degree from the joint program in Computer Science and Learning Sciences (CS + LS) through Northwestern’s School of Education and Social Policy (SESP) and the McCormick School of Engineering.

Initially planning to pursue theoretical computer science after graduating from the University of South Carolina with bachelor’s degrees in computer science and mathematics, Bain joined the SESP Learning Sciences PhD program in 2015. He was inspired by Northwestern CS faculty like Uri Wilensky, the Lorraine Morton Professor of Learning Sciences and Computer Science — who would become Bain’s adviser — who was jointly appointed in SESP. Bain transferred to the newly minted CS + LS program two years later.

Northwestern was a natural fit for Bain. Bain’s mother, musician Erin Keefe Bain (SOC ’87), completed an undergraduate degree in Northwestern’s School of Communication. His father, Reginald Bain Sr. (DM ’91, MM ‘86) earned graduate degrees through Northwestern’s Bienen School of Music. Indeed, academia is something of a family vocation. Reginald Bain specializes in computer music and is currently a professor of composition and theory at the University of South Carolina’s School of Music. Connor Bain’s grandfather is a professor of theatre, and his older brother is a physics professor.

Connor Bain’s research focuses on how people learn about computing with a particular emphasis on developing tools and frameworks for teachers to integrate computing into K-12 classrooms.

We asked Connor Bain about his experience working with the Northwestern community both as a student and a faculty member, his short- and long-term research goals, and his motivation for and approach to teaching.

What excites you about working with the Northwestern community?

Three big things. Northwestern is unique in its focus on interdisciplinarity and connections between departments and fields of research. Not only are the academic community members at the faculty level interested in building those connections, but many of the undergraduates and graduate students are also interested in having cross disciplinary experiences.

Second, because I was between the two programs as a graduate student, I forged relationships not only with people in the learning sciences and computer science departments, but also with people at local high schools, both in Chicago and in Evanston. 

Third, the CS department here has an incredibly uncommon focus on teaching. We have one of the larger teaching faculties now, both at Northwestern and in terms of national computer science departments. It's incredibly uncommon to have a group of people that are intensely focused on providing an excellent educational experience at the undergraduate level.

What are some key questions you seek to answer with your work, both in the short-term and the long-term?

My research is mostly focused on integrating computer science into existing curricula. For my dissertation, I worked with high school science teachers to build computer science into their existing coursework, not as a separate component or a separate class that students take.

It's incredibly hard to recruit, train, and keep computer science teachers at the high school level. And it doesn't really make any sense to have computer science be a completely acontextual, extra class when computers are used everywhere.

Long-term, I'm particularly interested in working with teachers to figure out components of their curricula that can be reimagined using computer science ideas. Illinois is one of the few states that require high school students to complete one year of computer science education to graduate. However, this can be satisfied lots of ways. For example, you could take a computer apps class where you learn how to use Microsoft Office or you could take a programming class to learn how to code. What I would like to see is that requirement be infused across curricula so that students have contextualized experiences with computer science. Rather than forcing students to take yet another class, integrate computing across their varied coursework as computers are crucial in nearly every aspect of our lives.

My shorter-term goals mostly focus on my own teaching. I've been teaching a lot of the intro programming classes. This quarter I'm teaching COMP_SCI 111 for the first time, and that's all about getting students familiar with the ideas of what it means to program and how we can express our ideas for the computer to understand us. The other big class that I'm teaching next quarter is for a more general audience — students in majors like journalism, neuroscience, history, or psychology. It's taught in a different language and we're focusing on building blocks of programming rather than building blocks of computer science. I've been focusing a lot on that and trying to figure out how to make both of those enjoyable experiences even though I have very different audiences.

What’s one project you’re currently working on that you’re really excited about?

There are 427 students in my COMP_SCI 111 course, so this quarter has been entirely dedicated to figuring out how to not just emulate the great experience Ian Horswill and Sara Sood have been providing students, but also put my own spin on it. I have been trying to find ways of not only encouraging the students that do well in the class that have a natural affinity for computation or programming, but also figuring out ways of making sure the students who are coming in without any programming experience also have not only a successful experience where they learn something, but a positive experience where they say that it was challenging, but they feel interested in it and want to keep going and take more classes. My goal is trying to make the course both challenging for the people who have experience and growth-minded for the people without prior experience.

Coming in, around 50 percent of the class has programming experience and around 50 percent doesn't. There are a couple main ways we try to bridge that gap. Each week’s programming assignments are all in slightly different contexts. We provide experiences that are challenging but also entertaining and fun, where you can see your work come to fruition. For the last assignment, students take everything they’ve learned and build the game Asteroids. 

I also try to focus on the larger ideas. One of the things that I repeat in class over and over again is that the computer is not smart. We are the smart ones, and all we're doing is taking our thoughts and concretizing them in a way that the computer understands. A computer won't do anything you don't ask it to. I think a lot of students have become so comfortable with technology, they give it agency it doesn't deserve. We can make the computer do interesting things, but we are the ones that make that happen. The computer isn't doing anything by itself, so you have to be crystal clear on what you want the computer to do in order to get it to understand.

There's this idea in programming called rubber duck debugging and it's that you shouldn't write any line of code unless you can explain it in natural language. And I used to tell students to talk to their roommate or talk to the person next to them in class. Make sure that you can explain what you're trying to program in your thinking language before you try to type it out on your computer. This quarter I tried something new. I gave everyone a rubber duck and said ‘You shouldn't be writing anything down that you can't explain to this duck.’ I encouraged them all to give their rubber duck a name. They could bring it with them to exams. It's fun and a reminder that what we're doing isn't just writing down stuff that doesn't make any sense, or doesn't have any meaning, we're just expressing ideas that we already had in a different way.

What motivated you to pursue your field of research?

I grew up around a lot of people who like learning and teaching. We interacted with people by explaining things and by learning and being interested and curious about things.

I've always been interested in how people learn, and I quickly became fascinated by the idea that being an expert in a field does not immediately correlate with being an expert teacher in your field. But why? If you have an expert level understanding of something, why wouldn't you be able to explain it to another person in a perfect way? If you understand every part of an idea, then there shouldn't be any sort of roadblock between you explaining it to a relative novice in that field and getting them to your level of understanding. But that's not how it works, so that was the driving question. What makes a teacher good? What extra things does a teacher need to know about something to make them an expert pedagogue? What sorts of frameworks or tools can we develop for teachers to help them understand, for instance, how are students thinking about something and figuring it out?

I'm obviously not an unbiased third party here, but I think programming is an excellent way of forcing you to re-express what you know in a different way and, through that process of concretizing what's in your head into something the computer can understand, you're also transforming your way of thinking about it. The computer understands one thing, I understand one thing, we have a language with which we communicate, and we’ve got to figure out how to do it. And I see teaching work the same way.

How do you approach the mentorship of your students, and how are you inspired by your interactions with students and trainees?

When I got to college and I was doing my degree in computer science, I found that so often computer science classes wrote off the understanding portion of things and instead focused on the “here's what we know” portion of things. I saw that the field was ignoring those things and saying the students can figure that out, rather than presenting ways of helping them figure those things out.

Teaching introductory classes, I see a lot of first-year students who come from schools that did not offer any sort of computer science coursework. Just as an artist must practice with different tools or a musician must build a relationship with their instrument, students need time to become comfortable with computation—not just with the ideas of programming but also with the actual computer itself. Using a piece of technology every day doesn’t mean you’re able to step out of your typical usage pattern and immediately dive into its inner workings. We often assign so much agency and intelligence to computers, which is why I try my best to drive this point home that “the computer doesn’t bring the smarts, you do.” Battling these preconceptions of what computation looks like and who can be a computer scientist has been really challenging.

My favorite thing is when I'm in office hours with someone and they have a breakthrough — not of getting a problem right — but a breakthrough on a way of going about something or a way of how to learn the next thing. The students that come seek help and ask questions, that's what gets me out of bed in the morning, so to speak, because those people are trying to figure out how to blaze their own path in that learning trail. And it's not so much getting the next piece of the checklist checked off, but how do they develop this skill so that they can keep moving and build this momentum in their educational experience?


McCormick News Article