Software developers are notoriously opinionated, but there’s one thing all corporate coders can agree upon: College doesn’t always prepare newcomers for the real-world experience of writing software on a team.

Armando Fox and David Patterson, two computer science professors at the University of California, Berkeley, discovered this unspoken agreement when they interviewed enterprise developers to find out what they wanted from new graduates.

(Related: and the College Board push for nationwide computer science education)

The resounding reply, according to an article published by Fox and Patterson in the Communications of the ACM in May 2012, was that fresh college graduates were not equipped to deal with corporate development scenarios. In effect, the enterprises were asking for students that understood how to dive into an existing application’s codebase, then modify, fix or otherwise work with it.

That’s a bit of a different chore than the typical computer science fare, where students are called upon to write something like a spell-checker or word processor from scratch in C, Java or Python.

Armando Fox

Armando Fox

“We asked, ‘Where are the gaps?’ They all said that legacy code was the No. 1 gap,” said Fox. “That’s not a topic that gets a lot of time in computer science. They talk about how bad legacy code is, and how if you follow good coding practices you’ll be OK. But that’s a myth; even if it’s good code, knowing your change didn’t break something else is difficult.”

After publishing their paper, Fox unveiled a newly designed computer engineering course at UC Berkeley based on his research. This new course would be about software development within a life cycle, and it would utilize the types of tools students would likely find in an enterprise setting.

“We have a homework assignment: Take 10 or 12 thousand lines of existing code, add this feature, and deploy it when you’re done. Then you have to document the change,” said Fox.

Instead of teaching just the language or giving in to the temptation to teach mobile application development, Fox’s class is about the tooling. Students write requirements descriptions with Cucumber, build their applications with Ruby on Rails, construct unit tests with Rspec, and even learn how to ask a proper question on Stack Overflow.

The success of the requirements-gathering language, Cucumber, has been the biggest surprise for Fox. “Cucumber has been awesome,” he said. “We were afraid it would be difficult to get students to buy in. They’ve never seen things like Cucumber before, but to our surprise the students embraced it almost immediately.

“The way Berkeley’s curriculum is set up, students have learned some Python and C and some Java when they get to me. We realized this is another language (Ruby). The reason we chose Rails is because we wanted to teach students how to do good agile software engineering. The best tools for supporting that are in the Rails ecosystem, though Python is starting to catch up.”

Fox said that he considered mobile development as a way to teach agility, but he found that teaching Android or iOS development ended up being too focused on learning the frameworks and quirks of the OSes, rather than building the application outright.

The benefits of Fox’s classes are not limited to Berkeley students, however. There’s a free version online: a massively open online course that covers the class’ topics and utilizes the same tools as the in-class version.

Has the class been a success? When Fox first offered it in 2012 he had around 50 students. This past spring he had 250, with a waiting list of an additional 140. And the online courses are even larger. He said his techniques have been duplicated in other computer science programs, and the success seems to be replicated as well.

“Demand for the course is high,” said Fox. “A number of other instructors who’ve adapted our materials…have students busting the doors down to take the course.”