
Does everyone need to learn to program?  - AlfredTwo
http://blogs.msdn.com/b/alfredth/archive/2010/10/05/should-johnny-learn-to-program.aspx
======
araneae
This article is attacking a straw man in which programming is equivalent to
writing compilers.

The reality is that almost all of the sciences (and even some of the social
sciences) have come to the point where you need to be able to program. Any
data-driven field will require you to do data analysis. A decade ago you would
need to know math, today you need to know math, and R. This is not the same as
writing a compiler, but it is programming. And that's the best case scenario.
In many fields, like genomics and ecology, the programming tasks become much
more complex.

And that's just the sciences. The business world is also increasingly data-
driven, and with increasing amounts of data there's increasing amounts of
coding involved. Sure, not every field requires an understanding of
programming, but not every field requires an understanding of history, and
it's still taught year after year.

~~~
jimbokun
Interesting that the article compares software and carpentry, as there is a
programming course for scientists called Software Carpentry.

<http://software-carpentry.org/>

The idea being to teach "just enough programming" in the same way you might
teach a non-carpenter to do basic home repairs.

~~~
lkjuhygthyujk
Trouble is that there is a knee in the learning curve.

Everybody works with electrical equipement - it would be helpful if some of
the 'non-technical' employees here understood about checking that it was
plugged in, and not spilling drinks into it.

It's not clear that a little bit of PCB layout design would help that - just
like knowing a bit of logo wouldn't help them with not remembering where they
had saved the word file they expect me to find.

------
kd0amg
I think the author overestimates how much encapsulation we will see of actual
programming. See the recent HN entry on programmerless programming
(<http://news.ycombinator.com/item?id=1753634>) as well as Brooks' "No Silver
Bullet."

Beyond that, he misunderstands the reason for teaching programming. Not
everything taught in high school is expected to be the basis of a student's
profession. We don't teach English classes with the intent or expectation of
turning all of the students into professional literary critics, and we don't
make everyone take algebra because we think they will or should all become
mathematicians. Similarly, the basics of programming can be useful to a lot of
people who aren't professional programmers. Everyone I know in technical
fields (and many people who aren't) had to write code to solve a problem at
some point.

With regard to applying existing encapsulations, it seems there are too many
with interfaces too different to gain much from teaching how to use individual
components. If we can find something that applies generally to all of them,
we'll have something worth spending the time to teach.

Perhaps I'm less inclined to see programming as something exclusively for
specialists because I first learned programming from someone whose profession
and primary expertise are not programming.

~~~
astine
"We don't teach English classes with the intent or expectation of turning all
of the students into professional literary critics, and we don't make everyone
take algebra because we think they will or should all become mathematicians."

That's right, we teach English because we expect students to be able to read
and write and speak cogently. We teach algebra because we expect them to be
able to use it in most jobs that will be available to them. We should teach
programming because... We you know? It really isn't quite as urgent.

I believe that kids should be taught just enough about computers, including
programming, so that they are demystified. A student in high school doesn't
need programming as a skill, but he doesn't need to know that a computer is a
tool to be manipulated, not an 'experience' to be bought. One course in Python
in high school would enough for this, but more valuable possibly would just be
teaching them that can open up the command line once in a while.

~~~
sprout
>We should teach programming because... We you know? It really isn't quite as
urgent.

90% of office workers would benefit from the ability to write an Excel Macro.
I don't even think that's a hard sell. Any businessman who understands what
Excel does would understand that.

Of course, long term Excel is a toy, and there are all sorts of benefits to be
had from more general tools like Python.

~~~
wazoox
> Of course, long term Excel is a toy [...]

I too, would like this to be true. However, the unfortunate truth is that the
main market for windows-based HPC is... monstrous, clusterized excel
computations.

~~~
sprout
I'm just sort of pining for a far flung day after programming becomes
established as an ordinary middle-school and high-school class, and those
students grow up and become MBAs and CEOs. For now we have Excel. :)

------
edw519
_The giant hole in our workforce isn't entry level developers who can hash out
c code and write a compiler from scratch. It is for people with combined
skills who can APPLY encapsulated technology (lots thanks to companies has
been encapsulated) to specific domains._

Right on.

I know people who can write a compiler from scratch but have no idea how to
help a customer solve a business problem.

I also know people who can diagnose business, project, and people problems but
have no idea what the underlying technology is or how to apply it.

The critical path for the masses is in the intersection of these 2 sets.

The preparation for that probably requires cursory study of a lot of things
and deep study of one or two things.

Does everyone need to learn to program? No. But a little more understanding by
everyone can go a long way.

~~~
olalonde
I second. I think everyone will agree that programming's learning curve is
logarithmic. Just a few hours of programming study can deliver huge benefits.

------
Tichy
I suspect for any kind of skill there is a way to get through life without it.
Apparently a lot of people can't read. Does that invalidate the claim that
"everyone should learn to read"?

------
steveklabnik
This is obviously a subject that I care about a lot.

I'm not sure that I'm ready to hand down some sort of moral imperative, but I
do think that learning programming brings _advantages_ to one in almost any
other profession. But this can be said about almost any cross-disciplinary
study.

Really, it's hard to have an outside perspective on this; we all see
programming as important (if not necessary) because our lives revolve around
tech. Yet many of my friends do not know how to program, and they get along
just fine. Almost all of them that have gone on to learn the basics have
enjoyed the additional perspective, however.

~~~
ericsilver
Having studied economics and programming, I think that programming is
advantaged. Econ taught me some principles that serve me well in understanding
incentives and behaviors, but programming teaches a way of organizing thought
which is more broadly useful.

Thinking about what I'd studied in public school, I wish I could trade hours
spent learning rules of grammar for hours spent learning how to create and
organize symbolic logic.

------
halostatue
From the article: > There are FAR FAR FAR more jobs out there today for
someone with the technical skills to build a SharePoint portal, or light up a
CRM instance or build a bioinformatics database than there are for someone who
can build the next Python compiler. Let's stop trying to train the mass of
high school students to become preservation carpenters, and instead make them
very good contractors.

IMO, this is the Java Schools approach to computer learning. How many people
here have railed that high school computer training is actually Word and Excel
training. It can be valuable, but only if you're learning the _underlying
concepts_ and not just learning the keystrokes to do something.

We need to teach folks that (a) computers aren't magic, (b) there's a logical
approach to solving problems and it happens to be called programming, and (c)
programming can be fun.

[EDIT: Fixed formatting.]

------
DevX101
I think all students on a technical AP-track should learn how to program.

Programming isn't a specific academic discipline as it is a TOOL to be used.
Students that go on to study biology should have enough coding skill to know
what they don't know, and go from there to do some genetic data analysis.

Mechanical engineer track students should be able to do some modeling and
implement the algorithms behind them.

Business track students should be able to do more powerful analyses than excel
sorting.

I only took a BASIC course in 8th grade and a 2-week C course in college, the
rest was self-taught. But I've found myself using programming significantly
more than any of the higher level calculus I've learned (not that this should
be replaced!!)

