I heard an interesting argument recently about not teaching young kids to code and it made me stop and think. Their point was that the pace at which technology progresses, and the way that technology authoring tools are becoming more and more user friendly for the masses, by the time these young students move into the work force they will have no need for coding. They believed that it was pointless because the skill of coding is becoming less and less valuable, so children should not be wasting their time doing it. As someone who has been very vocal about making sure that the curriculum we are teaching our students is up to date, this struck a chord with me. A part of me even thought that they were right. But, as I thought about it more, I remembered that the reason we teach students to code, is not because they will necessarily become computer programmers and coders someday. We teach it because of the many other skills that the process of coding helps develop. On top of this, we don't educate students solely to make them employable, we educate them so that they are successful in many aspects of their life and the skills that coding teach are transferable to many of those areas.
I find that coding is similar to the process of building with LEGO. We would never suggest that students shouldn't waste their time building LEGOs, because we look at it as a toy rather than a game. I don't think coding is any different. In fact, in my personal opinion, LEGO is just a physical form of coding. In both, you must be able to recognize patterns, find the best solutions, break large things into smaller pieces, and to think abstractly about complex situations, sometimes many steps ahead. Both coding and LEGO helps build these very useful soft skills like problem solving, creativity, and most of all computational thinking.
(BTW, many activities when first learning how to code, are not done on the computer. Check out some here)
Computational thinking is a set of problem solving skills learned most often through computing and coding. It is the skill set held by computer scientists an programmers, but it can can be learned and used by anyone in any field of work. It is a way to break down a larger problem into smaller, more manageable parts and it teaches learners how to solve practical problems.
Computational thinking is best learned through the process of computing and coding because it teaches learners the way in which computers “think” (breaking down parts, recognizing patterns, and creating algorithms). It requires thinking things such as "if this happens, then this will happen" and "when this happen, this needs to happen, but only if this happens." It is a way of putting together instructional steps in order to solve a larger problem.
There are five main skills that computational thinking helps develop. Decomposition, pattern recognition, abstraction, algorithm design, and grit.
Decomposition is breaking down a larger problem into smaller parts. In younger grades students learn how to do this when solving multiple step word problems. As any elementary teacher can attest to, this is not an easy task for many students. But it is an important skill and many of us use it every day. We do this when we write grocery lists by putting the items into categories to make shopping more manageable. Coding helps students see that larger things can be broken down into these more manageable pieces.
This skill comes in handy in many areas:
ELA: breaking down poems (meter, rhyme, and meaning) or the elements of a story (plot, setting, characters, climax, resolution, etc.)
SCIENCE: categorizing things (animals, planets, weather, rocks, and other scientific topics)
SS: understanding hierarchies in different systems, learning the differences between continents/countries/cities, breaking down problems in communities and cities.
MATH: solving multi-step word problems and equations
LIFE: making lists, organizing materials, delegating jobs
Pattern recognition is the ability to see how a current problem relates to a previously solved problem. When students are programming they learn to see how a solution they used earlier might work to write the next step or how only a part of it needs to be changed to solve the problem. It gives them the ability to work at things more efficiently and effectively and it builds bridges within the brain. It helps lessen learner frustration.
It can also help students in:
SS: finding cycle patterns (economies, governments, resources), understanding
SCIENCE: seeing the relationship between different/similar types of plants and how they grow
MATH: using formulas to solve problems, choosing the correct operation when solving word problems
ELA: understanding word choice, vocabulary retention by understanding roots, prefixes, and suffixes.
LIFE: learning from our mistakes, recognizing cause and effect, gardening
Abstraction is the ability to set aside information that isn’t needed. Just as we teach students to cross off sentences in a text that aren’t needed to answer a question, coding can help them learn how to do this more efficiently. When programming, coders have to know what information needs to be hidden from the viewer. There are a lot of things that go on behind the scenes a program to help it run smoothly that you know nothing about. Coding allows you to build this skill of thinking outside the box. It's nearly impossible to code without having to think a little abstractly about a solution.
Although abstraction in programming is technically about understanding how to choose what the viewers will see and what goes on behind the screen, it's also about thinking in unique and out of the box ways. This helps with:
ELA: analyzing poems and understanding figurative language
LIFE: solving problems with relationships, school, emotions, etc.
SS: understanding historical perspectives and motives
SCIENCE: any scientific process requires some abstraction (research, experimentation, conclusions, hypothesis, etc)
Algorithm design is creating the steps to solving a problem. This is the creative part of computational thinking. There are probably a few different ways that you can get from your house to the grocery store, but they are not equal in time, efficiency, or distance. These steps and the ability to refine the steps to get the best outcome are an important skill. Coding helps to build the skill of algorithmic design. Kids who code are often great problem solvers.
When students understand algorithm design this transfers into:
ELA: writing expository or sequential stories/explanations
SCIENCE: using the engineering method or scientific process to do experiments
MATH: using the correct order of operations, applying rules
LIFE: prioritizing, learning to turn patterns into rules, financial literacy
Grit is the ability to keep going even when things are tough. Any computer programmer will tell you about a problem they spent hours or days trying to solve or a time they kept fixing one problem only to create another one. It is very common while coding to make mistakes and to have to start over, try again, and even fail. But what you learn is to never give up. Its a highly rewarding feeling to work for hours on a project and to finally watch it come to fruition and have other people enjoy it too.
Grit transfers into many aspects of life, school, and eventually work. It helps you understand that failure is a part of learning and that no matter how difficult a problem is, there is a solution out there. It really teaches you never to give up.
Not only does it help build computational thinking, which leads to the five problem solving skills (decomposition, pattern recognition, algorithm design, abstraction and grit) , but it also teaches students how to connect and communicate with others better. Although coding is often seen as an independent activity, you can't learn how to code without learning from others and even working together. Working on coding projects in groups help students learn the power of communicating their ideas and learning from others and how they can use the steps of computational thinking to solve problems that help others.
I think the value of coding is apparent. I see that even if coding itself will eventually be obsolete, students can still code projects now, and more importantly they are learning bigger soft skills that will help them in numerous areas of their life and studies.