Being a teacher in Computer Science I’ve taught many students how to program (actually I view it as I helped them learn themselves how to program). Most of these were studying Computer Science and usually either knew how to program (or at least they thought they knew how to program :) ) or were motivated to learn programming. But I’ve also taught students that did not study Computer Science and but were required to take a programming course - many of these students see no reason for learning how to program. They are interested in whatever subject they are learning not CS/programming and think that it would be better use of their time to take another course.
I’ve also seen/heard people say that “you have to be a genius to learn to program”, “nerds don’t have a life”, “I’m too stupid to learn programming”, “I have no use for programming”, etc. But they rarely know what programming is or what a programmer do! So why do they have this image of CS and programming?
I think we can blame ourselves, we being programmers and CS people in general. We tend to talk about programming/CS in a jargon that leaves all non-programmers (and several programmers) with that “dazed” look of total confusion. It’s like listening to some aliens that have learned to use human language but use words and expressions in a way no normal person would. We have failed showing people the usefulness of programming and that it does not need to be complicated.
One group that should take special responsibility for this is the one I belong to myself: the CS teachers. We have completely failed to take into consideration who we are teaching. We have been teaching programming and problem solving from a CS perspective, using “boring” examples from math or other typical CS examples, giving little thought to the fact that most people have no interest in CS or programming per se. Most people want to solve their problems, not some abstract problem that a CS Professor dreamed up in the office. We have failed in showing them the usefulness of programming!
But there are other problems also: why should people know programming? Because they can solve small specific problems they have in their daily life. But there is an important part missing here: in what environment should they do this? Should they use Eclipse, NetBeans, or XCode? I don’t think so. Or should they use environments like Scratch, Alice, or Agentsheets. No, I don’t think these are the right tools either. In fact I think of any environment today that lets me easily solve simple problems programmatically, one that is ubiquitous to the general public.
The only environment I’ve seen/tried that was aimed a bit in this direction was HyperCard. It was in no means perfect but it allowed me to quickly put together a ‘stack’ to solve a specific problem, it was not fast, it was not beautiful but it got the job done and it was not something you passed on to others (not a problems since it was my problems I as solving). I don’t know of any such tool today (yes, I know about LiveCode/RunRev and SuperCard but haven’t tried them for years).
Back to the original question: Should everybody learn to program?
Yes, I think that programming knowledge can be useful to a lot of people. No, I don’t think people should learn to program Java/Python/Perl/C/C++/Haskell/etc (we want people to learn to problem solve, not learn syntax). Yes, I think learning how to solve problems is useful to anyone (which is actually what programming is all about). No, I don’t think there is a way today for people to take advantage of programming in their daily life.
I think that an interesting twist to the question is the idea of Computational Thinking which has gained some following in the research community. As I understand it this is not about programming per se but about the methodology of problem solving used within Computer Science. I don’t know if this is what people refer to when they say that everybody should learn to program: learning how to solve problems. If so, I’m all for it.
And as soon as that ubiquitous programming environment becomes available then the answer is “Yes, everybody should learn to program”