
Everybody does not need to learn to code. - Libertatea
http://www.slate.com/articles/technology/future_tense/2013/08/everybody_does_not_need_to_learn_to_code.html
======
freyr
Every student should have, at least, exposure to coding and the opportunity to
learn it. This has not been the case in my lifetime.

In middle school, a special instructor was brought in to teach programming to
the GATE kids. She decided she could only handle one student. So out of the
entire class, only one kid was exposed to programming in school

When it was time to enter high school, there were two public schools in the
area. One had an AP Computer Science class, but the student body was notorious
for its high rates of drug abuse. My parents stuck me in the other, which
offered no programming classes at all.

In college, I applied to be a CS major, but I was required to choose a second
major since CS was impacted. The school admitted me into my second choice of
major. Despite pleading my case with the CS department and arguing with the
provost after I enrolled, I was unable to switch into the CS major or take CS
classes.

I don't mean to whine. I'm sure I had it a lot better than many self-taught
programmers. And maybe if I fought harder, I would have gotten in. But the
education system did me no favors in learning CS.

And when I see politicians and Silicon Valley billionaire executives lamenting
the lack of skilled programmers in the U.S. while doing nothing effective to
fix the problem, I have to roll my eyes.

~~~
throwit1979
Sorry, I don't intend to cast aspersions on your upbringing, but why does
class availability matter at all to this discussion? Myself, and everyone in
the small group of middle school kids at my school who were interested,
learned programming from books. Our school was extraordinarily poor, so the
whole notion of CS classes was laughable.

~~~
kd0amg
I remember trying that when I was in middle school and discovering that the
local library did not exactly have a great selection, and I didn't know anyone
who could recommend good resources. Searching the web kept bringing up the
same few overly shallow tutorials which didn't even explain how to actually
run a program. It's less of an issue today, but finding good resources to
learn from matters.

~~~
throwit1979
Our library was also mostly useless. Maybe it's opportunity cost, then. We
lived a ~5 hour drive away from anything resembling a city, so purchases of
anything other than food were very infrequent. This allowed us to save up
until the next trip to purchase a few C++ or Pascal( yeah I know )books from
Bookman's and a cheap (student edition can be had when you're 10 years old
without a student id) copy of turbo c++. That would last a year of learning.
The next year, perhaps a VESA graphics book, etc.

------
samatman
Disagree. Everyone needs to learn to code.

I was taught long division as a child. Didn't like it; who does? Nor do I use
it.

But...

When I was 15, I finally got a chance to study programming. One of the first
things our professor showed us, was how to do string-based long division, with
a computer.

The enlightenment was profound.

Why was I doing this, when everyone else was learning to symbolically find
quadratic roots on paper? Why do we teach algorithms for years, and never,
ever teach Algorithms if you don't specifically ask? Why is Al-Khawarizmi's
legacy in education Al-gebra, and not Al-gorithms, which are actually named
after him?

~~~
samatman
Let me elaborate. Anyone who has participated in the math education of a
child, or remembers being one, has heard the compliant "But I'm just going to
use a calculator! Why do I have to learn this!"

Currently, the answer is "if you want to get into college / learn more
advanced things, you have to learn to do this, all by hand."

The answer _should_ be "Well, if you want to get into college, you're going to
have to learn how to program that calculator yourself. So you need to
understand how to do what it does, or you can't tell it what to do".

The difference is huge.

~~~
ethanbond
Both answers are either incorrect or inapplicable to a large portion of the
population.

The real answer has always been that you need to learn intuitively what
"division" actually means, and we have no clue how to teach that, but doing it
by hand seems better than the alternatives. I'm not sure if teachers just
choose not to phrase it this way or they don't know either (in which case the
real reason is because they were told not to allow calculators). But
calculations are easy. Intuition is hard. Until we have better ways to teach
intuition, I'm afraid we'll have to keep trying to let kids build it via
forcing a slow-down of the thought process by having them do it by hand.

A better example would be integrals and antiderivatives. One can certainly
learn how to "find the integral" just by using antiderivatives. One could
learn how it applies to the real world, as well. "A ball is moving at 30m/s
for 10 seconds, what distance did it travel?" Increment the exponent, divide
the coefficient, plug in X.

But then kids approach, say, revolutions of solids. Suddenly, due to the way
they're taught, they think that there are different formulae for rotating
about the x and y axes. If they're taught how to construct the Riemann
summation from scratch, see the relationship between that and integrals, and
see the relationship between a curve and its revolution, I think _that 's_
when they start to get the idea of what an _integral_ (not an antiderivative)
really _is._

