Today I hacked my camera, taking it back from the limitations its programmers imposed on it out of a desire to sell more expensive models. I didn't write a single line of code, only used the command-line twice, and yet the process would have been bewildering for most computer users. I was able to do it because I've spent a short lifetime using tech and writing code; both the concepts and the computer-DIY skills I've picked up along the way helped me do something entirely outside my normal domain of experience.
This, I think, is what constitutes the sort of fundamental technical building blocks we should be giving every citizen - though we need to come up with a better name than "technical building blocks", since that metaphor isn't really domain-appropriate. This is an important type of literacy, increasingly relevant in the 21st century and kind of nonexistent for most of human history into the 20th century. The language of computing devices requires some training to understand, and Turing machines being what they are, and their programmers being who they are, a lot of that knowledge is transferrable. I learned about partitioning disks when I was first trying to install Linux on my desktops in high school, and since I was already familiar with the concept, I found it easier to install a hack on my camera today.
So what kinds of things should we be teaching people, in order to give them this basic skillset? Here are a few proposals (that perhaps betray a mindset already a few years out of date):
1. Scripting - most people don't really ever need to know how to program, but would benefit from knowing how to make a computer do something automatically. Both the process of learning how a computer thinks about things like "commands", and the actual ability to issue those commands in an automated way, are an important part of computer literacy.
2. Assembling a desktop - this is increasingly an unnecessary skill for most people's lived experience - laptops and smartphones don't really permit any real kind of hardware hackery. But understanding how a computer's parts fit together, how to take them apart and assemble them, and what those basic parts even are, is as useful as knowing the basic geography of a car's hood.
3. Using a command line - not only is it helpful for future job prospects (command-line familiarity, in my experience, is surprisingly rare outside of coders and sysadmins); learning how to phrase questions in a language a computer speaks teaches you a lot about how it thinks and what its capable of. In many ways, this is a skillset very similar to scripting, and a lot of what you learn on the command-line is helpful when programming (and vice-versa).
4. Learning how to learn - the most important skill I ever learned in the Internet age was how to learn how to do something I don't already know. In my previous jobs, I've been the lone technical person on non-technical teams; and the questions I got asked were often not ones I knew the answers to. But I knew how to teach myself what our team needed in order to get the job done; and in my day-to-day life, I use these skills all the time. This goes far beyond just Googling a question (although that's very important, and there are subtle tricks to know); it's about how to approach a problem so as to make it comprehensible; how to break it down into component parts and solve those; knowing what types of things computers are good and bad at, and what places on the Internet are good gateways for the former.