For Computer Science Ed Week - Teach Thinking NOT Coding
With Computer Science in Education (CSED) Week and Hour of Code right around the corner, we have a simple request: Don't teach coding. Instead, we suggest that you introduce computational thinking and creative problem solving into your classroom. This way, you can get at the big ideas behind computer science rather than focus on a single activity or lesson involving "code."
Events such as Hour of Code generate momentum and excitement around the idea of learning to code. However, a broader perspective is to present coding as a process of patient, often collaborative, problem-solving. In their report Dancing with Robots, authors Levy and Murnane argue that to be successful in a knowledge economy, students should be able to seek out novel solutions, solve unstructured problems, and harness the "routine capabilities of computers to solve non-routine tasks." A more recent study by London economists Frey and Osborn (2013) corroborates this claim and argues that as big data, robotics, and Artificial Intelligence continue to improve, future workers will need skills that cannot be automated. Given this information, we think that it is vital to realize that coding is only one part of the solution for preparing students to succeed in the future. As David Deming of Harvard's Kennedy School recently reported, students need both computational thinking skills and social skills to be able to thrive.
For these reasons, we advocate that students develop literacy and fluency with digital technologies as well as an understanding of their capacities - whether students can "code" or not. In the same way that HTML became automated with web site generators and blogging platforms like WordPress, Google Sites, and SquareSpace, the coding languages of today may be obsolete by the time students enter the workforce. However, the understanding and thinking skills captured by learning about code may become invaluable. Additionally, the big ideas behind coding and computer science will persist in some form, even if the language and syntax for expressing and implementing them change over time.
Coding literacy means an ability to both write and read code. As much as we expect students to solve problems using code, we should also give them opportunities to read code created by other people. Even if students do not understand everything, the practice of reading code is like solving a series of little puzzles. Encourage students to look at previously published projects and then to modify, or remix, that code, to change it. The more students read, the better they will be able to write.
Inspired by Harvard's CS50 computer science course, Punahou School coordinates an annual Puzzle Day. Students work together in teams to solve puzzles and brainteasers using paper and pencil. This reinforces the idea that good thinkers and puzzle solvers make good coders. To begin, the students start with "unplugged" activities that introduce fundamental computer science concepts without requiring a computer. For example, try this activity by David Malan from Harvard in a large room.
Put these instructions up on the board:
- Stand up and assign yourself the number 1.
- Pair off with another person, add your two numbers together, and adopt the sum as your new number.
- One of you should sit down.
- Repeat steps 2-3 until one person is left standing.
Even in a room with hundreds of people, the last person should end up with the total count of everyone in the room. Because the adding in pairs takes place simultaneously, even if the number of people doubles in size, it only requires one more comparison. This is an example of logarithmic efficiency. This unplugged activity is also a great way to talk about parallel processing - and especially debugging - even if you didn't get the right answer!
Reading, writing, and thinking are vitally important skills, much more so than proficiency in any particular language or platform. But we don't expect every high school graduate to major in comparative literature. Similarly, students don't need to be future computer science majors to benefit from computational thinking skills. Solving puzzles, splitting up large problems into smaller ones, getting stuck and then figuring out how to get unstuck, will help future designers, writers, artists, and makers just as much as our future engineers.
From Sphero to Scratch, lots of exciting opportunities exist to get students excited about computer science and coding. However, these activities are just intended to light a spark and need to represent a beginning rather than an end. In an increasingly digital world, students need opportunities to develop more than just coding skills. They need thinking and problem-solving skills.