When I think about teaching math, I know what a good math lesson looks like. It has all students collaboratively solving problems. But when it comes to CS, I haven't necessarily seen a lot of "WOW! that was a good CS lesson" in other classes - in fact, I've only observed one other person's CS class, and it seemed like an average class. Nothing I was dying to replicate in my own class.
In my class, so much of the programming tasks are pretty individual - people working by them selves to learn a new aspect of programming. They talk to one another when they run into problems, but I don't see students wrestling with content the same way I see students in math wrestle with content.
Our class-code-alongs provide a bit of a glimpse into that, but still there is this awkward timing thing that I don't have quite down.
Where I did see collaborative problem solving in my CS class recently was when we did the brainstorming for our Simon game. I think that can be expanded on to give students a task and see what they come up with.
Next, I want to give students a challenge to make another game - maybe 2048 the game, or a memory game? I think this could be a fun, collaborative, and rigorous challenge for students. I could even create my own code to give students who need a bit more scaffolding after they struggle a bit.
I keep coming back to the question of "who is learning in my class, when, and how do I know?" Here's how I have identified my "learners" in my class thus far:
- I have a few students who are constantly asking questions - it shows that they are thinking about processing what they are taking in and making sense of it.
- My students who "go rogue" and decide to do their own projects are other students I would identify as my "learners" also - they are creatively arriving at solutions.
- My students who can look at someone elses' code and troubleshoot it.
- My students who create things they are proud of... you can see it on their face - they are happy and satisfied with their work.
- Students who see the need to define the problem - again, they are asking questions and keeping the big picture and the small picture in mind.
- My students who re-read their code before asking me - have looked at the errors and tried to make sense of them. I have noticed a gap between students who know how to read code and those who don't. This was especially true when we took a break from programming and then came back to it. Some students were writing some funky things like if (x = 6 or 7) - logically I know what they were trying to do, but they were pretty far off the mark from a syntax perspective. I suppose this is much like PEMDAS in math - they might be capable of thinking about a problem from a big picture, but when it comes to computation, it can be rough.
When looking at this list, I am noticing that a lot of these things are happening when we do projects - not just the little stages in CodeStudio. It is so hard to see the learning when they are "plugged" in to the computer... obviously there is a time and a space for this type of learning, but I am wondering if I need to move to peer programming models or replace it with some more open ended-esque projects.
I really wish there was someone out there doing CS education research much like Jo Boaler is doing maths education research.