I think we need to look at programming the way we look at some of the other mundane things we teach in school, like Drivers’ Education. We teach kids to drive because we’ve built society around the car, and in order to become middle class, you really need to know how to drive. It opens up a lot of jobs, including crappy ones. I have transit-dependent family members, and the correlation between transit-dependency and poverty is high — and one of the main reasons they’re poor is that they don’t know how to drive.
Likewise, if you don’t know how computers work, you’re pretty screwed in life.
While not everyone needs to learn to write applications, program libraries, or write an operating system, it would be nice if everyone could comprehend complex software and configure it, or create simple systems from software parts. Every driver doesn’t need to know how to change their car’s oil, or fix a flat tire… but they’re useful skills, and every driver should know how to check fluids.
More broadly, Drivers’ Education is about learning to be a driver, to learn the rules of road, to develop the skill to drive, and to learn about safety. Driving is a social system — it’s not just the car, but the roads, the government that regulates them, and the laws. It’s also about car loans, and car insurance.
Computer education should be about the contemporary Internet, about how web browsers work, how to perform searches of the web, databases, and maps, how to write simple scripts to perform repetitive tasks in some applications. It should be about mundane things like how to organize directories and design file naming standards. (Yes, keep laughing.) It can also be about more complex, mundane things, like using spreadsheets to do math instead of using it like a database; and it can be about learning how to create and query relational databases, instead of using a spreadsheet. :)
This education should also talk about the law, about what’s legal, and what’s not. It should explain the organizations that operate the Internet, like ICANN, ARIN, and W3C. It should also be about computer security, about how to create both secure and insecure networks at home, and about how encryption works. It should be about understanding online advertising.
These are all big topics — but consider the breadth of Drivers’ Education, which is equally broad, and has helped create a society of drivers.
(Just ignore that driving is obsolescent in cities. :) )