Imagine being harangued by a deluge of articles with headlines like "Why everyone should learn to knit." With all due respect to knitters, it would seem ridiculous. Yet the rallying cry to learn to code has become so pervasive that we’re barely surprised when a software developer in New York engages in a highly publicized attempt to teach a homeless man how to code. New York Mayor Michael Bloomberg famously told the press last year that even he planned to take a course on Codecademy, but of course, you can also get programming tutorials from Bill Gates or Mark Zuckerberg on Code.org. Oddly, even non-technical people like VCs are urging you to learn to code.
I’m a programmer. Do I think everyone should learn how to code? No. Here’s why.
Why is programming fun? What delights may its practitioner expect as his reward?
First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God's delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.
I have no recollection of the content of the first programs I wrote; I just remember that it was fun. One Christmas in the 1980s, my sisters and I got a Sharp personal computer for Christmas. Mostly we used it to play Pac-Man (which was stored on a cassette tape), but the machine also came with a BASIC compiler and that’s how I first learned how to program. Coding came easily to me and was something that I could do for hours on end. Like games, code gives you constant feedback, and for that reason can quickly become addictive, but it’s also a massively time-consuming and often maddening activity. In describing the woes of the craft, Brooks refers to the "dreary hours of tedious, painstaking labor" and the perfect precision required to communicate with the machine. "If one character, one pause, of the incantation is not strictly in proper form, the magic doesn't work."
Like any skill, you can only become good at it by ploughing through hours and hours of boring practice, and there are many other things you could do with your time. Coding trains you to think in a certain fashion, and while it can teach you useful cognitive skills like breaking down problems, that thinking can be rather narrow. Sitting still and staring at a screen for days, and sometimes nights, on end is detrimental to your health and general well-being. Finally, competence is the currency of the development world. Good coders don’t want to work with beginners and do not like to see their craft devalued by hoards of "instant" developers cranked out of short courses, although they may be prepared to mentor you if they see potential. Still think you want to learn how to code? Read on.
Coding is not a goal. It’s a tool for solving problems. Even professional developers can forget that when they get caught up in the minutiae of a new language or a religious argument over the best IDE (Integrated Development Environment). The best "learn to code" candidates are often scientists or professionals in other fields who can use code to solve the problems they see in front of them. Think of what a social scientist can learn from Facebook or Twitter data. The Nobel prize for chemistry was just awarded for computer modeling of chemical reactions. Much of the coding done by researchers wouldn’t pass muster in a professional software team, and often falls more into the category of scripting, but that doesn’t mean that some coding knowledge can’t improve results in other fields.
However, much of the "learn to code" frenzy seems to spring from the idea that you can achieve fame and riches by starting a tech company and you need to actually code something first. Programming is not a get-rich-quick scheme. Even if you do hit the jackpot, the CEOs of successful tech companies do not spend a lot of time coding, even if they started out behind a keyboard. There are simply too many other tasks involved in running a company. So if coding is what you really love to do, you probably wouldn’t want to be a CEO in the first place.
Some people learn the piano simply in order to play a particular piece of music they love. In the same way, if you have a problem which can be solved with code, and which nobody will develop for you, go ahead and learn to code to create it, but be aware that if it becomes successful you will probably need to hire a professional to rewrite the whole thing. Think of your effort as a prototype which you can use to get feedback on your idea.
All that time spent in front of a screen battling, often self-created problems can lead coders to the conclusion that every problem can be solved with more or better code. It can’t. The biggest problems always involve people as well as systems, and people are annoyingly messy and unpredictable. One of the joys of coding is that when you do hit on the perfect incantation, the machine will do exactly what you asked over and over again in a reliable manner. People rarely do that, and systems which rely on people don’t either. The story of developer Patrick McConlogue trying to teach a homeless man called Leo how to code illustrates this delusion perfectly. It’s not that Leo couldn’t learn, but that there are so many other resources needed to get to the stage where you can make your living as a coder. A few days ago Leo was arrested for trespassing in a city park and his laptop was confiscated. Homelessness is a complex problem and code alone isn’t going to solve it.
If you do want to become a professional developer, or you find that you just really enjoy programming, then by all means continue to build your knowledge. Going from self-taught hobbyist to competent software developer is not usually a short road, but it is a well-trodden one in the software world. As long as you are competent, other coders don’t really care where or how you acquired your skills.
Norvig gives excellent advice on how to become a good developer, as opposed to someone who can string a few lines of code together. Learn at least half a dozen languages, work on projects with other coders who will either openly mock your mistakes or pass silent and withering judgement on your ignorance, maintain somebody else’s code, and learn the basics of how the hardware on which your software runs actually works. Sounds exhausting? Here are a few alternatives.
If you still want to work in the tech world but are reconsidering coding, designer Nick Marsh suggests doing something coders find useful. Brilliant as great developers are, there are plenty of things that they hate doing or are just no good at. Coding requires a level of focus bordering on tunnel vision, and if there’s one thing developers hate, it’s distractions. For a coder "distractions" mean dealing with business people, management, customers or, in fact, anyone outside the engineering team. If you want to get popular with developers, spare them from some of these interactions, which they often see as a shocking waste of their time. A great product manager, for example, is as crucial to success as a competent coder. It doesn’t matter how clear the code is, if nobody wants the product. Translate the language of the developers into that of the users and vice versa. Promote the product. All makers of creative work want their work to be used. Marsh concludes that it’s much more important to understand coders than to understand code.
Unless your goal is to become a professional programmer, it may be more useful to learn the basics of how the networks and software you use every day work, and their biases and blind spots, rather than go about adding to the world’s stock of bad code. You can drive a car without knowing how an engine works, but it would be handy to know what makes the engine stall or that the steering skews to the right. Knowing how to evaluate the privacy bargain we make with tech companies, escape the filter bubble, analyze the values behind a piece of software, verify information you get on Twitter, understand how the Internet is structured or how search and recommendation algorithms work, is probably more valuable in everyday life than writing Python code.
The Greek physician Hippocrates said "Ars longa, vita brevis," meaning "The craft is long, Life is short." So choose your craft wisely. In the time that you saved by not learning to code, learn to do something you enjoy more. Playing a musical instrument has been proven to improve other mental functions including creativity, as well as bringing joy to the player. Yoga expands your world view as well as stretching your body. To give pleasure every day, don’t learn how to code; learn how to cook. Finally, engineering manager Rands In Repose suggests learning to write in your own language.
Your readers are far more critical than the Python interpreter. Not only do they care about syntax, but they also want to learn something, and, perhaps, be entertained while all this learning is going down. Success means they keep coming back—failure is a lonely silence. Python is looking pretty sweet now, right?
Maybe coding would be easier after all.
[Image: Flickr user Chris Metcalf]