A couple of decades ago, if you spent every day in chat rooms with your friends, you were a nerd. Today if you do the same thing, you're just the average Facebook user. And so it's no surprise there's a gold rush mentality in the learn-to-code movement. With the tech industry booming and its products so pervasive in our lives, the allure of six-figure tech salaries make plenty of people pack up and head West (literally).

And just like in the gold rush of the 19th century, there are plenty of people looking to get rich not by mining, but from outfitting the miners. Coding academy websites, boot camps, and tech book authors (such as myself) all offer the means to obtain these coding skills. I think some of these groups push the promise of dotcom riches from their products more than they should. In obtaining the "literacy of the 21st century", there's plenty of hype to go around.

Despite this hype, I do think that coding will become a more widespread and routine skill in the years to come. Programmable technology will continue to pervade more parts of our life, computers will continue to become more accessible to a wider population, and the world will continue to become more complex. Understanding coding (and debugging) will naturally go with it.

I believe it so much that I quit my software developer job to write programming tutorials full-time. My latest book, Automate the Boring Stuff with Python (No Starch Press), is released under a Creative Commons license and free to read in full at automatetheboringstuff.com. The approach I take with this book is one that focuses on writing small, practical scripts to automate tasks on your laptop or desktop PC. All the basic programming concepts are covered for people with no experience, and the computer science is skipped.

Being code literate doesn't mean understanding the details of sorting algorithms or object-oriented design patterns. The tasks that coding can help with are the ones that a typical office worker would be faced with:

Reading through a large amount of PDFs, Word documents, or other files looking for particular information. (Chapter 13)

Programmatically updating the Excel spreadsheets that many offices use to organize their data. (Chapter 12)

Organizing folders on your hard drive by copying, renaming, moving, or deleting files. (Chapter 9)

Web scraping to grab information from the Internet as it's updated. (Chapter 11 )

Sending out automated emails or text messages notifications to free you from having to check in on your computer yourself. (Chapter 16)

Basic debugging skills to figure out how to fix your code. (Chapter 10)

These are areas where non-programmers can significantly boost their productivity by learning to code. This is different from everyone becoming a software engineer. When I say learn to code, I don't mean develop software professionally. Almost every adult has a driver's license, but only a minority are cab drivers or NASCAR racers.

Will this influx of amateur programmers drive down the demand—and salaries—of developers? I doubt it. The same arguments were made in the past about open source software. Won't having a free operating system like Linux destroy jobs? Won't having a free web server like Apache destroy jobs? Won't open source implementations of Python, Ruby, PHP, Perl, and JavaScript destroy jobs? None of that happened. In fact, quite the opposite: The availability of open source software has created an avalanche of opportunities for the tech industry. So will coding-capable consumers.

Coding as a life skill

Jeff Atwood wrote an article in 2012 on his Coding Horror blog, Please Don't Learn to Code, in which he laments the "everyone should learn to code" movement. In his mind, programming should be left to the professionals because more code in the world just means more buggy code. I can't disagree more. This is like saying there should be fewer literate people because more writing will result in more misspelled words. Unlike Jeff, I do equate coding as a life skill like reading, writing, and math—if not now, then in the future. Jeff's piece isn't quite making the argument that I was into coding before it was cool, but he is adamant that universal coding literacy would be a net negative.

I admit, from the vantage point of the start of the 21st century, achieving universal programming ability seems as ridiculous as achieving universal literacy did at the start of the 20th century. But today, even in developing countries, it's more common to be literate than not.

What I think critics don't consider is how universal programming skill will change culture. More programmers doesn't just mean more apps in app stores or clones of existing websites. Universal coding literacy doesn't increase the supply of web services so much as increase the sophistication in how web services are used. Programming—by which I mean being able to direct a computer to access data, organize it, and then make decisions based on it— will open up not only a popular ability to make more of online services, but also to demand more.

Almost every major website has an Application Program Interface (API), a formal specification for software to retrieve data and make requests similar to human-directed browsers. Facebook, Wikipedia, Amazon, Twitter, Google, and Reddit all offer APIs so that their users can automate their interactions with the site. The vast majority of users don't use these APIs—or even know what an API is—because programming is something that they've left to the professionals. But when coding becomes universal, so will the expectation that websites become accessible to more than just browsers.

APIs, not apps

This is a world that demands APIs, not apps. Being limited to the app store's selection will be insufficient. Not everyone will be making their own Facebook app, but everyone will have their own individual needs of Facebook's database and services. Simply taking what the Facebook website delivers will not be enough. Users will want to make use of web services on their terms, in their own programs.

And if I've learned anything from my readers, it's not as hard to achieve as most people think.

The APIs-Not-Apps future is a natural extension of the open source movement. Programming is not just writing software from scratch or forking existing projects. Many users have nice-to-have ideas for features that would benefit their individual workflow, but are too niche to be considered. Making a programmatic interface for software a common expectation opens a lot of possibilities. A form of this exists now, although the access that APIs provide is often incomplete and burdened under license agreements. This is far from the open source ethos.

Like most things when it comes to our species, this problem is more political than technical. Right now corporations and governments are keen on limiting the power of computers, not expanding it. There's simply too much incentive to maintain these walled gardens, and consumers aren't demanding the walls be torn down. As Cory Doctorow writes, there is war on general-purpose computing, and its aim is to restrict all computers through DRM, spyware, and patent abuse. With the Supreme Court recently refusing to step in on the Oracle v. Google case, even APIs themselves can now be locked away under copyright.

A universal code-literate future isn't impossible, but we have to choose it, as a society. Learning to code isn't simply a hobby or a productivity boost, but a path to becoming a more engaged and capable adult.

Back to

School

This article is part of the Back to School series, focused on open source projects and tools for students of all levels.