~~~
eru
Yes. And teach the biologists Matlab (or something similar, and perhaps more
open), instead of making them rote-learn C.

------
agentultra
I agree with the premise of the article. The software development world would
be perfectly happy if there were more technicians around. Technology is
becoming an inherent skill, there's no reason to believe that we're a niche
anymore.

At least where I am from there seems to be a glut of specialized and educated
people. Industry jobs that would be easily serviced by a technician for the
pay-grade they offer and skill set they require are instead demanding CS
degrees and years of experience. It's like asking a master carpenter to
install your Ikea furniture.

Many of the tools that we've spent the last two decades building have allowed
anyone with some spare time and a copy of a few technical manuals to build a
decent web application in no time. What's even more amazing is that a lot of
these skills are simply taught _socially_. My nieces never learned how to
build websites, integrate it with their social networks, customize it, and all
that in school. They learned it from friends and online.

I don't think "everyone" needs to _learn_ how to program, but that most of
them will to some degree as computer technology becomes more ingrained in our
daily lives.

------
neovive
This article raises some excellent points. While I don't think everyone needs
the ability to actually write a functioning program, the ability to break down
a problem into a logical set of instructions is a critical skill. Whether the
instructions are implemented as a functioning program, pseudocode or just a
general algorithm that can be followed by another person is not as important
as the thought process.

------
carlos
I believe programming will be some day a mandatory subject in schools. Not
like everybody needs to be an expert but at least some basic knowledge of it.

~~~
lkjuhygthyujk
It was when I was at school 20years ago.

And the ability to write

10 print "I am great" 20 goto 10

has led directly to the wide understanding of technology and the rational
approach to science and computers we see today among both the general
population and our political leaders.

~~~
hugh3
Oddly, I seem to recall print statements which were less focused on the
positive qualities of the code's author, and more focused on the negative
qualities of other individuals.

But maybe that's just me. Not everybody had an older brother.

------
indrora
I can see where the author of both the article and the /editorialized/ article
are coming from, however I don't agree with either one of them.

As someone who's learned from the trenches, you need to know how to program on
some level. Even if you're just a lowly IT Dude, knowing some batch, a little
shell and at least a little SQL can make your life * magnitudes* easier. Take
for example Cisco's networking packages: IOS and CBOS

CBOS and IOS are similar, but different. they have the same syntax but
different connotations for them... but because I know one, I know the other. I
can solve problems on one machine with basic knowledge of the overall design.

