As someone who has both attended and instructed many 2-5 day classes on programming topics, I’ve come to understand there are certain things teachers can do to make classes more useful and enjoyable.

Here are 12 tips to keep in mind when creating and teaching a technical course:

Rest– I’ve learned to make sure I get plenty of rest the night before I teach. I also make sure I have plenty of caffeine, water, and healthy snacks at my disposal during the day. Do not underestimate how much energy it takes to run a class. Relax– You lose your train of thought, you freeze, you stutter, you sweat a little, you don’t know the answer, you forget their names… Relax, these things happen. Believe it or not, your students want you to succeed and are very forgiving. Just realize that mistakes happen: handle it, and move on. If you can’t recover quickly, simply make the class take a 5-10 min break to recover or defer to the other instructor. Break the Ice with Introductions– For me, the hardest part of teaching a class is the first hour of class on the first day. You don’t know the students and they don’t know you. The best way to get around this is to quickly introduce yourself then have the students go around the room and introduce themselves. “Please tell us your name, where you’re from (location, work), what’s your specialty, and what you hope to get out of the class”. This takes the pressure off you, distributes it across everyone in the room and gives you the time to get comfortable and ease into the role of instructor. Labs– Lots of them. Labs are the most important aspect of teaching a class on programming. Students will not absorb the information from your lectures as well if you don’t give them frequent opportunities to put the material to use in a practical way. It’s like playing a musical instrument – you can read about it all day long but when it comes down to making music there’s no substitute for physical practice and interaction with the instrument itself. Knowledge is solidified during lab time. This is when most of the “Ah-ha!” moments occur. Avoid Slides if Possible– Slides work really well for short presentations because they help support your succinct message; in the classroom, slides can actually hinder students from paying attention. Slides also have a tendency to kill the opportunity for spontaneous subjects. It’s okay to go off on a tangent, especially if your students are engaged. Don’t just read from a slide deck. Build things with them on the fly. There’s nothing techies love more than live, working, and tweakable examples. Student: “How does that work? Why does that work?” Instructor: “Here, let me show you”. That wins over slides every time. Encourage Discussion– People like to talk. Give them frequent opportunities to talk with you and the other students about the material. I’ve found that if you encourage lots of discussion during the lecture (and throughout the course) people tend to help each other a lot more during labs. It creates a more lively and memorable environment. People pay attention more if an interesting conversation is likely to break out at any time. Two Is Better Than One– Even if your class is small, it’s always better to have at least two instructors. One instructor can do most of the lecturing while the other can ask questions, point out typos, play devil’s advocate, gauge the students’ engagement levels, and pay attention to the pacing. The secondary instructor can also walk over and help individuals while the primary is interacting with the rest of the class, ensuring a consistent flow. If one of the instructors gets flustered or loses their train of thought the other instructor can take over or help get things back on track. Contextualize– Structure your class so that each topic builds on the previous one. Lay out a foundation and build upon it. Stick with the same application or domain space throughout the course. Put some thought into the transitions between topics in your curriculum and lay it out in a way that is comprehensive and progresses logically and predictably. Legos– During the lectures and the labs you are giving students small building blocks of knowledge and inspiration. Don’t forget to give your students the chance to build something. Decide on an appropriate application to build throughout the course. This will help to solidify the knowledge and put those Legos to good use. Break Often– It’s easy to get rolling on an activity or topic and forget about taking breaks. Set a timer for yourself if you have to because your students need plenty of opportunities to go to the bathroom, grab water, refill their coffee cups, stretch and socialize for a few minutes at least every hour. Pay attention during breaks; you’ll quickly learn if people are having a good time or not. Be aware of mass exodus or silence. Continuing Education– Make sure students learn enough to ask the right questions when they finish your course. Make sure you’ve taught them well enough so that when they try to practice the material a week later at home, they know how to ask the right questions, look in the right places, etc. Give them the equipment they need to succeed once your class is over. Post-Course Availbility– Don’t disappear when all is said and done. Make sure your students know how to get ahold of you. Encourage them to seek you (and each other) out if they have questions or concerns. Ask them for feedback about the class. Create a Google Group so they can ask questions about the concepts after the class is done. This allows them to have access to you and the other students.

With these tips you should be well equipped to deliver a quality and exciting class that your students will talk about and remember for years to come. Teaching programming classes is an act of servitude, and one that is highly respected. Taking the time to create an engaging curriculum and a thoughtful structure will be of great benefit to you and everyone else.

Those that know, do. Those that understand, teach. Aristotle

tl;dr

The format I’ve used which seems to work best (to keep folks engaged and encourage knowledge solidification) is:

For each topic: