
Please don't learn to code - AndrewDucker
http://www.codinghorror.com/blog/2012/05/please-dont-learn-to-code.html
======
jkahn
I really, really disagree with Jeff Atwood here. Jeff has interpreted "learn
to code" with "become a programmer". They're not the same thing. I don't think
that is what this meme is about at all.

Programming is logical thinking in practise. Programming is breaking a problem
set down, thinking step by step through it, thinking of edge cases, and making
it work. There is nothing wrong with Jeff's BASIC example, if that is where
the mayor of NYC ends up.

There was once a time when books were only read and written by an elite group.
Now everyone can read - and everyone can write. There are still the elite
authors that write better than the rest of us. Just because everyone can
write, doesn't mean everyone is trying to be a professional author.

Computers are a part of society. To function well in society, it's beneficial
to understand a little about how they work, and how to make them do things.
The essence of programming is making a computer do something more efficiently
than you can.

Programming isn't just the advanced stuff - recursion, pointers, functional
programming, or whatever. Maybe Jeff is too far down the rabbit hole to
realise this, but _most people don't know what programming even looks like_.
They don't know how we tell computers to do the things they do. Recently I was
with a customer, making notes about changes I needed to make to their
application. They asked me "Is that how you make it do that?". No - that was
my TODO file. And these are people that work on computers all day, every day.

It's beneficial if marketing folk understand the basics of programming when
they're doing web ads. It's useful that CAD engineers know the basics so they
can automate AutoCAD. Its useful that financial accountants know basic
programming so they can become more efficient with analysing data.

If the mayor of NYC wants to learn to program in his spare time, why the hell
not? I bet there wouldn't be the same complaints if he wanted to learn how to
surf.

edit: grammar

~~~
SatvikBeri
With a couple of months of programming knowledge, I wrote a program that saved
my company $2MM/year. The key was combining knowledge of the business
processes with _some_ knowledge of programming. There were people with
knowledge of one or the other, but not both.

I still can't write a basic app, but that doesn't matter. I can do things that
provide massive value, and I wouldn't be able to do them without programming
knowledge.

I think Jeff is underestimating how much time the average office worker would
save simply by learning Excel Macros or some basic scripting. Learning to
program is really damn valuable, especially in fields where most people don't
know any programming.

~~~
patdennis
I agree with this wholeheartedly. My line of work could be made much easier
through some very simple software. The only reason that software doesn't exist
is because (I assume that) nobody with programming knowledge understands the
needs of someone who does my job. Or cares, for that matter. There aren't many
of us.

I'm working my way through Ruby on Rails tutorials simply because I think
there's tremendous value to be created without the need for anything
groundbreaking. Just tailored.

And if I'm right, I'll be able to afford to hire someone to fix my crappy
code.

~~~
lifeisstillgood
If you are right there are probably a hundred people on here able to provide a
working MVP alongside you and do it faster, cleaner and pick up on solutions
you cant possibly know yet. Be a domain expert.

But learn to code anyway :-)

~~~
patdennis
I'm sure anyone here could do that. But how many people here are looking for a
non technical co-founder? Coders are solving their own problems, and until I
can hack together a prototype I don't think I'll be able to draw any attention
from real programmers.

~~~
rapind
I think I'd actually prefer a pure domain expert who can express their
business and ideas well than a half-assed programmer.

No offence, but what often ends up happening is you turn into a know-it-all
client. "This should only take an hour. You just have to loop over these
results and format them...".

Finding a technical co-founder is a sales process where you need to prove that
it's a good idea and that you've made a significant investment yourself (I
would prefer if it wasn't code) like thinking through the interface, and as
many use cases / stories as you can think of, and describing in detail the
problem(s) being solved.

The pitches we hate are the guys who know you through a friend who want you to
make a Groupon-like application for their specific market, without having
invested more than the 5 minutes it took to write it down while baked. I'm
still not going to be sold on this idea even if they manage to throw together
some terrible PHP site that sort of acts like a real application.

That being said, I'm in the boat that thinks at least some rudimentary
programming skills would be useful for everyone.

~~~
sirclueless
> you need to prove that it's a good idea and that you've made a significant
> investment yourself ... like thinking through the interface, and as many use
> cases / stories as you can think of, and describing in detail the problem(s)
> being solved.

That sounds exactly like the skillset of a good software engineer. This whole
debate is about the fact that a whole bunch of people don't know how to break
down a large problem into small logical pieces.

"describing in detail the problem(s) being solved" is about the most concise
and accurate description of programming I can think of. Asking someone non-
technical to do this is like asking a ramen noodle-eater to describe in detail
the process of flambéing Steak Diane.

~~~
rapind
I agree it's a good skill to have in many careers, software engineer included,
but it is definitely not the definition of programmer. If you wanted to map
this skill to a profession, I'd probably go with Business Analyst being the
closest.

Breaking a problem down into solvable parts is something I was taught in math
and it was invaluable. I'd written programs before and after that, so I
wouldn't say that this technique makes you a programmer. Rather it's an
approach you'll need to be a good programmer.

Asking someone non-technical to describe the problem they want to solve in
detail is completely within the realm of reason. Non-technical != moron.
Knowing how to do this, does not make you a programmer. Likewise, being a
programmer doesn't make you good at this.

------
exDM69
I recently learned how to plumb a little. Now I can do minor household
plumbing fixes without having to hire professional help. A very useful skill
indeed. I know it's a demanding activity that requires more than reading a
book and knowing how to hold a wrench, so I know to stay away from the serious
pipes and stick to little fixes.

~~~
philbarr
Exactly - everyone _should_ learn basic plumbing! Not the best analogy he
could have used.

~~~
maguay
He did say that everyone should learn some basic concepts of programming,
which I think we could all agree with. Perhaps everyone shouldn't know how to
create the next Gmail, but surely there's an advantage to us all knowing how
_for_ loops work and how to write a bit of simple code (perhaps just doing
math and text basics in Ruby). Many schools already teach this as a standard
part of their curriculum using Basic.

------
shin_lao
I don't like this post and what it implies.

If tomorrow you want to learn to cook, how would you feel if a master chef
told you "No, don't. You'll never be as good as me. If you're hungry, come to
my restaurant instead".

I think there's nothing wrong with learning a new skill, whoever you are,
whatever you do.

Learning new skills is what makes us human.

~~~
MortenK
But should it be mandatory for everybody to learn cooking on the same level as
reading and writing? Is it such a basic requirement, that we're decreasing our
children's chance of success, if we don't teach them cooking (edit: Again, on
the same level as reading and writing)?

Apart from at least a fundamental ability to use a stove, it is naturally not
that crucial of an ability. The argument of the blog post is that it is the
same with programming, i.e. It is not a necessity to succeed in life to know
how to code.

I don't think the point of the post is to discourage anybody from learning to
code. Rather it is a counterpoint to the recently heavily promoted idea that
programming is somehow a necessary life skill.

~~~
mseebach
> we're decreasing our children's chance of success, if we don't teach them
> cooking?

Yes. Knowing cooking is paramount to feeding yourself and your family cheap,
healthy meals.

~~~
MortenK
Yes of course. But do you need to teach kids cooking from first grade until
they start college, on the same level as math, reading and writing?

~~~
mseebach
I don't care about the schedule on which any of those things are taught, just
that they are taught.

------
nadam
1\. It is ridiculous to tell somebody not to learn something in his spare
time.

2\. Atwood says:

"at least high school level math are fundamental to performing the job of a
politician. Or at any job"

Do you know what is high school level math? It is a seemingly randomly
selected subset of mathematics in fact based on mostly the scientific and
engineering needs of the 19th century. What is included in 'highschool-level
math' should be evolving. For example basic programming knowledge is more
fundamental in today's society than trigonometric equations, coordinate
geometry, logarithmic equations, etc... (all of which is high-school math).

Very basic programming could (and should) be part of basic math education.

------
mseebach
That article is so full of strawmen, it's not even funny.

The existence of individuals who wouldn't gain much from learning to code does
not imply that no one will gain much from learning to code.

I have a hunch that the vast majority of regular office workers has at least
some portion of their work which can be trivially automated. Knowing how to
code maybe allows these workers to go and code up a script - but even if they
can't, it might allow them to identify this and state their work in terms of
programming, thus vastly lowering the barrier to getting someone else to do
the actual programming.

A workforce that can accurately say "this is a computers work" opens
floodgates of productivity increases.

~~~
jiggy2011
That's true, but not necessarily something that office workers would actually
want.

Many workers actually sort of enjoy mindless repetitive busy work since it
makes you brain feel like your achieving something vs difficult work where you
might spend weeks stuck on the same problem.

Case in point:

A fair number of years ago I worked a non tech office job for a few months.
Basically a large portion of the job was checking though a spreadsheet looking
at figures and checking them against a corresponding row in another part of
the sheet. Assuming the figures matched you would copy the figures elsewhere
in the sheet, append some characters to them and mark ones that were wrong in
red. The data I think came from some legacy database.

There were a few more steps that I don't quite recall but basically they
provided a list of instructions on how to do this part of the job and I
immediately recognized that this was basically psuedocode, there was nothing
"human" required at all. They expected a human error rate of around 1% with
this and sheets were often checked twice.

A few days into the job I decided to try writing a Macro to do this job, so
that night at home I wrote my macro and emailed it to myself. Next day I
loaded it up, ran it and then checked the results by hand. I did this until I
was satisfied that the error rate was 0.

Next few days I just started running my macro instead of working by hand,
meaning I got about 3 hours work done in under a second and could spend the
rest of the day doing other (marginally less monotonous) work.

Now in this office they tracked people's productivity levels as well as their
error rate, so naturally I end up with obscene performance stats and no
errors.

So the team manager of course asks me to explain myself and I show her the
macro and offer to show her how to set it up on other computers and explain
how well I tested it etc. The response I got surprised me somewhat.

"You are cheating your stats!" was what I was told. Of course I explained that
it wouldn't be "unfair" if everyone had the software. Now at the end of every
month they had some (cheap) prize for the person with the highest productivity
and lowest error rate and since other tasks were not so easily "scored" the
spreadsheet task was a big part of the deal.

No matter how I tried to explain it was like hitting a brick wall, because in
her eyes I was "cheating". They had been doing this monotonous work for so
long and were so used to it that wasting probably hundreds of man months was
preferable to questioning if there might be a better way.

Of course I offered to forfeit any "prize" I might win (despite potentially
saving them thousands of pounds), but no we type figures and then somebody
wins a prize at the end dammit!

I imagine this sort of brain damaged thinking is common in far more
organizations than you might imagine.

~~~
mseebach
If anything, your anecdote supports my hypothesis that simple programming can
unlock large productivity increases.

Your team manager made a career out of incentivising busy-workers, then
suddenly one of the workers come along and proves her, her work and her neat
floor of busy-workers pointless? Of course she's going to push back. Nobody
likes to be made pointless. That doesn't make her any less pointless, and it's
for the better of everybody that she stops being pointless.

------
rauljara
Unlike most of the top comments, I actually agree with Atwood's conclusion, if
not all of the arguments he uses to get there.

I don't particularly care about the accumulation of bad code. I don't
particularly think that summer of code people are going to be accumulating all
that much of it that will be shared.

And I do agree that learning to program is a totally worthwhile and mind-
expanding skill. But I can say that about a lot of the skills I've picked up.
From driving a tractor(1), to the little bit of plumbing I've learned; to
playing an instrument; they all involve problem solving; they all make you a
better thinker; they're all fabulous to learn in and of themselves.

If forced to choose one of these skills, I'd say programming is in fact the
deepest. But they all have enough plenty of depth for someone who's only going
to be exploring them casually. And I don't feel like the summer of code
mentality is over-hyping programming so much as its undervaluing all those
other worthwhile skills.

There's plenty of worthwhile stuff to learn in this world. It's okay if you
want to learn a few of the other things instead.

(1)Yes, operating a tractor and making use of its attachments does involve a
lot of problem solving. I drove one as part of a job for a year and a half,
and the guy I worked under could do so much more with it than I could that I
was in awe.

~~~
WiseWeasel
100 years ago, Summer of Plumbing or Summer of Tractor Driving may have
attracted a not insignificant participation. In present day, not so much, as
coding has become the infrastructure of our society.

------
edw519
Programmer Hierarchy:

    
    
      Level 0: (Many bosses I have had)
      Level 1: "Hello World"
      Level 2: Does something
      Level 3: Updates a data base
      Level 4: Solves a little problem
      Level 5: Produces value
      Level 6: Sidetracks other programmers to maintain
      Level 7: Provides a platform for other value producers
      Level 8: Solves big problems
      Level 9: Still produces value years later
    

Everyone should get past Level 0.

If you're going to get to Level 6, I'd prefer you just stop at Level 5.

If you get to Levels 7,8, or 9, thank you.

~~~
gaius
Classical programmer fallacy: equating cleverness with value.

There are plenty of level 3 cheesy little Access and VB apps that any
"serious" programmer would laugh that that are level 5 or 9 on your scale.

~~~
Sherlock
That's true. This should have two axes (at least). One with "domain specific
knowledge" and other one with "programming expertise".

Indeed, when domain experts reach some arbitrary level of programming
expertise, many good things may happen.

------
srconstantin
I'm kind of the villain of this piece -- a relatively novice coder who expects
to apply for programming-heavy jobs in the future.

Here's why I think I'm not actually a villain:

1\. I'm not under any illusions that people should pay me mega-bucks because I
can program at all. I haven't hit my 10,000 hours yet; closer to 1000. You
should hire me because I'm a mathematician who can program, not because I'm a
hacker genius. Often, being an "X who can program" is much more valuable than
just an X. It means you can execute your ideas yourself; and it means you have
a clear concept of _which_ ideas can be executed computationally and which
cannot.

2\. I couldn't just "quit programming" any more than I could quit writing or
quit reading. I could resolve to, but I wouldn't last long. I've found that
when something makes my brain happy, but isn't technically "my job," I'm much
better off following instinct and doing it anyway, rather than forcing myself
never to have any side projects.

3\. You're worried I'll contribute to the volume of bad code in the world?
Well, just because there are more experienced programmers than me doesn't mean
I'm dishonest or stupid. I make a point to be very frank about what I can and
can't do at the moment. I've found that the stuff I _can_ do is quite valuable
to people. I don't try to bluff my way into projects I'm obviously not
qualified to contribute to.

~~~
jkahn
I think you're much closer to a programmer than a layman that programs.

The straw man about reducing the amount of bad code in the world is garbage.
Just code. If you're getting a benefit from it - or hell, if you just enjoy it
- do it. You have nothing to apologize for.

The whole elitist concept of only sanctioned programmers coding is just
arrogant. Even the best programmers wrote awful code before they were great.
Doesn't mean they shouldn't have kept it up.

~~~
nollidge
It's like trying to cut down on the amount of bad writing in the world. Sure,
I guess aesthetically it'd be nice if I never had to look at any bad writing.
But bad writing is part of the process of becoming a good writer, so there'd
ultimately be less _good_ writing out there.

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

------
d4nt
I think the whole everyone should learn to code this is right, but a little
ahead of its time. A little like saying that peasant farmers in the bronze age
should learn to read and write. While 100% literacy is now acknowledge as a
good thing it took a while to get here. A farmer these days absolutely needs
to read and write. But a bronze age farmer? Not so much.

I personally think that one day it will be impossible to function in society
without the ability to manipulate and query data. To use Jeff's example, as
Mayor of a large city there must be mountains of data that might be relevant
to every single decision that is made, and the mayors who can query and gain
insight into that data quickly (without having to write a spec and get someone
else to do it for them) will eventually be more successful, to the point where
all mayors will be expected to be able to manipulate data.

There are a number of things that need to happen before that though:

Firstly, the tools need to get a LOT better. I put our current development
tools somewhere a kin to Egyptian hieroglyphics. You can do basic things like
record the births and deaths of kings, but could Shakespeare have written what
he did in hieroglyphics? I'm guessing not. (Although I bet someone somewhere
has done a translation!)

