The “teach kids to code” movement has many thinking that computer science is just coding. Often the two are conflated since coding is definitely the most visible component of computer science. It is the magic that turns ideas into products; it provides the motivation to learn computer science. Kids want to learn so they can make cool stuff that is meaningful to them.
However computer science goes beyond just coding. The K-12 standards for computer science, set by the Computer Science Teachers Association, defines the discipline as:
“the study of computers and algorithmic processes, including their principles, their hardware and software designs, their applications, and their impact on society.”
This doodle shows some of these parts of computer science; coding is just one of them.
Computer science is about solving problems using computers and coding (or programming) is about implementing these solutions. Computer scientists can be like architects who design the house—but do not have to build it.
The new high school AP Computer Science principles course more accurately reflects this important distinction by focusing on seven big ideas: Creativity, Abstraction, Data, Algorithms, Programming, Internet, Global Impact. Coding (Programming) is just one of these seven areas. This broader definition of the subject also extends its appeal to more students, including those who may not enjoy coding.
The non-coding aspects of computer science can sometimes be more abstract, and difficult to appreciate, for younger students. In lower grades (K-8 especially), we must continue to focus on coding since that is the exciting hands-on component that will engage all students. However, it is important that K-8 teachers understand the big picture and instead of focusing on mastery of a particular tool and on creating finished projects, teach students to ‘think like a computer scientist’ (computational thinking). Teacher resources on computational thinking in K-12 can be found here.
In my computer science classroom, I teach programming using both block-based and text-based languages but intersperse the coding units with other lessons. We start the year with a look at the many ways computation has impacted the world in the past and will continue to change us as a society. My students enjoy doing “unplugged” activities from CS Unplugged where they work on problem solving without worrying about how to implement the solution in code. One of my favorite classroom activities that does not require a computer is having students design different ways to quickly sort themselves based on numbers. After trying different ideas, they appreciate the algorithm in the Sorting Network activity, and enjoy timing teams as they walk through the sorting network. Lessons like this showcase the non-programming aspects of computer science and provide a nice change of pace in a class that is mostly about coding.
As we focus on computer science education with Hour of Code activities, it is important to look beyond just coding. Teaching kids how to code without also introducing them to some of the fundamental principles of computer science is like asking our students to do a fun exploding baking soda and vinegar lab without explaining the science behind the experiment. Let us give our students the right amount of computer science context to help them solve problems and design solutions and then if they are interested build them in code. Teach kids to code so they express their creativity, but also throw in just enough computer systems, algorithms and more to empower them in their coding projects.