Hacker News new | past | comments | ask | show | jobs | submit login
On Atwood's Please Don't Learn to Code (gist.github.com)
206 points by esmooov on May 15, 2012 | hide | past | favorite | 60 comments

Can I do this? Am I within HN etiquette to paste my post in another story? original here: http://news.ycombinator.com/item?id=3976688


Please learn to code. Also, learn to change your oil and maybe your spark plugs; learn to cook; learn to replace buttons on your shirts; learn to fix your leaky sink and plunge your toilet; learn to plant flowers and tomatoes; milk a cow; shovel some dirt; experience driving a tractor, both the kind in a field and the kind that pull tons of cargo down the expressway ...

Get out of your comfort zone, live for a minute in someone else's shoes and maybe, just maybe, you'll learn to respect the work that other people do and be willing to pay them for it - they deserve to be paid for their Work. Yes, sitting behind a desk all day bringing brainpower to bear on saving the company money is Work. Driving 11 hours a day is Work. Grilling that steak and walking it to your table is Work. It's all Work because it takes us away from our families, because it's so well regulated that it adds stress, because we'd rather be doing other things but the bills have to be paid (i.e. we have to pay other people for the Work they do keeping our lights on, our Internet connected and our water reasonably clean.)

So, please, learn to program. Then, when you need software built, you'll know why you hired me for "so much" and how much trouble I'm saving you.

The problem is that the list of things you should learn, as you imply, is endless. There's a reasonable case for learning literally thousands of skills to allow you to improve your life, understand what is possible or why something is non-trivial and there simply isn't the time to learn all of these things.

As people who have embraced technology we all see the benefits of it and it's foremost in our minds as to how useful it would be if others did the same but how many of us have really weighed up the benefits of someone spending 20 hours learning basic coding against 20 hours learning to cook, or plumb, or speak a foreign language, or understand physiology, or how to listen, or a safe driving course, or plastering, or gardening, or understanding statistics, or history, or spending that time with a friend.

It feels to me to be a gross generalisation - it's really useful to me therefore it's really useful - but without knowing more about the person in question, their life, their issues, how they think, that's really all it is.

I think everybody should learn the fundamentals of programming for the same reason that we learn the fundamentals of physics - not because we're going to be reproducing Newton's experiments at home, but because we live in a world powered by physics, and life is easier and less frightening if you know a little about it.

It's an interesting parallel given how much the average person really understands about physics when they leave school. I'd venture next to nothing.

Given how people drive around here, I'd venture you're right. (Or they'd realize that not leaving enough space between cars at highway speeds is suicidal.)

I'm pretty sure most people know about gravity when they leave school, I'd even venture to say that most at least know of the concept that things are made up of smaller things. I'd also venture to call those two things part of "basic" physics.

I'd hope so.


"What happens if you drop a pen on the moon?"

   If a pen is dropped on a moon, will it:
   A) Float away
   B) Float where it is
   C) Fall to the surface of the moon
This question was asked to students studying physics across a range of levels. I don't know if they just cherry picked the really bad answers. I have no idea how these US educational course translate to international courses.

> "The gravity of the moon can be said to be negligible, and also the moon's a vacuum, there is no external force on the pen. Therefore it will float where it is."

> "Gravity will not pull it down, because there is less of it. It shouldn't float away just because I've never seen it happen. There's a balance between gravity and the opposite force."

I'm pretty sure most people leave high school and if you asked them 12 months later about gravity they couldn't give any kind of coherent answer, just something along the lines of "it stops us floating off into space". Just like all people need to know about coding is it is how websites and apps are made. Any more specific, no one cares.

It's the bulk mail method. Send physics at two million people a year, not everyone is going to "get" it. But we don't know which of those two million are going to grow up and revolutionize the semiconductor industry, which of those are going to jury-rig some clever device at home that keeps their energy bill down, and which of them are going to forget it all.

Just like you never know which email address will respond to a Viagra advertisement.

No. Everybody should learn about computers, how to turn them on, how to browse the internet, etc. Not knowing the fundamentals of programming does not prevent a person from achieving any of the above.

I'd venture that people are psychologically better off compared to the time when people had no idea how cars worked, and they would hang bulbs of garlic under the hood. (Which happened when the Ford Model T came out.)

People do have no idea how cars work.

They now know enough to know the garlic bulbs won't work.

They don't know that, they just didn't like the smell.

Actually, hanging something under the hood of a running car can be something of an engineering exercise in itself. (But more people back then could tie knots and had good rope or twine sitting around.)

If your goal is to establish a culture of mindless consumerism and an inability to create content, you are correct.

Or, you know, there's the fact that a computer isn't primarily a TV for serving you ads.

Please don't use "No" as a sentence. "No, everybody should..." is less jarring.

