The reason everyone should learn to code

It isn't to produce a nation of coders.

Why do we want everyone to learn to code? It’s certainly not to produce a nation of coders. I have no delusions about everyone learning to code: it’s not going to happen, and may not even be desirable.

But the underlying rationale behind a slogan isn’t the slogan itself; it’s what the slogan enables. I’m not terribly interested in whether or not ex-Mayor Bloomberg learns Python. I hope that helps him in his new career, but I suspect he’ll do just fine, regardless of his programming skills. I am much more interested in the excitement behind organizations like Black Girls Code, excitement that derives directly from the “everyone should code” meme.

Why black girls? And black boys, too, for that matter? Because, as yet another depressing but absolutely correct article points out, the poor shall inherit…poverty. If you’re a poor black kid in an underfunded, inner city school, your career options look an awful lot like McDonald’s and Wal-Mart. Minimum wage all the way.

Learning to code is one of the few ways to break the cycle of poverty. Back in the early 80s, one of my friends was spectacularly wrong when he said that “he was sad that he was in the last generation of people who would get into software development without a formal education in programming.” (He was a Stanford grad, but not in CS.) That’s been proven wrong every year since then. A formal education in computing is certainly not irrelevant (that’s another discussion), but it’s also not an absolute requirement, and won’t be for the foreseeable future. And those jobs, whether they’re in web shops, back offices, or wherever, are much better than the dead-end minimum wage positions at McDonald’s and Wal-Mart.

And that’s important. Because there really isn’t another reliable way to break the cycle without college. There’s no “Black Girls Practice Law” or “Black Boys Bank.” Law, banking, medicine — any professional discipline except for software — all have a much higher barrier to entry, and all start with a college degree. And for an inner city kid, college is a fragile enterprise. Even if you get into a good school with a complete financial aid package that will support you for four years, you’re still only one emergency away from dropping out. A parent loses a job or gets sick, and suddenly you’re quitting to become the breadwinner.

Even after learning to code, the poor certainly face many barriers to a technical career. Anil Dash has written about the other codes that minorities must learn to succeed in corporate culture, and the changes in corporate culture that are needed to enable success. Dash’s point is extremely important: learning to code isn’t some kind of a panacea that gives the poor a free ticket to social mobility.

But Dash’s arguments about cultural skills notwithstanding: learning to code is table stakes, for the urban poor, for the rural poor, even for the third world poor. I’m sort of amused by the anxiety among certain programmers about the great unwashed getting into their privileged domain. Slogans aside, there are many reasons aside from job skills to learn to code (cultural literacy being among them) — and just as many reasons that most people will not learn to code. An overpopulation of coders? That isn’t going to be a problem. Coders who don’t share the skin color or cultural norms of white male brogrammers? Bring them on; we need more.

The point of everyone learning to code isn’t producing a nation of coders. It’s about finding talent among people who haven’t been programming since they were 10 years old. It’s about providing education for those who need to learn to code and may not have any other way to start. And it’s about tapping into their creativity and the problems they need to solve, which are almost certainly more important than the current crop of me-too startups. I’d be willing to bet that it’s easier for an inner-city kid to get a scholarship to a summer basketball camp than to find someone to teach him JavaScript and Python. We need to fix that. And we can.


Get the O’Reilly Programming Newsletter

Weekly insight from industry insiders. Plus exclusive content and offers.

  • Peta Clarke

    Right On! I was an average student in high school and my score on my SAT’s was as a result of me writing my name. I received an intro to technology in High School and decided to major in computer programming at a SUNY college. Best decision I ever made! I’ve had an awesome career since and I’ve been able to give back to my community in a revolutionary “pay it forward” kinda way! (^_^)

  • Ed Jones

    (I was going to comment about code being like learning to read in AD1500 instead of taking the priest’s word… Instead I’ll just ask for help for high school students.)

    We’re building a semester’s (free) self-guided ‘class’ in web programming. We think the pieces are available online. I certainly learned by myself–but not in a semester.

    Here’s the draft ‘plan’:

    What do you think? How would you amend it?

    Some background: In Ohio, students can actually learn like this for credit toward graduation. That’s the main thing driving this, to make such learning available to students in schools with no or little CS classes.

    It’s also designed to go along with @openbadges.


    • Mike Loukides

      Thanks for posting this. I like it. A couple of things to think about: While prerequisites probably aren’t appropriate for this kind of course, you do require HTML, CSS, and some programming. So it really isn’t entry level. Is there a way to integrate the basics into this class?

      You might think about Google’s App Engine. One of the things I like about App Engine is that it really eliminates the overhead of deploying an application, and that’s a major hurdle for most new developers. I think Google missed an opportunity in not seeing App Engine as a teaching platform. (Then again, Heroku makes deployment in the Rails world almost as easy.)

      • Ed Jones

        Mike, thanks for looking at this. Yep, it’s not totally entry level. We’re trying to accomplish three things with the first 20 or so of these:
        – Give students options to dig in just a bit deeper than normally possible in high school.
        – Highlight some of the best learning approaches available on the web (here the Codeschool approach).
        – Show that the standard HS approach may not be the only one. In this case, standard is AP programming with JAVA, which teaches CS concepts, but probably does not induce either an understanding of the web or a love of building things.

        A big thing I take from your response is that each ‘course’ template should have a section for ‘Forks of this Badge’. E.g., ‘Use Google App Engine and it’s tutorials.’ Gonna add those now.


  • Luis

    Great insight!Very useful blog shared.

  • Nick Such

    Nailed it, Mike. Thanks for writing this!

  • Bloc

    Geat post. It’s not just about the economic outcomes. Software is eating the world. The future of pharmaceutical research may be in computer-modeling. The future of fitness may be in hardware like Fitbit. And the future of transportation may be in services like Lyft and Uber. So if you’re passionate about making a difference and making people’s lives better in medicine, fitness, or transportation, perhaps you should consider learning to code.
    – Prasid @ Bloc

  • Mark Kosmowski

    I am not a programmer, but I learned some coding in college. I think it helped me develop general problem solving skills. This is why I am reviewing how to code so that as my daughter grows up I can teach her to code.

    Don’t forget the spillover benefit of problem solving that one can take with them to other fields after learning to code.