The Internet is big--really big! (About one Yottabyte in size, or a quadrillion Gigabytes, which if stored on CDs would stack from earth to moon ... 4000 times.) Did you ever wonder how Google can respond to your search in mere seconds? Your smartphone's camera records about 8 million pixels when it snaps a photo, and each pixel represents millions of possible colors. That's millions and millions of possibilities. How does your phone store those pictures in just a few hundred thousand bytes? And when you buy something online using your credit card, why don't hackers just intercept the webpage and steal your number? (If it were email, they could!)
Computers and the networks over which they communicate are fascinating, and dozens of questions like these might be asked by even a casual user. The science that surrounds these questions--computer science--is a rich, deep, and exciting intellectual discipline. It's a mixture of abstract and applied, basic research and engineering, art and business. Exciting stuff, and it deserves to be better known.
That is the motivation behind several movements to add computer science to the K¬ 12 curriculum, often referred to as Computer Science for All. It's a great idea, which would give students a glimpse of a beautiful subject that is part of everyday modern life. But like so many great ideas in education, it can easily be corrupted.
Computer science encompasses lots of things--the structure of data, algorithms for manipulating them, the architecture of computers, operating systems, artificial intelligence, and many more. One of those things is coding, that is, using a particular programming language to prepare instructions for a computer to follow. Coding is accessible and can be enormous fun. It can be creative. It can be a useful tool to teach concepts. But it is not the same as computer science, and confusing the two is like confusing great literature with the language in which it is written. Both are important, but one is deeper and ultimately more rewarding.
This is a problem because many new Computer Science for All initiatives are really Coding for All initiatives. Why the confusion? Many politicians and policy makers know little about computer science, but they know about coding from popular culture in movies and books. It's easier to refer to "coding," which is concrete and known, than "computer science," which is abstract and seemingly esoteric. (President Obama's recent announcement referred to his having written a line of code.) But the larger cause is all too common in education: We are in a rush. Hasty roll-outs of initiatives frequently ask teachers to teach computer science without much experience or even a curriculum. Inevitably, they teach what is familiar, and most often that's coding.
No one expects all K-12 students to wrestle with the deepest or most abstract ideas of computer science, any more than one expects elementary school students to master Calculus. But all students can learn about those ideas and sample the thinking that goes into solving deep problems. For many years, educators promoted the learning of mathematics because of "transference"--the notion that in learning mathematics students learn to think in a certain way, analytically. Computer science is the same. But even more important, learning about computing teaches an appreciation of a rich subject that may lead to later study, in the same way that teaching mathematics or physics attract some students to become future mathematicians or physicists.
A few will insist that, at least in K-12 education, computer science should be nothing more than coding. They sell our students short. While coding can be enticing to young students, the science of computing--a science created by Ada Lovelace and Charles Babbage, nurtured by mathematicians such as John von Neumann and Alan Turing, and developed by dozens of computer scientists from Grace Hopper to Schafi Goldwasser--is more enticing still. Besides, we don't need a nation of coders who produce vast quantities of inexpensive applications; we need a nation of citizens who are scientifically literate, some of whom become scientists themselves.
In any case, if Computer Science for All becomes Coding for All, it will inevitably become just one more educational fad, soon forgotten. Coding is a skill, and skills are transient, with hundreds of dialects that come and go. Computer science is knowledge--beautiful and deep--and knowledge stays around.