Comments Sought on the Plan for Version 3 of 'How to Teach Programming'

I am planning a major revision of How to Teach Programming (and Other Things), and would be very grateful for feedback on its design: please mail me your thoughts and suggestions. Note that this design follows the five-step backward design process laid out in the book itself.


These questions and answers provide a rough scope for the material.

  1. What problems will learners learn how to solve?

    1. How people learn and what that tells us about how best to teach them (educational psychology, cognitive load, study skills).

    2. How to design and deliver instruction in computing skills (backward curriculum design, some pedagogical content knowledge for computing).

    3. How to deliver lessons (teaching as a performance art, live coding, motivation and demotivation, and automation).

    4. How to grow a teaching community (community organization and marketing).

  2. What is out of scope?

    1. How to teach children or people with special learning needs. Much of what’s in this material applies to those learners, but they have different or extra needs.

    2. How to rigorously assess the impact of training. Informal self-assessment will be included, but we will not try to explain how to do publishable scientific research in education.

    3. How to design and deliver entire degree programs and other extended curriculum. Again, much of what’s in this material applies, but the extra needs of large-scale curriculum design is out of scope.

  3. What concepts and techniques will learners encounter?

    1. 7±2 and chunking.

    2. Authentic tasks with tangible artifacts.

    3. Bloom’s Taxonomy, Fink’s Taxonomy, and Piaget’s development stage theory.

    4. Branding.

    5. Cognitive development from novice to competent to expert.

    6. Cognitive load.

    7. Collaborative lesson development.

    8. Concept mapping.

    9. Designing assessments with diagnostic power.

    10. Dunning-Kruger effect.

    11. Expert blind spot.

    12. Externalized cognition.

    13. Fixed vs. growth mindset (and critiques of it).

    14. Formative vs. summative assesment.

    15. Governance models of community organizations.

    16. Inquiry-based learning (and critiques of it).

    17. Intrinsic vs. extrinsic motivation.

    18. Jugyokenkyu (lesson study).

    19. Learner personas.

    20. Legitimate peripheral participation in a community of practice.

    21. Live coding (teaching as a performance art).

    22. Pedagogical content knowledge (PCK) and technological pedagogical and content knowledge (TPACK).

    23. Peer instruction.

    24. Reflective (deliberate) practice.

    25. Backward design.

    26. Stereotype threat (and critiques of it).

    27. Working memory vs. persistent memory.

  4. What mistakes or misconceptions will they have?

    1. Children and adults learn the same way.

    2. Computing education should be for and about computer science.

    3. Programming skill is innate.

    4. Student evaluations of courses are indicative of learning outcomes.

    5. Teaching ability is innate.

    6. The best way to teach is to throw people in at the deep end.

    7. The best way to teach is to use “real” tools right from the start.

    8. Visual-auditory-kinesthetic (VAK) learning styles are real.

    9. Women just don’t like programming or innately have less aptitude.

    10. Getting a (better) job is the main reason someone should learn how to program.

    11. Programming ability correlates with mathematical ability (or musical ability, or…)

  5. In what contexts will this material be used?

    1. Primary: an intensive weekend workshop for people in tech who want to volunteer with grassroots get-into-coding initiatives.

    2. Secondary: self-study or guided study by such people.

    3. Secondary: a one-semester undergraduate course for computer science majors interested in education.

Intended Audience

These learner personas clarify what readers are interested in and what can be assumed about their prior knowledge.

  • Samira is an undergraduate in robotics who is thinking about becoming a full-time teacher after she graduates. She wants to help teach weekend workshops for undergraduate women, but has never taught an entire class before, and feels uncomfortable teaching things that she’s not an expert in. She wants to learn more about education in general in order to decide if it’s for her.

  • Moshe is a professional programmer with two teenage children whose school doesn’t offering programming classes. He has volunteered to run an after-school program, and while he frequently gives presentations to colleagues, he has no experience designing lessons. He sants to learn how to build effective lessons in collaboration with others, and is interested in turning his lessons into a self-paced online course.

  • Emily trained as a librarian, and how works as a web designer and project manager in a small consulting company. In her spare time, she helps run web design classes for women entering tech as a second career. She is now recruiting colleagues to run more classes in her area using the lessons that she has created, and wants to know how to grow a volunteer teaching organization.

  • Gene is a professor of computer science at a research-intensive university whose research area is operating systems for embedded devices. They have been teaching undergraduate classes for six years, and increasingly believe that there has to be a better way. The only training available through their university’s teaching and learning center relates to posting assignments and grades in the learning management system, so they want to find out what else they ought to be asking for.

  • Common elements:

    • A variety of technical backgrounds and skills.

    • May or may not have some teaching experience.

    • No formal training in teaching, lesson design, or community organization.

    • Teaching in free-range settings at least as often as in institutional classrooms (with required homework, final exams, and externally-mandated curricula).

    • Focused on teenagers and adults rather children.

    • Limited time and resources (either because they are volunteers, or because their institution considers teaching a secondary responsibility).

  • Diverse learning contexts:

    • Moshe will do a two-day weekend workshop covering much less material and then study on his own.

    • Emily will study on her own while leading an online reading group for her volunteers.

    • Samira will take a one-semester undergraduate course with assignments, a project, and a final exam.

    • Gene will study on their own like Emily or take an intensive workshop like Moshe.


