The demand for computer science (CS) in schools has many teachers wondering which components of CS they should implement first. A couple of years ago, I asked myself the very same question, and I had to remind myself that creating a computer scientist could take up to 25 years and that I was not responsible for developing middle school computer scientists in one semester.
I realized that what I needed to do was build the capacity of my students for deeper learning of the right skills — so they could experience success, which would inspire them to continue studying CS long after they left my class.
The difference between computer science and computational thinking
CS is part of computing education and it’s the foundation for all computing. So, in essence, CS is the study of computers and the algorithmic design processes in both hardware and software — their application and overall impact on society. On the other hand, CT is a problem-solving skill that involves decomposition, abstraction, pattern recognition and algorithm design.
Facing large, complex problems will often discourage and disengage the students who aren’t fully equipped to begin the deconstructing process. Decomposition (like factorization) develops the skill of breaking down complex problems into smaller and more manageable parts, thus making even the most complicated task or problem easier to understand and solve.
To introduce your students to decomposition, begin by having them break down a simple task they do all the time, like brushing their teeth, baking a cake, making a sandwich or tying shoelaces. This will help them focus more on their ability to analyze and synthesize familiar information.
Teachers who aren’t teaching traditional CS classes can help learners build their decomposition skills in their own subject areas by having them apply the concept to improving their writing, creating timelines, factoring quadratics or understanding living organisms. CS teachers can start building student capacity for decomposition with this CT lesson by Code.org. In this lesson, students assume the role of imaginary players and figure out how to play a game with no given instructions.
2. Pattern recognition
Pattern recognition is a skill that involves mapping similarities and differences or patterns among small (decomposed) problems, and is essential for helping solve complex problems. Students who are able to recognize patterns can make predictions, work more efficiently and establish a strong foundation for designing algorithms.
Next, have learners map and explain the similarities/differences or patterns. The beauty of this technique is that once students can describe one category (animal or dessert), they will be able to explain the others by following patterns.
For example, the general characteristics of desserts are that they are all sweet; they can be fruit, custard, puddings or frozen; and usually are served at the end of a meal. One or more dessert may be pink, have fruit and served cold, while another type may be yellow, have sprinkles and not use fruit.
Then ask students to either draw or make a collage showing their favorite desserts using the patterns they identified (like in the examples above) to help them. Also have them reflect on how they’d have to start from scratch with either creating or finding each instance of a dessert if they hadn’t first identified essential patterns (classification, color, texture, ingredients).
The primary goal here is to get them to understand that finding patterns helps simplify tasks because the same problem-solving techniques can be applied when the problems share patterns (pattern recognition is also used in math, music and literature, human intelligence, history, weather, etc.).
Class projects can be more authentic by focusing application of pattern recognition in forensics, medical sciences, photo identification or behavioral patterns like web browsing and credit card spending.
Once students know what to do, have them map the patterns in some of the decomposed problems described above. CS teachers will need to help students comprehend how computers use pattern recognition by numbers, text and pictures. Students using visual programming languages should also learn how the use of pattern recognition helps to find the commonalities of repetition in code for avoiding redundancy, and they can begin doing so with this Code.org lesson.
Abstraction involves filtering out — or ignoring — unimportant details, which makes a problem easier to understand and solve. This enables students to develop their models, equations and simulations to represent only the important variables.
As the values of variables often change and can be dependent upon another, it’s important to introduce students to abstraction in relation to patterns. In the previous section, we noted common characteristics of desserts. Have students make a simple drawing of a dessert focusing on the important/common features (like classifications) and abstracting the rest (texture, fruit, sprinkles). The abstraction process will help them create a general idea of what a problem is and how to solve it by removing all irrelevant details and patterns (abstraction is also used in math and when creating models — the water cycle, the nitrogen cycle, the rock cycle, etc.).
CS teachers will need to help students focus on the layers (or levels) of abstraction they will want in the models they develop, along with correlations between abstraction and pattern generalization to figure out the right relationships between abstracted variables to accurately represent a problem. They also need to understand how abstractions are built with purpose and can represent an entire class of similar objects. CS students can become excellent coders using abstraction. Use this lesson to help them get started.
4. Algorithm design
Algorithm design is determining appropriate steps to take and organising them into a series of instructions (a plan) for solving a problem or completing a task correctly. Algorithms are important because they take the knowledge derived from the previous three elements for execution.
Keep it simple when teaching algorithms to students and have them create small plans using their newly learned CT skills, again using simple functions like brushing teeth, baking a cake, making a sandwich, tying shoelaces. Each algorithm must have a starting point, a finishing point and a set of well-defined instructions in between.
CS teachers will also need to help students understand that algorithm design builds upon the previous three elements — which moves a problem from the modeling phase to the operation stage. Students will also need to learn to design algorithms that are both efficient and allow for automation through the use of computers.
Also, by learning discrete math and how to create flowcharts, students can practice and build expertise in algorithmic thinking and design over time. Here is a great compilation of lessons for helping students bridge the gap between understanding basic algorithms to actual programming.
Resources to get started
Here are a number of resources to turn to for help:
Take a moment to reflect on the words of Dr. Stephen R. Covey, “Though you may find some of it to be simple common sense, remember, common sense is not common practice, and I guarantee that if you focus your efforts in these areas, you will find that great peace and power will come into your life.”
I believe these words can be applied to learning CT (and any new concepts or practices) as we help our students use what they already know to develop their CS superpowers!
Jorge Valenzuela is an education coach, author, and speaker. Using action research methodology, his work helps school leaders and teachers reach their unique success paths to innovation in school leadership, tiered instruction, project-based learning, computer science and STEM education, and social and emotional learning across the curriculum. Jorge is the lead coach at Lifelong Learning Defined and provides professional development on behalf of ASCD, Corwin, Instructional Innovation Partners, Premiere Speakers Bureau and Solution Tree. He has authored several books and guides and is the host of the Lifelong Learning Defined Podcast. His book Rev Up Robotics: Real-World Computational Thinking in the K–8 Classroom is available from ISTE.
This is an updated version of a post that originally published on February 22, 2018.