Next, this vision of the future is based on the amount of data in the world
getting a LOT bigger. To the point where intuition or past experience simply
can't compete with the people who are mining the data.

Politics will probably be one of the last professions to convert, the cultural
change will take a while to work though. The first professions will be the
kind of things where Excel is used heavily at the moment (you could argue that
Excel is a programming environment). Professions like Marketing, Manufacturing
(which will become predominately robot driven at some point) and Medicine
(which will become heavily influenced by generic programming) will probably be
early adopters. But one day, I think "programming" in the sense of giving a
"machine" a series of logical instructions to follow, will be universal and it
will simply be impossible to live a normal life without that skill.

EDIT: Fixed ironic typo ;)

~~~
gordonguthrie
> current development tools somewhere a kin to Egyptian heiroglyphics. You can
> do the basic things like...

Ah, no. Heiroglyphics is just somewhere between an alphabet and syllabary -
there are 60 odd symbols and they match to sounds like 'a', 'ts', 'gh'.

The stuff you see in museums is the 'posh' stuff for best, there is a quick
writing version of it (also known as heiratic) where the full pictures were
made more abstract.

> Could Shakespeare have written what he did in hieroglyphics?

For 3,000 years everybody did. Oh, and don't forget little things like
inventing hydrolic engineering in hieroglyphics.

Hieroglyphics is as good a writing system as this text I am typing.

> You could argue that Excel is a programming environment.

Actually Excel/spreadsheets are THE programming environment - used by millions
of people every day to perform their daily work - loads more than use obscure
programming specialist dialects/paradigms like Ruby, or Java or whatever.

~~~
d4nt
I acknowledge you know a lot more about Hieroglyphics than me. But my comments
were based on the understanding that it was really the development of an
alphabet by the Phoenicians that took writing from an obscure system to
something usable by every day people. Maybe this isn't the case?

Also English is widely acknowledged to be a very expressive language compared
to, say, Swedish which has a sparser every day vocabulary. I'd be surprised if
you told me that the nuance of the finer English texts could be adequately
captured in Hieroglyphics.

I agree, Excel is a programming environment. Could do with better version
control and debugging though.

~~~
gordonguthrie
I'm sorry there is no evidence that a particular language is 'better' than any
other.

All human languages have very similar every day vocabularies - English happens
(now) to have a very large specialist vocabulary (which wasn't available to
Shakespeare) and which it actually shares with most other languages.

Shakespeare got his vocab up by generating a host of new English words from
French, Latin and the other dominant languages of the time.

As we speak the Kiyuku Shakespeare is stealing words for his play.

> the nuance of the finer English texts could be adequately captured in
> Hieroglyphics

On a technical point you could copy Shakespeare into it now - it has (most) of
the current English sounds and with a couple of conventions/accents you would
be good to go. I wouldn't recommend switching writing systems anytime soon.

~~~
d4nt

        > All human languages have very similar every day vocabularies
    

I spent a lot of time working in Sweden and had many conversations with the
locals (all of whom know English very well). Many of them remarked that
English has more alternative words for something than Swedish and that each
one has a subtly different meaning. For example, how you can use "grand" in
place of "big" or "large", they all mean roughly the same thing but "grand"
brings with it additional meaning. So, my personal experience appears to
contradict this statement.

My point is really that languages and alphabets are tools and some tools make
certain jobs easier. You _could_ write a website in assembly, but its easier
in Rails. However, I suspect our ancestors will look back at Rails and have
similar feelings to us when we look back at ancient writing systems now.

------
blackhole
Almost all of these arguments can be applied to a large majority of our school
curriculum. If you are arguing that people shouldn't learn to code for the
sake of learning to code, you are correct. If, however, you don't actually
think learning to code translates to solving problems, or has any real world
benefit, you should also be insisting we remove all of Math from our school
curriculum, because who uses anything beyond basic algebra? Hell, who uses
anything beyond basic arithmetic now that we have calculators that can do
algebra and calculus for us? Why teach kids anything?

I should also point out that, the more politicians know how to code, the less
politicians treat computers as black boxes that "the nerds" need to perform
magic with. It won't go away, certainly, but its a step in the right
direction.

~~~
adeelk
_[...] you should also be insisting we remove all of Math from our school
curriculum, because who uses anything beyond basic algebra? Hell, who uses
anything beyond basic arithmetic now that we have calculators that can do
algebra and calculus for us?_

Mathematicians, physicists, astronomers, chemists, economists, statisticians,
engineers, meteorologists, actuaries, biologists, accountants, etc.

~~~
chrisdone
I think all of the jobs that you have listed involve using computers to
automate, manage and solve problems.

Except rather than how we wield writing algebra or English pros, with advanced
skill giving us the ability to express elaborate and abstract concepts, most
people are computer illiterate.

Their use of the computer is analogous to knowing nothing about algebra or
English, and choosing predetermined sentences to write pros, or choosing
predetermined equations to do algebra. If what you want to express isn't
supported, or what you have available isn't what you want, you're screwed.

People should be able to accomplish what they want with a powerful language.
English and Maths are both powerful languages that are tools for modelling
life and facts, coding models process and automation. It's not essential in
the same way growing up in the Amazon rain forest where maths and arithmetic
beyond "one, two and many" isn't essential. It's undoubtedly desirable and
beneficial, however.

------
TeMPOraL
I'll leave the part of "coding is important because computers are everywhere
and learning how to automatize everyday things is a great skill" to others, as
there are lots of excellent comments about it in this thread. Let's talk about
something different:

> But understanding variables and functions, pointers and recursion? I can't
> see it.

Hey, I'd argue that understanding _exactly those_ things are what should be
included in "everyone should learn to code". All of those are difficult mental
constructs important for understanding how our complex world works. Let's look
at it case-by-case:

