Version 3 of How to Teach Programming (and Other Things) is now kinda sorta maybe ready for feedback: if you have time to go through 270 pages and tell me what’s missing, redundant, confusing, or just plain wrong, I’d be very grateful. I’m hoping to get the book out in June, so anything you can give me before then would be a big help.

As background, you can see Version 2 here, and the plan for Version 3 here. The book is meant to be a brief introduction to ideas and techniques I have found useful when teaching free-range adult learners how to program, and covers:

  • how learning works;
  • how to design and maintain lessons;
  • how to deliver those lessons; and
  • how to grow a community of practice around teaching.

All of the material will be freely available under the Creative Commons - Attribution license; digital copies will be free to download, and printed copies will be available at cost.

Who the Book is For

The people I had in mind when compiling this book are:

  • 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.

  • 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 wants to learn how to build effective lessons in collaboration with others, and is interested in turning his lessons into a self-paced online course.

  • 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.

  • Gene is a professor of computer science whose research area is operating systems. 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.

These people have a variety of technical backgrounds and some previous teaching experience, but no formal training in teaching, lesson design, or community organization. Most work with free-range learners (i.e., outside institutional classrooms with required homework and externally-mandated curriculum) and are focused on teenagers and adults rather children; all have limited time and resources. Each will use this material differently:

  • Emily will take part in a weekly online reading group with her volunteers.

  • Moshe will cover part of this material in a two-day weekend workshop and study the rest on his own.

  • Samira will use this material in a one-semester undergraduate course with assignments, a project, and a final exam.

  • Gene will read the book on their own in their office or while commuting, wishing all the while that universities did more than pay lip service to high-quality teaching.

If any of these people sound like you, please get in touch.

Contents

  1. Introduction
    1. Who You Are
    2. History
    3. Have a Code of Conduct
    4. Acknowledgments
    5. Challenges
  2. Building Mental Models
    1. Formative Assessment
    2. Challenges
  3. Expertise and Memory
    1. Repetition vs. Deliberate Practice
    2. Concept Maps
    3. Seven Plus or Minus Two
    4. Challenges
  4. Cognitive Load
    1. Split Attention
    2. Pattern Recognition
    3. Minimal Manuals
    4. A Final Thought
    5. Challenges
  5. Individual Learning
    1. Six Strategies
    2. Time Management
    3. Peer Assessment
    4. Final Thoughts
    5. Challenges
  6. A Lesson Design Process
    1. Learner Personas
    2. Learning Objectives
    3. Maintainability
    4. Challenges
  7. Pedagogical Content Knowledge
    1. What’s Our Baseline?
    2. What Do Students Misunderstand?
    3. What Are We Teaching Them Now?
    4. Do Languages Matter?
    5. What Does Student Code Look Like?
    6. How Do Students Program?
    7. What Mistakes Do Learners Make?
    8. What About Testing and Debugging?
    9. Do Error Messages Matter?
    10. Does Visualization Matter?
    11. How Can We Help Them?
    12. How Should We Design Lessons?
    13. Final Thoughts
    14. Challenges
  8. Teaching as a Performance Art
    1. Feedback
    2. How to Practice Teaching
    3. Live Coding
    4. Challenges
  9. In the Classroom
    1. Enforce the Code of Conduct
    2. Teach Together
    3. Assess Prior Knowledge
    4. Plan for Mixed Abilities
    5. Take Notes Together
    6. Sticky Notes
    7. Peer Instruction
    8. Never a Blank Page
    9. Setting Up Your Learners
    10. Other Teaching Practices
    11. Limit Innovation
    12. Feedback
    13. Challenges
  10. Motivation and Demotivation
    1. Demotivation
    2. Impostor Syndrome
    3. Stereotype Threat
    4. Mindset
    5. Accessibility
    6. Inclusivity
    7. Why Learn to Program?
    8. Challenges
  11. Teaching Online
    1. MOOCs
    2. Video
    3. Automatic Grading
    4. Flipped Classrooms
    5. Life Online
    6. Challenges
  12. Exercise Types
    1. The Classics
    2. Tracing
    3. Diagrams
    4. Higher-Level Thinking
    5. Challenges
  13. Building Community
    1. Learn, Then Do
    2. Three Steps
    3. Retention
    4. Governance
    5. Meetings, Meetings Meetings
    6. The Post Mortem
    7. Final Thoughts
    8. Challenges
  14. Marketing
    1. What Are You Offering to Whom?
    2. Branding and Positioning
    3. The Art of the Cold Call
    4. A Final Thought
    5. Challenges
  15. Partnerships
    1. Working With Schools
    2. Working Outside Schools
    3. Final Thoughts
    4. Challenges
  16. Why I Teach
  17. Bibliography
  18. Appendices
    1. License
    2. Code of Conduct
    3. Citation
    4. Using This Material
    5. In Person
    6. How to Contribute
    7. Glossary
    8. Lesson Design Template
    9. Checklists for Events
    10. Presentation Rubric
    11. Teamwork Rubric
    12. Pre-Assessment Questionnaire
    13. Ten Quick Tips for Teaching Programming
    14. Design Notes