Monday 16 April 2018

I Don't Teach Children How to Code, I Teach Children How to Think.

More and more teachers are introducing students to coding. Many of these teachers had never previously coded themselves, but are making use of many online resources that are freely available to help get students started. Code.org was where I began coding with my class a few years ago. I moved on to Scratch, an online tool that is still block based, but allows students to create their own projects/programs.


The real goal of these tools is to give students an opportunity to think computationally, and to understand the iterative process of building the various parts of a cohesive project. Students are working with block-based programs, but they are also learning to debug their projects as scripts conflict with each other, learning how to code more efficiently, and are developing an understanding of the structure that coding languages follow.


It is important that students learn to think computationally, because that's really the goal. I've heard many people speak disdainfully about some of the different programs students use to get started.

“Block-based coding, that isn't considered real coding”



But I would ask why not? Students are working through the process, figuring out an algorithm, and putting a whole bunch of processes together that work as one program. All the thinking is there, they're just not focused on syntax, or spelling.


In Canada, our students learn French as a second language. There are many studies that have shown the benefits of learning another language. While not all our students will use French in a future position, it does offer them more job opportunities when they graduate school. Parents see the importance of this and often have their children in French all the way through school even when it becomes a choice.

I think we are approaching a time where having students learn to think and speak computationally will open up a wide variety of new job opportunities in the future as well. If you're repairing a refrigerator in 2030, you're going to have to deal with internet issues, and whether or not the refrigerator script for the defrosting process is working with a new update.



There's a whole host of new skill sets that many jobs will require. The internet of things just continues to grow and expand. Street lights in my home town are now run by a type of Wi-Fi signal, so if you're fixing the grid in the city, you're going to have to have some knowledge of how the unit you're working on is communicating with the server.


Our students are going to have to understand how the internet works, not just what's on it.



We're currently concerned with how many apps are using student information, and we are continually trying to understand how our personal information is being used on the Internet. If our students are fluent in the code that makes up those programs, and how those programs work and interact with others, then they're going to understand how their information is being used, because they're going to understand how the internet works.


When I work with teachers on how to build their skills with coding, I often hear about students who already know all about how to code. I take a look and it's really awesome what's being accomplished, sometimes there's hundreds of lines of code, but that doesn't mean that that student doesn't need guidance or help. In one example, there was a program with over forty Sprites which could have just been one Sprite that was cloned. All the “behaviors”, or scripts that the program was running for that one Sprite could run for all the cloned Sprites at the same time. Instead that student did it the hard way. It's important that we get students to the deeper thinking behind the coding. Computational Thinking is a different way of thinking.



Computational Thinking is not new, it's been around for thousands of years. It's how engineers built the pyramids, that's how student trained their minds with tools like the Tower of Hanoi. Here's an example of the Tower of Hanoi:


Try it out for yourself, you have to think step-by-step through the process thinking several steps ahead to be successful. That might sound also like Checkers, or Chess for they too involve Computational Thinking.




When I teach coding in my classroom it integrates collaboration and communication skills, Critical Thinking, Creative Thinking, and Design Thinking as we begin to think about who the end user is for the product students are building. It’s not hard to connect to curriculum either. Myself and 8 other teachers worked on a website last year which has Grades 1 to 6 Math and Language expectations tied right into coding.





So where to next? we boldly go into a future we don't fully understand yet, teaching students to work in positions that we don't know about yet. The one thing we do know is that we have to teach them more about how to think, and less about what to think. I think Computational Thinking and coding should be an important part of that training.