By Andrew J. Ko, Associate Professor, University of Washington and Susanne Hambrusch, Professor, Purdue University
Anyone reading technology news knows that the number of software job openings is at an all-time high. And this is not likely to slow, with software continuing to disrupt industries, creating new markets and new demands for coding skills. The increased job opportunities appear to be the main driver of the dramatic increase in students enrolling in computer science in college, increased interest in middle and high school coding camps, increased demand for online courses, growing demand at community colleges, and an explosion of fee-based coding bootcamps.
To fill the available jobs with skilled software developers, learners need to actually be learning. Unfortunately, recent research shows that many students simply aren’t. For example, a 2004 study conducted across seven countries and 12 universities found that even after passing college-level introductory programming courses, the majority of students could not predict the output of even basic computer programs. In some of our research on coding bootcamps, we are seeing similar trends, with students failing to learn and failing to get jobs.
If learning outcomes are as bad as these studies show, we need to be deeply concerned. Existing and new programs may be training tens of thousands of new software developers who aren't quite good enough to get even an entry level position. This leaves the status quo of top companies fighting over top coders, leaving many jobs unfilled while they wait for more skilled developers. Worse yet, the demand for developers may be so high that they do get jobs, but write poor-quality code, putting at risk the software-based infrastructure that society increasingly needs to be robust, secure, and usable.
Why are students failing to learn? Our best evidence shows that learning to code is hard, and teaching coding effectively is even harder. We know very little about how coders learn to code, how to effectively teach coding, and how to reliably assess coding skills. But software jobs require more than coding, including problem solving, design, and communication skills. Not only do we not know how to teach these skills well—we don’t know how to teach them across K-12, college, or post-college levels. We also don’t know how to teach them to increasingly diverse audiences that include students with backgrounds in science, engineering, and other subjects that now rely on computing. Worse yet, what little we do know about how to teach computing isn’t finding its way to educators, since most computer science teachers get no formal training.
What can we do about this? These same challenges used to occur in other subjects, like math and physics. Federal governments invested in decades of basic research to understand how those subjects can be learned and taught, which ultimately led to better learning outcomes. They also invested in education programs to disseminate this research to educators, ensuring that teachers had the right skills and the right knowledge to teach math and physics well to all ages.
Now we need to invest in computing education research. There is only limited funding for this research from the National Science Foundation and almost no support from industry. With increased funding, researchers will begin to systematically investigate student learning, inventing new ways to teach computing that are substantially more effective than current practices. For example, recent discoveries have developed example programs that are used by learners to better structure and guide their problem solving. Our labs are investigating educational technologies to teach programming languages more rapidly and effectively than lectures or textbooks. Other labs are inventing ways to teach computing that work equally well for learners of diverse genders, races, backgrounds, and abilities.
If we can build a strong evidence base for how to learn and teach computing, we will not only reinvent how students in K-12 schools and colleges learn, but we’ll also improve how adults retrain and effectively learn new skills. These efforts are thus essential in addressing the increasing software jobs shortage, keeping developers’ skills current, and keeping the global economy growing.