Working with interns and recent graduates over the years, I’ve noticed that while traditional computer science programs produce students who understand algorithms and data structures, they are less successful at generating graduates who are ready to develop production code. Enterprises don’t expect to hire newly hatched developers who can jump in the deep end right away, but universities could better prepare their students to swim before tossing them in that deep end.
Software development is unique in that developers are both the architects and the construction crew for their projects. There are very few industries where the same people both design and build. While universities teach graduates about the fundamentals of architecture, they often don’t teach construction fundamentals.
Here are three areas where computer science programs could improve.
1. Break it down
The biggest challenge I see for new graduates is that they are inexperienced in breaking down large problems into smaller, more easily solved chunks. Most of their coding experience during college is from homework assignments that were carefully crafted to teach a single, fundamental lesson. Although important, assignments focused on tightly defined problems don’t help students learn how to decompose a large problem into manageable chunks.
Students I’ve interviewed from game development schools such as Digipen Institute of Technology and Full Sail University are frequently more accomplished in this area because their degree programs integrate a project spanning multiple semesters into the curriculum. For universities, introducing a senior project as a graduate requirement the same way trade schools do would be a good step toward teaching graduates how to work on larger problems. Students would be much better prepared for working in the enterprise if they learned to deconstruct complex problems while in college with the support of their experienced professors.
2. Misery is other people
Narrowly focused homework assignments have another side effect: They do not give students practice in learning how to code with other people. Software development is a team sport, but academic coding rarely exposes students to that aspect. Traditional CS programs do have group projects, but the scope is usually limited enough that one or two people do the lion’s share of the work while the others coast (according to my interns).
With small group projects, students don’t learn to decompose large problems so that multiple people can work together, and they don’t learn how to track work across multiple developers. This again is an area where game development schools excel; most schools require a long-term game development project to graduate. Graduates from these schools are frequently well-versed in basic Agile development principles and task-tracking, making it easy to slot them into development teams.
These projects force students to learn not only how to decompose problems so that multiple people can work on them, but also how to communicate about development. Much of the daily life of a software developer involves talking with others about the best way to solve a problem. That’s a skill you cannot develop working by yourself.
3. Misery is other people’s code
Learning to talk about software problems is essential, but a bigger challenge is learning how to read and decipher other people’s code. Homework problems frequently require students to compose entirely new code by themselves, so they don’t develop strategies for reading other people’s code. The isolation also causes them to develop coding behaviors that are challenging when working with other developers. Unnecessarily creative indenting strategies, for example, are sure to frustrate their future colleagues.
Given that so much of developers’ work is about modifying existing code they didn’t write, it’s important to expose students to this world. Long-term group projects are a viable solution to this problem, but even requiring students to use or modify open source libraries will help expose them to other coding styles and will help them learn to read code. Trade schools, specifically game development schools, introduce their students to various game engines and APIs for tools such as Maya and 3DS Max. Working with these APIs, again with the guidance of their professors, teaches students how to learn and work with new technologies, a critical skill when they go into industry.
In software development, there is no replacement for experience. Ensuring that students get a taste of real-world software development while their professors and peers are there to support them could go a long way to setting students up for success in their careers. Many computer science programs are wary of becoming programmer puppy mills, but their graduates don’t always leave with the software development survival skills they need. Exposing students to the craft of software development as well as the theory behind it is critical for producing graduates who will succeed in the enterprise software development world.
Matt Attaway is the VP of Community Support at Perforce Software. As a 15-year Perforce veteran, he has been part of the QA, development, tech support, and R&D teams. Matt specializes in version management best practices and software pipeline development.