Same with Linux. Or Unix. Or BSD. Or (insert *nix here). I can solve problems
by thinking and using some shell to solve my problem in an elegant and useful
way that I can then write down and keep in my Little Bag 'o tricks.

I know how to solve problems in the IT world because I know how to program and
how to think. Does this mean I have no concept of business and such? No, in
fact the university I'm currently attending requires FOUR different business
classes to get an IT degree. I'm not kidding you.

High school doesn't teach you how to think. It's designed to push out factory
workers to go into industries and do slave labor. That's been the case now for
nearly 200 years, if not more.

If you want to know how to get kids into a better position and get them
/mentally/ into the top point, require in high school a Cognitive Problem-
Solving class which requires group work to solve interesting problems like "A
meteorite is going to hit us in 3 days you have these at your disposal what do
you do? 2.4 million lives are at stake." and you are graded on your thought
process. Maybe not the outcome, but the thought process.

FWIW, I'm a C#/Shell programmer. /bin/zsh is my shell.

------
nickpinkston
In the industrial revolution, we had public education for basic reading and
writing. to learn technical skills (machining, accounting, etc.).

Now in this new post-industrial world, perhaps we need to add something that
is a universal like R&Wing. It might be basic programming - enough to deal
with basic data/text manipulation. It might be basic web development / online
tech. It might even just be a big sampler of different things to show them how
to solve problems creatively.

------
awakeasleep
The one argument I could make against this post has to do with the fact that
we don't build an increasing amount of our society out of wood, no one uses
wood in tricky ways to rob people, there aren't unlimited forms of self
expression and communication within wood waiting to be unlocked, and knowing
how to manipulate wood won't benefit nearly every other aspect of your life.

------
joe_the_user
Does everyone need to learn a foreign language?

Does everyone need to be able to write a persuasive essay?

Does everyone need to be able to conduct a simple but rigorous scientific
experiment?

Does everyone need to be able to prove a theorem?

The answer to all these questions is "no" along with the answer to the
original "question". But these questions and their answers miss the original
point. Sure, a given person can have a fine and even high-paid life without
any of a number skills.

But should our education system make systematic effort to give most students a
small portion of the skills needed to understand the modern world? Yes, yes!
The point is that the education system desperately needs to be exposing people
to the skills needed for a high-level understanding of the modern world
(exactly what isn't well tested by multiple choice tests BTW).

The point is that a class on "computers" should give _everyone_ an idea of
what is and isn't possible with them - a far cry from learning Excel macros.

------
BrandonM
I think it would be great for everyone to learn a little bit of scripting in a
straightforward language. Do they need to remember it? Absolutely not.

I think it's important for everyone to at least get exposed to what
programming can and can't do. The crux of the problem is all of the people who
don't even realize that they are spending hours or days at a time, time-and-
again, performing a repetitive task that could be done automatically with a
program. We sometimes encounter the same problem from the other side: someone
expects a program to magically do way more than is reasonable.

Is it important for everyone to know how to program? Absolutely not. I think
exposing everyone to programming, however, would be very valuable. While many
are likely to forget the details or not care, I contend that the majority
would at least retain some of the notions of what is and isn't programmable.

------
scrrr
Although programming is a wonderful profession with unique benefits ranging
from philosophy to economic value of being able to code (not mentioning the
fun aspects of it): If everyone on this planet would be a programmer, we might
loose all the views and opinions of people that see the world from a different
angle that their professions encourages them to view things from.

~~~
JoachimSchipper
There's a difference between being able to think logically and do some simple
algebra and being a professional mathematician; similarly, there's a
difference between being able to craft a half-decent spreadsheet and being a
top-notch programmer. Still, these skills are quite useful even if you only
know the "basics".

------
dinkumthinkum
So this kind of annoys me. The idea that being able to write a compiler is
sort of frivolous but what's really important is that someone can "light up a
CMS instance." Really? There are far more jobs for those people? I suspect
most compiler writers can probably figure out Sharepoint. I mean, come on.

------
gmlk
I think everyone should learn to read, write, arithmetic, programming and
preferable some mathematics.

------
AndrewMoffat
I thought I agreed with the article until the last paragraph:

 _There are FAR FAR FAR more jobs out there today for someone with the
technical skills to build a SharePoint portal, or light up a CRM instance or
build a bioinformatics database than there are for someone who can build the
next Python compiler. Let's stop trying to train the mass of high school
students to become preservation carpenters, and instead make them very good
contractors._

I don't think it's a far comparison to say that compiler-writers are like
preservation carpenters, practicing an unnecessary art form, because while
there _are_ already tools to make CS easier, part of the nature of
technological advancement in CS is in creating better tools. But he's knocking
those that...make...the tools.