It's the difference between saying:

 _I want to find the volume of y = x^2 rotated about the x axis_. I have the
function and I know I need to multiply it by the formula for a circle and then
integrate it.

vs

 _I want to find the volume of something_. I can describe each point on the
cross section. Each item in the summation can be described as circular. I can
describe all of these circular sections at once by adding them all together.
The integral is that sum. I can find that integral by finding the
antiderivative of the original description.

Which seems more "true?" Which is more difficult to teach? If kids always used
calculators to pursue question 1, they'd never arrive at the problems that
would let them arrive at question 2.

------
jusben1369
Let me ask, earnestly, why is learning to code better or more important than:

\- Studying medicine at school so you can avoid engaging with the expensive
medical system for all but the most critical issues? \- Studying law so that
you understand how to read contracts and understand legislation?

Mathematics and language are the building blocks of programming. We study
those. Going further upstream into the outputs of those disciplines (medicine,
law, computer science) to pick compulsory topics doesn't strike me as making
much sense.

Also, how do we reconcile this with the emphasis on design whereby the concept
of the underlying nuts and bolts should be abstracted away from the end user?
(two very separate questions I know)

~~~
Volscio
I would figure a lot of what you pay a lawyer for is not making sure you
understand the contract but a) to save time and b) to have someone who's in
the profession and knows the legal quirks, loopholes, and procedures.

I would figure a lot of what you pay a doctor for is not to mend every problem
you have with your body to but to ensure that it's done timely, safely, and
with the least amount of risk/damage/scarring/whatever as possible. Yeah you
could probably do your own surgery but why?

Learning to code is hardly as serious an undertaking and yet it teaches you
how to think about solving a problem, estimating time to solve that problem,
and reducing the amount of time needed to create the solution to that problem.
It teaches general problem-solving skills and at the very least can lead to
recreational uses (building small games or family web sites).

I think problem-solving is probably one of the most important skills one needs
in his toolbox to succeed in life and so why wouldn't it be taught as early as
children can comprehend it?

~~~
jusben1369
Hey Volscio thanks for that. I agree that problem solving is great skill to
have. Philosophy long filled that role but has fallen a little out of favor. I
studied it (minor) at University and many of the lecturers pointed out (mostly
in a hope to keep us engaged and motivated) that some of the world's best
philosophers make a small fortune on the side with paid engagements for large
corporations. Corporations literally give them problems that they cannot solve
in terms of the market and philosophers solve them. While somewhat skeptical
at first I was ultimately very impressed with how philosophy taught a
disciplined approach to problem solving

------
zeckalpha
The ability to program is the literacy of the millennium. One thousand years
ago "Everybody [did] not need to learn to read", yet today, many countries
have a near 100% literacy rate.

However, I don't think we need to force today's programming languages upon
people. Let's invent the printing press of programming languages, making the
cost of learning to program much easier. (IFTTT is working on this.)

~~~
cgore
The best example of this are spreadsheets. There are plenty of people who
don't think they can program and don't think they have any need to program,
but will write some really insane things in Excel. They just don't realize
what they are doing is programming, poorly. The great advantage of computers
isn't "better TVs", it is that they are "compute-ers", and anybody who has an
office job has a real use for one.

------
mathattack
Of course not. And everyone doesn't need to learn how to drive. Or speak
Spanish. Or cook for themselves. Or balance credits and debits.

But people who can do any of the above proficiently have many doors and
options open to them that others don't. And those who can do it at least a
little bit can at least have some awareness for when they hire someone to do
it for them.

~~~
bobbbinsIII
most people can learn to drive, learn another language and learn to cook. a
much smaller number of people can learn to code competently.

~~~
walid
Trust me, I don't cook competently, but I live alone and can get food done
when needed. We don't all have to be professionals at something but we need to
understand it especially when our lives depend on it. Take medicine for
example, I'm also not a doctor but that didn't stop my school from forcing me
to learn biology (which I loved btw) and I think we should all know things
about the world when we deal with them on a daily basis. I also didn't major
in electronics but I still know better than showering and cleaning the innards
on the hair dryer with water while it is plugged in.

It is the mentality of imperative knowledge that should be considered when
talking about teaching programming. Not the idea that all people should know
how to compile Linux.

