How Teachers Can Develop Computational Thinkers

Guest Post by 

Get students computer science ready by teaching them how to think with computational thinking.

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 after leaving 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.

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.

Video by JULES discussing the 4 elements of ‘Computational Thinking’

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.

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 writingcreating timelinesfactoring 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 mathmusic and literaturehuman intelligencehistoryweather, 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 organizing 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:

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!

Coding is a superpower video by Code.org

This article is adapted from an original post on this link.

If you like this work, please give it some claps, follow our publication and share this with your friends and colleagues.

Jorge Valenzuela is a teacher at Old Dominion University and the lead coach at Lifelong Learning Defined. Additionally, he is a national faculty of PBLWorks and a lead educator for littleBits. His work is aimed at helping educators understand and implement computational thinking, computer science, STEM, and project-based learning.

You can connect with Jorge @JorgeDoesPBL via Twitter and Instagram to continue the conversation.

**Interested in writing a guest blog for my site? Would love to share your ideas! Submit your post here.

Looking for a new book to read? Many stories from educators, two student chapters, and a student-designed cover for In Other Words.

Find these available at bit.ly/Pothbooks  

Books available

EDIT THIS

Why Students should learn to code and how to get started

Published originally on Getting Smart December 15, 2017

Coding is one of the topics that has received greater attention in education over the past couple of years. With a greater emphasis on computer science and coding and the demand for knowledge in these areas, there has been an increase in the variety of resources available to encourage schools to provide opportunities for students to learn about coding. The “Hour of Code” takes place annually during “Computer Science Education Week”. The week is in recognition of the birthday of Admiral Grace Murray Hopper, a computing pioneer. To see some of the events and activities from this year’s “Hour of Code” week, go to the Code.org site or check out the hashtags on Twitter for #HourofCode and #CSweek.

The goal of participating in an “Hour of Code”, is to show that anyone can code and to highlight how vital computer science knowledge is for today’s students, as it helps them to develop the skills they need to be prepared for their future. Data provided on Code.Org provide statistics which support the growing need for students to have opportunities to learn about and develop skills in coding and computer science. According to the site, the majority of schools do not teach computer science, with only 40% reported as having courses available for students. For careers in STEM, 71% of the jobs available are in computing, however, only 8% of STEM graduates are in Computer Science. As for future employment, computing jobs are the #1 source of new wages in the United States, a number that is expected to increase. In addition to the future benefits for employment, what are the other benefits of coding for students?

Why should students learn to code?

Coding is something that each student can do and is a more engaging way for students to work on their collaboration, critical thinking and problem-solving skills. Coding can help to promote SEL (Social and Emotional Learning) skills as well. For example, in working through the various modules available on Code.org or through other coding programs, students develop their self-awareness as they work through the challenges of coding and they develop a greater understanding of their strengths and being able to set goals for oneself based on this self-awareness. Students will become more confident as they problem solve and experience success along the way and by helping peers as well. Students build relationship skills through the collaboration during activities, seeking and offering help when needed and learning to cooperate with one another to solve a coding challenge.

Students can also experience more inquiry-based learning, where they are exploring on their own, problem solving and discovering how to make a program work, where the steps fit in and then being able to share the experience with one another. Personally, I enjoy trying to work through the activities on my own, to experience the challenges and be better equipped to anticipate student questions, but also to be more familiar with areas of struggle.

Getting Started

The idea of coding can be a bit overwhelming, at least that is how I felt when I first started a few years ago with the game Hopscotch. It was challenging to create a game and it took a lot of patience to push through. However, back in the early 1980s, as a 7th-grade student, I had my first experience in writing lines of code with the Apple computers. Once you learn the basic structure and the commands, it is a gradual process that does not seem to take too long to master. Even nearly 35 years later, the concept of coding really is quite the same, except that we can create more visually engaging games and programs. There are so many resources and websites available to help educators and students get started, making it less intimidating than it may initially seem.

