Math, Science, History, English--the four staples of American education. Sure, maybe there's Art (performance or studio), foreign languages, physical education, health, and electives in there as well. Sometimes there's the token technology class or the computer science AP you can take as a junior or senior in high school.
But computer science is huge, and deserves more time than it usually gets in classrooms. I got my bachelors in CS and am working on my PhD in CS, so obviously I think the world revolves around it, because mine actually does. But that doesn't mean that CS isn't huge, because it is. There are the big names: Google, Apple, Microsoft. Wanna buy stuff? Amazon and eBay. There are the social media guys like Facebook and Twitter. There are the folks doing websites and apps: Etsy to Instagram. There are game companies like Blizzard and EA. There are movie companies like Pixar and Dreamworks. Adobe, IBM, Yahoo. The list goes on and on and on.
So we should teach our kids more about computer science, because it's crucial to so many industries. Even if they're a digital artist, they'll still need to know a little about hexadecimal. So let's teach them!
Recently, I did a demo at an elementary school science fair in which I brought a balance scale and had a dozen containers of various weights. The task for the kids was to put the containers in order using as few comparisons as possible. The older kids got it very quickly, and the patient younger kids got it too. I was teaching quicksort to 2nd graders, and they didn't even know what hit them!
Kids are more than capable of learning basic computing concepts. Elementary school kids could pick up counting in binary and hexadecimal, symbolic logic and basic satisfiability problems, sorting algorithms, and deterministic finite automaton. These topics range in difficulty equivalent to mathematic problems they cover in elementary school: counting to pre-algebra.
I've got so many ideas of how to teach this to kids, and I'm not the only one. High schoolers could do regular expressions, circuits (and, or, not gates), and maybe transistors. And programming! Ugh! Why doesn't everyone learn how to program? I know that it's not everyone's cup of tea, but neither is math, and I can't tell you how may people I've encountered that say, Oh I really need to learn how to program...
I was showing a middle-school kid from church how to program in Python, and when he left he told his mom, I wish they taught this stuff in school. Me too, buddy, me too.
So what has to give in order for this to happen? Not much. It can be taught alongside math and science in elementary school. We can overhaul the terrible "technology" classes taught in some schools and offer more serious computer science electives. It's totally possible, but it needs to happen at the school or district level for real change to happen. Going up any higher might just result in more crap "computer" classes.
Part of the problem is that second grade teachers usually don't know how to count in binary--that is, that the concepts that would be so easy to teach aren't yet known by the teachers. That won't change until everyone starts needing to know this stuff, which wont happen until the system is changed. It's tautological. Maybe I'll start by contacting my local schools and see if they'd like me to come in for a computer science day or something. If I do, I'll let you know how it goes.