Programming is hard, especially for minds that are not well accustomed to breaking things into linear series of events. I have a visual mind, for example, but have a lot of trouble turning multi-dimensional concepts into linear programming treatment.
Just as we would not suggest everyone would be capable of calculus, we can't expect everyone to program. Now we can expect everyone to have some exposure to calculus, and I think many folks just would like to see the masses have some exposure to programming. And that's great.
But please do recognize that programming is not intuitive for everyone!
Or maybe many people are just lazy? As for the linear events, can you cook? Can you give directions to the main station? I think most people serialize things all the time. Like, do you ever create a ToDo list for your day?
I can't imagine that it takes months to learn how to load some images into Excel. Unless you have to learn how to read first. And Excel could be one of the hardest things to program...
"But please do recognize that programming is not intuitive for everyone!"
That's just the thing. Programming is hard even for programmers (hard not as in impossible, but hard as in "lifting 100 pounds of the ground" or whatever - it is work). But they are diligent enough to solve the problems.
It really irks me when (for example) business types say they are not made for programming. In fact I don't really enjoy programming either. I enjoy making things, and programming is just the necessary evil I have to put up with.
This logic of "xyz is not intuitive for me" is just an excuse to never even try to cope with maths or whatever.
Programming is a broad spectrum. There are parts that are of comparative difficulty to calculus* and there are parts of similar difficulty to prealgebra. No one is saying that everyone should learn Vector calculus but everyone should at least be acquainted with the basic things like ratios and intervals.
*Calculus is actually extremely easy. In fact, programming can make it even more intuitive if the learner has played with streams before, the objects of calculus are kin. Besides, knowing calculus does not make you a mathematician any more than knowing how to write IF X < 10 THEN PRINT makes you a programmer.
We don't need more women programmers for the sake of demographics. We need to stop driving away awesome programmers that happen to be women.
Do I call the plumber when I have a serious leak? Yes. But I don't call one when I the toilet is running or when I have a leaky faucet. No one is suggesting everyone needs to be able to write a full-fledged production program, but who can deny that having some knowledge of the inner workings of a system you depend on is not going to make you a better user?
Programming is about describing how to solve problems. Maybe we call a plumber, but we don't call a math professor to figure out how many plates we need on the table when people are coming to dinner.
By you logic, people don't need to be able to read because we have street signs. The ipad is easy to use because it's designed to be tightly constrained. You can only do things that people prepared for you. But solving tightly constrained problems is what computers are good for; if you can't do anymore than that, why are you needed?
Throughout history, it was believed that most people didn't need to read and write, or know math, etc. But the core of that argument is anti-humanist.
And no, "computer literacy" isn't the answer, (and is a ridiculous term anyway; literacy requires that you be able to express yourself), anymore than "calculator literacy" is the answer to solving math problems. Knowing how to use a tool isn't enough, you have to understand something about what you're trying to accomplish. A calculator isn't going to help you if you don't know what basic math is, and how it applies to the problem you're trying to solve.
Everyone should learn to program, even at the highest level of abstraction (python, visual basic, SCRATCH), just so they understand what the tool (computer) they have in their hands is capable of.
People go through their everyday lives not even considering automating certain tasks because they haven't been exposed to what programming can do. People go through their days not understanding when they are being ripped off or blatantly stolen from. They don't know what is secure and what isn't. Learning to program solves these problems.
To quote Ben Franklin "Those who give up their liberty for more security neither deserve liberty nor security."
Disclaimer: I am slightly biased. I don't agree with what Steve Jobs stood for. I don't believe people should become mindless content consuming drones nor do I believe in walled gardens. If I buy 3 acres of property I don't want to be locked in .5 acres because of a damn hedge.
On the other hand, I also still think everyone should learn to program as it is good for your brain, aids in learning/exploring extremely abstract mathematical concepts and is practical. Somewhere between the usefulness of basic math skills and either advanced grammar skills or elementary physics.
I'm sorry? What sort of bicycle magically allows you to ride it without putting in any learning effort? You're forgetting that everybody has to learn to ride a bicycle and nobody is any good at it at first.
Most people can use a computer. My 70 year old grandmother has no problem using her Mac to write documents, send email and browse the internet. Far fewer are willing to undertake the training and mental conditioning required to program.
Fundamentally, programming is about problem modelling. While I agree that the interface to programming can be improved, I disagree that computers and the tools surrounding programming are the main reason people are not willing to invest the time to learn to program. At any level beyond the most trivial programming is hard.
I find it almost laughable to cite Apple as an example of "making a computer smarter". Apple has done the exact opposite: dumbing it down to fit the lowest common denominator, then putting it into shiny aluminum cases to sell to the unwashed masses.
A smart computer is one that empowers the user, that teaches them, and expands their knowledge. Not lock them into a walled garden with some highly limited tools which give them the dangerous illusion of empowerment. This is fundamentally incompatible with how Apple makes their products. In the perfect world of Apple, users are idiots who unquestioningly buy the newest iWhatever, and never do anything remotely clever with their devices.
Even if HCI becomes so good that anything can be automated just by asking for it with no human effort involved, it will still be a good idea for people to know why and how it works. And frankly, things will never get that good (people can't even communicate among themselves without misunderstanding, let alone with machines), which makes it important for people to understand what kinds of things their computers can realistically do for them, what they can't, and why that is.
«... HyperCard is an echo of a different world. One where the distinction between the “use” and “programming” of a computer has been weakened and awaits near-total erasure. A world where the personal computer is a mind-amplifier, and not merely an expensive video telephone. A world in which Apple’s walled garden aesthetic has no place.» http://www.loper-os.org/?p=568
However, just because we can see a future where computers bend to the whims of users, ignorance is not bliss.
Computers are becoming an ever increasingly important part of most peoples lives. Saying that you shouldn't have a fundamental understanding of how they work only leaves you open to being hurt by those machines that you interact with every day.
Take phishing scams, and drive by downloads. In large part these occur due to ignorance of the user on a fundamental level. Of course, computers need to be much smarter and prevent these types of attacks all-together. But in a world where some people understand computers on a fundamental level, and others do not, you'll always see those with knowledge taking advantage of those without.
Ultimately people shouldn't learn to programming because it makes bending computers to their will easier (though it does). Instead people should learn basic programming to better understand that which they fundamentally rely on.
This isn't how Apple does things.
Apple computers do not adapt to users. They do things in the "Apple Way". Users must learn that way or suffer.
The good thing about this complete refusal to adapt to users is that everyone has exactly the same Apple experience. You don't have to ask Apple users what shell or window manager they're using. This makes finding help easier and, in theory at least, should make it easier to eliminate bugs (Lion is actually very buggy). Arguably, small bugs and inconsistent behavior do more to confuse neophyte users than large interface flaws.
Apple's motto, "think different", should really be, "think like us". Is that good for the computer illiterate? Perhaps. Still, I'm a bit amazed that some power users put up with the rigidity of OSX and apparently seem to like it. I've used it off and on a few times over the last decade (I most recently used Lion for about a year) and it's always a relief to go back to an OS that is designed to adapt.
Even if the above were true, it would still take time to make computers "smarter". I don't think it's necessarily about technology, it's about changing the infrastructure and the paradigm. That takes time. What is the rest of the population to do in this latency?
As a side, your post also suggests that there will come a time when computers will computer themselves and people will never have to do anything. That doesn't make sense logically.
It is a reasonable and useful principle for a business to focus on being more user friendly. But it is a scary ideology to suggest that most people should not bother to act with agency or become more empowered to handle it themselves. The logical outcome of such an ideology is a world filled with sheep and run by the handful who have de facto power and who serve as both wolf in the fold and guardian sheepdog at the same time.
When one wants to express a complex operation (say, automation) one almost resorts to language. Law, mathematics, chemistry, physics, they all use language to help them express complex ideas.
How would you even express simple automation without a language. Macros? Sure, up to a point. Visual tools? Sure, up to a point. Both lead to diminishing returns for their ease use. The benefit of learning the domain language is you have fewer limitations.
Computers are the future, and are the most important piece of technology that currently exists. You either learn how to use them, most effectively, or the future is not for you.
['current human', 'ape'].each do |new_subject|
open('http://adeel.ru/notes/computers-are-for-humans.html').substitute('human',new_subject)
end