"So you're basically trying to be a factory for producing compassionate human beings who also happen to be doing technically interesting things."
I had a great conversation today with Jon, my awesome software engineering partner who volunteers his time to come support my AP Computer Science students twice a week after school in an open lab. Jon is partnered with our school through the Microsoft TEALS program here in Seattle. I was looking for some feedback on some changes that I'm going to make tomorrow to set my computer science lab up to be more conducive to student-led discussions and collaborative learning. But first, a little bit of background.
Complex Instruction
I've been teaching math for several years, and I've become really committed to the idea of collaborative learning through a pedagogical model called Complex Instruction (CI). The CI teaching model begins with the idea that an individual teacher's beliefs about learning and education are essential to student learning. Understanding why this is so important starts with students. Student learning is directly influenced by how students engage with the content, which is directly influenced by what students believe about learning. For example, if a student believes that she is just not smart at math, she is unlikely to engage with a hard problem in the same way as a student who has a more positive self-perception . Therefore different levels of learning happen, even though both students might be equally capable.
CI says that as a teacher, I am in the best position to influence what students believe about other students' abilities (that everyone can be good at math) and their own individual skills (that they are "smart" at math). I can influence students based on the actions that I take in the classroom. My actions are largely a product of my own beliefs. If I don't believe that all students are smart at math, or that they are capable of engaging in class in certain ways, I almost certainly won't push them in the same way as if I did believe those things. This is why a teacher's belief set is so important for student learning.
As a teacher who is working to implement CI, there are a few beliefs that play a critical role in implementing effective collaborative learning opportunities:
- All students are smart - Every student is "smart" at math (or whatever subject you apply this to). I use the word "smart" in quotes because there is an intentional effort here in the CI community to redefine this word and expand it beyond the idea of a number-crunching math nerd who is quick at doing calculations in their head. When you expand the definition of "smart" to include things like noticing patterns, explaining thinking clearly, linking different representations of math concepts, and demonstrating procedural fluency, all of a sudden there is much more opportunity for students to find ways that they are smart at math.
- Students who talk are students who learn - CI is rooted in the work of Elizabeth Cohen and Rachel Lotan out of Stanford. The two published a seminal book on collaborative learning called *Designing Groupwork: Strategies for the Heterogenous Classroom* in 1994 that put forth the notion that when group work is done well it can be a better mode of learning for all students. A core idea in this was that students who talk about math are learning math. Therefore, CI aims to provide and support multiple strategies towards creating opportunites for students to talk about math in meaningful ways with each other and with the teacher.
- Status must be attended to in the classroom - Status is what a classroom community perceives about a student and what they perceive about themselves in comparison to their peers. Social status (who is perceived to be cool) and academic status (who is perceived to be smart) intertwine to heavily influence the ways that a student feels comfortable participating in a group of their peers. As teachers, CI calls on us to first be aware of status differences between students and to monitor their changes over time. Then, CI says that teachers must be active in trying to equalize the academic status of students compared to each other. Without this focus, effective group work can never be sustained.
The third belief of Complex Instruction is what differentiates it most from other models of collaborative learning. I want to note that Complex Instruction is equal part structure and content in my opinion. Strong, "groupworthy" tasks and activities that provide multiple access points and different levels of learning are essential to making effective collaborative learning work. I'm focusing just on some of the organizational and position structures in this post, but careful attention to content is just as important.
What CI Looks Like in my Math Classroom
Over the past few years, I've been working on trying to move towards collaborative learning in my Algebra and Geometry classes by leveraging different ideas from Complex Instruction. It's been a slow process, and I'm by no means a model teacher for CI. However, I've seen steady and positive gains in many ways. Putting curriculum aside, there are a few intentional structures and strategies that I use to support collaborative learning in my math classes:
- Random Seating in Groups of 4- I shuffle names up every two weeks and publically post names in table groups. The randomness helps to communicate the idea that every student is smart. The last thing I would want a student to think is that I put her in a particular seat because of academic differences.
- Math Talk Moves - I've been working slowly at trying to incorporate a collection of explicit math "Talk Moves" in my classroom and I've experienced varying levels of success. I've been trying to emphasize it over the past two years, and this year, my colleagues and I are working on this together. Talk Moves are an intentional effort to encourage students to be aware of the ways that they can and do interact with each other in the context of a mathematical discussion. Sentence frames and non-evaluative phrases are key here. This poster was made by my colleauges at Todd Beamer High School.
- Different Modes of Talk - While I know it is my voice that is probably most often heard in my classroom, when I am focused on working to reduce that, there are several modes of student talk that I try to develop. I'll often have students leading class discussions or making key contributions related to concepts. I have started doing more turn-and-talks, a strategy that I tried to use early in my teaching career and one that was difficult for me to find success with.
These are just some of the structure strategies that I use to try and strive towards the idea of collaborative learning in my classroom. Many of the other strategies I use are more closely linked to content (open-ended group tasks, group test reviews, shuffle quizzes, etc.) Additionally, the intentional effort to recognize and attend to status is critical. These things are certainly a work in progress, but I've seen great gains for both my practice and the performance and happiness of my students as I've dug deeper into what it means to teach towards collaborative learning.
Translating Complex Instruction to Computer Science
I've been struck by how awesome the experience has been so far teaching AP Computer Science. My students are extremely motivated, very far along in their math and science careers, and itching for the chance to learn programming. This is the first time our district has offered the course, and we're starting it in conjunction with an Intro the Programming class. We encouraged primarily seniors to sign up for AP, but long term it will be encouraged for all students who feel ready to take on the course. The concentration of students taking the class this year has been a widly different experience than my experience in math classes, where many of my students struggle to maintain motivation and hope due to previous failures in mathematics and low self-confidence.
So, why then, do I go about using CI in the computer science classroom? It seemed to me at first to be quite easy to ignore this idea and proceed with teaching in fairly direct, and teacher-centered ways. To my amazement, my CS students are generally keen to take notes, listen to me explain complicated concepts, and participate in asking questions and practicing programming problems. How different! I found myself getting caught in believing that status is not as important in this classroom, that I don't have to work as hard to change my students' beliefs about content, and that I can cruise by focusing primarily on content in this class. I'm now realizing that, while I can probably do this and lead my students to a relatively good education, I'm missing a huge opportunity to redefine what my computer science students expect and experience in the classroom.
Also, things have recently started to get quite hard for many students. We've been learning many early isolated concepts in programming; things like declaring variables, scope of variables, and for loops. Students seem to grasp the ideas just fine on their own, but we've started combining them together and some students have started to struggle. It has become evident that some students need more opportunties to think deeply and work through hard problems with support, as they develop their own techniques and work strategies as programmers. Additionally, I worry that the lines that separate students who are succeeding from students who are struggling mirror broader lines of difference that exist between people of different classes, races, and gender in our society. Collaborative learning structures can be a way to explicitly acknowledge and work to address these issues. So, I'll be making major shifts tomorrow in class, leading off with a few key structural changes:
- Random assigned lab seating - I want my students positioned to value every other member of the class as a potential teacher to them. I've struggled so far with making this decision in part because of the lab setup and also because, well, teaching has just been so smooth so far. I'll be rolling out a rotating, random seating chart, explicitly for the purpose of getting students positioned to work with each other throughout the year.
- Partner Programming - Partner programming is a model for collaborative learning in computer science classrooms. It is basically any varation of having two people work on a program and using explicit roles where one person is allowed to type at one time and the other person is only allowed to talk. It forces clarity and separation between the thinking/planning/communicating part of programming and the implementing/testing/analyzing part of programming. I've used this a couple times so far this year, but I'm planning on re-working my daily agenda to incorporate this daily if possible.
- Turn and Talks with partner pairs - I've got a scheme figured out where each student will have a "right" and "left" partner that I can have them find in order to engage in a short, structured discussion about a particular topic. Being in explicit partner roles allows for discussion moves that provide access for all students to contribute. While rigid and sometimes uncomfortable for students, I truly believe that this is a structure that can lead to students valuing each other and feeling safe contributing in the larger classroom community.
These are obviously small steps, but I'm really excited to jump into working towards collaborative learning in this new context of computer science. I'm also really excited to start focusing my attention on status issues in the classroom. Even though they will manifest themselves in very different ways than I've experienced in the past (imagine students who have taken many high level classes together and are used to knowing exactly where they stack up, students who have tons of programming experience next to someone coding for the first time, or students who don't necessarily fit the mold of a sterotypical programmer), I anticipate that attending to and trying to equalize status in the computer science classroom will be equally important for improving students' opportunities to learn.
I'm curious to hear thoughts on these changes. What other suggestions come to mind? How do others approach collaborative learning in computer science?