variables - this is basic; the idea to take something (a concept) in your hand
and manipulate it by a symbolic name. This is, in some way, taught in high-
school math, but somehow many people don't seem to grasp the idea behind the
concept of a variable.

functions - ability to take a set of instruction and name it. Possibly have it
parametrized. That's simple. But naming several sets of concepts, and then
using them to build another layer of concepts, which is then used to build
another layer of concepts... I'd call this an essencial problem-solving skill.

pointers - concept of indirection; for people not accustomed to it, it's easy
to get lost in different levels of indirection when discussing things (like, a
difference between 'belief' and 'belief in belief', or P, proof of P, proof
that P is provable, etc.)

recursion - because not everything circular is invalid; sometimes things
defined in the terms of themselves are the simplest way to go.

To all of this I'd also add one more, IMO essencial, thing - understanding of
_feedback loops_. It could cut out a lot of discussions about whether X causes
Y, or Y causes X. Surprise surprise, it might be a _feedback loop_ , in which
X and Y are interlocked, and are both to blame.

Bottomline, programming teaches us a lot of important skills and mental
constructs useful for problem-solving and understanding how the world works.
And those skills are hard to get elsewhere.

A silly example from high-school biology: what is genetic code if not opcodes
for protein assembly machinery? DNA "data" is code that programs machines
building proteins. Easy to understand and remember if you know even a little
bit about how 'automation'/'computing' is done.

~~~
adeelk
_Bottomline, programming teaches us a lot of important skills and mental
constructs useful for problem-solving and understanding how the world works.
And those skills are hard to get elsewhere._

I definitely support the notion that everyone should learn problem solving
skills, but people can take different paths than programming: mathematics,
natural sciences, and even chess, for example.

As Richard Rusczyk, founder of Art of Problem Solving, says, “We use math to
teach problem solving because it is the most fundamental logical discipline.
Not only is it the foundation upon which sciences are built, it is the
clearest way to learn and understand how to develop a rigorous logical
argument. [...] This is not to say that those who cannot do math cannot solve
problems. There are many paths to strong problem solving skills. Mathematics
is the shortest.” [1]

And there have been many studies on the relationship between chess and problem
solving, including this one by Ferreira and Palhares [2].

[1]
[http://www.artofproblemsolving.com/Resources/Papers/ProblemS...](http://www.artofproblemsolving.com/Resources/Papers/ProblemSolving.pdf)
[2]
[http://www.math.umt.edu/tmme/vol5no2and3/TMME_vol5nos2and3_a...](http://www.math.umt.edu/tmme/vol5no2and3/TMME_vol5nos2and3_a7_pp.249_256.pdf)

~~~
TeMPOraL
> I definitely support the notion that everyone should learn problem solving
> skills, but people can take different paths than programming: mathematics,
> natural sciences, and even chess, for example.

I agree, though you'd have to go far over the school level of maths to get
such benefits. Also, given that CS is a part of math, you can't avoid it if
you want to learn some mental structures - we actually DID invent a new way of
thinking in the last 100 years. And CS should be, in my opinion, tangled with
programming, for a mortal to understand it and have fun with it at the same
time.

So, in other words, by all means study math, but catching a bit of CS
knowledge and programming skills at some point should be a natural consequence
of it.

~~~
adeelk
_[...] you'd have to go far over the school level of maths to get such
benefits._

Not at all. Even deriving the formula for the sum of the first n positive
integers is something that requires problem solving skills while not requiring
more than school-level maths.

 _Also, given that CS is a part of math, you can't avoid it if you want to
learn some mental structures [...] by all means study math, but catching a bit
of CS knowledge and programming skills at some point should be a natural
consequence of it._

Huh? Physics is more a part of mathematics than computer science is. And I
don’t understand what you mean by “mental structures”.

 _we actually DID invent a new way of thinking in the last 100 years_

Could you explain what you mean by that?

Anyway, my point was that you can’t argue that everyone should learn
programming just because it’s a way to learn problem solving.

------
grovulent
So I wrote a piece advocating why everyone should learn to code:

[http://reviewsindepth.com/2011/04/why-everyone-should-
learn-...](http://reviewsindepth.com/2011/04/why-everyone-should-learn-to-
program/)

I don't think Jeff's piece undermines any of the reasons I put forward there.

Going through his points one by one.

It's easy to agree that you should ideally write no code - but of course the
ideal assumes that all the provided interfaces in the world provide you with
everything you desire, need. The point is that the world is such that most of
the time this is not the case.

It does not assume that coding is the goal. It assumes that there are always
various goals that have not been met by existing interfaces or infrastructure.
(i.e. that the ideal in the first point can never be achieved in reality)

It doesn't necessarily put the method before the problem. It's just assuming
that the many of the problems faced by a majority of people (or everyone) in
western society can be solved with code.

His next point speak to professionalism in coding. In large software projects
- you absolutely need professionalism. But many problems people face don't
require large software projects to solve. I give an example in the linked
piece above of a problem I solved with code that certainly didn't need a large
software project.

His final point - it does not imply this thin membrane between professionalism
and being an amateur coder. In fact - I advocate the complete opposite, yet
still think everyone should code. I'm not sure why he thinks it does imply
this - so its hard to argue against him here. To me it's prima facie not the
case.

~~~
maxerickson
I have a similar thought, where even simple programs allow use of the
computer, rather than just the software available on it.

------
angusiguess
A human being should be able to change a diaper, plan an invasion, butcher a
hog, conn a ship, design a building, write a sonnet, balance accounts, build a
wall, set a bone, comfort the dying, take orders, give orders, cooperate, act
alone, solve equations, analyze a new problem, pitch manure, program a
computer, cook a tasty meal, fight efficiently, die gallantly. Specialization
is for insects.

-Robert Heinlein

As much as I believe (and I do) in the importance of technical and
mathematical literacy, it's no more important than the perspective that can be
gained from, say, learning to knit or beatbox. There are very few skills that
don't teach some sort of methodical problem solving, the rest is just domain.

------
brc
I get what he is saying, not everyone can or should be a programmer. But if
you take 'learn to code' as a euphemism for learning how to build an excel
spreadsheet properly, how to write a macro to automate your job, something
like that, then, well learning to write a bit of code isn't a bad thing at
all.

We all benefit when we learn a little bit about another profession, whether it
is painting or plumbing, bricklaying or baking. In that context demystifying
coding for the average person isn't a bad goal. Just to clue people in that
tough solutions they have might be easily solved is a good thing. Getting
people to wrap their heads around logical thinking is definitely a good thing.

------
jiggy2011
Whilst I agree to the extent that I would dread the monstrosities brought to
birth by a huge programming populace, I can't agree with the overall article.

I think the comparison with plumbing is apt, but not in the way he intends.
Let's say I turn on my tap and no water comes out, now I know nothing about
plumbing but at least I know that the water comes to the tap through pipes so
perhaps one is blocked or leaking?

By the same token if my car engine won't start then I can hazard a guess that
it's perhaps a failure in the ignition system or the starter motor. I can also
reason that the engine works by combustion of fuel, so it is logical that if
the fuel tank is empty I won't get very far.

Contrast this with computers, the average person has literally no conceptual
model whatsoever of what is going on beyond the fact that they require
electrical power.

Of course people learn the buzzwords from the media to make it sort of sound
like they know what they are talking about. I remember years ago people
bragging about their "64 bit" console despite not having the slightest clue
about what a bit was or why it should matter.

This makes it easier for people to buy media scare stories about "hackers" etc
as well as not _really_ understanding what it means to protect themselves
online (beyond installing some AV software and praying).

It might also make life a little easier for people who are not technical to
specify software requirements. For example many times I've been given a spec
like "if X happens then do Y", of course X is never one thing, it is a
combination of a large number of sub conditions that are dependent on various
external variables etc.

When you try and get somebody to explain in detail all of these subconditions
to you so that you can make the software correct people will often take you
for being overly pedantic because they understand intuitively what they mean
by X and can't quite get the fact that the computer doesn't.

------
marcusf
I doubt Bloomberg uses eight grade chemistry, biology or physics in his day
job either. We still teach the sciences -- if nothing else than as a way to
entice kids to continue studying it and keeping a steady influx of engineers
in to society. There is nothing different about computation, per se. Instead
of a teacher droning on to kids about how to surf, let them learn how to do
webpages, or robots. Get them excited about CS and try to disspel the notion
that the machine they're sitting by is in any way, shape or form magical and
archaic.

As for Bloomberg at this phase in his life picking up coding, probably not. On
the other hand, he made his fortune in part via hardware and software, so I
doubt he's completely clueless about it even now.

~~~
primecommenter
Most of us use most of a lifetime of knowledge in our day jobs, and machines
are magical.

~~~
marcusf
I don't think you truly believe that though. Most people who hack daily have
at least a basic working model of the computer. There's a compiler parsing,
generating code, there's possibly a VM executing bytecode, an operating system
managing memory, scheduling, network and other services, below that there's a
CPU executing some representation of assembly code, it's in turn composed of
some sort of a logic array, etc. etc. I'm not saying you know the inner
workings of everything.

It's more along the lines of, we teach physics with the aim that people
finishing high school should have a vague notion about at least newtonian
physics, some electromagnetism and the scientific model. For computers, we
teach how to open Word, check your e-mail etc. Stuff kids know. What they
don't know is how this all ticks, and I think there is certainly value in
helping kids construct a vague mental model of it all, and how to apply
certain parts of it to a screen they'll probably interact with 4-16 hours per
day for the rest of their lives.

------
YmMot
This largely misses the point. I agree that it's not "essential" and not
_everyone_ should do it, but it's still more valuable than I think Attwood
gives credit for.

I'm perhaps in a unique position to comment, having recently taught my
girlfriend to program. So I can talk about how that played out.

My girlfriend understands menus, she knows about links, she can install
software, she can use word, she can type away like no other, and even fix some
problems. If you watched her using a computer it'd seem like she had a pretty
good affinity with this black box.

However, I don't think most programmers realize what a holistic approach the
average person (even a relatively tech savvy one) takes to computers. They
only understand them at the highest level. They develop fetishes and
incantations to fix things. When something goes wrong my girlfriend will turn
the computer on an off. She'll turn the router on and off. Etc. Or just click
"ok" until it stops complaining. It often fixes the problem, but it's just
something she's learned to do with little understanding. She goes to the store
and can pick out a decent phone or laptop, but only because she's developed an
intuitive semi-understanding of the lingo. This one has more gigs, that's
better...etc.

The computer will do things they don't understand, except some vague notion
that the computer is "dumb".

I asked her one time how a computer works because I was legitimately curious
how people without any instruction in comp sci etc visualize it. She had
absolutely no idea of even the most fundamental workings of a computer except
that it had something vaguely to do with "ones and zeros".

I taught her binary. I taught her boolean logic. I showed her binary math. I
gave a very basic example of how you can use circuits to do binary math. I
made her sit at a desk and act as a processor. Then I explained the concept of
bootstrapping.

Then I taught her a little bit of Python.

Enlightenment.

She understands garbage in - garbage out. She understands dependencies. She
understands algorithmic complexity. She understands types and formatting...and
much more. (at least generally, which is enough).

This mysterious box no longer seems capricious and opaque. She has a much
better understanding of why her computer behaves the way it does and therefore
feels more at ease. Sure she can't magically fix anything, but she's
recognizing general patterns more and more.

She installed Ubuntu recently in fact, and has started writing Python scripts
(and Bash!) to assist in assorted data processing tasks she used to do by
hand. When my girlfriend needed to update batches of reports, she would up
each one BY HAND and change them. Using a computer was frustrating and scary.
Learning coding won't improve her life? Seriously?

Would it make him a better mayor? Not necessarily but it sure could help. I'm
sure he uses a computer and I'm willing to bet the less time the mayor spends
screwing around with a computer or waiting for tech support the better.
Likewise, I'm sure he has all sorts of tedious tasks which don't warrant third
party software but which could be tackled by a nice Perl script. That doesn't
even take into account the boost in (general) analytical thinking that comes
from programming. Ditto for potential refreshment in Math.

Who says it needs to make him a better Mayor anyway? What if he just wants to
be a better person?

In addition to being a programmer, I happen to be a musician as well...which
puts me into contact with a lot of artists. I'm always surprised by how much
they could benefit learning programming because a lot of art involves hacking;
creating weird one off contraptions...often requiring lots of tedious work.
Many want to experiment with technology and art, but are unsure how.
Processing could blow some minds. Ditto Overtone.

Using a computer is largely about software; and software is similar to arts
and crafts in that it's a reflection of the creator and the tools they used.

Learning about an artist helps you interpret the meaning of their work.
Learning about the techniques help you evaluate and appreciate their work.

Learning to code makes you sympathize with the people who wrote the software
you use. It helps you understand how software is put together. Which is good,
because the more you sympathize with the author and the more you understand
how it fits together the easier time you will have using it.

To be fair there are _a lot_ of things I feel everyone should learn. I think
it's fair to say though that out of all the ones you could pick, learning to
program will be more beneficial practically relative to most others.

> Research voraciously, and understand how the things around us work at a
> basic level. Communicate effectively with other human beings.

I think this is the heart of the misunderstanding between sides. Learning to
program is actually the first step in that. He mentions having "basic internet
skills" as a necessary life skill. Learning some programming will greatly
facilitate that.

Likewise programming will introduce concepts and develop skills that help you
understand technology in general. It even helps in in non-technological areas.
It facilitates communication because it forces you to confront and think about
how difficult it is to communicate certain things clearly.

~~~
Derbasti
Well spoken, but not all people are like your girlfriend. To most people,
learning a bit about programming would primarily be an exercise in
frustration.

~~~
shadowmint
Hate to say it, but that seems like a rather arrogant thing to say.

I'm great believer that anyone can get to be _reasonably_ good at something if
they invest enough time and effort into it.

It's the classic logarithm curve; when you have no skills in a field, you can
learn a few skills really easily (steap curve). Then, as you get better, your
progress for effort-expended goes down until you're basically a domain expect
(flat line; no matter what you do you basically dont get any better).

This applies to ANYONE on ANY field; the curves are just different; and I'd
argue the steep part of the curve is pretty long for programming (compared to
say, I dunno; learning differential equations).

Despite the great them-and-us divide that geeks (and here I generalize based
on the geeks that _I_ know personally) seem to have to 'other people' who are
'dumb' ... people are, in my experience, generally smarter than you'd expect.

I'd rather encourage people to learn a little bit, than tell them to go away
because they're probably not smart enough. <\-- This is arrogant as f __*, and
if I see someone do it, it makes me angry... although, I realize you weren't
directly saying that, so please, take this as a general comment, not as a
criticism of you personally. :)

~~~
Derbasti
Sorry, but back at the university, I gave several semesters of tutorials in
programming for beginners.

It's not that people are 'dumb' or 'smart'. It's just that some people have an
easier time with some topics than others. I have seen people who really
struggeled with the basic concepts after three courses (not my courses ;)).
Others understood it far quicker and with much less work.

