Introduction
Programming is an important skill in the 21st century. Once we master programming, we can delegate different tasks to computers, free ourselves from tedious tasks, focus on what we can do the best, and eventually increase our productivity. Coding can also be useful in the educational context. Since we can delegate some tasks to computers when we master coding, coding opens a new possibility for helping students learn deep, conceptual, improbable and transferable knowledge. In a sentence, coding can be a powerful tool for scaffolding learning.
The Zone of Proximal Development and Scaffolding
To understand why coding can be a powerful tool for learning, we need to look at the root of the concept of ‘scaffolding’. Between what learners can do alone (their prior knowledge) and what they can’t do at all (their learning goals), there is a zone of proximal development (ZPD), which contains the tasks that learners can do with some assistance but not alone.
You may wonder why we should pay attention to ZPD at all. The simple answer is: sometimes learners need to learn by doing. This is especially true for conceptual, integrated and transferable knowledge. If learners don’t have the chance to deal with authentic tasks, the knowledge they build will be deeply flawed. For example, for doctors to make good diagnosis, they need factual and procedural knowledge, as well as the ability to combine all the clues from their patients. The only way that medical students can fully master the sophisticated skills of making good diagnosis is to do authentic practice. ZPD should start making sense for you now. Since students sometimes must engage in authentic tasks that they can’t do alone to learn more sophisticated knowledge, ZPD is a sweet spot for bootstrapping learning. It’s something slightly behind the learners’ ability, but at least they can do it with some sort of assistance. The learners can construct more knowledge through authentic practice, and that in term makes them more capable of learning through authentic practice. In the end, the learners no longer need those assistance to sustain their own learning. This is like scaffolding used for constructing a building.
How Coding Supports Learners to Think
Scaffolding restructures authentic tasks such that learners can engage in these tasks to gain competence gradually from their new experiences. Generally, scaffolding may:
- simplify the tasks such that learners can engage the tasks in meaningful ways,
- help learners focus on aspects of the tasks that are critical for building their conceptual frameworks,
- prompt learners to connect different concepts and reflect on their understanding,
- prevent learners from being distracted by failures to the learning outcomes and keep the learning process on track,
- offset frustration and maintain learning motivation.
Let’s look at some specific situations that coding can be used as scaffolding, and how coding can help learners in these situations.
Relieve Cognitive Load
As mentioned, it is often important to simplify the tasks that learners need to do so that they can focus on aspects critical to building robust conceptual frameworks. Coding can simplify and automate many tedious tasks, especially tasks involving computation and data manipulation. That means when learners study subjects like mathematics and science, they can engage in authentic, meaningful and complex tasks without being overwhelmed. Not only can learners develop deeper knowledge but also have more motivation to learn these subjects as they realize what they can do with their knowledge.
For instance, matrix multiplication is a fundamental topic in linear algebra with many applications, but it is also a very tedious task. Learners are often overwhelmed by the computation tasks and overlooking the important aspects and applications of matrix multiplication. However, Python libraries like numpy can vastly simplify the computation tasks. That means by coding in Python, learners can apply matrix multiplication (say, for image manipulation) before mastering the actual computation skills. With such authentic experiences of using matrix multiplication, learners can develop deeper and more transferrable knowledge about matrix multiplication. In this case, coding reduces the barrier of developing deep knowledge through authentic learning.
Artifacts for Articulating Ideas
Solving a novel complex problem often requires different knowledge and skills. Thus, connecting different pieces of knowledge is important for developing transferrable knowledge. However, making such connections can be difficult because of the connections can be subtle and abstract. On the other hand, when learners create concrete artifacts with their knowledge, their knowledge is embedded in their artifacts. Therefore, learners can reflect on the connections between different pieces of knowledge by examining the artifacts and the process of making those artifacts.
Coding enables learners to make a wide variety of artifacts, and those artifacts often connect different pieces of knowledge in a logical way. For instance, when coding games in Scratch or Pygame Zero, learners can use their knowledge in coordinate geometry, physics or even some calculus. The relationships between different concepts are no longer just formulae meaningless to learners. Instead, learners need to actively investigate these relationships in order to make their games work.
Provide Feedback and Prompt Reflection
Beside constructing conceptual knowledge through active participation in authentic tasks, metacognition (i.e. thinking about thinking) is extremely important for the continual development of robust knowledge. When learners examine their own thinking and reflect on their ignorance and misconceptions, they can restructure their conceptual frameworks and make their knowledge more robust. Receiving feedback is probably the most effective way to trigger the process of reflection and restructuring.
Coding can provide lots of feedback to learners. Problematic programs show all sorts of symptoms, including error messages to incorrect behaviour. If learners have misconceptions and make mistakes when they code, they can easily discover those problems. Debugging those programs forces learners to rethink what have been done incorrectly and how to fix the issues. Gradually, learners will develop the ability to question their own thinking. This kind of higher order thinking helps learners construct more robust conceptual frameworks and develop stronger problem-solving skills.
Conclusion
The co-founder of Apple, Steve Jobs, once said ‘computer is the bicycle for the mind’:
Computation tools such as Python and Mathematica have been used by scientists and engineers to facilitate their work for a long time. Putting such tools into the hands of novice learners was probably impractical in the past. However, new platforms such as Raspberry Pi give learners access to these tools at low cost. This creates a golden opportunity for integrating coding into other subjects. With the help of coding, learners can engage in tasks that they can’t possibly do in the past, think in the way they have never imagined, and construct deep, conceptual, improvable and transferrable knowledge across different disciplines individually and collaboratively. By leveraging the power of coding, both learners and educators can construct individual and collaborative knowledge in an unprecedented scale.
References
Greeno, J. G., & Engeström, Y. (2014). Learning in Activity. In R. K. Sawyer (Ed.), The Cambridge Handbook of the Learning Sciences (2nd ed.). New York, NY, USA: Cambridge University Press.
Jonassen, D. H. (2006). Modeling with technology : mindtools for conceptual change. Upper Saddle River, N.J.: Upper Saddle River, N.J. : Pearson Merrill Prentice Hall.
Kafai, Y. B. (2014). Connected code : why children need to learn programming: The MIT Press.
Reiser, B. J., & Tabak, I. (2014). Scaffolding. In R. K. Sawyer (Ed.), The Cambridge Handbook of the Learning Sciences (2nd ed.). New York, NY, USA: Cambridge University Press.