~~~
mathattack
You caught my spirit perfectly. A little biology knowledge can help
interacting with a doctor. It's silly to assume people should know how to
compile their operating system, but an appreciation and understanding for how
data is aggregated and manipulated is useful.

------
kailuowang
IMO, one of the main benefits of everybody learning a bit computer language is
so that they can understand better how computers think, which is quite
different from people.

In an age when people are starting to interact with computer more than with
other people, it's certainly valuable.

I don't worry too much about novices building shitty things, because debugging
crappy code takes way too much energy then learning the language, from my
knowledge, nobody enjoys that unless they get paid. And IMO corporations
hiring crappy programmers is a problem that has nothing with everybody
learning to code.

~~~
michaelwww
I think you make an important point here. People should understand basic math
and basic programming, if only to protect themselves from charlatans. If more
people understood basic financial math we wouldn't have as severe a credit
crisis as we had recently. People would have understood the risk in all those
crazy loan offers (no income - no money down - no problem!) Congruently, when
companies of the future say "trust our computers, they're artificially
intelligent" people are going to have a little knowledge to base that trust
on.

------
jjtheblunt
The title is crap English, but common: ignorance of De Morgan's laws means the
universal quantifier "everybody", in its position relative to "not", means no
one should learn to code. (Engineer with a Germanic Linguistics minor pet
peeve.)

The proper wording for what the retarded author intended (it's Slate, after
all) is "Perhaps not everybody needs to learn to code" or similar, but the not
needs to negate the universal quantification. Because negation is not
commutative with quantifiers, what the title says is not the same.

~~~
qu4z-2
Technically it doesn't mean "No-one should learn to code", it means "No-one
needs to learn to code."

------
npalli
Well atleast the guy training others in the opening picture needs to :-). He
is mixing cases in javascript (defined TXT and doing txt.toLowerCase()).
Perhaps an HTML dude who is doing javascript.

~~~
da02
There's also the use of document.writeln.

I'm no JS expert, but... I thought that was a big NO-NO.

~~~
cruise02
document.writeln is generally frowned upon in production code since there are
better ways to manipulate a page using the DOM. I still see it used
occasionally for debugging (although even that usage is disappearing, as most
browsers have some form of debug console available) and in tutorials and books
for beginners.

