- Jorge Valenzuela

# ISTE | How to develop computational thinkers

By Jorge Valenzuela

*This original post can be accessed via ISTE *__on this link.__

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! I was relieved that I wasn’t responsible for developing middle school computer scientists in only 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 leave my class.

Advanced expertise in computer science requires knowledge in mathematics (namely discrete math and linear algebra) and problem-solving, and there are plenty of CS fundamentals to choose from.

## 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(s) that involves decomposition, abstraction, pattern recognition and algorithm design.

In my previous position with Richmond Public Schools, we chose to dive in with computational thinking, programming and coding (yes, in that order). Because computational thinking (CT) is the highest order of problem-solving, is a cross-curricular skill, and is understandable to both machines and humans, I recommend building student CT competency by developing their versatility for recognizing and applying the four elements of CT to familiar problems/situations.

**Element 1: Decomposition**

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.

Next, introduce them to more complex problems/scenarios that are both unfamiliar and engaging enough to compel them to decompose them, such as investigating a crime scene, coping with the aftermath of natural disasters or planting a school garden.

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.

**Element 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.

You can introduce pattern recognition by presenting a slide with pictures of similar types of animals or foods, such as pizza or desserts.

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 task students with either drawing or making a collage of 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 in Element 1. 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.

**Element 3: Abstraction**

Abstraction involves filtering out — or ignoring — unimportant details, which essentially makes a problem easier to understand and solve. This enables students to develop their models, equations, an image and/or simulations to represent *only* the important variables.

As the values of variables often change and can be dependent upon another, it’s important for students to be introduced to abstraction in relation to patterns. In the previous element, 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.

**Element 4: Algorithm design**

Algorithm design is determining appropriate steps to take and organiszing 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:**

**Code.org**has developed an excellent beginner's**ISTE Standards for Students.**The

**K-12 Computer Science Framework**offers an extensive overview of**computational thinking**— along with resources and in-depth explanation of the correlations between computer science, science and engineering, and math practices.**BBC Bitesize**hosts a variety of teaching resources on their website for**introducing computational thinking**to students.by Jane Krauss and Kiki Prottsman.**Computational Thinking {and Coding} for Every Student: The Teacher’s Getting-Started Guide**Check out ISTE-developed

**resources**and a**practical guide**for educators to get started.

## Remember, learning has no finish line!

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 will 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!