Software engineering is increasingly recognized as a separate discipline from computer science, but it is often learned on the job. Universities are creating programs to prepare students for jobs developing large-scale software, but many students have misconceptions that hinder their transition to the workplace.
To systematically probe what software engineering undergraduates think will matter in their jobs, computer science graduate students Leigh Ann Sudol and Ciera Jaspan surveyed undergraduates at Carnegie Mellon University. Their results, "Analyzing the Strength of Undergraduate Misconceptions About Software Engineering," explore both the students' misconceptions and how their views evolve as they gain experience. Their paper was presented at the 2010 International Workshop on Computing Education Research.
Their first step was collecting statements that are plausible but judged by experts to be wrong. From a longer list created by graduate students and professors at Carnegie Mellon, Sudol and Jaspan selected twelve such misconceptions, including "My code should take advantage of the implementation details in other code" and "A good software developer will often choose to work alone on a project in order to get it done faster." They validated their selections by giving 45 industry professionals the same survey.
This shorter, validated list was an essential element, according to Mark Guzdial, a professor of computing at Georgia Institute of Technology, who highlighted the paper in the post on his Computing Education Blog. "They had to go to some length to come up with statements that the body of the software-engineering faculty would all agree with," Guzdial says. "There's a good deal of work to be done yet to establish what it is that we want students to know about software engineering."
Sudol then drew on her background in education research to design a web-based survey that forced students to choose between two statements, and also timed their responses. For each question, the survey paired a misconception with the opposite of another misconception, with each statement appearing in several pairs. Statements that were repeatedly chosen, or whose opposites were repeatedly rejected, were judged to be strongly believed, as did a rapid response. "The forced-choice survey gave us a great way to measure misconceptions in a very quick situation," Sudol says. "Most students answered each question within 10 or 15 seconds."
One common misconception was that it is good to exploit fine details of implementation, rather than ensuring that different program blocks work independently through well-defined interfaces. Fortunately, this misconception was less prevalent in students in later years and those who took advanced courses.
Students also took a dim view of teamwork. Surprisingly, this misconception was stronger for students who had taken advanced courses that involved team projects. The researchers speculate that the artificial environment, limited scope and tight schedule of the class projects represent a "very impoverished model" of the real world. "It could be that students are recognizing that this is not actually how industry is like," says Jaspan. Students who had taken two or three internships, fortunately, were less likely to hold this misconception.
The lack of appreciation for teamwork and "soft," people-oriented skills mirrors earlier research of first-year engineering students, "Software Engineers and Engineering: A Survey of Undergraduate Preconceptions," by colleagues in the Department of Computing at Curtin University of Technology, Perth, Australia. Coauthor Michael Robey says that working software engineers report spending only a tenth of their time coding, with the rest devoted to working with coworkers and clients to work out how best to do the job. "If you're someone who doesn't like programming, this just means 10 percent of your job is going to be something you're not going to like," Robey says. "If you like problem solving, if you like dealing with people, this is for you."