The Poor Person’s Guide to Differentiated Instruction
by Richard White
I’m a classroom teacher, and I’m a busy man.
I prep lessons, I develop and coordinate assignments for my students, and post homework assignments on the school website. I collect work, set up labs, write, administer, and grade tests. I develop caring relationships with my students.
It’s the best job in the world… and I come home *exhausted* most days.
One of the many challenges we teachers face is providing learning opportunities that are appropriate for the level of our students. In classes with an especially wide range of abilities, these can become problematic, logistically speaking.
In my Computer Science classes I typically have at least three ability levels in the same class:
1. students who have already had some experience with programming, possibly in a different language, and who are able to accomplish most assignments very quickly.
2. students who may be new to programming, but who are making reasonable progress. They quickly learn that programming requires attention to detail, and they typically pick up patterns—syntactical, logistical, procedural—after one or two exposures.
3. students who struggle to recognize the patterns, or who find themselves more easily frustrated by the puzzles posed by programming assignments.
I’ve experimented with a few different strategies over the years. Here are three that I’ve tried that have met with some success.
1. Below the Fold Progression
In this type of differentiation, students are provided with a text file (usually online) that contains a statement of the problem at the very top of the file. The file itself is actually a working copy of the problem, with the initial problem statement written as a multi-line comment near the beginning of the file. Much farther down on the page, where students can’t easily see it without scrolling, is another multi-line comment containing a pseudocode analysis of the problem. And finally, much farther down again, is the solution code itself. Students who want to work out the program without any hints are free to do so, while students who need a bit of help from the pseudocode can look at that as needed. Students who need much more support may find themselves looking at the actual program for assistance, and that’s okay if that’s where they are in their own learning process.
Example: ch06ex03.py (Right-click or Ctrl-click to download)
2. Page 2 Solution
In this strategy, something similar to the “Below the Fold” method is used, but now, the problem statement and its solution are printed on paper to be distributed to the students. The front side of the paper has the problem statement, and a complete working version of the code is on the back side (page 2) of the same piece of paper. This has the advantage of giving the students a concrete document to scribble on, and giving the teacher some ability to see which side of the paper students are looking at as they work on the program.
Example: four_functions.py (PDF format, Right-click or Ctrl-click to download)
3. Progressive Lecture
The final strategy is much more interactive. Students are assigned a problem in class and instructed to begin developing a solution. At the front of the room, after some reasonable amount of time has passed, the teacher begins writing out a rough outline of the program, perhaps with comments highlighting significant sections of code. Students who have developed their own solutions to the program will continue working on their own, while those who may be struggling to organize a solution will get some hints from what is written on the board.After a few more minutes have passed, the instructor may continue fleshing out the solution to the problem using the framework already developed. Students who still aren’t sure about some aspects of the program are free to ask questions as actual code is presented on the board.
Example: Differentiated Instruction (YouTube video)
Strategy 3 requires the most from me in the classroom. I’m moving around the room, actively monitoring students’ progress, and trying to determine the *decisive moment* (thank you, Henri Cartier-Bresson) when I should begin reaching out to assist students who need some additional guidance. Strategies 1 and 2 have the benefit of being delivered by computer or paper, with assistance immediately available to students when they decided they want to take advantage of it. The downside of those two strategies, of course, is that students do have access to solutions, and may be tempted to avail themselves of those materials before they’ve had a chance to wrestle with the material… and it’s in that wrestling that they really get to learn things.
As I say, I’ve used all three of these strategies on one occasion or another, and they work pretty well in Computer Science courses. I’ve adapted similar strategies to some of the science courses I teach.
As a teacher, do you use any of these strategies, or something similar? How do you reach out to the students of varying ability levels in your classroom?