Irene Lee and April DeGennaro recently published a chapter entitled "Computer Science, Coding, and Project-Based Learning for Engineering Instruction" in the book "Engineering Instruction for High-Ability Learners in K-8 Classrooms" edited by Debbie Dailey & Alicia Cotabish and published by Prufrock Press of Austin, TX.
In this book they discuss strategies to support students in productive struggle in computer science. Here's an excerpt that might be useful for Project GUTS teachers:
Productive struggle has been described in mathematics education literature as an effortful practice that builds useful understanding and skill by making sense of something or figuring out something that is not immediately apparent (Hiebert & Grouws, 2007). Productive struggle is a positive student experience and often involves students developing tenacity and using good strategies. In the context of computer science, this description is relevant, but, in addition to making sense of concepts and structures and uncovering mathematical relationships, computer science learners are often creating algorithms in which their understandings of concepts and mechanisms are embedded. This actualization of their thoughts and understanding into a piece of working computer code adds another layer of practice, in which productive struggle may occur. Strategies exist that may help teachers foster productive struggle in gifted and advanced students (McCoy & Cudjoe, 2015):
- Anticipate student struggles and misconceptions that might occur. Plan ways to support students without removing the opportunities for students to develop deeper understanding. Get familiar with common issues/misconceptions students may have. Prepare questions and prompts that may lead students to reflect.
- Offer process praise. Instead of praising students for their talent or intelligence, praise students for the strategies they use, the work they do, and their persistence or effort (Kamins & Dweck, 1999).
- Use open-ended questions. Frame questions in a way that multiple approaches and answers are expected and accepted. Also provide multiple entry points and ways students can relate to the problem (e.g., when creating algorithms, students can solve the same problem in different ways; Prince & Felder, 2006).
- Utilize parallel tasks (easy, medium, hard challenges). Assign two or more tasks that are designed to meet the needs of students working at different levels, but address the same fundamental concept and use a similar context, so that they can be discussed simultaneously (e.g., challenging students to use simple looping vs. nested looping to draw a figure; Gregory, 2003; Tomlinson 1999; Tomlinson, 2001; Tomlinson & McTighe, 2006).
- Attend to student-teacher interactions. Consider the balance between supporting students enough to avoid frustration while maximizing learning and independence (Malone, 1981).
- Incorporate ongoing formative assessment. Ask students to express what they understand about new materials, and allow them to pinpoint and correct their knowledge gaps and misconceptions (Goldenberg et. al., 2015; Popham, 2008).
- Use spaced/distributed practice (Baddeley, Anderson, & Michael, 2009; Benjamin & Tullis, 2010; Rohrer & Taylor, 2006; Sobel, Cepeda, & Kapler, 2011). Help students to understand that they don’t have to learn everything during their first attempt. Support students by circling back to topics to deepen and refine understanding over time (Cimpian, Arce, Markman, & Dweck, 2007; Rawson, Dunlosky, & Sciartelli, 2013). This spiraling has been found to produce lasting learning because long-term memory of material is strengthened each time information is actively retrieved (Sweller, 1988).
- Incorporate mixed practice. Practicing different types of questions and problem solving builds learning-for-transfer more effectively (Rohrer, 2009).