When trying some of the resources below, be sure to engage students in discussions about their experience with coding. Encourage students to share with their peers and talk about professions which require coding skills or to brainstorm areas where knowledge of coding will prove to be beneficial. Providing this time for students to interact will help them to develop their SEL skills, by building peer relationships and supporting the classroom culture.

Working with students

Be ready for students to express some frustrations when trying to work through the activities. Even if you don’t have experience coding, it’s a great opportunity to learn right along with the students and in many cases to learn from them. How do you prepare? I recommend trying each of the activities on your own, so you are familiar with the set-up and the types of tasks that the students will be completing. As a Star Wars fan, I started with the basics and did encounter some difficulty mid-way. As it turns out, a few of my students had the exact same problem with it and asked for help. Although I did figure out how to work through it, I wanted them to work through it on their own as well. We need to give students time and space to problem solve, to ask for peer support and to experience the frustration that comes with solving problems and the joy that replaces it when the solution is reached.

Seeing the students begin to collaborate and step in to help their peers, demonstrated the benefits beyond just learning to code, it promotes their SEL skills. A lot of what is involved in coding is critical thinking, problem-solving and definitely collaboration and with all this comes an amount of frustration perhaps when the code does not work as one expects. This is when we see the students start to connect and help one another and I have also seen students become very frustrated, understandably but it is what we do with that frustration, pushing through even in the face of challenges, knowing that there is support available amongst peers and the “teacher” in the room. There is always an identifiable teacher, but as we have learned in our classes, we all have something to learn and something to teach.

Ten resources to try

  1. Code Studio: A part of the Code.org, there are full courses available for learning different types of code, for different grade levels, as well as one-hour tutorials on themes such as Minecraft and Star Wars. Teachers can also use the “App Lab” and “Game Lab” to help students learn how to create using Javascript. Also available are more than 20 million projects created by students.
  2. Scratch: Created by MIT, Scratch is a website for more than just programming. Scratch provides an online community for sharing projects and for learning from the library of resources available on the site.
  3. Code Academy:  Through Code Academy, you can enroll in courses to learn how to program, or search the catalog to find a specific language to learn, such as Java, Javascript, HTML and CSS, for example.
  4. BrainPOP: Teachers can engage students in the “Creative Coding” module, in which students create stop-motion animation movies, memes and newscasts. Students follow the instructions to write their own lines of code and see how each line changes the program. Working through the module leads students to create their own codes and publish a movie or create a meme. The Creative Coding module is free for Teachers through the end of the year.  There are also lessons available which focus on Computer Science and Coding and offer a variety of activities for students to develop their skills.
  5. Hopscotch: an iPad app in which students can learn to make their own games and apps, available for students ages 8 and older. There are tutorials which include videos and lessons plans, making it easy to get started with this in class.
  6. Swift Playground: An iPad app that enables students to get started with coding quickly, without any coding knowledge. Students can start by solving puzzles in order to learn the basics, and then continue through challenges to do more advanced coding.
  7. Pencil Code: A collaborative programming site which provides resources for teachers, student project samples, and choices of creating games, playing music, drawing art, and working with mathematical equations and graphing.
  8. TeachersFirst: There is a rather extensive list of different types of websites for coding based on theme and grade level for getting students involved.
  9. Girls Who Code: A non-profit organization which focuses on closing the gender gap in technology. Girls Who Code offers information for creating after-school clubs for girls in grades six through 12 to learn about coding, as well as two-week-long summer courses and a seven-week-long specialized summer program for 10th and 11th grade girls to learn about coding and job opportunities.
  10. Khan Academy: A non-profit organization which offers free educational resources including practice activities and videos, which enable you to learn at your own pace. Khan Academy provides lessons on Computing, with options including computer animation, hour of code, computer programming and computer science. It is easy to get started by either choosing the basics and working through a whole lesson, or selecting a specific concept.

Coding is not just about learning to write a program, it’s about connecting with the learning and building relationships in the process. Learning to problem solve, collaborate and work together to build skills for the future. Developing our interpersonal skills and fostering the development of meaningful and supportive relationships in the classroom will empower students in learning.