Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Does everyone need to learn to program? (msdn.com)
48 points by AlfredTwo on Oct 5, 2010 | hide | past | favorite | 42 comments


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.


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.


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.


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.


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.


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.


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.


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


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


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


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. :)


I think we teach programming because it helps people:

Understand that there are such concise ways articulating thoughts that every letter means something, and the thought must be fully specified. And what can go wrong with simple logic mistakes -- and likewise how things can seem to work just fine despite the existence of certain classes of mistakes.


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

Well, if you only focus on job preparation, maybe. But education is not just supposed to prepare people for work; it's supposed to prepare them to be good citizens. That requires teaching students a whole variety of skills, but it particularly requires teaching them analytic modes of thought.

Learning how to program means learning how to think in new ways. Generally speaking, those modes of thought are not taught in other educational disciplines: e.g., solving problems via recursion or iteration, and algorithmic thinking generally. So CS education fills a niche that, in large part, would otherwise go unfilled. Coupled with its more "practical" economic benefits, offering it seems like a no brainer to me.


Well, if you only focus on job preparation, maybe. But education is not just supposed to prepare people for work; it's supposed to prepare them to be good citizens. That requires teaching students a whole variety of skills, but it particularly requires teaching them analytic modes of thought.

Being a good "citizen" is a full time job, and a job which pretty much everyone fail at. Everybody need to specialize or find themselves a niche within the economy and get good at what they do so they don't get out-competed. "Citizenship" knowledge just get swept by the wayside.

I don't much about foreign policies, domestic issues, drugs, nor do I have time to learn the shenanigan of elected officials, etc. I know computer programming. I also know attempts by self-interested people who try to get a piece of the pie at the expense of the public in my domain. Software patents and intellectual property right in general are what I am really informed about.

The issue of "governing" should take care of itself much like every other profession take care to solve other people's problem instead of expecting entire people to be wise in governing.

Knowledge in our economy's workforce is diffused. Nobody know how to make a pencil, but there are lot of people who knows how to make part of the pencils, or make possible making pencils. Nobody will learn how to make all part of the pencils, because people gain from specialization and division of labor.

We shouldn't expect the masses to be reasonably wise and strong enough to guard their interests from harmful special interest. Forget the concept of citizenship duty and rework the system according to the real strength and limitation of the people.


Everybody need to specialize or find themselves a niche within the economy and get good at what they do so they don't get out-competed. ... The issue of "governing" should take care of itself much like every other profession take care to solve other people's problem instead of expecting entire people to be wise in governing. ... Forget the concept of citizenship duty and rework the system according to the real strength and limitation of the people.

I think this is an incredibly dangerous attitude. Society works when human beings recognize what they have in common; a society in which all social and political organization is based on specialization and individual differences is a society in which people are divided and susceptible to tyranny. I will gladly trade some economic productivity for a citizenship which recognizes its common interests, actively pursues them, and knows how to defend its members against exploitation.


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

...because we expect people to be able to reason through problems and understand that the computer isn't magic.


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.


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.


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.


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


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.


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.


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


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!!)


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


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.


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.


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.


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.


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.


Where did you go to school? It's not on the Ohio standard curriculum.

Or any pushed through with NCLB, to my knowledge.


just those 2 lines of basic made thousands of developers


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.


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.


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.


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.


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.


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.


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


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.


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


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: