How to Teach Programming (and Other Things)

Please comment on the plan for the next edition.

Design Notes for Version 3

1. Brainstorming

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

  1. What problems will learners learn how to solve?
    1. How to design a short course for adults.
    2. How to deliver hands-on in-person instruction in computing skills.
    3. What kinds of content belong in such a course.
    4. How to deliver such a course in an automated way.
    5. How to build a teaching community.
  2. What problems will learners not learn how to solve (i.e., what is out of scope)?
    1. How to teach children or people with special learning needs (though many of the ideas that are taught will transfer).
    2. How to rigorously assess the impact of training of this kind (though informal self-assessment will be included).
    3. How to design and deliver entire degree programs and other extended curriculum.
  3. What concepts and techniques will learners encounter?
    1. Bloom’s Taxonomy.
    2. Branding.
    3. Cognitive load.
    4. Collaborative lesson development.
    5. Commons.
    6. Concept mapping.
    7. Dunning-Kruger effect.
    8. Expert blind spot.
    9. Fixed vs. growth mindset.
    10. Formative vs. summative assesment.
    11. Intrinsic vs. extrinsic motivation.
    12. Jugyokenkyu (lesson study).
    13. Learner personas.
    14. Legitimate peripheral participation in a community of practice.
    15. Live coding (teaching as a performance art).
    16. Pedagogical content knowledge (PCK).
    17. Peer instruction.
    18. Reflective (deliberate) practice.
    19. Reverse instructional design (understanding by design).
    20. Working vs. persistent memory (7±2).
  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. VAK learning styles are real.
    9. Women just don’t like programming or innately have less aptitude.
  5. In what contexts will this material be used?
    1. A one-semester undergraduate course for computer science majors interested in education.
    2. Self-study or guided study for people in tech who want to volunteer with grassroots get-into-coding initiatives.
  6. What kinds of exercises will learners do?
    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. Explain personal motivation for teaching.
    6. Explain organizational goals for teaching.
    7. Design a short lesson using reverse instructional design.
    8. Describe the pros and cons of standardized testing.
    9. Create learner personas for their intended students.
    10. Write and critique learning objectives for a short course.
    11. Teach a short lesson using live coding and critique a recording of it.
    12. Create a short video lesson and critique it.
    13. Construct a short series of faded examples that illustrate a problem-solving pattern in programming.
    14. Describe ways in which they differ from their intended learners.
    15. Create and critique a six-part pitch for a course they intend to teach.
    16. Write a “cold call” email to solicit support for what they intend to teach.
    17. Create a concept map for a topic they intend to teach.
    18. Explain how their learners can apply six strategies for effective learning.
    19. Analyze and critique the accessibility of a short online lesson.
    20. Analyze and critique the inclusivity of a short lesson.
    21. Create and critique a non-programming exercise to use in a programming class.
    22. Describe the relative merits of block-based and text-based environments for introductory programming classes.
    23. Create a one-to-one matching exercise for use in a class they intend to teach.
    24. Create a diagram labelling exercise for use in a class they intend to teach.
    25. Write and submit an improvement or extension to an existing lesson and review a peer’s submission.
    26. Describe the pros and cons of collaborative note-taking.
    27. Describe the pros and cons of gamification in online learning.
    28. Create and critique a short questionnaire for assessing learners’ prior knowledge.
    29. Conduct a demonstration lesson using peer instruction.
    30. Describe ways in which computing is unwelcoming to or unaccepting of people from various backgrounds.

2. Intended Audience

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

  • Samira
    • Undergraduate student in computer science.
    • Interested in becoming a high school teacher.
    • Wants to learn more about education in general in order to decide if it’s for her.
    • Particularly interested in how to deliver lessons (has little public speaking experience).
  • Moshe
    • Professional programmer with two teenage children whose school doesn’t offering programming classes.
    • Has volunteered to run an after-school program.
    • 20+ years using Visual Basic and C#.
    • Frequently gives presentations to colleagues.
    • No experience teaching teenagers.
    • Wants to learn how to build effective lessons in collaboration with others.
  • Emma
    • Trained as a librarian.
    • Now works as a project manager in a small software company.
    • Helps run web design classes for women entering tech as a second career.
    • Is now recruiting colleagues to run more classes in her area.
    • Wants to know how to grow a volunteer teaching organization.

3. Exercises

FIXME

4. Outline

Each major section will take about two weeks to cover in a classroom setting. In a semester-length course, this will leave two weeks for participants to work on a final project.

  1. Design
    1. Helping Novices Build Mental Models
    2. Expertise and Memory
    3. Cognitive Load
    4. Reverse Instructional Design
  2. Delivery
    1. Teaching as a Performance Art
    2. Live Coding
    3. Motivation and Demotivation
    4. FIXME
  3. Content
    1. Key Findings from CS Education Research
    2. Inclusivity
    3. FIXME
  4. Automation
    1. What’s Different About Teaching Online
    2. Exercise Types
    3. FIXME
  5. Community
    1. Teaching Together
    2. Building Community
    3. Marketing
    4. FIXME