Computer science students are on the ‘right track’

Two trains are chugging down the track, on their way to destinations unknown. Suddenly, one of the engineers notices a hog on the track ahead, seemingly oblivious to the looming locomotive. The engineer needs to switch tracks to avoid the hog, yet that will put his train on the same track as the oncoming locomotive. Will the hog move in time? Will the trains collide? If the software designed and programmed by students in the Real-Time Embedded Systems course did their part correctly, the hog and trains will be safe.

A little-known gem in Wright Hall on the UNI campus is the Real-Time Embedded Systems Laboratory, also known as the train lab. The lab has computer-controlled model railroad trains that chug along 233 feet of track.

Computer science professor John McCormick, who teaches Real-Time Embedded Systems, uses the lab to teach students how to construct, program and debug real-time embedded systems.

An embedded system is a computer that’s inside another device, such as a train, plane or microwave. In fact, more than 99 percent of all computers built today are embedded in other products.

“Working in the lab gives students a more comprehensive understanding of how to program devices containing embedded chips and do so in real time," said McCormick.

At the beginning of the semester, McCormick puts students in groups of three, being careful to balance each team’s knowledge and skills in computer programming, electronics, testing and writing so students can learn from one another. 

Each team must create software to run multiple trains without collision, have at least one train controlled by a human engineer, and detect and recover from equipment failures, such as tracks that don’t switch to accommodate oncoming trains or cars that uncouple. If nothing fails, McCormick has been known to crawl under the table that holds the track and pull a wire or two so something does fail. By encountering failure in the lab, students learn to investigate what went wrong, why and how to fix it.

“Employers are looking for hands-on experience, not just theoretical knowledge,” said McCormick. Other universities in the state have software engineering courses, but UNI is the only one with a train lab.

In addition to computer-related skills, students also learn the critical nature of clear communication and teamwork. No matter what the setting, McCormick said, “More failure is attributed to team interaction problems – personal conflicts – than anything else. We’re long past the days when software is designed by a single person. Students need to learn to work together to be successful.”

Sean Fredericksen, a senior computer science major from Clinton, completed the Real-Time Embedded Systems course in spring 2011. He found the class and his work in the train lab to be life changing.

“I didn’t have a good idea of what I wanted to do after graduation. Taking this course opened me up to an area I didn’t know about and gave me a good direction,” said Frederickson, who now wants to pursue a software engineering job after he graduates in December. 

“In other courses, you write programs to run on desktops. In this course, you write programs to run model trains. Anyone who’s interested in software engineering will find this to be a good experience.”

See the train in action at

Train Lab