top | item 1759475

Does everyone need to learn to program?

48 points| AlfredTwo | 15 years ago |blogs.msdn.com

42 comments

order
[+] araneae|15 years ago|reply
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.

[+] djacobs|15 years ago|reply
I want to up-vote your comment more than once. Just this week, my boss told me to aggregate and then analyze 90 spreadsheets worth of data along with associated metadata scattered around in various (structured) files. The task is one I'm going to have to do once every two weeks. It took my predecessor three days every time she had to do it, three days during which she had no time for any other experiments.

My solution? I wrote a Ruby script in 2 hours, then an R script in 1 hour (to run the stats). They're both flexible, reusable, and efficient. They get my boss her report the same day as my raw data come to me. And since my source data comes from another computer program, the process is flawless and does not suffer from copy errors or improperly paired metadata.

People should not have to do repetitive tasks like aggregation or mapping data to metadata by hand. We should be teaching every high schooler basic scripting and (more generally) that we can outsource the mundane to a computer.

[+] jimbokun|15 years ago|reply
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.

[+] ippisl|15 years ago|reply
But isn't R is already a standard part in the curriculum of undergraduate social sciences degrees ? I think that part of the issue is integrating programming not only in one course , but as a general useful problem solving technique, that one naturally thinks of using when faced with relevant problems.
[+] kd0amg|15 years ago|reply
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.

[+] yesbabyyes|15 years ago|reply
This is exactly what I think. I often rant about how everybody needs to learn to program, but what I mean is not so much being able to write code in a specific language as the mindset of approaching problems, and having an understanding of how a computer works. Today programmers are in a sense the gatekeepers of information and I don't think that's healthy in the long term.

There are several layers to this. In general, I think people older than ~50 approach computers in a totally different way than people younger than ~20, with us in the middle a little spread out. A good friend's father, for instance, used to hit Space in his word processor to center headings. He didn't do this because he didn't find the button for center alignment, he did it because he didn't think to look for it.

Another dad recently bought a new Android phone. He was studying the rather thick manual carefully, while his 10 year old daughter grabbed the phone, snapped a picture and just started using it. Startled, her father asked her how she knew all this stuff, to which she replied that she didn't know how to do it beforehand, she just did what seemed reasonable.

It might be a stretch, but I think that programming is on the same range of using computers (tools in general? I don't know) in this way. Solving problems is basically trying what seems most reasonable first. A well defined API is usable without even consulting the documentation.

I definitely think that teaching basic programming and computer science to everybody would be a huge win to society.

Sometimes I think of myself as a literate monk in medieval times. I imagine that lots of people would request their services, friends and family needing help with writing and reading. This is also one of the biggest reasons for my wanting more people to learn how to program: It's purely selfish, I get awfully stressed by having people come to me with ideas they can't implement, trying to make me do it for them.

I'm sure a lot of people here have similar experiences.

[+] astine|15 years ago|reply
"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.

[+] dkarl|15 years ago|reply
I think the author expects students to use programs like Safari and Microsoft Word with hundreds of man-years of polish by UI professionals. As a journalist, perhaps he is so lucky, but business people aren't. Business people have to configure generic software and use web apps slapped together by low-paid programmers who don't have the time or expertise to do good UI design. That can be very much like programming, unfortunately, and I can't think of anything else you could teach high school students that would prepare them for that task.
[+] edw519|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
Yes. And teach the biologists Matlab (or something similar, and perhaps more open), instead of making them rote-learn C.
[+] agentultra|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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.

[+] indrora|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
I think everyone should learn to read, write, arithmetic, programming and preferable some mathematics.
[+] AndrewMoffat|15 years ago|reply
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.