This Professor's Mission is to Make MSCS Students Better Programmers

Harold Connamacher is an associate professor at Case Western Reserve University

Effective instruction requires more than mastery of the material being taught. Transformative teaching—the kind that changes students' lives—requires a teacher as committed to pedagogy as to the course subject.

Associate Professor Harold Connamacher is just such a teacher. Connamacher's commitment to "trying to figure out the proper pedagogy to teach students" earned him Case Western Reserve University’s Carl F. Wittke Award for Excellence in Undergraduate Teaching in 2019. This year, Connamacher was named the Robert J. Herbold Professor of Transformative Teaching, the university’s first endowed professorship explicitly committed to innovative and effective teaching. Herbold—a former Microsoft COO and Case Western Reserve graduate—noted Connamacher's "amazing rapport with the students" and "customer-focused approach to teaching that creates curiosity."

Connamacher is equally committed to cutting-edge computer science research as to effective instruction. His areas of specialization include algorithms, random structures, graph theory, and constraint satisfaction problems. Although his work explores the theoretical realm, Connamacher also brings a decade of real-world experience as a software engineer and project manager across several tech startups to his teaching. His first course in Case Western Reserve University's Online Master of Science in Computer Science (MSCS) is "Programming Language Concepts."

We sat down with Connamacher to discuss his course, the online computer science master's program, and the opportunities created by online degree programs.

In reviewing your career for this conversation, I was taken by the diversity of your areas of interest. Your work covers both theoretical and practical inquiry.

My area of expertise and research involves applying theoretical tools to solve problems. I have a lot of interest in programming as well, and, in fact, I'm teaching a programming course in the online program. My other area of expertise is in education. I'm interested in trying to figure out the proper pedagogy to teach students.

When you get your PhD, learning how to teach is not really part of our education. You have to seek it out, and there are many conflicting views out there on how best to teach. Even when an approach works well, it's not always easy to tease out the cause. Is it the technique making it work, or is it the teacher's enthusiasm, which is an integral part of teaching? It's a rich and fascinating area of inquiry.

My academic research training is in the theoretical side. However, I spent a decade in the industry, so I have that practical side, which influences how I teach.

You teach a course on programming language concepts. Will that lean more toward theory or practical applications?

The class I teach in the online program, "Programming Language Concepts," is very theoretical, but I'm also using it to explore how you use programming languages in practice because my goal is to make the students better programmers in the end. Some people who take the class will go into research. They'll create better programming languages and better ways to use programming languages. However, most students aren't going to be doing that. They'll take the class to better understand the strengths and weaknesses of a particular programming language.

The class will employ a combination of recorded lectures and programming tasks that students will view and complete on their own time. Then we'll meet in online live sessions, which consist of discussions and activities that reinforce the pre-recorded material. During the live online classes, students are given problems to work through in discussion groups with fellow students. Then I'll present the solution, so they can see how their thought process compares to mine.

I encourage as much active learning as possible. We have students in different time zones, so I build bulletin boards where students can work on problems, comment on each other's solutions, get hints from and give hints to each other, and connect. There are also knowledge-check quizzes to ensure students understand the lectures.

In class, we discuss how the features of a programming language impact the way programmers think about problems. Many students learn one or two languages, and they think in terms of those languages. They become hamstrung by the language, boxed into the rules they've learned and not thinking beyond that. We want to break them of that habit. We want them to think about how to solve the problem in an arbitrary programming language and then figure out how to use a particular programming language's strengths to attack the problem.

How is teaching online students different from teaching in a live classroom?

The goal in teaching is to figure out the best way to get students to learn the material. That remains constant whether you're teaching on-campus or online. The difference is the constraints.

This last year, with the COVID pandemic, provided an excellent opportunity to learn how to teach online. I would try different things, see how they worked, and query the students for their feedback. That gets tricky because sometimes what students like isn't what ultimately produces the best results (as reflected in assessments and in-class participation).

In my classes—and no doubt, in the others as well—students complete challenging assignments. Those assignments are designed to expose students to the real intricacies of programming and help them push their understanding. I don't assign busywork. The coursework in my class is terraced so that each lesson builds on the skills and knowledge you develop in previous lessons. What starts out as a simple exercise grows steadily more challenging, and, in the end, you'll be forced to think outside the material.

You have to make accommodations for online learning. The lectures are shorter and more condensed, for one thing. They cover the same material but without all the question-and-answer period and other discussions you spend time on in an in-person class. Also, the lectures are divided into shorter segments, maybe 10 to 15 minutes long (which covers what would maybe take 25 to 30 minutes to cover in an in-person class). That makes it easier for students to watch it and then watch it again if they have to go back and review. Because students work on assignments on their own, you need to pose questions that are challenging while still providing a way for them to find the answers—so you can continue on to the next question.

I'm also building a community of learning online that works the way my in-person classes have in the past. That means breaking students into small groups to solve problems, then returning to the larger group to discuss the solution and compare thought processes. The community aspect is essential. In graduate school, you need the support of everyone around you, helping you through.

It's an exciting challenge for those of us interested in the process of teaching, designing lessons that provide students the resources they need but still requiring them to find the answers themselves. Fortunately, most of our students have computer science backgrounds. They have a skill set that enables them to jump in and get going. These are self-motivated students.

A student asks why they should choose the online program at Case Western Reserve. What do you say?

Not everyone can make it to in-person classes, for one. This allows people to get a graduate degree on their timeframe, which will be really helpful for people who have full-time jobs. I'd also say that this is going to be very interactive. We're trying to build the same environment online that students would experience on-campus.

Also, our program originates in a computer science/data science department; we're not just computer science. That makes the program unique and adds value, because we feature aspects of the emerging field of data science within our computer science curriculum.

You can complete your Case Western Reserve online MSCS over five semesters, all while continuing to work full time. The program offers flexible learning to facilitate your busy schedule. Study anywhere and anytime you can access an internet connection. An experiential curriculum stressing hands-on learning promotes active, engaged learning led by research and teaching leaders in their fields.

Still have questions about admission, financial aid, or degree requirements? Contact us by using our request information option. Ready to get started on your master's in computer science? Apply today.

What to Read Next

A woman works from home on her laptop.

Should You Get a Part-Time Master's in Computer Science? How to Decide.

Soumya Ray, faculty member of CWRU’s Online Master of Science in Computer Science program.

Soumya Ray: How Can Artificial Intelligence Improve Medicine?