Nobody needs to learn to code, but everybody can learn to code
Barack Obama recently released a video encouraging American students to learn to write programs. A lot of people have discussed this in recent years, and the general consensus seems to be that not everyone should become a software engineer.
I totally agree with this. Writing good software is hard work, requires a lot of experience, and there’s enough poorly written software out there. The world doesn’t need more halfway-trained software engineers who think they know what they’re doing causing errors that cost everyone else time and money and potentially lives.
This is even true of extremely smart and talented people. I encounter scientists all the time who share “data” in formats entirely unusable to anyone but themselves. Why is this? Because they simply haven’t struggled enough with software and others’ data to know the right and wrong ways to do it. And more importantly they don’t care; research is their business, not data. Same goes for engineers: they don’t care about producing reusable test suite frameworks, they care about getting a working prototype into production. It’s their job to cut inconsequential corners when it comes to software, even if it infuriates the rest of us (I mean come on, just look at Matlab! Okay, okay, I’ll keep the personal gripes to a minimum).
All of this opposition to learning to code is beside the point. The goal is not to make everyone dedicate their lives to computer science (though that would make me very happy). The point is not even to get people to think about problem solving or to promote computer literacy, even though these are good reasons to learn a bit of coding. Forget about our changing society and the Economy of Ideas.
The reason that the president of the United States felt it necessary to promote programming to his country is because programming is the new American Dream. Most of the responses ignored this central message of Obama’s video, or entirely misunderstood how different programming is from the old American Dream.
What was the old Dream? That anyone could, with enough elbow grease and determination, grow a successful business from nothing. It’s still a thing today, but whether anyone can do it is a hard sell because there are so much is beyond immediate control. Available locations, supply chains, finding the right employees, natural disaster, effective advertising are all huge concerns. But more: your race, gender, age, socioeconomic class, and immigration status all can make or break a business.
Now consider programming. It doesn’t matter if you’re low-class, gender creative, fresh off the boat, or a neo-nazi. It doesn’t matter if you’re ten years old or seventy, if you are a hermit or a social butterfly, or if you live in the city or the country. If you have access to a computer and an internet connection (even if it’s just at a library) and you’re determined enough, you can learn to program. You might not become the next Don Knuth, and you might only make an iPhone app that flops. But short of incarceration or the sort of destitution where you struggle to feed yourself, the opportunity is there for anyone to take. Nobody claims it’s a panacea. Programming won’t solve homelessness or crime or even make our legislators more intelligent. But it’s a chance, and that’s what the American Dream is all about.
Programming is not like “becoming a car mechanic,” though writers not familiar enough with software will claim this. In fact, it’s much more difficult than becoming a car mechanic; software is more like an engine where any tiny failure causes the entire car to explode. And knowledge about how to repair an engine is nothing like being able to design an engine that has never been built before and then build it. Indeed, writing good software is more like architecture and much more eternal. Even simple programs are monoliths that depend on thousands of components and tens of layers of abstraction. While the industry may change, programs themselves do not deteriorate over time. That’s why banks still run Fortran code from the 50’s. Hurricanes and financial crises can’t destroy programs. Politics can’t kill your life’s work. Even if a business based on a particular piece of software fails, you still have the software and can do what you please with it.
But compared to other trades that require physical supplies and training and luck, learning to code is more accessible, cheaper, and more attractive as a chance to make a name for yourself than politics or the movie industry or anything else. People like me who love computer science for its own sake might hate this idea. That logic incarnate, something so beautiful in its cold austerity with mysteries and surprises and delights beyond counting, is reduced to a gamble or investment for financial success. But that’s how the world is.
So no, for the sake of my favorite discipline I will cry that nobody needs to learn to code. But that doesn’t change the fact that anyone can learn to code. Programming is as close to an equalizer as the world has to offer. And as such, any politician not promoting the availability of computer science education resources and internet access (for anyone, not just students), is entirely unAmerican.
Jeremy Kun is a graduate student in Mathematics and Computer Science at the University of Illinois at Chicago. He’s the writer of the blog Math ∩ Programming, where he explores the interesting ways that mathematics and computer science interact.