Code.org has been getting some great press, and rightfully so: it’s full of great videos, great stats, and great resources. I also think it has a great mission: there are hundreds of thousands of businesses who need talented software developers in order to grow and provide value, but these businesses can’t find the engineers they need. Moreover, people need jobs and software development jobs are abundant and high quality. Hence the need for more students, more teachers, and more classes in computing. Win, win, right?
I don’t think so. I do believe in this mission. I do research on this mission. I feel strongly that if we don’t massively increase the number of teachers in computing, we’ll get nowhere. But I don’t think that by simply increasing the number of people who can code, we’ll address this gap. This is because the problem, as code.org frames it, is one of quantity, where as the problem is actually about quality.
To put it simply, companies don’t need more developers, they need better developers. The Googles, Facebooks, Apples, and Microsofts of the world get plenty of applicants for jobs, they just don’t get applicants that are good enough. And the rest of the companies in the world, while they can hire, are forced to hire developers who often lack the talent to create great software, leading to a world of poor quality, broken software. Sure, just training more developers might increase the tiny fraction who are great, but that seems like a terribly inefficient way of training more great developers.
This brings us back to teaching. We absolutely need more teachers, but more importantly we need more excellent teachers and excellent learning opportunities. We need the kind of learning infrastructure that empowers every 15 year old who’s never seen a line of code to become as good as your typical CMU, Stanford, Berkely, or UW CS grad, without necessarily having to go to those specific schools. (They don’t have the capacity for the kind of growth, nor should they). We need to understand what excellent software development is, so we can discover ways to help developers achieve it.
This infrastructure is going to be difficult to create. For one, there are going to be a tiny fraction of excellent developers who choose to choose to take a 50% pay cut to teach in a high school or university, and yet we need those engineers to impart their expertise somehow. We need to understand how to create excellent computing teachers and how to empower them to create excellent developers. We need to learn how to make computing education efficient, so that graduates in computing and information sciences have 4 years of actual practice, rather than 4 years of ineffective lectures. We need an academic climate that respects current modes of computing education as largely broken and ineffective for all but the best and brightest self-taught.
Unfortunately, all of this is going to take significant investment. The public and the most profitable of our technology companies must reach deep into their pockets to fund this research, this training, and this growth that they and our world so desperately needs. And so kudos to code.org and every other bottom up effort to democratize computing, but it’s not enough: we need real resources from the top to create real change.