A few people have challenged my idea of universal computer science education with the following comment: "People don't need to know how cars work in order to drive them, why do they need to know how their computers work?" I think we actually know a lot about how our cars work, but before I get into that, let me clarify a little about what I mean by computer science. I'm not talking about every child learning the Java programming language in grade nine, or even grade eleven. Learning languages would likely be part of computer science education (although maybe Python would be a better choice than Java), but a focus on specific languages misses the point. Computer science is a discipline, with big ideas and fundamental understandings. Those are what we need to focus on and teach in school, using the tools that make the concepts most accessible (and fun) for our learners.
It's true, you don't need to be a mechanic in order to drive a car. Nonetheless, every elementary school student learns about simple machines. We teach the big ideas of mathematics in school to all students (I hope), but expect only a few grow up to be mathematicians. It speaks to our general illiteracy about computer science that the fundamentals aren't obvious to the general population, the way they are in the other disciplines we teach in school.
As far as driving a car goes, we do know how it works. Beyond knowing about simple machines, we know how a car will behave in a variety of situations. We rarely wish we could throw our cars out the window, the way we do our computers.
We use our cars as extensions of our bodies. We are physically in synch with our cars when we are driving. We learn, spend months practising, and spend years refining how to coordinate our sensory input, movement, reaction, response and physical coordination with the functioning of our vehicle, to take best advantage of what it can do. It's a lot more than turning the key and pushing the correct buttons. If I drove my car without deeply understanding its behaviour in response to my input, if I was a passive user of my car rather than a driver, I would be a danger to myself and society.
A computer is an extension of my mind. If I understand some basics about computer science, for example how programs work, how computers handle big data, and how networks interact, I can predict how an application will work, I can choose the right software to make my work efficient and productive, and I will know what to expect from my tools. People often use software in inefficient ways because they don't assume things about its design that would be obvious to programmers, or they don't understand how computers handle data. When there is a problem with computers, the frustration and misunderstanding that ensues is less when users understand a bit about computing. We need to bring our minds into synch with our computers the way our bodies are in synch with our cars. To do that, we need to know how computers work.
Computers, like language, shape and are shaped by what we do with them. Our relationships with computing machinery run deep, but our awareness and understanding of those relationships is often shallow. It's a problem we are just beginning to recognize. The solution is to teach computer science in schools.