Programmer Friday: How to teach a programming course


I am not the most experienced teacher in my circle, but I have taught some technical classes, courses and workshops in my day — some of them for pay.

Here are some principles and techniques which have worked for me.

Target audience

Start with basic market research. Consider your intended audience: what are they likely to want from the workshop?

Write a carefully worded invitation to the course. Standard principles of marketing and copywriting apply: state why the reader should care (the benefits) before listing concrete curriculum and details (the features).

Once signed up, contact participants individually well before the workshop. Try to gauge their experience level and interest in the subject of the class. This lets you tailor your material a bit to the audience. Send reminders and practical info as the course approaches.

Planning & Structure

Again, think about your target audience — after the steps above you should have a better idea of who will show up. Generalize this into personae: which archetypes of people should you prepare for? Can you tweak the workshop to offer something to both Pro Programmer Penny and Middle Manager Mike, if both kinds of people sign up?

Think through the overall structure and syllabus of the workshop. Use flexible techniques like whiteboarding, sketching and mind maps to plan scope and content. As in software development, missteps are much cheaper to fix in the initial planning stage.

How will you teach? A range of methods works best, if you have time for it. Each individual has her own way of learning — try to present the material in several ways. Don’t worry if this duplicates some of the material; repetition aids memory retention.

I like to start workshops with a lecture to lay some foundation, with plenty of live demos and moving examples along the way. Then I move on to practical exercises. In other words: talk about it – show it – let people try it.

Present both core facts and related context. In other words, present both “what it is” and “why you should care”. Micro and macro.

Your audience will have different levels of expertise and aptitude in the material you are teaching. Try to cater to both the experienced and the novice, if both types are attending.

The slides

Start strong. Present a clear agenda. “What are we going to learn today?” Keep your personal introduction brief: people care about what you intend to teach them, not your credentials.

Avoid long rambling slides. Short slides are good, one-word slides are better, a simple picture is best. Many succinct slides are better than few, text-heavy slides. Make. As. Concise. Points. As. Possible. Bonus: a larger number of smaller, snappier slides works like a train of thought for you, making you less likely to ramble and forget your next point.

Your slides don’t need to be works of art, but use some basic techniques of graphic design:

  • Decide on overall style beforehand in order to make the slides as consistent as possible.
  • Use large fonts with high contrast colors. How will your code, text and video look when projected on a canvas? In bright daylight? From thirty feet away?
  • Use repetition. Content which repeats sticks in your mind after a while.
  • Use contrast. Content which stands out is memorable.
  • Employ striking high quality images. Avoid bland clip-art.
  • Write short, concise text with plenty of whitespace around it.
  • Drop the standard company-branded powerpoint template. I’m sure your official company template is nice, but it just adds clutter beyond the first slide. Limit your company branding and marketing to the introduction and conclusion.

The Exercises

Be prepared to invest a lot time creating the exercises, if you want them to be good. Some factors to consider:

  • Assignments should start nice and easy to give a sense of accomplishment. “That felt awesome!”
  • Each exercise should be focused on teaching a single thing, and it should be obvious what the student is learning. “Why it this awesome?”
  • Create a wide range of exercises, make them possible to solve in any order. A long chain of interdependent exercises is vulnerable to “blocking”. Instead, make it possible to jump to something else if the student gets stuck.
  • Handle a wide range of expertise in audience. Cater to both star students and the less experienced. One way of doing this is to add “extra credit” parts to every exercise.
  • Demand little to no preparation from students before the workshop begins. Instead, make it really easy to get started during the actual session. Think basic user experience here.
  • Make sure it’s quick and easy to distribute the necessary tools, documentation, files and worksheets to the students.

Iterate & practice

Once you have the basic structure and content down, set aside plenty of time to practice and tweak the material. Iterate and internalize the material. Like any writing process, your material improves if you return to it several times with fresh eyes. Make sure to leave time for the material to “breathe” a bit in your mind before the big day arrives.


Arrive early. Survey the room, set up your own laptop, make sure the lights and the projector setup is under control. You don’t want to burn time hunting for light switches, cables and curtains once the workshop starts.

Don’t like public speaking? It’s more pleasant if you create some friendly faces in the audience before your presentation begins. When people start showing up, greet as many as you can at the door. Get some smalltalk in before the session starts.

Now for the hard part (at least for me): the lecture. Strive for a relaxed and clear presentation. Keep your back straight. Control your body language. Keep a steady, calm pace. Like a singer or a martial artist, use your stomach — breathe and speak deep from your gut, don’t squeak from the top of your throat.

Engage your audience. Ask both retorical and actual questions to the room. Have people answer with show of hands, individual answers or group discussion. Participation is good!

Take short questions as you go, refer longer discussions to a Q&A session at the end (or one-on-one email correspondence after the workshop).

Pay attention to your audience. If they seem bored, speed up. If they seem to “fall off”, slow down.

Hand out slides and exercises after the lecture, not before. With a bunch of laptops and smartphones in the room, you’re already fighting for the attention of your audience. Don’t undercut yourself further by giving them something to read down in their laps while you’re talking.

During the practical exercises, actively circulate. Talk to the participants, gauge their progress. Offer to help. It’s easy to ask questions to an instructor who is close and attentive. A teacher sitting behind a desk fifteen feet away? Not as much.

Finally, solicit feedback from the audience at the end of the workshop. What worked well? Which parts of the workshop felt weak? Why?

Take their feedback to heart, and do an even better job next time.

Good luck!