2013-10-16

Co.Labs

No—You Don’t Need To Learn To Code

The whole world seems to be telling you that you need to learn programming. Here’s why you don’t—and what you should learn instead.



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.

The Joys Of The Craft

The software project management classic The Mythical Man-Month opens with a description of the joys and woes of the craft of coding.

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.

Why Do You Want To Code?

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.

Code Cannot Solve Every Problem

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.

Learn To Program... In 10 Years

Peter Norvig, director of research at Google, wrote that the prevailing trend implies that "Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies." The fact that you can make a sound on a flute doesn’t mean that you can compose a flute concerto. In the same way, throwing together a bit of JavaScript does not qualify you to build complex, scalable systems.

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.

Instead, Learn To Understand Coders!

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.

Learn How Everyday Software Works

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.

Learn Something Else Entirely

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]






Add New Comment

64 Comments

  • camus_us

    If you can work a little bit with your hands, and know the basics of machining, carpentry, plumbing, ow your car works, etc, then you can communicate a lot better with the EXPERTS in the field and your life is a lot better. You don't get taken for a ride when your faucet springs a leak, or your AC goes on the blink, or if your car makes a strange noise. Professionals respect you more if you know what you are talking about, and you know if you are being sold a bill of goods. YOU manage your projects better, be they fixing your car, or building a new house. You don;t have to be a caprenter or a plumber but knowing a little bit helps you a LOT. Same thing with coding...knowing how to code a little, and how it works enables you to communicate with s/w experts a lot better and to manage your projects a lot better. It's that simple....

  • Emmanuel Straschnov

    Another thing is that it's becoming easier and easier to build tech and product without technical skills. General-purpose programming tools are emerging recently (like Visual Basic in the 90s, see Chris Dixon's post cdixon.org/2014/04/13/software... ).

    So this is auto-promotion, but Bubble (http://bubble.is) is one of them (I’m a cofounder). You can build your product without code on Bubble. There is a learning curve, as it’s programming, but this is with a visual interface that gets rid of the coding aspect. Our users have build crowdfunding platforms, marketplaces, all starting from a white page (no template) and without code.

    There are more and more tools like these and they're actually getting to a position that enables people to really build things without code. If you have the wireframe, you pretty much have all it takes to use Bubble.

  • Laceagate

    While I understand your candor regarding the motto of "Everyone should learn to code," I think there's a larger point behind it all. It's not about making everyone into programmers or computer scientists, but like you said-- offering them ONE tool they can use for problem-solving. I do also think it's an attempt to address some technology literacy issues. Yes, there are people who don't know how to use a computer properly, emailing is a huge digital skill in some communities, and troubleshooting what you and I would consider simple tasks is an arduous one to others.

    I'd say it's a good thing to encourage ways to think differently, as coding does. But it's not necessary for everyone to know how to develop an ERP. Perhaps this whole thing is a reflection of what's lost in basic K-12 education. Few people leave school with the necessary skills to solve problems, think logically, and understand abstraction. Maybe that's the actual problem.

  • Lynne Gollert

    Sorry to be snide, laceagate, but DUUUUUHHHHHH. Professional education researchers, philosophers and practitioners have been trying to solve the "how do we teach people to solve problems, think logically and understand abstraction" conundrum for centuries. Seriously, centuries. And snake oil salespeople have been coming up with cures for just about as long. Coding is now being touted as the panacea to this issue. The fact that people are messy and unique is the issue, and teaching them is truly an art; an art that many, many teachers don't have, sadly. Coding, however, is not the answer.

  • Joe M

    I agree with the author that coding is not for everyone. But, I think it's an exaggeration to say that everyone is being told that everyone should learn to program.

    The reason for the pro programming messages is simply that there isn't enough supply of programmers to keep up with demand for programming. Many places are seeing a job slump. But, a lot of employers are having a hard time finding enough programmers. So, it makes sense to encourage people to learn.

    I think that part of the problem is that computer programming doesn't (shouldn't) require the attention of a full university degree. There is probably some merit to "computer science" and studying methods, technologies and platforms at a high level. However, to be a good programmer that can make things work in a variety of languages doesn't require 4 years of academic page-turning.

    I believe that it makes sense to promote shorter and less expensive coder education programs like appacadmy.io or www.coderjumpstart.com . Those programs provide the foundation to start Norvig's "10 year" plan. And worst case scenario, if a student realizes that programming isn't for them after those programs, they haven't spent 4+ years at a university and accumulated 30 years of loan payments.

  • nogooddannyhood

    Disagree - I think business folks would benefit greatly from learning some basic coding. Or at the least, Dev-QA-Release processes of their organization. Having to explain endlessly why we do/don't do things a certain way is frustrating, when many a business person refuses to accept the answer...the Nth time. As a scrum master I shield the dev team from many issues - but a biz willingness to learn *capabilities* of code or the ENG process would be helpful

  • Sean M

    I think it's funny that the author of the article is a "wannabe data scientist." Nothing is more annoying than a coder who thinks they can be a data scientist. I can assure you that understanding the advanced mathematics and model development behind data science will take you a lot longer than learning to write so-called "quality code." This is the reason a PhD is typically required. If you don't want tutorial learners calling themselves programmers then for the love of God please don't call yourself a data scientist.

  • deciara

    Sigh.. As I started off my career in academic research in Machine Learning long before it was fashionable, but that was a long time ago and there are other skills involved in data science which is why I certainly don't consider myself to be a data scientist.

  • sfposter

    this message has been brought to you by the letters: C, S, S, H,T, M + L ... and by the numbers 1 and 0.

  • janie

    Honestly, she has some really good points! This is a very thought provoking article. I think it is aimed at people that think that learning to code is the answer to everything, and then they don't need anyone's help. I do know that coding is somewhat of an art, and it takes years to refine. I do appreciate coders who have many years experience and I will never believe myself to be equal to any others with more years experience. On the other hand, don't be discouraged. If you want to learn to code, don't be discouraged! Why not follow her advice AND learn to code at the same time? I am just starting out myself. It's never to late to learn something new.

  • Ray

    Thank you for saying this. I agree that you don't NEED to learn to code. Saying so is ludicrous. Coding is not for everyone. And you shouldn't force yourself to do something you don't enjoy.

    There are people that enjoy coding, and people that don't. There are people that enjoy painting, and people that don't. It's best to network people together that enjoy the things they like to do, instead of trying to force a skill on someone!

  • Bradley Robb

    This does a pretty good job of qualifying the reasons one would want to learn how to code. The motivation behind the knowledge is often a better indicator of success than the gaining of the knowledge itself.

  • Hilsea

    Thanks Ciara - This is a really sensible piece. I have been presented with opportunities over the years (yes starting in school in 1982 but sadly they axed it) to learn to code but I simply do not have the aptitude.

    It is a bit of nurture but a lot of nature and I equate it as being a facet that some of us will never truly understand.

    At the risk of being a focus group of one, I equate it as similar to my failure at learning the piano as a child which but it had no bearing on my musicality. I mastered with ease at classical ballet, eventually teaching and choreographing dance. I couldn't write music, but I could interact with it and create from it and even direct musicians. Dance was/is a natural aptitude for me, learning music wasn't.

    I see it very similar to working life. I find "coding" exhausting and massively stressful - even just putting html and css together (which I know doesn't really qualify!). I don't experience the thrill of creation, only relief when it's over. Design on the other hand is exhilaratingly creative for me.

    I work very successfully in technology alongside engineers and programmers, and have done for close to 20 years. Granted I have an abstract understanding of coding, I have no idea how to do it. I couldn't tell one language from another if my life depended on it.

    And design has taught me the same problem solving skills, attention to details, deep focus, contemplation, testing, validation etc that are listed as outcomes of learning to code.

    I think if it's to be considered seriously, get it into schools as curriculum but I agree, the calls to action for everyone to "learn to code" is unrealistic for both logistical and personal disposition reasons.

  • Sasha K-S

    As a complete amateur who has put together a profitable and useful web application all by my lonesome without any outsourcing, I beg to differ.

    Having some knowledge of it is simply indispensable for any aspiring entrepreneur, as much as learning good writing and marketing are.

  • Adam Walmsley

    Learning some coding from sites like codeavengers and codecademy has been useful for me if for nothing else but using my brain in another way then i use it every day. Like working out muscles that never get used. And to be honest its given me an even greater appreciation for skilled programmers (i.e my older brother) and the work that goes into creating the things that i use everyday that most take for granted.

  • Zac Witte

    This is a little like saying not everyone should learn to play the guitar because it's only a special kind of person who becomes a rock star. The point isn't to become a rock star and I think most of the learn to code movement isn't expecting everyone to be a professional. The musical process and entertaining your friends are enough on their own. Same with physics class and 19th century british literature.

    Besides just being healthy for the mind, being at least a little comfortable with code can be really useful to most people. It could be writing some html into blog posts, adding event tracking on a website so the business guy can collect his own metrics, or just getting a better understanding into how this massive part of our evolving economy works.