

On Atwood's Please Don't Learn to Code - esmooov
https://gist.github.com/0f61db65bbd2d2cb681a

======
delinka
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.

~~~
Tyrannosaurs
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.

~~~
DanI-S
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.

~~~
tomcorrigan
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.

~~~
stcredzero
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.)

~~~
craigvn
People do have no idea how cars work.

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

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

~~~
stcredzero
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.)

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

~~~
glesica
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.

~~~
tomcorrigan
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.

~~~
angersock
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.

------
Maascamp
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.

~~~
esmooov
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.

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

~~~
esmooov
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"

------
basseq
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."

~~~
esmooov
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.

~~~
basseq
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."

------
jiggy2011
I actually like Atwood's example program:

10 PRINT "I AM THE MAYOR"

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.

------
runawaybottle
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?'.

<http://en.wikipedia.org/wiki/Analysis_paralysis>

------
esmooov
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.

------
MaysonL
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.

~~~
jiggy2011
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.

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

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

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

~~~
esmooov
Haha, that's awesome.

------
dustingetz
> 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.

~~~
jiggy2011
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.

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

------
tbundy
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.