I'm not saying that these people were dumb. They usually excelled in other
areas, just like I am seriously unable to keep a plant alive for more than a
few months (believe me, I tried!).

As I said, to some people some topics are an exercise in frustration. It's not
that hey _can't_ learn it. It would just be really painful and boring to them.

------
tomstuart
This is a depressingly philistine perspective.

A basic grasp of computational thinking has never been more important. It's
become a prerequisite for making informed decisions about the world we live
in.

The world may or may not need more working programmers (or mathematicians,
novelists or plumbers), but why wouldn't we want to teach these elementary
skills to as many people as possible?

~~~
Nate75Sanders
Yes.

Came here to post something along these lines and to link to this 2006 article
by Jeanette Wing, head of the Carnegie Mellon computer science department:

[http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing0...](http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing06.pdf)

------
ig1
If you understand how to code you have a much better idea of what's achievable
by code and what's not.

(incidentally given Michael Bloomberg has a degree in electrical engineering
and he founded a multi-billion dollar tech company in the 80s I'm pretty sure
he can code already; even if only in fortran)

------
corin_
> _the mayor of New York City will hopefully spend his time doing the job
> taxpayers paid him to do instead. According to the Office of the Mayor home
> page, that means working on absenteeism programs for schools, public transit
> improvements, the 2013 city budget, and … do I really need to go on?_

Being a Mayor means it is his job, not his life, outside of work it's not our
business to tell him he's wasting time regardless of whether he's learning to
code or reading the first Harry Potter book over and over again.

~~~
alanbyrne
Not to mention the fact that the tax payers don't pay Bloomberg a salary to do
his job, he does it for free.

------
tezza
I applaud 'Learning to code' if it defined as:

* taking problems and reducing them to a sequence of repeatable instructions and decision points (branches)

.

I think 'LtC' is irrelevant if defined as:

* I wanna make iPhone apps / Facebook plugins / Instagram ... Where do I get the Magic Handshake for the Mega $$$ ?

~~~
emilis_info
Not really. I learned to code Pascal 16 years ago, because I wanted to make
DOS computer games.

And here I am now: 10+ years of professional web-dev experience, spoke at
local dev conferences, won awards for my work, etc..

What I learned during all these years is that methodologies and models help
you after you learn how to build apps/plugins/games/whatever. And still they
won't save you from wasted hours hunting an accidental typo.

------
koningrobot
I think the most profound lesson to be learned in programming is how complex
everything is. Computers aren't "dumb" -- they just don't share our language,
culture, biases, etc. You have to specify everything exactly. If anyone has to
be dumb, it's going to have to be us. Evolution helped us make sense of the
complexity with a bunch of highly complex and very leaky abstractions --
"person", "God", "love", "nature", "property", "fairness", "consent" etc. Only
when you try to describe these concepts to a clean slate such as a computer do
you realize how complex the world really is. Moreover, these allegedly
meaningful things all boil down to meaningless physical states and
interactions, so you also get to realize that everything is pointless and what
was it again that we are doing here?

------
maebert
I respectfully disagree. Learning to read is a necessary skill where most of
the world's information is written - but to be productive, to create, to
contribute, you have to learn to write. Code is the same: whether that's a
good thing or not, more and more of your surrounding, of your environment will
depend on - code. Fortunately, a lot of services have made it very easy to
contribute to this augmented world without coding yourself, but you will not
be able to understand the basic mechanics of this augmented environment
without basic code literacy.

Why should a mayor learn to code? Well, I don't expect him to be a Java nut,
but I do expect leaders in politics to grasp the basics of privacy, security,
productivity, cost and benefits of the coded world surrounding us.

------
primecommenter
"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?"

If anything should trickle down, it would be the joy and satisfaction of
acquiring a basic competence.

~~~
gaius
Or maybe he could found a company making trading software, amass a fortune,
and get elected mayor of New York City...

~~~
primecommenter
... and then profess to study that which his generational peers have foregone.
If only we could all be mayors of NYC!

------
guynamedloren
> _the mayor of New York City will hopefully spend his time doing the job
> taxpayers paid him to do instead. According to the Office of the Mayor home
> page, that means working on absenteeism programs for schools, public transit
> improvements, the 2013 city budget..._

Given the context, this remark is so frivolous I honestly think it may have
been made in jest. But just in case it wasn't:

1) Bloomberg has declined the $255,000 salary. He receives $1 per year. This
certainly says something about where his priorities lie and how he views his
position as the mayor of NYC.

2) Regardless of salary, I have a feeling Bloomberg wouldn't let programming
overtake his life and prevent him from fulfilling his responsibilities.

------
loso
I think most of you are taking the post too literally. He is going against the
rising trend of post implying "EVERYONE SHOULD CODE, IT'S GREAT, YOU WOULD BE
CRAZY NOT TO, ITS SO EASY". It almost sounds like an infomercial. Of course
anyone who is interested should learn how to code. Anyone interested should
learn a bit about plumbing. And about home wiring, and car repair, and...the
list goes on. No matter what skill level you actually end up achieving if you
are interested in coding go for it. But lets not pretend as if it is for
everyone. And lets not pretend that a majority of the people would even be
interested. Most people hate taking Math in school and they complain when they
get older that they never use it. The same with a lot of other subjects in
school as well.

Whats more important is that the computer stops becoming a black box for the
average user. They should be taught the basics when it comes to how it works.
It would not only help make it easier for the average person to use, it would
help with security as well. If we teach basic programming skills to make that
happen then I'm all for it. Coding is not the important part, understanding
the machine is.

------
CodeMage
Hey, Jeff, here's another way you could look at this:

"I wish I'd thought of [this]... The need for _people who can read and write_
has never been greater. This is a fabulous product at the right time" -- Tim
O'Reilly, Founder and CEO, O'Reilly Media

"A young man asked me for advice for 'those who aren't _people who can read
and write_ '. I said he should try to become a _person who can read and write_
" -- Fred Wilson, Partner, Union Square Ventures

------
singular
As many others have pointed out, I think there are two sides to non-
professional* coders learning to code, one of which I agree with
wholeheartedly, the other I disagree with, equally wholeheartedly:-

* As in paid to sling code - I don't mean to cast elitist aspersions with the term 'professional'.

The Good

Learning to harness the amazing realm of creativity that computers offer -
unlike other fields of engineering, you aren't limited by the need for
millions of pounds and a team of people to turn your idea into reality, nor
are you constrained by the laws of physics or possibly killing people should
your calculations turn out to be incorrect.

For example, I am slowly writing a chess engine, it's such a joy to explore
that because _I want to_ and it's interesting to me.

There is a core kick that many people get out of programming, which is when
you actually get something working, knowing that you made the computer do
that. I wouldn't want to take that away from people.

Another aspect is that, should somebody learn enough to make some aspect of
their life easier, that could even be simply learning some vba to automate
some process which used to take them several hours, that's worth a lot too.

