Just as knowing a few basic facts about germs and nutrition can help you stay healthy, knowing a few things about cognitive psychology, instructional design, inclusivity, and community organization can help you be a more effective teacher. This book presents key ideas you can use right now, explains why we believe they are true, and points you at other resources that will help you go further. It is intended for people who have a variety of technical backgrounds and some previous teaching experience, but no formal training in teaching, lesson design, or community organization. Most intended readers work with free-range learners and are focused on teenagers and adults rather than children; all have limited time and resources.
Mental Models and Formative Assessment
We can categorize learners as novices, who don’t yet know what they don’t know; competent practitioners, who can do normal tasks with normal effort under normal circumstances; or experts, who can handle situations that are out of the ordinary. What distinguishes novices is their lack of a mental model: When teaching them, the most important thing is therefore to help them construct a mental model, and the most effective way to do that is to use formative assessment to find and correct gaps and misconceptions in their understanding.
Expertise and Memory
Experts don’t just know more than competent practitioners—their mental models are also much more densely connected, so that they can often go from a problem to its solution in a single step (which sometimes leads to expert blind spot). Knowledge at all levels can be represented using concept maps, which are useful in the early stages of lesson design. Concept maps also help ensure that lesson episodes fit within the ``7±2 items’’ limit of short-term memory; tightly-connected sections of a concept map may also suggest chunks that can be taught as patterns to help people recognize and solve larger problems.
Information reaches us primarily through our visual and verbal channels, and is then integrated before being encoded for storage in long-term memory, from which we constantly retrieve information for use. Learning is maximized when information on these channels is complementary rather than redundant, and when cognitive load is minimized. Parsons Problems, faded examples, and the use of labelled subgoals helps achieve that.
Active learning has repeatedly been shown to be more effective than passive learning becuase the former keeps new information in short-term memory longer, which increases its chances of being encoded successfully. Learners can use six evidence-based strategies to accelerate their learning further: spaced practice, retrieval practice, interleaving, elaboration, concrete examples, and dual coding. However, none of these are effective if learners are overworked or deprived of sleep.
A Lesson Design Process
Backward design, a repeatable way to create effective lessons, is comprised of (1) creating or recycling learner personas, (2) drawing a concept map that describes the mental model learners should have at the end of the lesson, (3) writing a summative assessment to evaluate whether the lesson was successful, (4) creating formative assessments to check progress toward that goal, and then (5) ordering those assessments and writing instructional material to get from one to the next. The lesson can then be described in terms of its learning objectives, which should include verifiable criteria for acceptable performance. While lessons are rarely created in this strictly linear manner, they should be described this way in order to make them easier for others to adopt; however, such adoption is limited by the Reusability Paradox, which states that the more reusable a learning object is, the less effective it is for any particular group.
Pedagogical Content Knowledge
Every instructor needs content knowledge, general pedagogical knowledge, and pedagogical content knowledge, which is the doman-specific understanding of how to teach a particular topic to a particular audience. Based on current results in computing education research, we recommend that instructors (1) measure and track results, (2) teach novices that computers don’t actually ``understand’’ programs, (3) have learners read code, then modify it, then write it, (4) introduce common patterns explicitly, (5) explicitly teach novices how to debug, (6) start children and teens with blocks-based interfaces, (7) start with functions rather than objects, (8) use tools to ensure that all code examples adhere to a consistent style, (9) show learners how to read and interpret error messages, and (10) teach learners to trace variables’ values when debugging.
Teaching as a Performance Art
The most effective way to teach programming is live coding, in which the instructor actually writes code in front of learners while they follow along, typing the code in and running it as they go. The most important aspect of live coding is to embrace mistakes: showing learners how to diagnose and correct problems helps them do this themselves, and also demonstrates that errors are routine and should be taken in stride. When live coding, instructors should ask for predictions, go over material twice, and mirror their learners’ environments. No matter what teaching technique is used, instructors should teach together to facilitate unintended knowledge transfer, as this is the most effective way to spread new teaching practices and get individualized feedback. The latter becomes easier with practice and when a rubric is used.
In the Classroom
Success in teaching comes from many small improvements more often than from any single large change. Those we recommend include (1) having and enforcing a Code of Conduct, (2) using peer instruction to achieve many of the benefits of one-to-one mentorship at scale, (3) co-teaching in any of several forms, (4) assessing learners’ prior knowledge, (5) planning for mixed abilities, (6) pair programming, (7) take notes—together if possible, (8) using sticky notes to keep track of learners’ status and distribute attention fairly, (9) never starting with a blank page, and (10) investing in setting up the learners’ environments. Whatever mix of practices is used, we also recommend that instructors only change one thing at a time.
Motivation and Demotivation
The strongest predictor of whether neurotypical adults learn something or not is whether they are intrinsically motivated rather than extrinsically motivated. The three main drivers of intrinsic motivation are competence (the feeling that you know what you’re doing), autonomy (the feeling of being in control of your own destiny), and relatedness (the feeling of being connected to others). These can be enhnaced in many ways, e.g., through use of authentic tasks with tangible artefacts. The three main demotivators for adult learners are unpredictability, indifference, and unfairness, all of which can arise inadvertently if instructors are not careful. Impostor syndrome can also sap motivation, while emphasizing accessibility and inclusivity can increase it. The most important factor in the latter is to move away from a deficit model, which requires already-marginalized people to do extra work, and focus on allyship, which requires those with unearned privilege to address systemic issues.
Self-paced online courses that rely on recorded video and auto-graded exercises are just the latest in a long series of attempts to revolutionize education with technology. These courses have proven to be less effective and less accessible than their proponents expected, but hybrid models that combine synchronous and asynchronous interaction, both in person and online, are already the de facto norm. Online learning can be supported either through special-purpose platforms or by combining commonly-used publishing and social media tools; regardless of what is used, it is important to ensure that conversation is respectful and is not dominated by a few voices. It is even more important to ensure that participants have control over what data is collected and what is done with it.
Instructors should use many different kinds of exercises when teaching computing, including writing code from scratch to solve a specific problem, modifying existing code to fix bugs or alter behavior, tracing the order in which statements are executed or the ways in which variables change, and labelling diagrams or matching items from one list to another. Instructors can use automatic grading tools of various kinds to check answers and give feedback, but must be cautious about the time required to set these up and define good checks for exercises.
Building a Community of Practice
No one can teach on their own for long, so it is important to build a community of practice to create and deliver lessons and provide mutual support. The key to doing this is legitimate peripheral participation, which includes the small contributions that newcomers can make which are regarded as useful by the community as a whole. The first step in building such a community is to decide if one is needed, or whether it would be better to join and support an existing organization. If a new one is to be created, its leaders must think about recruitment, onboarding, retention, and retirement, all of which are well-studied problems. Leaders must also think about governance—in particular, about decision-making processes—and about whether they eventually want a service board or a governance board.
There is no point creating something great if nobody knows about it, so teaching groups must think about marketing and about building alliances. Marketing focuses on identifying people’s wants and needs figuring out what the organization actually has to offer, and explaining how the organization can help them, all of which are often summarized in elevator pitches. At a larger scale, groups should adopt evidence-based strategies for getting new practices adopted and for effecting institutional change, both within and outwith academia.
Why I Teach
Because the only things that will get us through the next half century are more knowledge and more courage, and teaching is my way to increase both.