Coding in Elementary

Coding in Elementary

This past week Ontario announced changes to its elementary math curriculum. One of the big changes is the inclusion of coding starting in grade one. Since the announcement, I've seen a number of people posting excitedly about this change. But, I'll admit, my gut reaction wasn't excitement, but trepidation. Since I heard about it, I've been trying to figure out how to put my thoughts into words as to why, and this post is the result of this.

I generally love coding. And I love tinkering around with computers. I've mentioned previously that I joined my first computer club in grade 2. I've coded and designed edtech products. I think there's a huge learning potential for kids when it comes to using technology, especially when they get to be in control. I'm not at all anti-tech.

So what is it about coding in elementary that makes me less than thrilled? Well, it's a few things. But, let's start with the idea of computational thinking, as its often how this discussion is framed. In 2014, Jeannette M. Wing defined computational thinking as "the thought processes involved in formulating a problem and expressing its solution(s) in such a way that a computer—human or machine—can effectively carry out."[1]

Helping students develop their computation thinking is something I'm all for. Understanding how to think through a problem and then create a step-by-step solution is useful across all subjects. We solve most math problems this way, even if it's mostly unconsciously. Same with following (or writing) a recipe. Or conducting a science experiment. Or building lego or drawing a picture. Even the basic process of how to write an essay can be more easily understood when presented in this form. Understanding how to break something down into its smaller components is an incredibly useful skill that benefits everyone, no matter what profession they go on to choose later in life. But coding is only one way to teach that. And I don't agree that it's the most effective (or most useful).

If the talk and push around coding in elementary was focused on helping students develop their computational thinking skills, I'd be all for it. But it rarely is. Instead it's built on what I think is a false narrative that everyone needs to know how to code. And that if everyone needs to know something, that we need to start teaching it early and often.

I'm a firm believer that the first few years of elementary are some of the most important years of schooling that kids will receive. It's when they learn all the basics. And these basics are the foundation to everything they will be expected to learn over the coming years. The skills we choose to emphasize in these years will have a huge impact over how prepared they are to deal with those later years. And the more skills we add to this pool, the less time teachers have to create that strong foundation, as their time gets further divided.

Elementary teachers are, in my opinion, already overtasked. Unlike high school teachers who are usually specialized, elementary teachers generally have to know how to teach all subjects. It's hard enough to be a good teacher in a single subject, much less than one that has to cover multiple.

Few teachers have any experience with coding. It's not something that has been traditionally taught to them, except during the occasional PD day. And coding is hard. It's an inherently frustrating process. And yes, it can also be an incredibly rewarding one. And a single PD day of training isn't nearly enough to have mastered the subject to be ready to deal with the problems students are likely to encounter.

Sure, there are many tutorials and websites and apps and programs that are designed to start teaching kids how to code. But most of these are quite limiting in use. Many teach a single concept with little to no support on next steps and how to use the skill in aother context. A lot of them are flashy and exciting on first look, but the shine wears off quickly as the product's limits set in, and these expensive toys are often relegated to a shelf after a couple of days.

Coding is magical. It's one of the few things where it really feels like the potential is limitless. But the way we go about teaching it and presenting it to students presents a false veneer. We've packaged it to look like it can happen fast. We've tried to remove all points of frustration. We hide what the real experience is like. And so many of the solutions just reinforce old stereotypes as to who coding is for and who it isn't. Do you like robotics? Or LEGO? Or video games? Then coding is for you. If you don't, well... tough luck. Never mind that coding can be used to create music, videos, art, books, poetry and more.

There is a time and place for learning how to code. I think students who are interested in it should be given opportunities to explore it. But I don't believe that all students need to know how to code and that coding is a fundamental 21st century skill. That said, I do believe that all students would benefit with learning computational thinking (and that this is a 21st century skill). So let's teach that, but let's move past thinking that that has to require a computer. Then, when or if a student decides to learn how to code they'll be even more ready for it.

P.S. As I've been mulling this topic over myself, I came across an opinion piece in the Globe and Mail called What coding really teaches children by Clive Thompson. In it, he's also somewhat critical of the curriculum change. While the article is not a perfect reflection of my own sentiments as to why, I do agree with a lot of what he has to say, and it's worth a read.

P.P.S The other day I came across this example of the disconnect between the expectations of what it's like to be a coder and reality. Obviously it's exaggerating for comedic effect, but there's a lot of truth to it. The vast majority of time people spend coding is not actually writing any code. It's understanding the problem. It's designing a solution. It's researching how it's been done before. It's trying to predict any problems and edge-cases that you may encounter. And then once you do write code, it's running it over and over again with different inputs and under different conditions. It's encountering error messages that leave you scratching your head. And some days, it's wanting to throw the computer out the window.