The Bad

People thinking that coding is easy and straight forward, simply because
they've learnt to do something trivial or played around with code a little
bit. I have met several _professional_ programmers who have had the same
opinion and then gone on to produce the most horrendous, unmaintainable,
broken code imaginable _and_ get paid a lot of money to do it all the while
producing quite awful software.

I wholeheartedly agree with Jeff's point that this sort of attitude is _not_
something we ought to encourage. If people more generally think of coding as
something easy, then the kind of programmers who produce shitty code and think
it's fine will be emboldened and we will be doomed to experience yet more
broken software in the world. That's the last thing we need.

There's a element of pride in all of this, admittedly, but it's still a very
real issue. Good programmers don't get enough respect, nor does good
programming and we don't want to play with that.

The cooking example cited by shin_lao is a great analogy - you don't want to
discourage people from coding, quite the opposite, but don't think what you do
is the same as Pierre Gagnaire, or even the guy working in the kitchen of that
cafe you like down the road.

I do want to add that yes, the good can lead to a good professional
programmer, but it's critical that it be realised that, as Jeff says, you need
to put in your hours, whether the Gladwellian 10k figure is accurate or not.

~~~
mindcrime
_I wholeheartedly agree with Jeff's point that this sort of attitude is not
something we ought to encourage. If people more generally think of coding as
something easy, then the kind of programmers who produce shitty code and think
it's fine will be emboldened and we will be doomed to experience yet more
broken software in the world. That's the last thing we need._

I sort of agree with you, but this also strikes me as something of a vacuous
truth. I mean, think about applying it to any other domain: Does the fear that
homeowners will start thinking of plumbing as "easy" and start overreaching
their abilities mean we should quit selling monkey wrenches at Home Depot?
Does the fear that auto owners will experience delusions of grandeur and start
thinking of themselves as professional mechanics mean that Sears should quit
selling Craftsman wrenches and Chilton repair manuals? Etc., etc.

The point is, all fields have a range of knowledge and skills from total n00b,
amateur, up to professional. And in every other field, amateurs and
professionals co-exist peacefully, and no one seems to be arguing that we
should prohibit minor home repairs by home owners, oil changes by car owners,
etc. I don't see why programming should be any different. If business people
learn to write a few Excel macros, or even some small Perl, Python or Groovy
scripts, that's not going to hurt those of us who are working professionally
in this field.

------
phuff
I was talking to a friend in HR and finance at a company. He has some
processes they go through for placing bids with customers that are horrible
and based on people copying and pasting lines from one word document into
lines in another. That's the way their core business is done. Copy and
pasting. Yes, it's inaccurate. Yes, the sales guys sometimes for get to update
all the documents with copying and pasting causing large business problems. I
have repeatedly tried to convince him: "Write an excel document with a few
macros!" Their bottom line would profit from such a spreadsheet. He just
doesn't have the minimal knowledge he needs to do it.

Best part: he works at a technology company, with a technical staff. That
makes millions and millions of dollars a year.

I appreciate Jeff's sentiment, but he's missing the huge swath of people that
could benefit from just a little (admittedly not great and half broken)
programming knowledge.

------
res
I was hoping we'd see another fine article from Jeff Atwood on the important
distinction between coding and programming, something that is sometimes
derided as largely pedantic, yet never fails to arouse interesting discussion.

Unfortunately, this seems to be a more blunt, standoffish interpretation of
Peter Norvig's classic article on the long road to programming competence
"Teach Yourself Programming in Ten Years." Jeff Atwood even references the
article in this post, which I find disheartening, as Peter Norvig never once
says something like "Don't even bother." Self-improvement is hardly a
fruitless endeavor, and while not everyone is capable of writing good code,
much less making a living off of it, there are a lot of wonderful things you
could learn about yourself through such an undertaking. Plus, there are far
less productive/interesting ways for people to spend what precious little time
they have.

------
johnbender
"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?"

I certainly can't, but the sample set of one doesn't make for a convincing
body of evidence. Moreover he's chosen to cherry pick someone in a position as
a figure head/leader who has to delegate nearly all of his work as a function
of time constraints. Generally speaking, Michael Bloomberg shouldn't learn to
code but it wouldn't hurt if one of his advisers did.

"You should be learning to write as little code as possible. Ideally none."

This conflates individual programming best practices with a desired limit on
the total amount of software written across teams and programmers.

"It assumes that coding is the goal."

Wrong. Most proponents of software education want people to understand the
domain enough to function and _maybe_ get things done.

I stopped reading at this point.

------
rpsw
The thing is, programming can help automate basic tasks. Anyone who uses a
computer regularly can benefit from this fact. Sometimes, these tasks are just
throwaway scripts - but they save time.

I mean, even learning Excel and it's various functions is a form of
programming and undoubtedly a valuable skills even for a politician.

------
sol1_sc
I think the real sentiment needed is not "learn to code", but more "learn what
coding is, how it might benefit you and also just what it entails".

I also can't help but think baby-steps are required. There are so many people
who don't even think about how software is created - learning to code is about
three layers away from where they are at to begin with. Simply learning the
basics of how software comes to be and a basic underlying structure of a
computer would be a good starting point.

Anyone can learn how to write a few lines of a computer programming language.
Understanding more of the basic principles of software development and
computer architecture would be much more beneficial. That is my personal
opinion.

------
athalius
"On two occasions, I have been asked [by members of Parliament], 'Pray, Mr.
Babbage, if you put into the machine wrong figures, will the right answers
come out?' I am not able to rightly apprehend the kind of confusion of ideas
that could provoke such a question." - Charles Babbage

Mr Attwood has a point, in that average Joe certainly doesn't need to program
in order to understand their domain better. But I would ask rather then, how
can one educate people on how machines work other than writing code ( I seem
to remember what little was done in my education about computing, taught me
little about the practicality of _why_ in a machine )

------
fistofjohnwayne
The other day a friend of mine was playing Taboo. Her word was "network" and
she'd been prompted with "what makes the Internet work" or something similar.
Her initial guess was "magic".

This is why I believe the "learn to code" movement is fantastic and an obvious
net benefit to society -- the more people we have who understand, even
loosely, how integral pieces of our lives function, the better.

To me it has nothing to do with these people producing code or entering the
programming profession. I devour books on psychology but I don't entertain the
notion of becoming a psychologist. I read them to inform and improve my daily
life in some small measure.

------
equilibrium
I'm going to quote Zed Shaw in response to this article. "Programming as a
profession is only moderately interesting. It can be a good job, but you could
make about the same money and be happier running a fast food joint. You’re
much better off using code as your secret weapon in another profession. People
who can code in the world of technology companies are a dime a dozen and get
no respect. People who can code in biology, medicine, government, sociology,
physics, history, and mathematics are respected and can do amazing things to
advance those disciplines."

------
jroseattle
After reading Jeff's post plus the comments here, it seems we in the
programming industry can certainly agree on: lots of assumptions.

Assumptions about how much value is involved for a programming neophyte.
Assumptions about what one would do with a little knowledge. Assumptions about
how valuable the study of programming is for an individual. Assumptions about
what one can be empowered to do, once gaining a little knowledge. I'm sure
there are more. Our assumptions may not be equal, but we sure have no problem
making them.

No matter if you support Jeff or feel he's way off base, there's a lot of
judgment involved this topic, and we should really just stop for a second. As
professional developers/programmers/architects/etc., it's easy for us to have
opinions on this subject and find any scenario to support any argument one way
or the other. The exercise of positing an argument, one way or the other, is
actually unnecessary.

For us to judge if something has value to someone else, a little or a lot,
makes assumptions about how someone will discover, learn, expand, grow. In
spite of our experience in the field, making such broad assumptions might be
accurate in some cases, but the variability of outcomes shouldn't be
underestimated. Should we encourage everyone to learn? Maybe, but I don't
assume it's the best use of time for everyone. Should we encourage everyone to
go deep, perhaps enter the profession? I'm not sure of that, either. But I do
know that answering those questions with broad absolutes as outcomes requires
quite a bit of hubris on my part.

------
davidwees
If we attempt to look into the future, I think we see that computers are
likely to permeate every aspect of our culture. If they continue to decrease
in size as they have been doing, they may actually end up being embedded in
much of the stuff we use.

We should also notice that programming itself has a huge gradient in terms of
difficulty. Things like Scratch, and other block programming languages make
the act of programming easier, where amateur developers can focus more time on
trying to solve the problems they are working on, and less time figuring out
which parenthesis they missed.

So we have two trends - that programming is becoming easier to do, and that
computers are becoming more common. Both of these lead me to the conclusion
that not being able to program will eventually be akin to being illiterate.
You won't be able to use and modify many of the tools of the future without
some programming skill.

Further, many people are developing some of the core programming skills in
pieces. Look at <http://ifttt.com/> for example. This is an example of using
apps as procedure calls, and writing very short subroutines to handle tasks
for you. It is a perfect example of how programming is beginning to permeate
popular culture.

Soon, telling people not to learn how to program will be much like telling
people not to write or not to do math - it will be a bit ridiculous. We will
just need to be able to use better systems for keeping track of who is an
amateur, and who is a professional, much like we do with writing and
mathematics.

------
eldila
Most people shouldn't learn to program. However, this observation is a bit
deceiving. I believe that everyone should learn to write scripts. I have seen
way to many people waste time on a computer for tasks that should be clearly
automated. Furthermore, these people usually have no idea that there is
something better.

How much time would people save in aggregate if they knew a little bit about
the tools they use? The average person shouldn't need to know about recursion,
but why not a for-loop.

------
nicholassmith
That's like a mathematician saying "people shouldn't learn maths!". Of course
they should, it teaches you other skills on top of learning maths. Are most
people going to go on to learn cryptography or crack one of the Unsolved
Puzzles of Maths? Of course not, they'll leave it where they are and have new
skills and new ways of solving problems.

Of course they could be one of the minority and go on to solve one of the big
problems and create huge amounts of value. Which would be terrible.

------
stiff
_It is obvious to me how being a skilled reader, a skilled writer, and at
least high school level math are fundamental to performing the job of a
politician. Or at any job, for that matter. But understanding variables and
functions, pointers and recursion? I can't see it._

"Coding" is a simple practical skill, at first glance it seems people should
learn it when they have a need for it (even if it is just automation of
repetitive tasks) or when for some reason they have a deep interest in it.
However, lets not forget that computers from the beginning were intended,
among other things, to extend our limited human mental capabilities. There is
plenty of very valuable general topics in Computer Science that can be learned
well only once you know how to program, otherwise you lack a convenient
vehicle for exploring those concepts.

