Software engineering has again become among the most highly rated fields of endeavor, based on a number of forecasts for 2011. But Bruce Douglass, chief evangelist for IBM Rational, said that college students are not being taught the life skills necessary for gaining a competitive advantage in the field.

Douglass said he has observed this in visits to customers, and he thinks that software engineering students in schools should be taught collaborative methods, project planning and project management, as well as “agile methods, modeling [like UML and SML], and the economics of project management [what it means to start a project and how to innovate].”

Professors at Marist College, the Stevens Institute of Technology and Drew University all had different ideas on how to combat this issue. Some offer real-world projects. Others simulate actual problem sets. And still others have advisory councils of vendors to preside over the curriculum decisions.

Professors need to teach students “the importance of distributed, collaborative teams and the 24/7 work schedule that students often have to deal with now” that they are in the workforce, Douglass said. He added that students also need to understand the human factor of users interacting with systems and programs, instead of just learning how to maintain and create code.

William Thirsk, vice president and CIO at Marist College in Poughkeepsie, N.Y., said the college works with “captains of industry” to form an advisory board to discuss the direction of the curriculum. The college also teaches agile methods to help students understand the new workplace environment.

“We speak with hardware and software vendors (IBM, Cisco) to ask them what the students should learn. We meet twice a year to discuss changes,” Thirsk said.

He added that Marist offers “virtual management courses,” which prepare students to compete globally by offering training in collaboration tools (such as wiki boards) and in development tools to learn how to maintain teams, push code along and generate reports for other members of the team. They also use open-source programs in their classes, something Barry Burd, a professor at Drew University in Madison, N.J., agrees with.

“We tend to use agility methods and give our students practice with applications from outside clients,” he said. “Agile is not a hard and fast rule for the college. It’s taught by professor preference. Students get to do about five projects [five semester-long courses] in their undergraduate education. Most projects are created for small-business companies that are located around the college.”

A working example
Larry Bernstein, a professor at the Stevens Institute of Technology in Newark, N.J., and co-author of “Trustworthy Systems Through Quantitative Software Engineering,” created a test program about 10 years ago called a “live-through case history.” This class taught students how to work in groups, adapt as groups changed due to “promotions” or “sick days,” and dive into someone else’s code or application to fix a problem.

“On the first day, I gave them a problem and then they had work through it throughout the system,” Bernstein said. His case-study problems came from his contacts in the software industry (he was a development manager at Bell Labs before becoming a professor).

“Real-life experience [for a professor] is important,” Bernstein said. He believes the point in this type of class is not to get the product working—because that doesn’t always happen—but to teach students how to work together, write and present their findings, and understand that the people they are working for are not all familiar with the inner workings of code.

“To teachers, it is a taboo to produce something that doesn’t work at the end of a semester,” Bernstein said. “But you learn from failure.”

Douglass said students also need to learn that dependability is important, something Bernstein combats early in the semester. Bernstein tells students that they will fail if they don’t solve a sample software problem. “By March they learn that they won’t fail, but they’re motivated,” he said.

Internships can sometimes provide this real-life experience, but they often don’t as interns are often given the work no one else wants to do, Douglass said, such as administrative tasks that do not allow students to deal with code.

Bernstein added that internships are useful, but they don’t teach the business of software engineering: presenting findings, working with clients, and collaboration skills.  

Bernstein’s test program also included video reviews of students’ projects at the end of the semester, and their written reports were graded by a former English teacher, C.M. Yuhas (who is also Bernstein’s wife and co-author of their book). She critiqued their videos to show them how to take all of the coding out of their presentations and make it easier for other members of the team, beyond the developers, to understand.