These formative exercises summarize what learners will be able to do with their new knowledge. The finished book will include others as well.

  1. Create multiple choice questions whose incorrect answers have diagnostic power.

  2. Give feedback on a recorded teaching episode and compare points with expert feedback.

  3. Create a Parsons Problem.

  4. Create a short debugging exercise.

  5. Create a short execution tracing exercise.

  6. Explain their personal motivation for teaching.

  7. Explain their community of pracice’s aims and conventions.

  8. Explain the difference between an oversight board and a governance board.

  9. Design an hour-long lesson using backward design.

  10. Describe the pros and cons of standardized testing.

  11. Create learner personas for their intended students.

  12. Write and critique learning objectives for an hour-long lesson.

  13. Write and critique a short value proposition for a class they intend to offer.

  14. Teach a short lesson using live coding and critique a recording of it.

  15. Create a short video lesson and critique it.

  16. Construct a short series of faded examples that illustrate a problem-solving pattern in programming.

  17. Describe ways in which they differ from their intended learners.

  18. Create and critique an elevator pitch for a course they intend to teach.

  19. Write a “cold call” email to solicit support for what they intend to teach.

  20. Create a concept map for a topic they intend to teach.

  21. Explain six strategies students can use to learn more effectively.

  22. Analyze and critique the accessibility of a short online lesson.

  23. Analyze and critique the inclusivity of a short lesson.

  24. Create and critique a non-programming exercise to use in a programming class.

  25. Describe the relative merits of block-based and text-based environments for introductory programming classes for adults.

  26. Create a one-to-one matching exercise for use in a class they intend to teach.

  27. Create a diagram labelling exercise for use in a class they intend to teach.

  28. Write and submit an improvement or extension to an existing lesson and review a peer’s submission.

  29. Describe the pros and cons of collaborative note-taking.

  30. Describe the pros and cons of gamification in online learning.

  31. Create and critique a short questionnaire for assessing learners’ prior knowledge.

  32. Conduct a demonstration lesson using peer instruction.

  33. Describe ways in which computing is unwelcoming to or unaccepting of people from diverse backgrounds.

  34. Demonstrate several ways to ensure that an instructor’s attention is fairly distributed through a class.

  35. Describe the pros and cons of in-person, automated, and hybrid teaching strategies.

  36. Write and critique automated tests for a short programming exercise.


Each major section can be covered in detail in 2–3 weeks in a conventional classroom format, or in less detail in one full day in an intensive workshop format.

  1. Introduction

  2. Learning

    1. Building Mental Models

    2. Expertise and Memory

    3. Cognitive Load

    4. Effective Learning

  3. Designing

    1. A Lesson Design Process

    2. Pedagogical Content Knowledge

  4. Delivering

    1. Teaching as a Performance Art

    2. Live Coding

    3. Motivation and Demotivation

    4. Automation

    5. Hybrid Models

  5. Organizing

    1. Communications

    2. Operations

    3. Building Community

Course Overview

Brief Description

Teaching isn’t magic: good teachers are simply people who have learned how to design lessons to achieve concrete goals, how to get and use feedback from learners, and how to work well with other teachers. This book will show you how to do these things and more, and will introduce you to some of the research that explains why some things work and some things don’t. It is primarily intended for people in tech with no formal training in teaching who want to help adults learn how to create web sites, write programs, and analyze data, but the ideas apply equally well to other groups in other settings.

Learning Objectives

Learners will be able to…

  1. Explain the cognitive changes that occur as people go from novice to competent to expert and how best to teach each group.

  2. Explain how to design, construct, and maintain lessons in a systematic, collaborative way.

  3. Design exercises to help correct key misconceptions that learners have about computing.

  4. Summarize key elements of pedagogical content knowledge related to computing and other technical skills.

  5. Compare and contrast teaching with other performance arts and participate in structured critiques of live teaching.

  6. Compare and contrast interactive teaching, automated teaching, and hybrid models.

  7. Describe factors that motivate or demotivate adult learners and how to take those into account when teaching.

  8. Describe ways in which members of different groups are made to feel unwelcome or excluded in computing and what can be done to make computing more inclusive.

  9. Explain the purpose and value of their teaching and of their community of practice.

  10. Be a productive member of a community of teaching practice.


Some exercises will assume a small amount of programming knowledge: readers should know how to loop over the elements of a list, how to read or write an if-else statement, and how to write a simple function.

In the wake of posts about Shopify's support for white nationalists and DataCamp's attempts to cover up sexual harassment
I have had to disable comments on this blog. Please email me if you'd like to get in touch.