Atwood's blog post is entitled "Please don't learn how to code" which is an equally gross generalization for the reasons you mentioned.

I guess "You don't have to learn how to code" would have been a more accurate title.


I'm with Jeff on the idea that programming isn't in the same class as reading and writing and basic maths but I certainly don't agree with the whole article.

But I think the criticism of his article isn't to say he's wrong, everyone should learn to code, it's that he's wrong, some people probably would benefit from learning to code.

My issue is really with the people who flip his position 180 degrees and say "No, everyone should learn to code". Both positions are wrong.

My post isn't encouraging everyone to learn everything. I'm trying to encourage people to do something different from what they normally do. People, especially the U.S. citizens I live near, need some perspective.

I agree that everyone should try something different, and that they should try something they consider scary and alien and borderline impossible (but that obviously isn't because other ordinarily competent people clearly do it).

>The problem is that the list of things you should learn, as you imply, is endless.

No one is seriously saying that learning, say, an obscure type of lace-making will improve your life in any way.

Learning to program is akin to learning to read; in a sense learning to program is really about learning to think clearly about a problem.

And that can be clearly applied to most aspects of life.

> The problem is that the list of things you should learn, as you imply, is endless.

That's not a problem, that's opportunity.

It's both. It's a resource management problem.

The effect of this post to me is that it makes me realize how vast the body of knowledge and skills is, and that is quite humbling. I must admit that I have tried around half the things on your list, but, as you imply, there is a larger list.

... learn to fly a plane; learn to fight with a sword; learn to design cars; learn to write novels; learn to make shoes; learn to design clothes ...

So in that respect, why should I decide that one of my skills is the most utile on the planet and thus, everyone ought to be familiar with it. We all wear shoes that only a minority of humanity know how one can be built from scratch, and virtually no one can build one from scratch without requiring input from professions he/she doesn't understand.

IMHO, this whole "Learn to code" thing is a bit egotistic.

[EDIT] Changed "profession skill" to "one of my skills"

I posted on Jeff's original HN posting... so I know what it's like to have one's arguments split over multiple tit-for-tat postings.

I also agree with what you advise that learning is good for its own sake esp. if it is a concrete skill.


But I think the "learn to code in a year" fad has less to do with normal concrete skills. A lot of the cheerleading present this mysterious "Coding" as some form of national imperitive.

I've seen references to how many 'coders' other countries have as some sort of Arms Race. More coders == better somehow.

Whilst I admit having zero coders is bad, I just don't think that happens in practice.

The best part about the general population attempting to learn to code is that there may be fewer people who think programming is magic.

It was basically one of the best days of my life when I was explaining to my grandmother a project I did at work. I said "I wrote some computer magic to make this job easier". She pointed to my laptop and said "can you show me? Can you explain how this works?" My grandmother was a homemaker wife to a farmer her entire life, and uses the computer simply for email and pictures of my newborn niece.

She might not be able to write a single line, but when I was explaining it at a very high level going through the code, it felt like she was trying to see how the computer would think. She's still of the belief that a computer can think on its own and we're simply asking it to do something for us (like you would a horse on a farm), but she really did want to know how I could teach a computer to do something it didn't know how to do before.

Exactly. This. <arbitrary Internet jargon indicating agreement>.

This article is the best-articulated explanation of why programming should be a core part of the college, and even K-12 curriculum I have ever seen. I just can't agree more.

An anecdote.

When my girlfriend was still in school she needed to collect a great deal of data for a project. It was available for sale from industry groups and such, but she didn't have tens of thousands of dollars for a membership. So she resigned herself to harvesting it manually.

When I noticed what she was doing I pointed out that I could make this process easier for her by writing a small computer program. A few lines of Javascript and Python later she had her data, and in a small fraction of the time it would have taken her otherwise.

I explained, in general terms, what was going on in the program and why it worked the way it did, and explained some of the changes I could make if she needed it to work differently. The programming involved here was not in any way difficult or clever. The interesting thing was that she had never even considered the fact that her problem could be solved using computer programming.

She commented to me a couple months later, after I'd helped her with a couple other small problems in the same vein, that she had started to see problems that could be solved easily with a little bit of code everywhere she went. I didn't coach this response out of her, she was honestly amazed at what could be accomplished and she continues to view the world differently because of this exposure.

Now, she certainly hasn't become a "computer programmer" since (and she likely never will). But gaining a basic understanding of what can be accomplished using programming tools has actually changed the way she views problems.

Edit: I noticed people are concerned that having too many people with just enough knowledge to screw things up might be a bad thing. In my girlfriend's case the opposite has been true. She hasn't all of a sudden decided she can solve every problem by writing some code (or convincing someone else to write code).

On the contrary, she actually has a better appreciation for how computer programs work and why writing a new one may not be a good idea in all cases. For example, she understands why a custom application requires maintenance, and that maintenance isn't just some trivial thing that you hire an intern to take care of. In fact, she has actually talked her boss out of having new applications created because she realized that the projects would likely end in failure.

You have missed the point. Your girlfriend did not need to learn to program in order to discover what can be achieved with a basic program.

For the common woman or man the revelation of computing comes from seeing what can be achieved, not how it is achieved.

You cannot in good faith separate the what from the how when passing on the "revelation of computing". To do so promotes ignorance among the populace.

But the worst part is that we may have more of unskilled and unaware of it.

Exactly. If more people have an intuitive understanding of what "coding" is then that makes professional coders' lives a lot easier.

Considering the proliferation of religion, there are bigger magic issue facing the world than coding.

This point seems to make the same assumption I've been seeing across HN that programming is somehow more _special_ than other fields/creative outlets. All of his points are the same for people who lack a deep understanding of physics, which quite frankly is far more relevant to our every day world.

I don't think you should ever discourage someone who _wants_ to program, I just don't think it's knowledge that everyone needs. Getting a general understanding of the way computers work (high level) would be far more useful to the vast majority of people.

I like this point. It is an important distinction and a good comparison to a related area, physics. Two thoughts, though, that I'd like to hear your thoughts on:

1. Don't we all learn physics? At least basically in school we learn about inertia and atoms and velocity. Sure we don't learn the hard stuff and our understanding is woefully incomplete. But the analogy would be "the physics we learn in school" and "things like conditionals, sets, graphs, types". 2. The utility curve of physics is a little different than that of programming. Both contextualize the world and give you richer understandings of it in a similar fashion. However, physics stops solving everyday problems sooner than programming does. I have never whipped out alternative spacetime topologies to solve an everyday problem. I have written tons of bots and things to automate my life.

Dunno, just some thoughts.

Fair points. I agree on the first (basic programming courses are now being offered by some schools, but they're not mandatory and far from universal), however I'm a little more hesitant on the second. Knowledge of physics is extremely important to solving basic problems you run into everyday, I just think it's so ingrained that most people don't think about it. Home projects like building a deck or wall mounting a TV for instance are examples of things that require basic understanding of physical laws in order to complete successfully.

I think your first points kind of undercuts your second in that we simply don't think about how physics helps us with our everyday problems since the basics have been ingrained since childhood. I agree that basic computer architecture/programming should be taught in grade school and will go further and say that if it was, it's utility would also fade into the background as we end up applying those childhood lessons unconsciously in our every day life.

You also end up getting an intuitive understanding of basic physics by doing everyday things like throwing a ball or riding a bicycle.

Right, and this is a barrier to learning digital domains. There is no physicalization of many digital ideas but, precisely by being digital, they do not map onto physical things. I can't run into a lambda on the street or have to fix a leaky loop in my roof. Sure, everyday things touch code but there's a reason why our instinct is to "blow on the cartridge" and not "fire up the debugger"

> lack a deep understanding of physics, which quite frankly is far more relevant to our every day world

Really? The average person needs as much physics as a great ape needs, which is essentially to just unwittingly count on it working. Very few -- if any -- of one's typical actions during a day would be simplified by a better understanding of physics.[1]

Meanwhile, the average modern person encounters software issues countless times a day. Many of those interactions pose a struggle that a modicum of computing knowledge would simplify, helping the person help the computer help them.

1. Except thermostats. Most everyone occasionally needs a refresher in thermostats versus HVAC capacities.

Really? I honestly can't think of a single computer problem that I have experienced recently (except those of my own programming errors) where knowledge of programming would have helped me solve the problem.

I think, perhaps, it's a matter of perspective. You can think of coding as "making a computer do stuff" in which case it could be less fundamental and important (but maybe more practical) than physic. Or, you could think of it as the study of information, which is as fundamental as physics.

Now, to be entirely fair, this is not "coding" but "computer science". (Which, coincidentally, is neither a science nor about computers.) However, I think coding is a practical proxy for computer science, so the idea is the same: it's not just a practical skill but also a deeper understanding of the world.

This author makes the point that general problem solving and programming are, in fact, the same thing, and you can't have one without the other.[1] I call foul on this: I bet programmers think in terms of loops, but because that's how they think. There are other ways to solve problems as well.

And many of the problems the author outlines really aren't problems. My Android app crashes, or my form doesn't submit. Yes, there's code underlying those problems, but SO WHAT. Why should a layman care about memory management?

Anyway, I find this a supremely short-sighted argument. But I think the crux of this whole series of discussions is around one question: Where on the spectrum of "things everyone should know" does "programming" fall?

We all agree that there are hundreds, if not thousands, of things about programming on that list. Reading, arithmetic, critical thinking, civil rights, personal finance, health, history, etc. And in a world where many people are illiterate, in debt, oppressed, and so forth, shouldn't we focus on those problems first?

[1] "If you don't know how to program, you filter out all parts of the world that involve programming. You miss the loops and divide-and-conquers of everyday life."

Ah, yes. You are absolutely right that I pooched the Android memory example. Laymen might not care and it might not help them. I think a better example might be someone copying information off a website. I've seen this happen a lot. Someone will have to print off name tags for an event but there's only 10 people per page. Copy. Next page. Etc. If they understood, say, the idea of scraping, they'd see a simple batch scrape and save hours if not days.

As you your other point though, about general problem solving, I think I was unclear. When I said you miss the loops and divide-and-conquers of everyday life, I was just trying -- perhaps too lyrically for my own good -- that you are unable to categorize the world into categories you do not know and cannot recognize. You can't see that the operation you do for every page could be abstracted into a loop, exectuable by a computer. You don't see that you don't need to compare all of your friends to arrange them by height, say for a sweet picture, but you can quicksort them. (Ok this is about as contrived as you can get but programmers have a hard time thinking of places most people don't see programming but we do. Because we see it everywhere).

Finally, sure we should focus on illiteracy, debt, oppression etc. We are working, though, on a lot of these problems programmatically.

It sounds to me like you're arguing less for programming and more for a) a basic algorithms class, b) an understanding of technology applicability to real-world problems, and c) the need for better tools to automate daily tasks.

You have to be a pretty good programmer to write a multi-page scraping script fast enough that it beats the tradeoff of just doing it by hand. Or you need to solve the problem another way. I guess that's what I'm getting at... the problems you're highlighting are real, but I don't think the solution is "learning about programming."

I actually like Atwood's example program:


20 GOTO 10

If everybody on the planet could write and understand that program, the average level understanding of computer science on the planet would have increased exponentially.

How does that old saying go, 'If you have to ask, then the answer is probably no'. It's shocking the number of people that show up on this site and ask, 'Should I quit my job and create a startup?'. Probably not. Should you drop out of college? Don't. Should you learn to code? Not really.

The amount of learning resources we have in this day and age due to the Internet makes the question 'Should I learn (blank)' egregious. If curiosity hasn't compelled you to look up an intro tutorial/book, then just forget about it. The first question you ask on the internet should not be 'Should I learn to code?', it should be 'Why won't my hello-world program run?'.


I wanted to add this to my original post because I think it sums up my point nicely:

"That which interests us in a given situation, that which we are likely to grasp in it first, is the side by which it can respond to a tendency or a need. But a need goes straight to the resemblance or quality; it cares little for individual differences. To this discernment of the useful we may surmise that the perception of animals is, in most cases, confined." - Bergson from Matter and Memory

Constraints on what we broadly know and understand are constraints on our contact and perception of the world. We can't live in a digital world and be blind to the recursions and graphs in the furniture.

I would venture to guess that there are at least a couple dozen skills which would do the average person more good than learning to code: playing a musical instrument, learning to do order-of-magnitude estimations, operate a few power tools, basic carpentry, basic calculus, et so many cetera.

Hell, just learning to spell better than the average HNer.

Not sure I agree, how many jobs are there apart from musician or carpenter where these skills would be especially useful?

Now think how many monotonous office jobs are there that could be at least partly automated by a few lines of script?

Also when I was at school we had compulsory music classes as well as compulsory design/technology classes that involved using power tools.

It's got nothing to do with learning skills for jobs.

everyone should have a programming class in school. Bio, chem, history, algebra, programming, geometry... Fits in nicely.

He wants to know if there are Knuth posters. There are. See this one: http://laager.firedrake.org/wardrobe/nils_knuth.jpg

Originally from ELER [1], I believe, but the shop is no longer in operation.

[1] http://geekz.co.uk/shop/

Haha, that's awesome.


Well that's because it was made up. He never actually said that.

Depressing. Another HN attention grab. The original article was interesting. This one's just words for the sake of it. The most depressing part is that I've now validated it with a comment.

> If you don't know how to program, you filter out all parts of the world that involve programming. You miss the loops and divide-and-conquers of everyday life.

decomposing large problems into smaller ones is math. we all took 10 years of math in high school and college.

a broad education is good. coding, in particular, may or may not be relevant, but certainly more and more schools include a year or two of programming in high school or college. that's probably plenty. no need to get all worked up about this.

The problem is that most people don't really learn much math at school. Most people will learn to add , subtract and do multiplication, some will even cram their brains with equations to pass a math exam and then promptly forget it all afterwards.

Programming provides a practical hands on may to introduce logical problem solving. It's something that could be used to supplement Math class.

I find it much easier to understand Mathematical stuff if I have written a program that implements it.

You have practical experiments in physics and chemistry but most people don't seem to remember much of them either.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact