The Invent with Python Blog

Writings from the author of Automate the Boring Stuff.

Wed 16 May 2012

A Modest Proposal: Please Don't Learn to Code Because It Will Damage Your Tiny Brain

Posted by Al Sweigart in teaching   

Jeff Atwood wrote a post on his Coding Horror blog entitled "Please Don't Learn to Code" in which he rails against the idea that "everyone should learn programming".

And I couldn't agree more.

People, not everyone needs to learn programming. Only some gifted individuals (of which we professional software developers are included) need to learn programming. For the rest of you, unless you are srsly committed it will just be a meaningless chore that may damage your tiny brains.

Coding is just like surgery: if an amateur decides to code their own Angry Birds clone as a fun little project, people will literally die. Those are the stakes, folks. That's why it should be left to those who are explicitly pursing it as a professional career.

TL; DR link

You have my assurance that I find Bloomberg's encouragement of people to learn a technical skill personally offensive. It filled me with a rage that was only subdued after discouraging a small child from learning to play the harmonica. (What's the kid going to do with that skill anyway? There are better ways he could spend his valuable time.)

Meanwhile, Jeff doesn't hold back when he deals his death blow:

"Can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder?"

Gauntlet... THROWN. The especially insidious thing (which Jeff shows that he himself is well aware of) is that even if Bloomberg's serpentine journey into forbidden coding knowledge ended up being useless (which, yeah, maybe the mayor doesn't need to know programming), his tweet has terrible implications for those he is in communion with. The man has 252,000 followers on Twitter. It's as though the point of his tweet wasn't just a casual announcement of his own 2012 resolutions, but also an encouragement for citizens to educate themselves on a technical subject.


Think of the anarchy that would result if a fraction of them took it upon themselves to learn a new skill that is ordinarily considered not-for-average-people. They might find out that programming wasn't as unapproachable as they previously thought!

Those who tout the "everyone can learn to code" and "coding is increasingly becoming essential" line are unaware of how preposterous their claims are. To give an example, Jeff replaces "programming" with "plumbing" in a quote from Tim O'Reilly:

Exactly! Plumbing and programming in this context are completely comparable which is why this twisted quote proves Jeff's point. The demand for programmers isn't high at all, and we can only expect it to decline as the 21st century progresses. And even if that wasn't true, you don't begin the journey to learn programming from a website like Codecademy. When has anyone ever used the Internet to learn something?

Jeff's bullet-pointed reasons that follow his courageous, speak-truth-to-power words are at once a soothing symphony to the nerves of our exclusive software guild and a salvo against those who dare think they could learn to fish for themselves. I iterate them here with my own praising commentary:

"It assumes that more code in the world is an inherently desirable thing. [...] You should be learning to write as little code as possible. Ideally none."

What a lot of people don't understand is that programmers never write throwaway code. I once had the problem of wanting to download a few hundred images off of a website that had URLs like,,, etc. up to (A local copy of an online comic, something that plenty of non-coders would want to do.)

At first I thought, "No problem. I always forget the exact function names of the networking library, but wget (a command line tool for downloading files off the web) is easy enough to use. I'll just write a small script that writes a simple batch file that calls wget on each of these images. Something like:"

fp = open('temp.bat', 'w')
for i in range(1, 348):
    fp.write('wget\n' % (i))

Then I'd run the temp.bat file and I wouldn't have to type out all those wget commands myself. A couple minutes later and I have all 347 images on my hard drive.

WHOA SLOW DOWN, AL. Are you sure you want to commit to writing this code? Writing a script that itself writes a script to be executed? That doesn't sound very elegant. Isn't that overengineering a solution to this problem? And what about supporting this code? Will it scale to millions of users? Have you thought about localization? What if I need to translate this script to Bulgarian? Do you really want to introduce this low-quality throwaway code into the world? Is that an inherently desirable thing?

Just imagine if your average layperson had the knowledge to automate simple, repetitive tasks with a quick hack like this. Then they wouldn't have to struggle through all that manual typing and mouse clicking like a good techno-plebian. Or "ideally", they could just give up on the problem and think there's no practical solution (no code at all!).

