Every two years, the U.S. Bureau of Labor Statistics generates a ten years forward prediction on the labor marketplace. The latest statistics suggest a shift in how we think about computing careers.
The BLS does not actually define the jobs that they predict. The definitions are developed by another department within the U.S. Department of Labor, which polls companies to figure out what their employees do. Here are some definitions relevant to us in computing (thanks to Lauren Csorny, an economist at BLS who prepared these).
Note the distinction between Programmers and Developers. Programmers write code that developers design. Software developers are the "creative minds behind computer programs."
Here is the predicted percent change in these fields, 2010-2020.
What jobs do we want future computing graduates to do? Do we see them as filling the Computer Programmers slot, or the Software Developers slot? It's pretty clear that the growth in programming jobs in the US is pretty anemic, but the developer/designer jobs are going to grow enormously. If we want our graduates to be Software Developers, how should we get there? How should our curricula look different?
The most interesting implications are in what we teach about programming.
- Do designers need to be master programmers? Master programmers need years of experience to develop their expertise. Can we afford that much time, and still get to the design issues that we will want to emphasize? Janet Murray recently considered this question for games and media designers. She points out that the purpose of a designer learning programming is not to get them to build things for themselves — she says that that would dramatically limit the designers. Instead, she wants them to understand how code is created, what it can do, and how flexible it is. However, there are design issues that expert programmers don't get to: "But even expert programmers, especially the self-taught ones, can be ignorant of the key architectural principles that make for good design: information abstraction, modularity, and encapsulation."
- Do designers need to see multiple languages, rather than achieve expertise in one? Eugene Wallingford recently made that argument. We want designers to think about problems in different ways, creatively. "The greatest benefits come from learning different kinds of language. A new language that doesn’t stretch your mind won’t stretch your mind."
Clearly, it will be difficult for any software designer to land a job without programming skills. Andy Begel and Beth Simon did a study of new hires at Microsoft showing that they are hired for their programming skills, but do relatively little programming in their first year. Their job will involve more than programming. Our students' ability to be creative and think broadly is probably more important to success in the software designer/developer role than their mastery of a single language.