This is a guest blog by MIT Master Trainer Anqi Zhou.
During summer 2016, I had the opportunity to teach App Inventor to classes of 30 beginners aged 10 - 12 in Beijing. It was exciting to bring the power of coding to so many young persons, but even with three teaching assistants in the room, it was a tough experience.
With a limited number of programming teachers available at present, finding ways to effectively teach a large class is important in bringing programming to more students. In this post, I am going to share the challenges and tips I gathered from the teaching experience.
Debugging, distraction and diverse capabilities are key challenges
Firstly, anyone who teaches programming can tell you that “my program is not working” is the most frequently heard phrase in the classroom. Unlike in a maths classroom, where a definite answer can be easily given to most questions, to give an answer to “my program is not working” usually requires timeout for individual attention and teaching experience. Maybe it’s a specific spelling error somewhere, maybe it’s Internet connection issues, maybe it’s anti-virus software going crazy, maybe it’s just a slow computer, the list goes on. When you are responsible for more than six students, you’d probably be rushing around and putting out fires everywhere.
Secondly, working on a computer opens a world of distraction to students - websites, links, emails, games, videos and whatnot. The larger the class size, the more difficult it is to keep everyone on track and keep the show moving on.
Adding to the complication is that students usually come with a diverse range of capabilities. Some would take five minutes to download and locate a picture and some only type with index fingers. The students more familiar with basic computer skills are prone to distraction while the slower ones may fall behind the classroom flow.
10 Tips for teaching a large class
1) One machine per student if possible
Sharing machines by design inevitably sends a subtle message that not everyone needs to be fully engaged at all times. Even though we do need to include elements of teamwork and pair programming in our class, it’s still better to give each person a machine to be responsible for, otherwise it’s easy to see at least half of the students with wandering minds.
2) Prepare the machines
That includes charging and downloading relevant software ahead of time. You would not want to have many students sharing a limited number of power outlets located in awkward positions in the room nor fighting for Internet bandwidth during your class.
3) Good student monitoring software
Especially the kind that allows you to remotely control a student’s screen and bring it up for the whole class to see. When a student gives you a bug alert, chances are, some other students are probably experiencing similar problems. Helping one student remotely debug and projecting the process to the whole class would make the debugging processes more efficient.
4) Allow students to go at their own pace if needed
Since it’s easy for students to fall into different paces, it’s helpful to prepare a worksheet, a book or a web page of classroom materials, so that faster students can challenge themselves ahead while students who take more time can go at their comfortable pace.
5) Prepare different questions to challenge on various dimensions
Students have different strengths, some understand concepts well, some program very fast, and some are more artistic. Apart from programming challenges, I’d also prepare design challenges in each lesson, so that a student who programs fast can be engaged while a student who struggles with code can have opportunities to easily contribute ideas.
Here are some examples:
How would you change the chat app you programmed if the users are primary school students? How would you change it if the users are the elderly?
6) Warm up exercises for basic computer skills
If students come from different basic computer skill levels, it’s worthwhile giving them some warmup exercises to save teachers class time explaining computer basics. A typing race or downloading and saving a specific fun picture can work wonders as an ice-breaker game.
7) Set definite and visible time limits for each task
Unless it’s a designated period of free exploration, I’d usually set a time limit for each task, such as downloading a picture or drawing a sprite, with a visible countdown timer. It’s a way to make it clear that we will stop and move on together when the time is up.
8) Reward good teamwork
In a large class, I think it’s worthwhile getting the students who program faster to act as your teaching assistant. The upside is that they can solidify their understanding by helping others, and the downside is that young students tend to help by doing rather than by teaching and explaining. I would pre-assign students into various teams and give clear rewards to the teams that not only finish the challenges but also are best at explaining what they have done.
9) Prepare a FAQ sheet
I would prepare a sheet of FAQs for any lesson to screen common and easy-to-fix bugs. When students encounter a bug, they can check the FAQs first.
10) Make sure students know why they are here
The last one applies to any class size really. It’s vital for students to understand why they are learning and better to make sure they want to be here. It never hurts to repeat their goals and what they need to do to achieve them frequently. A large class of unmotivated students with access to computers is a recipe for disaster.
Teaching a large class is challenge but necessary work as educators. I hope you find my tips helpful!