Here's a Stack Overflow post that outlines some of its pros and cons.
[http://stackoverflow.com/q/802854/1288](http://stackoverflow.com/q/802854/1288)

------
crazygringo
Nobody needs to learn how to code, any more than they need to learn contract
law, or organic chemistry, or welding, or music composition.

People talk about code "literacy" as though it's the 21st century equivalent
to reading and writing, but this is crazy -- even as a programmer, I don't
interact with any of my devices via code. Being a programmer doesn't help me
troubleshoot Windows or get my printer working. I don't configure my apps on
my iPhone using code; I use their preferences screens. I don't have databases
I need to query using SQL, anywhere outside of my job.

Programming is a profession, period. It's not a generally useful skill like
riding a bike is. It can be useful to teach in schools, but only in the same
way high school chemistry is -- not so the general population learns it, but
just so the students who might want to choose it as a career, have enough of
an initial taste of it to realize that.

~~~
mistercow
>Being a programmer doesn't help me troubleshoot Windows or get my printer
working.

I think that is partly an artifact of closed source OSes. When I used OS X, I
almost never fixed a problem with programming (other than a problem like "I
don't have a program to do this"). Having switched to Ubuntu, I actually have
found programming to be a useful way to work around problems.

Sometimes there's a "right" way that involves digging through documentation to
find some random option, and an easy way that involves writing a shell script.

>It's not a generally useful skill like riding a bike is.

I totally disagree. It's not _as_ useful as riding a bike, but it's certainly
useful even when not used professionally. I recently was working out a recipe
for a "one food to rule them all" inspired by soylent, and I wrote a program
to calculate the ingredient proportions. It had nothing to do with
professional programming, and it was incredibly useful.

------
codegeek
"does not need" can be applied to pretty much everything. But the point is not
that. The point about learning to code is simple: It is definitely one of the
important drivers of the next few decades. 100 years ago, most people could
not read/write in many parts of the world. Today, thats not the case. Why ?
Because reading/writing is an important part of how we live our lives today.
Same with computers. Yes you don't need to learn how to code and still know
how to use a computer. But that is _today_. Who knows 20 years down the road,
coding (at least some kind of hacking) will be part of what we do on a daily
basis ? Food for thought!!

Learning to program also teaches you a thing or two about problem solving and
critical thinking. I have a 5 month old daughter. Guess what I will get her to
play with as soon as she is old enough to start hitting the keyboard ? Yep, it
will be programming.

------
geekbri
I used to work for the company that started this initiative. It's all just
marketing fluff. A friend of mine who was there during the entirety of this
initiative said that out of the 30 ish people who were forced to do this only
1 took it seriously. He also felt it was a severe waste of the engineers time.

------
jliechti1
From a practical standpoint, I really wish everyone was taught enough
programming to know how to automate basic manipulation of text data. I see way
too many people editing long lists of data by hand, when there are much better
ways to go about it (even Excel works great for this kind of stuff).

Just knowing this setup below can let you do some really power automation of
manual tasks and can save you a lot of time.

Example template in Python:

    
    
      import csv
      with open('mydata.csv', 'r') as csvfile:
           reader = csv.reader(csvfile, delimiter=',', quotechar='"')
           for row in reader:
               # Data manipulation here

~~~
Jach
I have more or less the same viewpoint. There are big gains if everyone
understood how much time code loops can save, and if they started to see the
areas of their lives where a manual task could be cast into an automatic task
without much work.

But this suggests a different way of teaching intro programming, one that is
more tool-based than concept-based, a way that's about searching for the
existence of a tool and then finding and reading its documentation or examples
so that one can use it in a simple, encapsulating control program. If you
don't know about the existence of imagemagick, are you going to think you can
loop through all the images in a folder and resize them, or extract a subimage
from them, or something else, without having to write a ton of code? Maybe
not, but you might search for a command line program to do the hard part and
discover the tool, or it might have been part of an intro programming course
focused on "look at all the neat things general computers can do to save you
time if you have this problem". Same thing with Python's csv module, which
someone who has used Python for over a year in a CS class may not have even
known was there all along. There are lots of powerful one-liners and small
code chunks that deserve a lot of respect since they can save so much time.

------
jmilloy
The logical fallacy here is arguing a general statement using a
specific/narrow instances of it: "learn to code" is a very broad statement,
and the differing opinions seem to stem from choosing (different) specific
meanings.

When someone says "everyone needs to learn to code", they probably don't mean
that everyone needs to become an expert. It's the same when we say "everyone
needs to learn math" or "everyone needs to learn how to write."

On the other hand, when people say that "no, everyone does _not_ need to learn
to code", they tend to compare learning to code with software development,
graduate level physics, etc.

~~~
walid
Totally agree. Programming should be in the school curriculum just like any
other subject. Not everyone is going to be a coder, doctor, engineer or lawyer
but we all need to know some (not extensively though) basics of each
profession.

------
kyllo
I would say that not everyone needs to learn to develop software. Software
development is a sufficiently difficult and complex job, that is best left to
trained experts who do it full-time.

But everyone should learn how to use their computer effectively. Everyone
would be better off if they were a "power user." And in the current state of
computing, the complexity of computer architecture is not yet sufficiently
encapsulated as to render it unnecessary to attain basic competency in some
programming language in order to achieve that.

In other words, in order to leverage your computer's full power, you need to
learn some scripting language and be comfortable operating your computer from
a shell (be it bash, cmd, powershell, whatever).

Most people don't seem to have a clue how many degrees of computer literacy
there are. The assumption seems to be, that you are either "computer
illiterate" (which means you are an old person who hunts-and-pecks at the
keyboard, double-clicks everything, and can at most use "the Googles" to do a
search), or you're a "normal person" who can touch type and operate a GUI and
_maybe_ do basic formulas in MS Excel, or you're a "geek" who can read and
write any type of programming code, build me a website, fix my internet
connection, disassemble and repair my computer hardware, etc etc and you
probably slid out of the womb knowing how to do that stuff. Yet somehow, you
are still only making a modest hourly wage working at the Genius Bar or the
Geek Squad.

Where most people really should be is somewhere in between the "normal
person," GUI-only level, and the imaginary super-geek, computer whiz level.

------
Dogamondo
"Everyone should learn how to change a tire". That was what was lamented when
I was a kid, so we learned it in boy scouts.

Let's take it a step further... "Everyone should learn how to change a cam-
belt", "Everyone should learn how to perform a basic car service"..."Everyone
should know how to rebuild an engine".

How far do you want to take it? I agree with the OP, moreso nowadays that we
move more to consumption based computing devices.

To continue my analogy of the motor car to coding, to me both are really on a
'need to know basis' in the modern landscape.

You don't really need nor may be able to easily learn the intricacies of how
your car works these days as they're a lot more sophisticated than the
vehicles of yore and they're also lot more reliable when it comes to their
intended purpose.

Does operating your iPad need anywhere near the learned skill of running
programs on the C64 of yore?

~~~
walid
The thing is you are taking the learning metaphor a step further every
sentence. You do need to learn the basics of maintaining a car if you own one.
You might need to know about changing tires and also making sure the radiator
has enough water in it. These are basic things and equally apply to computers.
Not because you need to build a car or compile a computer program but because
without basic education you don't know how to properly manage the computer
like you do your car. Can you also imagine how much less bad computer laws
will exist if lawmakers knew a little bit more about computers rather than
rely on trial and error to get things right?

------
fournm
I'm more in favor of everyone learning CS theory (primarily logic really and
anything else would just be icing on the cake), which would be a more
transferable and honestly useful skill.