"It assumes that coding is the goal. [...] Before you go rushing out to learn to code, figure out what your problem actually is."

The core problem of this learn-coding-for-the-sake-of-coding fad is that you should have all the details of how you are going apply that skill laid out before you even write your first "Hello world" program. Having knowledge of new methods never broadens our perspectives or opens insights to novel solutions.

In my toolbox, there's only a hammer and a saw because that's all I need to build birdhouses. Sure, I might get ideas for new things to build if I had other tools. But I don't know what those things are right now, so why do I need anything beyond what I already have? And hopefully if I stick to what I know, I'll never find out.

"Software developers tend to be software addicts who think their job is to write code. But it's not. Their job is to solve problems. Don't celebrate the creation of code, celebrate the creation of solutions."

Totally on the ball. It's just like when one of my friends wanted to start an afterschool music program. "Hey now, the world doesn't need another afterschool program. It needs an effective solution to lower drop-out rates, increase test scores, and prevent gang violence." Thankfully, I was able to convince him to can the idea.

"It assumes that adding naive, novice, not-even-sure-they-like-this-whole-programming-thing coders to the workforce is a net positive for the world."

I've seen some terrible code in my time, and the thought of these novice programmers being hired and putting their code on the market send shivers down my spine. Maybe if there was some way that companies could judge which candidates were qualified or not before hiring them (like a piece of paper listing their previous experience and education, or some sort of one-on-one conversation about their domain knowledge) it would be okay for people with less-than-absolute-mastery skill in coding to exist. Sadly, I can think of nothing that would prevent crap programmers from instantly being put in charge of the software for nuclear power plants.

You don't create an effective workforce of software developers by encouraging many people to try their hand at coding and see who sticks with it. Rather, you need to scare off anyone who isn't "serious" about coding. That's the attitude that has led to the arrogant, petty, sarcastic, satire-writing generation of computer programmers I proudly say we have today.

"It implies that there's a thin, easily permeable membrane between learning to program and getting paid to program professionally."

The cruelest joke is played on the ones who take on the task of learning to program. Jeff specifically cites the book "Teach Yourself Perl in 24 Hours" as contributing to this misleading atmosphere. How could anyone not realize that this claim was a gimmick based on the fact that the book had 24 chapters? When I was first starting to learn Perl, I literally thought this $35 book and a single day would be all I needed to become an employed Perl developer who knew every facet of the language. Surely I can't be the only one who thought this. I hadn't been so disappointed since the day I saw "The NeverEnding Story" and ended up leaving the movie theater a mere two hours later.

In Conclusion

Why would the average person need to learn programming? When would they ever use that knowledge if they weren't going to become a software engineer? Just like mathematics, a musical instrument, a foreign language, all sports ever invented, cooking, dancing, knitting, sailing, and everything beyond a 3rd grade education, you can get by in life just fine without it. I mean, when have you ever heard of someone enjoying programming just as a hobby and creative pursuit? When has anyone said that programming is great way to improve general analytical skills?

Remember, Jeff isn't just saying that most professions and lifestyles wouldn't be significantly enhanced by programming ability. He isn't just saying that "coding is the new literacy that you have to have" is hyperbole. (Both are arguable points.) If he was, he would have titled his post, "You Don't Actually Need to Learn to Code". Rather, he wants to keep the unwashed masses from embarrassing themselves with their amateur code which he and the other elite coders will end up having to debug. That's why the title is "Please Don't Learn to Code".

It's his plea for you to not even try.

Folks, programming is a privilege and a responsibility and not everyone should attempt to have it. In that way, it's just like writing. If an army of amateurs took up keyboards to articulate their thoughts, just imagine what kind of dopey, smug opinions would be posted to the Internet.

A Concerned Rock Star Programmer

Learn to program for free with my books for beginners:

Sign up for my "Automate the Boring Stuff with Python" online course with this discount link.