EECS 111 Brings Programming to All Majors

The most popular programming class with non-majors has more than 300 students.

Ian Horswill

To the untrained eye, computer code can look like a muddled mess of slashes, brackets, and abbreviated words. But to Northwestern Engineering’s Ian Horswill, it is beautiful.

“Programmers spend a lot of time talking about beautiful code and ugly code,” said Horswill, professor of electrical engineering and computer science (EECS). “It’s because aesthetics actually has functional consequences in computer science.”

In EECS 111: Fundamentals of Computer Programming, Horswill and his colleagues teach students from across the University not just how to write code that works — but how to write code that is clear and concise, easy to comprehend, and elegant.

“I wanted to make a course that was about ideas rather than punctuation marks,” Horswill said. “A lot of software development is actually about human psychology. We have to write programs in a way that humans can understand. But that often gets lost in the rush to explain all the punctuation marks.”

Ian Horswill

An introductory course to computer programming, EECS 111 is required for all computer science majors but is also Northwestern Engineering’s most popular class for non-majors. This fall, the class exceeded 300 students after the drop date — making it one of the largest courses in the University — and the proportion of non-majors grows every quarter.

“Programming has moved into many fields beyond computer science,” said Sara Sood, a clinical associate professor in EECS, who will teach the course this winter. “It has become necessary to have at least a basic introduction. More students are thinking of it as a skill to have in their toolbox.”

With the influx of big data, people with programming skills are needed in a range of areas, including the humanities, finance, and athletics, to find meaningful information and trends within the slog of numbers. Entrepreneurs are also interested in learning programming with hopes of creating the next big app. Students are drawn to having this all-important skill in their back pocket as well as to the promise of being able to develop new and exciting projects on a whim.

“Computer science allows you to build things,” said freshman Anna Furlong, who is studying math and computer science. “You can come up with an idea, spend an afternoon coding, and have a prototype quickly. Anything is possible.”

Sara Sood

“I love computer science because it is a perfect blend of logic and creativity,” said Kinsey Erickson, a freshman in the Weinberg College of Arts and Sciences, who is undecided about her major but interested in social science and the humanities. “It requires you to problem solve and think outside the box.”

Horswill and Sood teach their students programming skills by challenging them to design simple tools and games with Racket, a general-purpose programming language. Students also learn how to diagnose problems and find and fix bugs within the code.

Teaching a class of more than 300 students might seem unwieldy, but Horswill and Sood have found ways to manage the numbers. In past quarters, students met in discussion groups with a teaching assistant, but those sections were still overwhelmed with 80 students. Thanks to funding from Charlene and Bob Shaw (’70), the department was able to hire 18 peer mentors to lead small tutorials with just six students. The department also introduced an advanced section for students who enter the class with programming experience.

“Those large sections tended to be a passive experience for students,” Horswill said. “Now they can work on a project with a peer mentor there to help them right away if they run into problems. So they don’t just stare at the screen when they get stuck, which can easily happen if you're working on your own.”

When students leave EECS 111, Horswill and Sood hope they have gained debugging skills and the ability to write code that is comprehensible and even beautiful.

“Beautiful code is easy to follow,” Horswill said. “If your code is a complicated mess that you can't wrap your head around, then you can never trust it entirely. Clear and concise code is easy to fix, easy to test, and easy to modify. You can trust it.”