As it is, the most states try to bake learning how to write formal logic
proofs into geometry and they do it fairly poorly.

------
cruise02
View the article on one page.
[http://www.slate.com/articles/technology/future_tense/2013/0...](http://www.slate.com/articles/technology/future_tense/2013/08/everybody_does_not_need_to_learn_to_code.single.html)

------
garg
Programming is problem solving. Fine, don't learn how to code, but how about
learning how to solve problems? And learning how to code is certainly
something that can assist in learning how to problem solve.

------
daja
A lot of school kids don't even have basic math or writing skills. I see the
geek appeal of everyone learning to code, but it's really not practical. There
are far greater concerns. I think a personal living class should be required.
Kids don't know anything about opening a bank account, loans, renting an
apartment, etc.

------
agumonkey
Maybe not domain[1] specific languages, but recursive logic is cleansing for
the mind.

[1] if by 'learning to code' they mean 'call a few ad-hoc libraries to process
and format strings into <foo> concrete syntax' then I'd say it's domain
specific and it's useless outside the current trend.

------
danso
This is one of the better essays arguing against "learn to code" because it
actually acknowledges that there are real benefits to learning coding that
don't relate to working in an IT job, just as there are real benefits to
learning to write that don't relate to being a published author.

But I disagree with the notion that, as the OP states, that learning to code
is futile because "most who “learn to code” will end up learning anything that
sticks."

One of the most common niche phone apps I've seen used day-to-day, among my
peers, are apps used to calculate tips from a bill. Even though the math
needed to do so is trivial: it's literally a concept mastered by fourth or
fifth grade. Yet these tip-calculating apps are popular. Obviously, math is
not something that "sticks" in a practical way with most non-STEM
people...yet, why do we bother spending roughly one-third of the K-12
curriculum teaching and testing it?

Well, from my layperson's viewpoint, I'd argue that while many people lose the
ability to _do_ math, they at least understand that _it exists_. They may not
be able to multiply 0.15 or even 0.20 against a whole-dollar amount in under
30 seconds, but they at least get the concept of _percentage of a whole_ ,
and, if there are multiple diners, the concept of division and order of
operations (you want to divide the bill _after_ adding the tip).

Would they understand this without _any_ education in math? I'm just a
layperson but I'm guessing that such a concept could be totally foreign to
someone who has _never_ learned division. At the very least, if such a person
were given a malicious app that incorrectly calculated the tip (on the order
of 2 to 3x, in favor of the server), that person would have no idea that they
were being fleeced.

So I think that it's too early to give up on coding just yet...there's a
middle ground between baking out a skeleton Rails app and having _done_ enough
code to understand logic and computational thinking for the rest of your life.

~~~
bluedino
>> They may not be able to multiply 0.15 or even 0.20 against a whole-dollar
amount in under 30 seconds

I don't know how you would even need 30 seconds to do this. Lets say our bill
is $62.50. Finding 20% of that is simply multiplying that by 0.20, which is
also just multiplying by 2 and moving the decimal point over on stinking
place.

2 * 62.50 = $125.00 ~ 12.50

It's that simple. I don't even think about it. Maybe people just see '20%' and
that scares them.

Maybe that's where the problem lies. Your average non-coding person might
spend all day trying to figure out how to sort a list of names but it would
come naturally to a C+ programmer like myself, and come even faster and in a
much better algorithm/implementation to someone who's a _good_ programmer.

------
tbirdz
Perhaps learning to code shouldn't be required for the general populace, but
maybe it should be in higher education, perhaps just for a scientific degree?

