Reprogramming First-Year Computing

5/9/25 DukEngineer Magazine

Genevieve Lipp is reimagining the way coding is taught by focusing on process.

woman works with table of students on written assignment
Reprogramming First-Year Computing

For years, Computational Methods in Engineering (EGR 103L) has been a hallmark of the first-year engineering curriculum. In the course, an experience shared by students from all prospective Pratt majors, students dove into the fundamentals of numerical methods in Python, skills that would serve them well in the coursework and projects to come in their academic careers. This year, though, marks the introduction of a revamped first-year computing course, dubbed EGR 105L, Computing for Engineers. And while the course name hasn’t changed significantly, it’s clear the method of instruction in the classroom has been transformed.

The First-Year Computing program, directed by Genevieve Lipp, assistant professor of the practice in electrical and computer engineering and mechanical engineering and materials science, was designed to build the foundation of computing success at Duke and beyond.

“The north star of EGR 105 is computing self-efficacy,” Lipp said. “I want students to feel confident in their computing skills and know that those skills will serve them throughout their time at Duke and later in their career. I want them to have no fear.”

This goal is easier said than done. Pratt undergraduates come to the first day of class with broadly varying levels of experience in computing. For many, EGR 105L will be the first opportunity they have had to write a single line of code.

To achieve a high level of proficiency and confidence, one might expect students to be firing up Python as soon as possible. But the reality is far from it, and for good reason. In fact, students don’t write code as an assignment for the first two weeks of the course. In this period, the first major assignment is called the Algorithmic Mini Project, or AMP for short.

genevieve lipp

I want students to feel confident in their computing skills and know that those skills will serve them throughout their time at Duke and later in their career. I want them to have no fear.

Genevieve Lipp Assistant Professor of the Practice of Electrical and Computer Engineering

In this year’s version of the AMP project, students posed as affordable housing developers in the Durham area and, guided by an industry expert, were tasked with developing an algorithm to evaluate a sample property for affordable housing development. A plot of land close to an elementary school, for example, might score highly for a family-housing development, but perhaps less so for individual apartments.

In the end, groups of students didn’t turn in code, but rather an Excel spreadsheet showing the result of their algorithm. They also delivered a written report detailing which property they chose, what development they chose to build on it, and their reasoning behind it—explicit verbalization of their algorithms.

The reason for this approach is simple: to develop a robust way of algorithmic thinking. When students can think critically about a problem, decompose it, and explain how an algorithm would solve it, instructing a computer to help solve the problem becomes a much more intuitive process. As told by Luke LeMaster, current first-year student who took the class in the fall, “It didn’t seem like AMP had a lot to do with coding at all, but as I’ve done some reflecting about the class, I’m now thinking that was probably the most important thing to get down—the algorithmic thinking and problem-solving mode.”

These skills lay the foundation for what Lipp calls the “Seven Steps.” Pioneered by Andrew Hilton, professor of the practice of ECE, the Seven Steps outline a tried-and-true method to approaching any computing problem. Critically, though, the first four happen before laptops are opened.

The method begins with step one: Work an example yourself. This forces students to verbalize the individual steps that they took to get from problem to answer in their heads. This leads naturally into steps two and three: Write down said steps and generalize. Generalization ensures that the method used to solve the problem is not case-specific but can rather be expanded to a variety of similar problems. Step four asks students to test the generalized steps against further example problems. Only then (in step 5!) does the method ask students to translate the algorithm to code. Steps 6 and 7? Test again and debug, of course.

This method gives students a clear roadmap to tackle what can, at first glance, seem like massive and nebulous computational problems.

“In the programming process, you get stuck in all sorts of places, but by breaking it down into these seven steps, if you know which step you’re working on and you know why you’re stuck, you know where to go next,” said Lipp.

In the remainder of the semester, students are immediately given ample opportunity to test their proficiency using the Seven Steps. The last two-thirds of the course is dominated by students’ final projects, real-world computational problems solved in teams. Students are given the choice of five projects, ranging from a numerical simulation of the deorbit of the International Space Station to a complete analysis of sleep study data.

Minerva Tames Mejia, another fall graduate of the new course, got the chance to work on a reaction timer, an integrated device that collects, processes, and visualizes a user’s reaction time to certain visual cues—in the case of Minerva’s group, a heart icon. The device required the use of an Arduino, and with it, a touch of C++ to accomplish the physical aspect of the project. “Seeing your code work, when it’s not just running on a computer, it’s actually doing something physically, it was really rewarding,” she said.

Seeing your code work, when it’s not just running on a computer, it’s actually doing something physically, it was really rewarding.

Minerva Tames Mejia Duke Engineering Sophomore

But the method of computational instruction isn’t the only aspect that separates EGR 105L from its course predecessors. Lipp has instituted a specifications grading policy, where assignments have detailed specifications, and student work is evaluated holistically, with opportunities to revise and meet these competencies.

“Learning is a cycle, and you shouldn’t be penalized for going through the cycle more than once,” Lipp said.

As such, students are allowed opportunities to revise their labs and project submissions, as well as three opportunities to pass each mastery quiz on a “meets expectations” basis. These assignments, along with their class engagement over the course of the semester, contribute to their overall performance, reinforcing true and robust understanding of concepts as opposed to chasing a grade.

A successful attempt at students writing an algorithm for others to follow with Legos.

By the end of just its first semester, it was clear that EGR 105L had a profound impact on its graduates. LeMaster, now studying Fundamentals of Electrical and Computer Engineering (ECE 110L), has seen a tangible benefit from the computation foundation he built in the course. “The professor has told us we can use whatever code we write to solve my exam problem,” LeMaster said. “I can get excited about that now.”

Likewise, Tames Mejia, currently enrolled in Data Structures and Algorithms (COMPSCI 201, taught in JavaScript), expressed thanks for EGR105 in the context of transitioning to a new computing language. “The transition from Python to JavaScript was pretty drastic,” Tames Mejia said. “I don’t think I would understand the code as much as I do now without the fundamental blocks built in EGR105.”

The back-to-basics, intuition-centric approach of EGR 105L is preparing all Pratt undergraduates for success down the line, inside the world of computing and out, and will continue to improve and evolve as Lipp refines the course in the coming semesters.

David Gorman is a senior studying mechanical engineering and minoring in economics.

2025 DukEngineer Magazine