People can keep too little in their heads at once to directly deal with
complicated structures or processes, but at the same time enough to be able to
write programs to deal with them. Algorithms, graphs, probability are
ubiquitous concepts that cut through many fields and that can only be explored
in full depth via computer programs, and the applications are broad enough
that it is not possible to find a ready made program for each of them. For
example, in experiments people repetitively make mistakes even in very simple
probabilistic considerations, where coding a Monte Carlo simulation would take
maybe 20 minutes for a moderately skilled programmer. Even the Mayor could
find some benefit in learning algorithmic thinking, for example:
<http://en.wikipedia.org/wiki/Critical_path_method>

------
lnanek
I've run into multiple situations at work where someone I was working for knew
how to code, even if it wasn't their job, and it made things so much easier. I
probably shouldn't reveal the details, but in general they were able to
identify situations where just writing a quick app would help a lot vs. not
having one, even tried writing it themselves, after when I ended up writing it
and sent the source code along (they didn't have source control access) they
were able to modify it as needed to be much more usable without bouncing it
back and forth to me over and over, etc..

In another situation the person again figured out when an app would deliver
really awesome results over the bog standard 60's way of doing things, and
during the meeting to see if we could help out and all the subsequent revision
communication, they just knew a lot about how apps get written. They'd suggest
things that made it 10 times easier to write, understood that throwing in an
option for everything instead of having a set functionality makes testing and
code branches and maintenance a real pain in the ass, approved slight changes
that made things a lot easier to write ahead of time instead of demanding
meeting the requirements exactly as they were written, etc..

It's sort of like when you hear about someone trained as a doctor and who can
also code doing all this awesome stuff. Except in a large organization we
already have a ridiculous amount of skilled people available, so it's closer
to you just need to know about people's capabilities and how they work to get
really close to a similar situation where you can take advantage of both
fields. So anyway, even if it isn't someone's job to code, it can be very
valuable for them to know how to, and it can make them a lot easier to work
with for those of us who do code professionally.

------
sbinetd
Personally, I feel that the more people who learn to code, the better position
we as members of society are placed in. While I certainly have no need for my
local member of parliament to play perl golf in his/her spare time - I
certainly do have a need, or at the very least, a want; for them to have some
form of understanding about softare development. Informed people make informed
decisions, and a higher number of people who are informed in matters that
relate to things like software patents, the easier it is to garner a
sympathetic ear when we say "Look - this isn't right, they shouldn't be able
to do that."

I recall reading an article about the term 'programmer' and how it should be
avoided when applying for jobs, rather, something like 'problem fixer' (I
don't recall the actual example given, sorry) should be used, due to the
negative, hermetic/wizardly air that supposedly hangs around those who
program. I'm not a programmer, so I can't say if it is objectively true; but
if it is, it seems logical making coding a more common skill would certainly
remove some of the supposed semantics.

------
Tichy
The problem is that coding is still too hard. It should be easier to automate
things, and then even the major of NY could benefit. Coding should be as easy
as using a computer.

In fact I have argued that installing apps is kind of like coding for noobs.
It is modding their world in a very primitive way, by installing functions on
their phone. If it was easier to fine tune those functions, it would be a net
win.

------
rglover
I'm 50/50 on this one. I think Jeff has some great sentiments on why people
shouldn't learn to code, however, I feel there needs to be a bit of
separation.

I think what Jeff is trying to refer to are the people who want to learn how
to code (or announce that they're going to learn) for vanity sake. I'm sure
when CodeYear launched, there were a lot of people who said "I'm going to
learn how to code!" as much as there were people saying "I'm going to start
exercising!"

There's a dichotomy here. Some people are just doing it to chime in and feel a
part of something, while on the other hand, I'm sure there are some that truly
want to learn and improve themselves. The team at CodeYear most definitely
were looking to service the latter.

Is it annoying to see your profession, hobby, whatever hawked as a mindless
skill that _anyone_ can learn? You bet. But there is certainly value in people
learning to code and code well. It's up to those of us who already know how to
lead and help focus those who are just getting started. Those that are full of
themselves will fall by the wayside.

------
arethuza
I would hope that someone who has tried their hand at creating a working
program might appreciate, even in a very limited way, what kinds of issues
face those of us who have to create these systems for a living: the
difficulties of gathering requirements, the non-obvious relationship between
the apparent complexity of a bug/feature and what it will take to
implement/fix etc.

------
RyanMcGreal
This is like saying you shouldn't learn to write unless you're going to be a
writer; or that you shouldn't learn to do math unless you're going to be a
mathematician; or that you shouldn't practice sports and athletics unless
you're going to be a professional athlete.

In any case, you don't learn to code so you can code. You learn to code so you
can solve problems in a repeatable way.

------
rsaarelm
I like the "computational thinking" concept for computing literacy that
doesn't imply being a professional programmer, as described in this article:
<http://www.cs.cmu.edu/~wing/publications/Wing06.pdf>

Familiarity with those concepts might help bureaucrats with organizational
planning even if they never wrote a line of actual computer code. Programming
is first about making things so clear and well-understood even a computer can
handle them, and only second about actually making a computer do them.

Atwood might have a point in that if someone just goes off to learn to code
using a cookie-cutter course, they might not really learn to work with the
more important first part, but might end up like a JavaScript programmer who
has no idea about Turing-completeness instead:
<http://reddragdiva.dreamwidth.org/579047.html>

------
pjungwir
I mostly agree with Jeff here, although I do think it's good for people to
learn more about technology and the Internet. But it's more helpful to learn
things at a higher level than code. I recently gave a talk to some Wharton
entrepreneurs about web architecture, and I started with the "learn to code"
movement. My slides are here:

<http://wharton-vip-webapps-talk.heroku.com/slides/1>

To a lot of people (and in the context of my talk, everyone), "learn to code"
doesn't mean starting a fun hobby; it means building an MVP. In my talk, I
gave several reasons why programming is rewarding and fun, but I also said if
you're a business person, doing it yourself might not be the best business
decision. The third slide at that URL makes the point that to build the full
stack of a Rails application actually requires mastering quite a lot of
technologies (fewer if you deploy in a PaaS, of course).

------
ontoillogical
Michael Bloomberg is a very bad example to pick as a prototypical person who
would not benefit from learning to program. Bloomberg has something that most
of us don't, a staff. The value proposition of learning to program is that it
will allow you to learn how to ask your computer questions, and automatically
take actions for you.

Bloomberg can ask his staff to call him if an email comes in from an important
advisor, but only before midnight, except saturdays where he can be called
between noon and 2:30. Bloomberg can ask his staff to compare his popularity
vs days in office to that of previous mayors.

Learning to program is about harnessing the power of computers to process data
and text for you, and about automating repetitive tasks. If you have a
competent assistant and staff, you don't need to program, although you may
have tasks that require someone in your employ to know how to program.

------
joe_the_user
Hmm,

I just realized that the only way in which Jeff's argument has value is the
context of a large organization with managers relating to programmers.

That is, managers should not take the view that their learning to code is
going to make them better managers of programmers. It just makes them capable
of second guessing their programmers, not really that useful. Even here, its
not really that you shouldn't know how to code but that you shouldn't assume
that some small or large acquaintance with coding lets you quibble with a
structure someone else has taken months to work out. But even here, it might
seem like the "skill" required is "not knowing how to program" but really it's
not second guessing someone (with enough ego or desperation, a completely
unskilled manager may second guess you too and then things get nasty).

So that's what might inspire this unfortunate rant. But the rant itself is
just plain wrong.

------
logos
Hmm, i think we need to understand one thing, programming is't for all of us.
Some people don't have any predisposition to become a singer, and they won't
learn how to sing, and learning singing won't be any good for him beside of
wasting some time. Someone say's that learning programming learns logical
thinking, sure, just like math or logic. So why not to study them ? I agree
with Jeff that " Before you go rushing out to learn to code, figure out what
your problem actually is. Do you even have a problem?" because learning to
program just to boost up logic skill don't make sense to me. To be a good
programer something more is needed than just willing to learn how to code. The
more people will learn to code just to code, or for profit, the more shitty
code will be out there to destroy, and we will pray not to be in situation we
will have to rewrite it...

------
chubbard
I see Jeff's point. Don't turn a bunch of people into coders that aren't ready
for it. You'll just dilute the brand, and right now being a coder is valued
today for whole host of reasons. As evidence of the faked resume scandal at
yahoo. It's cool, but there will be a day when it goes back to being very
uncool. And doing things like what Jeff is rallying against will help drive us
there. On the other hand non-coders want to understand what we do and how we
do it. Just like I find watching construction workers build things or a
plumber fix things. Its fun.

When I was an undergrad the first lecture I had in CS was my favorite. Still
is. It discussed how fundamental scientific discoveries and technology affect
how humans view the world and solving problems. To quickly paraphrase as
industrialization began to take shape we saw the world as a machine. And so we
looked for problems that could be solved by viewing them as a machine. As
electricity was discovered and commercialized we saw the world as a circuit.
Our brain compared to a circuit, and our nerves were the wires. Is our brain
an actual circuit well not entirely, but this idea helped us make other
discoveries about the brain. As each of these technologies took root in the
minds of humans we shifted our paradigms and began to solve problems
differently than prior generations or prior paradigms. These paradigms tend to
have long life cycles going on for decades, and that's why they are important
to recognize.

The introduction of computers, and particularly computer programming, has
changed our paradigm again. How we solve problems with programming is
fundamentally different than how we solved it with physics, chemistry, etc.
And I think that's the life skill we want to pass along to non-coders because
it changes how you approach problems. As we take what was physical and turn it
into a digital representation it changes how you use it to solve problems. And
when I look at coding in that respect I do think its important to learn, but I
wouldn't teach it the same way as most are learning it.

------
decklin
One thing in this article I do agree with is that you should try to write "as
little code as possible". But it doesn't follow that if you don't know how to
code, you'll write zero code, and do well by that metric! You'll be unable to
identify people who can code well, and hire poor coders to solve your problem,
ending up with lots of low-quality code, in situations where an experienced
programmer could have come up with a better solution ("hmm, I've seen this
before...").

Even the _slightest_ familiarity with programming here will help someone
understand that when an offshore development house says "oh, sure, we'll just
throw 20 more people at the project", that will not necessarily make it done
better or faster. This is a Good Thing. And this has nothing to do with
whether or not Mr. Bloomberg is implementing his own Ruby or .NET scripts.

------
mncolinlee
Jeff's irritation here comes as as ignorance. The PR value alone of the Mayor
of NYC learning to program could potentially inspire thousands of new casual
coders and hundreds of new programmers. There is nothing wrong with wanting to
learn how to create something. Ultimately, many thousands of Americans learn a
little bit of plumbing for home improvement projects and they're generally
happy with it.

It's no different to learn a little bit of coding for building a dynamic
website for your community group, even if it's as simple as using HTML, CSS,
and Javascript to customize a Drupal or Wordpress site, for example. In fact,
you couldn't pick a more appropriate language than Javascript and markup
languages for beginners looking to make something useful. We're not asking
them to write linked lists or handle correct use of object inheritance.

------
dkrich
I couldn't agree with this more, especially the bit about how software
developers are software addicts. A lot (not all) believe software is the cure
for all ills and any endeavor that doesn't have software at its core is not
worthwhile. Coding is a means to an end. You should learn to code if you have
a problem that could be solved with code and you either don't want or can't
afford to pay somebody to do it for you. Exactly the same way you should learn
plumbing if you don't want or can't afford to pay a plumber to do the work for
you. All that time you are spending learning to code may be better spent
learning the law, or accounting, or statistics, or operations, or marketing,
all of which are at least as important if not more important than coding in a
business.

------
FuzzyDunlop
I think this presents a flawed logic:

 _"It puts the method before the problem. Before you go rushing out to learn
to code, figure out what your problem actually is. [...] Does coding solve
that problem? Are you sure?"_

Did we all learn to code, or program, as a reaction to having an idea that
required learning to code or program? Or did some of us learn to code or
program out of curiosity, or because we just wanted to, or as a hobby?

The quoted point discredits the latter in favour of the former (as well as
applying all manner of extra requirements I decided to trim out).

The article as a whole doesn't respect the fact that people have extra-
curricular activities, and hobbies. And side-projects. Should we all discard
those things that aren't totally relevant to our full time job?

------
danielrhodes
The problem with this article is that Jeff is confusing what would ideally be
the case with how people should behave in the present reality. I bet no one
would disagree that it would be fantastic if people didn't have to code to
solve problems. However, in countless numbers of cases the solution to the
problem is, with the absence an easier solution, to code it out. Therefore, if
a person is in that position, it would be better if they knew how to code than
not. Moreover, it would generally be good if more people were able to apply an
engineering mindset to appropriate problems in order to find a solution (which
programming helps you attain). Therefore, the more people who know how to
code, the better.

------
mitakas
Please, don't learn to _code_ , learn how to _model_ solutions to problems.
_Code_ and _programming_ are just tools for solving these problems.

If somebody comes to you with a problem and the first thing you say is "Oh,
yes, of course, just let me start coding." then something is probably going to
go wrong with your project. Understand what the problem is, build a model,
show it to the person asking, most of the time this person doesn't really know
what he wants.

You are all misunderstanding Atwood's article. Think about this: a variable in
a programming language isn't really a variable, it's a name for a certain
space in memory. Variables exist only in mathematical logic. Mind blown.

------
bking
My 2 cents are that coding is becoming more and more relevant with the times.
Like reading, writing, and arithmatic, coding is a form of communication with
the current technology of our time. Learning the foundations of coding should
be a priority because it is a base platform for which we as humans conduct our
lives.

Granted I think Jeff's "tone" might come out to some as harshe, but his
thought process rings true. His two points at the bottom are the all
encompasing truths that make learning coding relevant, but it also helps
explane that it is important to learn about everything around us and to not
focus too narrowly on one subject.

------
pwny
While I disagree because I can't see why anyone would deny anyone else
knowledge, there IS a mainstream fad about programming that seems to be out of
touch with the reality of the thing.

I read an article not too long ago in one of Quebec's most important newspaper
about how programming was becoming an essential skill (up there with reading
and basic arithmetic), which it clearly isn't. Of course the author didn't
help her case by confusing programming with setting up a wordpress site and
changing its CSS.

IMO learning to code can't be a wasted experience. It's just not the life-
changing, essential skill that increasingly more people make it out to be.

------
islon
I think most comments here are missing Jeff's point, or maybe I interpreted it
in a different way. Most skills are somehow useful in the real world:
programming, plumbing, economics, chemistry, logic, critical thinking,
philosophy etc. Most people don't have the time and/or the will to learn
most/all of these things. I agree a basic understanding of these would help
but you have to make a compromise, you can't learn everything. We think
programming is really important because we are programmers but it's not more
important than most other areas. You should spend your time learning things
you like/find really usefull.

------
vibrunazo
> It assumes that coding is the goal.

I don't think anyone is saying that (I hope). Instead we're telling people to
learn to code as a means to better understand technology, and then use
technology to your favor to improve your life. And when that happens, coding
will naturally become more common in your life, even if indirectly (managing
others who write code, but this time actually knowing what you're doing).
"Coding" is just a more common part of the problem, which has a much deeper
meaning. I tell everyone they should learn to code, not because I think they
should be writing hundreds or thousands of lines per day like I do. But
because they should better understand the world we live in. And learning to
code will get you there faster.

Thinking we're telling people they should learn to code just for the sake of
coding is completely missing the point. I tell everyone they should learn to
code for the exact same reason I tell everyone they should learn science,
politics and law. Your life will be better if you're scientifically literate
and technologically literate because you'll better understand the world around
you.

> 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?

That's the wrong question. You should be asking how can be better at his day
job if he was technologically literate. And I'm pretty sure anyone here can
think of many different awesome ways anyone at all could be better at their
job if they knew how to better use technology around them in their favor. Let
alone a major of a metropolis.

> so please pardon my skepticism of the sentiment that "everyone can learn to
> code".

This is a separate problem. I think everyone should learn how to code, how
science, politics and law works. For their own sake. Their life will be better
if they do. Implying they shouldn't try because they're not good enough is
analogous to saying most people shouldn't vote because they're not competent
enough to choose the right candidates. The point is, it's in their interest to
do so. Now is it in our interest that they do so? And that's a whole separate
issue I would really rather not get into.

------
neokya
Pretty uninteresting topic from Jeff. For other than professional programmers,
it is like guitar.

While professional guitarists take years to master it, anyone can get an
acoustic guitar and play 'Hotel California' as hobby.

What the hell is wrong here?

------
stephenhandley
_finally starts completely disregarding everything jeff atwood has to say_

------
stcredzero
Really, it's more a matter of being able to deal with what you don't know. The
worst kinds of miscommunication happen when people have misconceptions so
severe, they don't even know the right questions to ask. (Raymond Smullyan has
an excellent short story that deals with this, where ancient philosophers ask,
"What's holding up the earth and the heavens?")

There is no analogy for programming. Most of the communication difficulties
programmers have with non-programmers is due to this. The only thing to beware
of, is how a little knowledge is also dangerous.

------
kwamenum86
Michael Bloomberg has a BS in EE. So this isn't that far-fetched. But thus was
more a call to action than anythjng so Jeff Atwood is getting caught up taking
a political platitude at face value.

------
ehdv
Basic programming is fundamentally formal logic in executable form. Learning
it provides people with a basic understanding of how the machines around them
work, what might go wrong when they break, and teaches them what is fast
becoming the new global language (binary, sort of, this analogy is kind of
being stretched). The point is not for everyone to enter the computer
industry, the point is for everyone to have at least some level of awareness
the same way we teach the scientific method in schools.

------
alexchamberlain
I'd like to make 2 points as a fan of Mike Bloomberg:

* He is one of the great technological innovators of our time.

* I may be wrong, but he doesn't draw a significant salary from the city, being a billionaire and all.

------
scotty79
Reading and writing are outright useful. Math you can get by without but it's
important indirectly.

Same way being able to code is important indirectly.

    
    
      With computers you learn how to express what you want precisely and unambiguously.
    

You can't hand wave computer into doing what you want. Learning how to be
precise and how to not rely on other people guessing what you want is
important skill and best way to learn it is to learn to code. You will need
this skill in any managerial role.

------
GreyTheory
> I would no more urge everyone to learn programming than I would urge
> everyone to learn plumbing. That'd be ridiculous, right?

I would whole-heartedly disagree. I think that everybody should at be
proficient in as many practical skills as possible - an in depth knowledge is
not required, simply a level of competency and an understanding of good
practices and standards.

This applies to coding, plumbing, cooking, construction/DIY, auto repair,
soldering and practically any skill that may come in handy.

------
shoham
Well written piece. Completely true and misunderstood. Of course there was
some hyperbole, but as a non-programmer learning to code for the reasons Mr.
Atwood gave (problem solving, etc.) I think that while it is an important
skill, that it's starting to be annoying how the thing is being sold, in my
opinion, because coding is very, very hard for people who don't know how to do
it, but it's being made out as life or death, and not that hard, which is not
right!

------
seanhandley
I think the root issue here is the perception that programming computers is
some dark sorcery that requires years of secret incantations in dark rooms to
master.

Coding is like being a baker, or a plumber, a mechanic or a school teacher.
It's a useful job in society and no more or less laudable than anything else.

Anyone can love their job - and they ought to. If they do, it doesn't mean
everyone should feel the same.

I say, better to affirm how ordinary coding is, rather than how extra-
ordinary.

------
jnabholz
I love his line, "It puts the method before the problem." What problem does
learning to code solve? The focus should be on the problem of technological
illiteracy.

------
pudakai
Maybe he just thinks it would be fun, wants to feel the joy of that first
"Hello Gotham"? He certainly wouldn't be the first person coding for
avocational reasons.

------
lubujackson
What an idiot. If nothing else, learning basic coding skills allows you to
have a grasp of what's possible, what's hard, what's easy and what's trivial.
Even if Bloomberg never codes a line in his job, that background knowledge can
manifest in 100 different ways, and will allow him to be a better manager of
people and systems. We would all be much better off if every congressman took
a 2 week course in programming.

------
super_mario
What is wrong with acquiring a skill that is completely unlike what you
normally do. It's enriching experience and challenges you mentally more than
learning something that is very much like what you already know/do.

No one is saying that just because you learn to program you will be seeking to
do it professionally. I think mayor of New York knows better than to quit his
post and start seeking some janitorial programming position.

------
ilaksh
I really agree with this part: "You should be learning to write as little code
as possible. Ideally none."

Less code is better than more code. Even less code probably means you are
reusing someone else's code which is even better. And this is the one that
programmers can't accept: composable/configurable tools are better than
programming languages. Better as in plain better, and better software
engineering.

------
kaiwren
A fundamental grouse I have with the "Learn programming" meme is that it
encourages the myth that you can be gainfully employed as a programmer after
solving code snippets for a year. I've written this out in greater detail at
[http://blog.sidu.in/2012/05/everyone-should-learn-
programmin...](http://blog.sidu.in/2012/05/everyone-should-learn-
programming.html)

------
matteodepalo
The idea that you should learn X to "succeed at life" (whatever that means) is
fallacious. We learn things to become better people as a whole, not
necessarily to use those skills in our jobs. I bet Bloomberg is not using his
math skills in his job and that's fine but he's probably thinking using logic
(I hope) which is something you learn both from math and programming.

------
juddlyon
Thinking that everyone should learn to code is an absurd idea. Most folks can
barely use their computer, let alone care to program. A good percentage of web
designers can't write markup, do you think my mom is going to fire up a shell?

Perhaps teaching some basic digital fluency is a more realistic goal, e.g.,
the role of computers in society, a primer on hardware, basic security, etc.

------
mistercow
> but if the mayor of New York City actually needs to sling JavaScript code to
> do his job, something is deeply, horribly, terribly wrong with politics in
> the state of New York

Bloomberg didn't say anything about learning to code for professional reasons.
If Atwood has forgotten that coding is a rewarding experience on its own, then
he is no longer a voice worth listening to.

------
ajuc
People who make and apply laws regarding software should understand how
software works and is made. They could talk to experts instead, but to choose
right experts they also need to understand how software works.

So maybe New York Mayor don't need to code, but IP lawyers that works on
software cases, and politicians voting on software related law - yeah, I think
they should.

------
drostie
I should probably disagree. The point of code being a _life skill_ is not that
we want more people to write code on a _day-to-day_ basis. You should think
about teaching kids to paint, rather than teaching them to read. It's not
because we want more painters or because painting makes you better at the job
you do, but painting helps you to see things from a different (artistic)
perspective, to appreciate certain joys and certain other techniques.

Sussman has gone on record with a talk titled, "Why Programming is a Good
Medium For Expressing Poorly Understood and Sloppily Formulated Ideas." That's
probably an everyday use of programming which I've not seen, and it's part of
what people learn as one of these "background skills" in college: how to think
of things precisely.

I still get a lot of people who are shocked when I teach them relativity. You
mean it's _not_ a bunch of mysticism about "mass is squared light energy"? You
mean you can _prove_ that this Lorentz transformation doesn't lead to
paradoxes? You mean you can derive it with high-school geometry plus some
simple axioms that I can clearly understand? The only part which is hard to
get across is the causal structure of "light cones", because people don't
think in intersecting cones. (I have had some success with calling them
"expanding light bubbles," with some reference to supernova explosions.)

Coming back to clarity, and finding it, programming is a good way to pick up
that habit, even if you don't code on a day-to-day basis.

There is of course one well-known disadvantage which goes unmentioned in this
Coding Horror post: coders are disproportionately more likely to think of
legal systems as made of immutable and strict laws. The idea that a judge is
supposed to, y'know, _judge_ the human costs of competing legal priorities,
and make a decision which is both fair and in keeping with the laws as written
-- this discretion seems to be missing. You see this as well with how coders
approach pharmacists: it's as if pharmacy was no longer a _medical discipline_
and was somehow relegated to counting pills. No, that's what we code the
robots for. Stop equating people with robots.

But if we remain sensitive to the humanity of others, then being able to code
probably functions to a net benefit, much like Jeff's example of plumbing
does. I mean, there are still occasions where you need a professional, but
everyone should have disassembled the pipes to their sink at some point in
their life, just for the experience.

------
EzGraphs
There is a lot to be said for avoiding the temptation to write "one more line
of code." I used to work with a guy who would pride himself with reducing
(whenever possible) the amount of code with every modification and fix he
made. He really had it down to an art, and it greatly clarified the core
functionality of the software.

------
bicknergseng
This makes me so sad. Why does Atwood mistake learning to program with
becoming a programmer? I expect this kind of thing from naysayers and
ignoramus, but Atwood is a hero in our community. I feel like he's forgetting
a /s tag at the bottom or that he's trolling us all.

Next he should tell us to leave math to the mathematicians.

------
userdeveloper
How about learning to read code instead?

How about learning to distinguish bad code from good code?

How about learning to look at Atwood's code with a view to answering some
questions: 1. How does this guy's mind work? 2. Can he think clearly or does
he add needless complexity to everything?

Then making a decision whether you want to use his work or not.

------
SagelyGuru
For all X, it is _always_ better (toknow X) than (not (toknow X)).

There are innumerably unpredictable circumstances that may arise in which it
will prove useful.

Bureaucrats in general could all profit from some minimal understanding of
programming if only to stop them saying things like: 'the computer says: no!'

~~~
Paul_S
Except in cases where a little knowledge of the subject is more dangerous than
no knowledge.

(But I disagree with the post, teaching people to program would be a net gain
I think but I'm sure most people won't bother so no danger of ever finding
out.)

------
pragone
Two things about Bloomberg: The "taxpayers" pay him $1 a year (granted that
doesn't mean he shouldn't do the job of Mayor, but just saying). And two: He
OWNS a technology company. If I owned one and wasn't on the technical side,
I'd be interested in picking it up as well

------
typicalrunt
While I don't agree that everyone should learn to code/program, I do think
that everyone should learn discrete and critical thinking. Just the ability to
break down a large problem (whatever domain it is in) into manageable chunks
has helped me immensely throughout life.

------
roqetman
My main concern is that people learn a bit of the easy stuff, then extrapolate
that coding is easy therefore inexperienced and cheap programmers are all
that's needed to complete a project. Quality of code will drop, as will
salaries (even for the experienced).

------
cageface
Oh hey it's just like last time stupid money was chasing tech around and
everybody suddenly wanted to be a programmer!

Once they figure out again that's it's usually tedious and unglamorous work
that doesn't pay particularly well on average they'll lose interest again.

------
spinchange
What a negative message- not unlike the, "Don't be an Entrepreneur" talk from
last week. I don't understand these high profile, obviously successful people
with public personas being all, "Don't try to do what I did," thinking that
will resonate.

~~~
randomdata
I feel the takeaway is that you already, deep down, know what you need to do -
so do that.

If you have a burning desire to learn how to program, be an entrepreneur, or
whatever else you need to do to make your life complete, you're not going to
let a little article get in your way. It is, however, sage advice if you want
to become a programmer only because you see dollar signs, despite every bone
in your body telling you that you have no interest in the study. That was not
going to end well anyway. You cannot duplicate success by copying the actions
of someone successful.

The harm in learning how to program if you are only doing it because you want
to be the next Jeff Atwood is that you are completely overlooking the
qualities you are sitting on, that come with a much great chance of providing
your own success.

~~~
spinchange
I'm not looking for Jeff Atwood or Phil Libin's approval or permission and I
don't think many folks reading HN are either. :) Although perhaps I am guilty
of looking for validation on some sub conscious level, but who isn't?
Ultimately I was just responding to the _tone_ of the post - he makes many
perfectly legitimate points. I just think he's missing the most important
general one which is that it's not a bad thing for people to learn to program
and become more technically/computationally literate.

Edit- tone isn't really the right word. It's the basic idea of the post that I
dislike and not for reasons related to my own learning or business. I think it
reflects a view of people, learning, etc, that's inconsistent with what's
possible and all the opportunities that are open to everyone right now. I
understand where you're coming about the sage advice, but think that's the
risk/case with anything.

------
rsobers
You stole my blog post from 3 months ago, including the title! ;-)

[http://accidentalhacker.com/post/16116466587/please-dont-
lea...](http://accidentalhacker.com/post/16116466587/please-dont-learn-to-
code)

------
devin
All I know is I went to the HN homepage and I found some linkbait article by
Jeff Atwood that was contrary to the other article I saw on the front page.
Typical Bullshit.

------
namank
Same reason as why programmers need to take course in sales.

------
wes-exp
I, for one, applaud Jeff's attempt at deflating the hype bubble around
programming. There are plenty of useful skills in the world to learn.
Programming is one.

------
nickpinkston
I'd rather see a post titled: "Please learn to sell".

------
rsynnott
The thing to remember here is that this is a man who's smug about not knowing
C. His opinions on these things are not so useful.

------
jwwest
And a million insecure developers all cried out in unison, "WE AGREE JEFF!"

------
SteveJS
Learn Metonymy. And it's use in marketing an idea.

------
Lednakashim
He could asses IT costs

------
michaelochurch
I think there's a knee-jerk reaction against the popularization of computer
programming, and I think it's unfounded.

We have a sense that, because some 80 (possibly 90) percent of programmers
write shitty code, that encouraging more people to program is going to flood
the field with mediocre programmers and that we're personally going to have to
maintain their legacy monstrosities. Somehow, I'm guessing that I'm _not_
going to be maintaining Bloomberg's business-logic DSL any time soon.

I think it's good that we're making people more aware of computer science and
that programming is becoming cool again. I'm not a fan of tech bubble
"coolness" (where traditional business types move into tech startups, usually
in executive positions, because of the trend, but have no real interest in
technology) but if people develop a genuine interest in how computers and
programs work, that's great. It'll have all kinds of ripple effects: better
and more widespread CS education (even in grade school), increasing technical
literacy in important organizations, increasing appreciation for technical
talent in the world at large, and quite possibly a more rational approach to
business, government, and politics.

The real problem we face, in terms of the "Why do we have to deal with so much
shitty code?" question isn't that these bad programmers are untalented. It's
not a low IQ problem. It's a problem of dysfunctional work environments (due
to a low appreciation for what programmers do in many companies) and a lack of
incentive to improve. These "bad programmers" stop growing, because the bulk
of development jobs don't encourage people to grow, so a lot of people end up
learning basic Java best practices and that's it. They never learn Unix and
its philosophy, functional programming and recursion, architecture, or logic.
They get to the 1.2-1.3 level (scale here:
[http://michaelochurch.wordpress.com/2012/01/26/the-
trajector...](http://michaelochurch.wordpress.com/2012/01/26/the-trajectory-
of-a-software-engineer-and-where-it-all-goes-wrong/) ) and either go into
management or plateau. That's because the typical JavaJob setup is designed to
bring up the rear while holding back the best, so people get into a mentality
where they lose faith in the capability of the individual developer and
management appears like the only place where it's possible to have real
accomplishments.

Actually, if anything's going to liberate the horde of 1.2 developers from
their JavaJobs, it's going to be making programming fun and cool again--
reminding these people that coding isn't just something they do for one job,
but that it's a valuable and extremely versatile skill, _if_ they keep
improving despite having no immediate economic pressure to do so.

------
its_so_on
There are few jobs I can think of where learning a TINY little bit of coding
could help as much as when you're Mayor of New York (or a major CEO, etc). If
the guy figures out nothing else than that he can make a program to keep tally
counts as he discards emails, he just has to click which category they belong
to, or that he can send form letters programmatically, he will be far more
productive. Yes, aides do both of these things, but with code you don't have
to communicate what you want someone to do, you can just do it and tweak it
until it's most helpful for you - when you're the one in total control you are
just so much more productive.

I basically completely disagree with this submission.

------
horsehead
I have to say, I think everybody will learn to code in the future. It teaches
logical thinking, which we just don't have enough of in today's society. And
with the explosion of computers, it's going to be a handy skill; just like
there are tons of amateur mechanics who can do a few things on their car but
they can't do a complete overhaul.

------
sodelate
i have been programming for almost seven years,and only three years as a
programmer.i don't think it bad to learn to code,but don't take coding as a
way of thinking,you just need to know one or two programming languages,and not
more.

------
xxiao
i'm surprised that people are arguing with this kind of questions here,
totally a waste of time, gosh.

~~~
bithive123
I agree, this is typical of Atwood and it's baffling that people still pay
attention.

------
goodbyehello
This guy was one of the people behind StackOverflow. And people wonder why
StackOverflow deletes useful topics and is full of smart alec answers. This
attitude and seriously flawed thinking is why.

Become a programmer, by all means.

But please do not become another Jeff Atwood.

