Tuesday, August 13, 2013

ICER Day 2 - Variables Are Hard to Grasp?

One thing I love about ICER is the format: it is designed for interaction. We don't just sit there, sliding progressively lower in our seats as the days go on, hoping for the next coffee break. We listen to a speaker and we discuss the talks and we have spirited Q & A sessions.There were quite a few radical ideas tossed out in today's presentations. In great part because the speakers were, for the most part, energetic and comfortable with uncertainty. I can't count how many times I heard something along the lines of "and these results [just presented] leave us with more questions than answers". At which point we all would happily leap into the discussion fray with each other and the presenter. And no one seemed to take offense, as I have seen in some other research conferences when presenters take themselves a bit too seriously.

Cognitive learning theories were at the heart of the first two talks and there was some radical stuff here. For example, in the first talk of the morning Linda Seiter spoke about her work with computational thinking and primary school students. Not high school, not middle school, but primary school. 2nd grade, 4th grade, 6th grade. We don't hear about research on computing in kids this young very often - not by computer scientists at least. That in itself made me sit up in my seat.

One of her fascinating results started with the discovery that kids have an easier time learning computational concepts that we take as given to be harder, and that kids have a much harder time with concepts we assume are easier and thus teach first. For example, multi-threading, blocking, and synchronization come much easier than variables. It turns out that the concept of variables is really really hard - it isn't a natural concept at all. Young kids just don't grasp variables. Whereas they do grasp those OS related terms I mentioned.

Hold that in your head and then add in this: Linda  also said that 8th graders have similar computational thinking skill abilities as the college students she teaches and they run into the same problems. So although there are periods of predictable cognitive leaps as kids develop (4th - 5th grade seems big) , in terms of skill acquisition ability in computational thinking, there doesn't appear to be much change between 8th grade and freshman year of college.

If that is the case, should we rethink our decades old accepted wisdom about what concepts we teach first and what is necessary as foundational? The work we were hearing about focused on K-12, but what about university computing curricula? We have been beating our heads on the wall for decades on some of the same CS1 and CS2 problems - what if, instead of continuing to rework, tweak, re-present the same basic set of introductory concepts in the hopes of getting them across better - what if instead we look at upending the entire curriculum and putting the so-called hard concepts first? What if many of these aren't really the conceptually hard concepts at all? Conversely, what if the stuff we think of as easy and fundamental gets pushed out much later? Junior year? Senior year?

Why, for example, do we teach variables right off the bat anyway? Because we always have? Because all the textbooks are written that way? Because everyone does it that way? Because they are obviously simpler concepts? Because this is so fundamental to our belief system that we don't question it? Because it would be scary as heck to throw it all out the window? We can come up with lots of reasons why this paradigm shift (as it most definitely is)would be impractical to try. But when have true paradigm shifts ever been comfortable or without large speed bumps along the way?

Here is one of my favorite quotes from this morning: 

"As a teacher you need to forget everything you know and think like a first grader"

Although directed at teachers and researchers working with first graders, I think that it would be healthy for all of us to periodically think like a first grader. Before we have internalized so many fixed notions of how the world works, and, to quote back from yesterday's post, before we have developed Functional Fixations.


  1. The Program by Design community has been saying for a long time that mutable state (aka variables) is not what should be taught first. Unfortunately, although they may be correct, their style of delivery for this message often gets in the way of having it be more broadly accepted.

  2. Variables are a core element in programming. It's not that you cannot do any programming without variables... but it'd be very little. We could perhaps teach more advanced concepts about computing, but we wouldn't be able to get students to write any code to *play* with those concepts if they haven't acquired a reasonable level of expertise in programming. What do you think?