Over the past few years, there have been an increasing number of initiatives to provide kids with the opportunity to learn how to code. I have heard a number of reasons for these efforts, some more compelling than others. The least compelling of all: there will be loads of high-paying coding jobs in the future. Like most sure-fire ways to get rich, it's probably not true.
So, why should we teach kids how to code? Is it just another push for vocational training that will be outdated in coming years and leave a generation behind with irrelevant skills?
There are many good reasons to teach coding, but I think the most compelling reason is that it enhances a student's ability to learn. Learn what? Anything. In today's rapidly changing job market, this is the most valuable skill you can have.
Coding can teach you how to learn because it guarantees that (1) you will make mistakes, (2) you will be aware of those mistakes, (3) you will know when you have fixed them. And all of this can happen with little involvement from a teacher.
Think back to when you were a student. Typically, you would learn a concept and practice using it. What happened during this practice? Maybe you wrote out some mathematical operations on a worksheet. Then what? You waited for someone to tell you if you were right or not. Maybe that happened an hour later, or maybe that happened the next day, probably when you had forgotten what you were thinking about the day before.
The critical component of the learning process is feedback. If the students don't receive feedback in a timely manner, learning is delayed. This challenge of receiving feedback can be illustrated by an analogy in the field of process control.
In the below diagram there are a few components: (1) Inputs, (2) Outputs, (3) Feedback, and (4) the Process with a controller that can change process parameters. The principle behind the controller is that it can adjust the process to vary the output from a given set of inputs.
In the process of making cookies to fit in a certain size of packaging, a nozzle controls the amount of dough placed on the baking sheet. When the baking has finished, the cookie size is measured. If the cookies are too large, this information is fed back to the process so that the nozzle releases less dough for each cookie. The process continues to adjust itself so that the cookies are the same size each time, self-correcting for small inconsistencies in the dough. The faster information can be fed back to the process, the more consistent the process can become.
Extending this metaphor to the learning process, students make observations by many different avenues including personal experience and direct instruction. These ingested observations are the inputs. The learning process transforms these inputs into concepts which produce models of reality within the brain. The application of these models allow students to predict outcomes in the world. These predictions are the output. Whether or not the output conforms to reality is the measure of the difference between the predicted outcome and the actual outcome (e.g. the difference between a student's answer to a math problem and the correct answer). This difference is the feedback.
As illustrated with the cookie example, the feedback of size allows the process to self-correct. In learning, the difference in predicted outcome versus actual outcome allows the student to adjust his/her thinking. The sooner the difference is known, the sooner corrections can be made to the concept as understood by the student. The more frequently feedback is received, the more efficient and effective the learning process can become.
Traditional teaching provides a batch process model where the student works on understanding and applying concepts to problems, then receives feedback later. In the case of testing, often much, much later. Sometimes feedback takes so long to return to the student that it seems irrelevant, no correction is made to the incorrectly understood concept, and the student's ability to learn suffers.
In coding, the process is much closer to continuous. If the code is performing according to expectations, the computer will do what you want it to. If you are writing a program to move an image of the soccer ball across the screen, and the soccer ball isn't moving, you know something is wrong and can immediately adjust your code to fix it. If you answer the question 4*3=13 on a piece of paper, it may take a while for someone to tell you that the answer is actually 12 and help you to better understand the concept of multiplication.
Coding provides students with frequent opportunities to exercise their ability to learn by trying new things, making mistakes, and adjusting their thinking accordingly. This acceleration of the learning process gives students valuable experience with the most important skill anyone can develop -- the ability to learn.