My teaching experience comes from teaching mainly 100- and 200-level computer programming classes. There is an enjoyable aspect to these classes, a nurturing feeling of helping someone get started. Early classes also have less complications from a prerequisite perspective. Developing a course plan always involves identifying the starting point, but with intro classes at least that target is a bit narrower. It’s safe to start by assuming the students know none of the lingo and are clean slates. I’d like to discuss this topic by challenging the idea that students are truly clean slates, and then discuss ways of accommodating more students.
Room of Clean Slates
Teaching programming can be unlike other subjects because many of the core concepts will be brand new for students. Even in this case, it’s dangerous to see students as starting from nowhere or proceeding at a similar pace to each other. Take an example of a student that has attempted the subject before. This could could go several ways. That student may have a multi-week advantage and breeze through the course, starving for more challenge. On the other hand, that experience may not be as strong as the student expects, giving false confidence and encouraging slacking off when the student isn’t as knowledgeable as they presumed.
Let’s talk about a few other factors that can affect an otherwise “blank slate” student base. One is teaching style. Lecture format and out-of-classroom expectations will change how students perform in a class. Some students respond well to thorough lectures that require extensive notes. That can be a big hinderance for other students who prefer interactive case study examples. Outside of class, book readings, notes, and rote exercises are the preferred studying style, whereas other students respond better to projects and other “practical” assignments.
Self-confidence has many facets that affect class performance. I’ve found that especially good students can have a confidence-shattering moment when a subject is as foreign and challenging as programming can be. When that student finds themselves struggling at the point where they have typically gained control of a class, they assume the material “isn’t for them.” It’s possible to accidentally derail a hard working (but struggling) student’s hopes by unintentionally diminishing his or her future in the subject. On the flip side, avoid giving a confident student reason to believe that success will be automatic in the class, as brainy students are exactly the ones you should be encouraging to work harder.
Lastly, I’ve found that certain other subject backgrounds can make for unusual advantage or disadvantage in my classes. Most surprisingly, I’ve found that math majors can be tripped up early on, despite programming borrowing many of the terms of mathematics. Though the terms are similar, the meaning of those terms are tweaked in almost every case, making for lots of misleading twists and turns for students. On the opposite end, I’ve found that subjects such as music theory and chemistry provide learning skills that help with absorbing the abstract concepts of computer science.
Accommodating More Students
Reaching more students comes from two primary approaches: providing a larger range of materials and evaluating student achievement in a wider variety of forms. Rather than filling class time with pure lecture, mix in other segments. Follow-along demonstrations or interactive reviews of class material are easy ways to change the pace of the class. A really cool idea (that I stole from my teacher Sergio Antoy) involves having students give mini-presentations on recently completed homework. Students in the audience really relate to the students giving the mini-presentations. Presenters also often spoke about the bugs and struggles they had while doing the assignment, which helps other students feel like they aren’t alone. Small group discussions are also good, though you want to make sure they have clear goals so they don’t waste time.
I try to allow for different kinds of learners outside of class, too. I provide optional practice quizzes, worksheet-like bonus assignments, extra programs to read, book readings, interesting web links, and all of the in-class material (slides, notes, sample programs, old quiz guides, etc). It takes extra time to prepare this material, but it can save you time later when the end of the term has fewer panicked students. At the start of class I do a quick (10 minute) quiz on the last class’s material, and then immediately review the answers after they’ve been turned in. This helps students stay honest with themselves by providing a checkpoint on their knowledge of the previous class. It also gets them used to my question writing style, which helps alleviate stress on test days. I do a midterm and final exam as well as a “proficiency demo,” where students come into the lab and do a relatively easy pass/fail programming assignment in an hour.
Few students will appreciate all of the material you prepare and present, but all of them will appreciate some part. Careful observance of student progress and use of student feedback forms will help identify symptoms of problems that can be improved upon. Most of all, know that inclusive education helps spread beyond those predisposed to the subject matter. Improving breadth of teaching styles improves the diversity of the students involved. Never deny a student’s struggle by saying a piece of material “isn’t really that hard.” Take seriously each students attempts at learning and growth, and you’ll find that a wide variety of students are capable of impressive results.