"What do we want students to gain from their experience with a first coding language?"I do think that we can agree on three goals:
- Spark their interest early.
- Keep them from getting discouraged.
- Give them confidence going forward.
The first goal is, surprisingly, often overlooked in coding classes. Meet the kids where they are interested and you have won half the battle. Open a dry computer science textbook full of object-oriented theory and sorting algorithms and the kids' eyes will glaze over. If you can show them how what they are learning is relevant to them, whether it's gaming, smartphones, smartwatches, AR or VR, or just plain fun, they will give you their attention. Keeping that attention is the next challenge but you're off to a good start. We live in a time where students have access to a myriad of tools to not only learn from, but to create something unique and meaningful to them. Cookie cutter lessons will not cut it (ha!) and if you force everyone to make the same thing then you risk losing some o them. Leaving room for creativity and personalization with the projects will help immensely. This gives them the motivation to keep going once they run into goal #2.
Keeping the kids from getting discouraged is what often strikes soon after the introduction. Software development and programming isn't easy and it takes an extra attention to detail. For example, the variable 'score' is different than 'Score' and the code will throw errors. You might even have them spelled the same and still get an error. Helping the kids to accept that is important to do. We often warn them that you will make errors and its part of the experience. We even do debugging activities with our Elementary students in Scratch. I ask them, "Does your Scratch project always do what you want?". They shout back, "No!". It's fun to see how quickly even the younger kids get this. As students move on to their second language or development tool, it's helpful to choose a language that will complement the first. What I mean is that it should have some similarities to the first language such as data types or slightly similar syntax, but it can be more complex, perhaps add some new graphics or game capabilities, and maybe even target another platform like web or mobile versus desktop. Working with a second tool will help cement the ideas introduced earlier. Seeing the concepts cross over to new languages and platforms will give them confidence that there is a maybe a pattern here after all and it isn't necessary to constantly relearn everything for each new tool. This takes us to goal three.
The rate of technological change will continue and most likely accelerate. To deal with this constant change, our students need to have confidence moving forward. If they experience early success with their projects and tools, they will be comfortable with change and develop more "grit". There is no rush to show a student in 6th grade the latest hot web development tool because it will most likely change or simply not exist by the time they hit the job market. Many parents want their kids to go as far, and more interestingly, as fast as they can. I would argue that this isn't necessarily good for the student. There is time to let them explore a tool they are enjoying, for example Scratch before moving on to Python. The next tool will still be there when the student is motivated to continue. Throwing a middle school student into Apple’s XCode will most likely just be an experiment in frustration and will not instill confidence. We should keep the tools appropriate to the age and grade level. Yes, there will be outliers who can handle the same languages or tools used in college and beyond but that is the rare case in our experience. The kids have plenty of time to develop their coding and technology skills and they are better served by going at their own pace over the language or development framework du jour. We want them to be lifelong learners so we should work to create less discouragement and more confidence. Building on successes with their projects will also motivate them to keep learning.
Ultimately we want to get the kids to make something with whatever technology they have access to, and to have fun doing it. But we need to also remember that they need to connect with the material and be motivated to keep going, even when things get discouraging or the tools and technologies change.