We need to produce far more software developers than programmers: How do we change?
At the PACE meeting two weeks ago, we heard a presentation from Lauren Csorny, an economist with the US Bureau of Labor Statistics. She did a wonderful job, tailoring the results of the recent 10 year predictions to focus on computing.
Here’s the first and most important table: How BLS defines these jobs. The BLS doesn’t get to actually define the jobs — someone else in the Department of Labor does that. BLS counts employment within those occupation definitions.
Note carefully the distinction between Programmers and Developers! That’s a key distinction in terms of the predictions. Programmers write code that developers design. Software developers are the “creative minds behind computer programs.”
Here are predictions in terms of percentages of job growth:
The market for computer programmers is going to grow more slowly than the rest of the economy. Software developers (for both systems software and applications) are going to grow enormously fast. (Yes, grouping “Information security analysts, web developers, and computer network architects” into one job is crazy — they realize that, and that will likely be broken out in the next prediction in 2014.)
The BLS data give us a little more fine-grained view into the job growth vs. replacing existing employees in each of these categories:
Over the next ten years, there will certainly be the need to replace workers (due to age, or moving into a new category of job). But the greatest growth is in software developers. Programmers will have more replacement than growth. There will be growth (i.e., new jobs that don’t exist yet) among Software Developers.
I’ve been thinking about what these predictions mean for Computer Science. Should we be thinking about vocational concerns when considering the content of a degree program? We need to consider whether we’re preparing students for the future, for their future, and about the needs and opportunities that we can predict.
What do we want computer science graduates to do? Do we see them as filling the Computer Programmers slot, or the Software Developers slot? If CS wants to give up on the Software Developers slot, I’ll bet that IS or IT or even these new Information degree graduates would be willing to take those job.
If we in CS want to create Software Developers, how? What should we do? And how should educating Software Developers look different than educating Computer Programmers? Some specific questions:
- Do we need to teach software developers programming? I strongly believe that one can’t learn to design without learn something about one’s materials — you can’t learn to design software if you’ve never programmed software. But I’m willing to admit that I don’t have evidence for this, other than analogy. Architects learn something about strength of materials and civil engineering, but those are different degrees — the design of buildings versus the construction of buildings. But it probably depends on the kind of software developer, too. Systems software developers need to understand lower-level details than application software developers (a distinction in the BLS categories).
- Do we need to produce expert programmers? In our program here at Georgia Tech, and at many other degree programs I’ll bet, we have an explicit goal to produce graduates who have some level of expertise in coding. We teach Java in so many classes, in part, to produce excellent Java programmers. Is that important, if the programmer job is the one that is going to grow more slowly, and we have such an enormous need for software developers?
- Do we need to teach how to make data structures, or how to use them? Is it important to learn how to make linked lists and trees, or just how to use them and what their differences are? This has been a question for a long time in the SIGCSE community, and these job predictions make an argument that the low-level skills are more specialized and less generally useful now.
- Do we teach one language/paradigm, or many? The BLS predictions suggest to me, even more strongly, that we are doing our students harm by only showing them one language or style of language. “Creative minds” know more than one way to think about a problem.
We might decide that the BLS data are not relevant for us. Andy Begel and Beth Simon did a really interesting study of new hires at Microsoft, and came away with a picture of what new software engineers do — a picture in sharp contrast with what we teach in our classes. In the four years since that study came out, I haven’t heard much discussion about changing curricula to address their issues. CS2013 may have a better chance at shaking up how we think about computer science curricula.