CS471: Computer Science Pedagogy - Unique Challenges in CS Education

Activity Goals

The goals of this activity are:
  1. To explain how best practices in education can be applied to the unique needs and environment of a Computer Science classroom
  2. To incorporate differentiated instruction and multiple pathways of entry to engage with computing curricula
  3. To create a more inclusive computing classroom through pedagogy and partnership
  4. To identify and apply unique pedagogical principles to the computing classroom
  5. To provide appropriately differentiated scaffolding for student activities in computing, which supplies and gradually removes supports as the learner progresses

Supplemental Reading

Feel free to visit these resources for supplemental background reading material.

The Activity

Directions

Consider the activity models and answer the questions provided. First reflect on these questions on your own briefly, before discussing and comparing your thoughts with your group. Appoint one member of your group to discuss your findings with the class, and the rest of the group should help that member prepare their response. Answer each question individually from the activity, and compare with your group to prepare for our whole-class discussion. After class, think about the questions in the reflective prompt and respond to those individually in your notebook. Report out on areas of disagreement or items for which you and your group identified alternative approaches. Write down and report out questions you encountered along the way for group discussion.

Model 1: 12 Pedagogical Principles from the Computer Science Teaching Foundation (CSTA)

12 Pedagogical Principles from CSTA

Questions

  1. Choose one of the 12 pedagogical principles and revise your lightning talk to incorporate it.
  2. Do the same with at least one of the inclusivity recommendations from the Guide to Inclusive Computer Science Education.
  3. For your take-home question, provide multiple entry points, scaffolding, or differentiation across learner experiences.

Unique Challenges in CS Pedagogy

Computer Science (CS) pedagogy involves unique challenges that educators must address to ensure an inclusive and effective learning environment. We will explore these challenges and proposes strategies to promote equity and inclusivity in CS classrooms.

Achieving a Differentiated Computer Science Classroom: An Approach to Promote Equity

Differentiated instruction is not unique to Computer Science, but the creative nature of computing activities makes this approach particularly useful to allow students multiple pathways of entry to engage with the material.

The article “Achieving a Differentiated Computer Science Classroom: An Approach to Promote Equity” presents a framework for implementing differentiated instruction in CS classrooms to address the diverse needs and backgrounds of students. Differentiation allows educators to tailor their teaching methods and materials to individual students, promoting equitable access to CS education.

In a differentiated CS classroom, educators may vary the pace of instruction, provide alternative assessments, and offer multiple learning pathways. For example, educators can offer both visual and auditory explanations of concepts, use varied coding platforms, and encourage collaborative learning.

The Problems with Differentiating Computer Science

The article begins by identifying the unique challenges faced by teachers in providing differentiated education in computer science classrooms. These challenges include the strict and unforgiving nature of coding, the diverse range of students’ coding abilities, and the need to cater to students with different educational requirements. The authors emphasize the importance of differentiation to ensure equitable access to computer science education for all students, regardless of their background.

Example: Binary Numbers

Here are some ways a teacher can differentiate binary number instruction:

  • For novice students, start with tangible real-world examples of binary encoding. Have students try encoding simple text messages or their names using a system of two symbols like dots and dashes. Then bridge this to how computers use 1s and 0s as binary digits.

  • For students with some prior knowledge, provide a brief overview of binary, but then move quickly to practice problems. Challenge them to convert back and forth between binary and decimal numbers. Offer more advanced problems like binary addition.

  • For very experienced students, let them teach binary numbers to other students. Have them create presentations, videos, or other instructional materials to help their less experienced peers understand binaries.

  • For all students, use a variety of tactile and visual activities like flipping coins, coding playing cards, or color coding 0s and 1s. This engages different learning styles.

  • Pair students and have them peer teach each other about binary numbers. This allows students to reinforce their own learning while supporting others.

Example: Algorithms
  • Provide flowchart templates with some steps already filled in to help struggling students.
  • Let advanced students design their own complex algorithms to solve real-world problems.
  • Use different objects like beads or tiles to represent sequence and repetition for visual learners.
Example: Programming
  • Offer code snippets to drag and drop instead of writing syntax from scratch.
  • Encourage experienced students to build on basic code examples by adding parameters, loops, etc.
  • Use pair programming where students work together to explain code to one another.
Example: Data Structures
  • Struggling students can use visual diagrams and models before coding abstract data structures.
  • Advanced students can explain pros and cons of different data structures for various problems.
  • Use real-world examples like organizing books in a library to explain abstract concepts.

Depth of Knowledge Scaffolding

The article introduces the concept of “Depth of Knowledge Scaffolding” as a solution to the problem of differentiating computer science education. This approach avoids splitting students into tracking groups and instead uses a heterogeneous whole-class approach. Five levels of scaffolding differentiation are provided, based on Norman Webb’s Depth of Knowledge framework. These levels allow students to learn and practice the same topics with varying degrees of depth, support, and challenge.

Example: Assisting with Syntax

The authors discuss the high barrier of entry in computer science due to the need for precise syntax and the challenges of keyboard typing. They present a solution through Scaffolding Level 1, where students are given starter code and detailed comments. This approach, combined with a code-writing helper called Code Assist, enables students to practice code recall and learn concepts without needing to memorize complex syntax.

Example: Sorting Algorithms

Here are some examples of scaffolding that a teacher could provide when assigning students to implement a classic sorting algorithm like merge sort or quicksort:

  • Provide students with pseudocode for the algorithm that outlines the overall steps at a high level without detailing the programming logic. Students then translate this into actual code.

  • Give students starter code that includes the function signatures and declarations needed to implement the algorithm. Students fill in the logic line-by-line.

  • For visual learners, show a flow chart or visualization of how the algorithm works. Students use this to guide their code.

  • Break the implementation down into discrete steps and have students tackle one part at a time. First focus just on the logic to merge two sorted arrays, before writing the full recursive merge sort.

  • Model the process of walking through the algorithm logically on a small example input, explaining each step. Ask students to do the same on their own with other inputs.

  • Provide comments in the code stubs denoting where key loops, comparisons, and function calls need to be added by the student.

  • Give struggling students the complete code with errors for them to debug and correct, rather than creating from scratch.

  • Allow pairing students up to work collaboratively to implement the algorithm.

  • Offer code reviews and feedback at regular check-ins before students submit their final working program.

The goal is to provide just enough support to help students get started and work through the key steps on their own. Scaffolding gives students a solid foundation while still requiring their own critical thinking. Adjust the amount of scaffolding up or down based on each student’s ability level.

Scaffolding

Scaffolding is a pedagogical approach that helps students progress in their learning process by gradually removing support mechanisms as they gain proficiency. In computer science (CS) and specifically Python programming, it’s about providing students with initial support or ‘scaffolds’ that help them solve complex problems. It is a teaching method that involves providing students with temporary support structures that help them accomplish tasks that they couldn’t otherwise do. The goal is to gradually remove these supports, allowing students to perform tasks independently. It’s based on Vygotsky’s Zone of Proximal Development (ZPD), which refers to the range of tasks that are too difficult for students to master alone but can be mastered with guidance and assistance from a teacher or more competent peers. Programming can be challenging for beginners due to abstract concepts and complex syntax. Scaffolding allows beginners to focus on learning concepts step by step, with less focus on the syntax. It allows students to learn and build confidence gradually, which leads to better engagement and retention.

Example: Partial Code

Providing partial codes allows students to understand a code structure without being overwhelmed by the entire code at once. It also encourages them to think about the remaining part of the code. For example:

def greet(name):
    # TODO: Complete this function to print 'Hello, {name}!'
    pass

Example: Sorting Algorithms

Use the following code snippet as a starting point:

   def partition(arr, low, high):
       # TODO: Choose a pivot element
       # TODO: Rearrange the elements around the pivot
       # TODO: Return the pivot index
       pass

   def quicksort(arr, low, high):
       if low < high:
           # TODO: Call the partition function
           # TODO: Recursively call quicksort on left and right subarrays
       return arr

You can also provide the following guided steps to fill in the missing details of the implementation:

  • Partition Function:
    • Choose a pivot element (e.g., the last element in the current subarray).
    • Rearrange the elements so that elements less than the pivot are on the left, and elements greater than the pivot are on the right.
    • Return the index of the pivot.
  • Quicksort Function:
    • Call the partition function to partition the current subarray.
    • Recursively call quicksort on the left and right subarrays.
  • Testing: Test your code with a sample list, such as [3, 6, 8, 10, 1, 2, 1].

For an intermediate activity or student group, you could provide a bit less detail in the “starter code” as shown below:

   def partition(arr, low, high):
       # TODO: Implement the partitioning logic
       return pivot_index

   def quicksort(arr, low, high):
       # TODO: Implement the recursive calls
       return arr

Inclusive CS Teaching

The website article “Inclusive CS Teaching” provides valuable resources to help educators create inclusive learning environments in CS classrooms. It emphasizes understanding and supporting the needs of diverse students, including those from underrepresented groups.

The article offers practical suggestions, such as using inclusive language, integrating real-world applications, and providing opportunities for student choice and autonomy. It also highlights the importance of fostering a classroom culture that values diversity and encourages collaboration.

It centers on specific aspects of inclusive teaching:

  1. Accessibility: This section emphasizes the importance of making computer science education accessible to all students, including those with disabilities. It covers topics like reading in the content area, universal design for learning, supporting English Learners (ELs), and AccessCSforAll.

  2. Classroom Culture: This part of the site explores how to create a welcoming environment in the classroom. It includes strategies for fostering a growth mindset, engaging students, connecting to the community, and promoting social belonging.

  3. Direct Instruction: This section provides guidance on various instructional methods, including guide-on-the-side teaching, flipped classrooms, effective questioning, and online and hybrid teaching.

  4. Structured Collaboration: This area focuses on collaborative learning strategies such as pair programming, POGIL (Process-Oriented Guided Inquiry Learning), project-based learning, cooperative learning, brainwriting, and peer instruction.

  5. Equity: This critical section delves into issues of equity in computing. It includes resources for active recruiting, reducing stereotype threat, recognizing and responding to unconscious bias and microaggressions, supporting low-SES students, and supporting females in computer science.

  6. Careers in CS: This section provides information related to careers in computer science.

The authors emphasize Inclusive Computer Science Pedagogy (ICSP), a pedagogical approach that acknowledges, celebrates, and incorporates the diverse identities of students in the field of computing. By supporting students from various backgrounds, learning modalities, and abilities, ICSP aims to provide equitable access for all students to engage with high-quality computing education.

Tips from the Guide to Inclusive Computer Science Education

The “Guide to Inclusive Computer Science Education” from Microsoft, in partnership with the TEALS program, CSforAll, NCWIT, the CSTA, and code.org, provides a wealth of tangible recommendations of best practices to promote an inclusive computing classroom and curriculum. It emphasizes the importance of inclusive computer science (CS) education. With 58% of all new STEM jobs in computing, there is a growing need for diverse representation in the field. The document highlights the underrepresentation of girls, students of color, students with disabilities, and students in rural communities in CS learning opportunities. It argues that inclusive CS education can foster creativity and innovation, ensuring that technological solutions are representative of diverse communities.

Access
  • Offering CS in elementary school and integrating it with other subjects.
  • Making CS a required course in middle and high school.
  • Ensuring that selection processes for CS courses are not based on assumptions about students’ interests or abilities.
  • Providing clear prerequisites and meaningful chances for students to grow in their CS learning.
  • Considering innovative models like Microsoft Philanthropies TEALS (Technology Education and Literacy in Schools) for co-teaching CS in high schools.
  • Ensuring CS classes are inclusive for students of all abilities, including those with visual impairments or special education needs.
Diversity
  • Building Support: Enlisting administrators, teachers, counselors, families, and students to enhance communication and understanding around CS opportunities.
  • Including Guidance Counselors: Working with counselors to ensure they understand CS and promote it to all students.
  • Introducing Diverse Role Models: Inviting a diverse group of educators, guest speakers, and role models to connect with students.
  • Enlisting Students to Promote CS: Encouraging current CS students to promote education and share what they might learn and create.
  • Generating Excitement: Highlighting how CS careers are creative and critical to solving real-world problems.
Learning Space
  • Incorporating Visuals: Using posters and displays that show a diverse range of people engaging in CS.
  • Featuring Real-World Applications: Representing the cool and important innovations that depend on CS knowledge.
  • Displaying Student Projects: Showcasing students’ work to sustain interest and pride.
  • Promoting Collaboration: Designing the room for guided learning and collaboration.
  • Accessibility: Ensuring that the learning space is accessible to students with diverse abilities, including those with physical mobility aids.
  • Technology Resources: Making sure that technology requirements or instructional tools are consistently available and accessible.
Instruction
  • Focusing on Problem-Solving: Emphasizing that there can be multiple solutions to a problem and encouraging exploration and creativity.
  • Supporting Risk-Taking: Building a community that promotes collaboration, peer-to-peer learning, and small-group work.
  • Encouraging Exploration: Resisting giving immediate solutions and supporting a growth mindset, allowing students to struggle and rewarding their ideas and effort.
Curricular Materials: Giving Students Variety and Choice in their Learning Experiences
  • Sequencing Lessons: Teach computer science (CS) as a cumulative subject where each lesson builds on the previous one.
  • Aligning Performance Metrics: Ensure alignment between student performance metrics and curriculum.
  • Incorporating Hands-on Learning: Prioritize hands-on experiences to highlight creativity and problem-solving in CS.
Curricular Materials: Selecting Curricular Materials That Highlight Diversity and Inclusion
  • Feature Diverse Cultures: Include diverse cultures and communities in instructional material.
  • Avoid Essential Identity: Present an intersectional approach to understanding the needs and experiences of people without reducing them to stereotypes.
  • Build on Cultural Assets: Include lessons that build on students’ cultural assets, prior knowledge, and interests.
Curricular Materials: Incorporating Learning Materials Accessible for All Abilities
  • Follow Universal Design for Learning: Choose materials that follow this framework to optimize teaching and learning for all people.
  • Make CS Accessible: Include tools and curricula that make CS accessible to students with disabilities, such as Quorum, CodeJumper, and Blocks4All.
  • Scaffold Learning: Provide supports during initial phases of learning and gradually remove them as students build skills and confidence.

CSTA: Reflecting on Computer Science Pedagogy - 12 Pedagogical Principles

The article “CSTA: Reflecting on Computer Science Pedagogy - 12 Pedagogical Principles” outlines a set of principles for effective CS pedagogy. These principles help educators design curriculum, instruction, and assessment practices that align with the goals of CS education.

Some of these principles include prioritizing foundational concepts, using a variety of instructional strategies, incorporating formative assessment, and allowing for flexibility in pacing and content. By adhering to these principles, educators can create engaging and inclusive CS learning experiences.

These principles are designed to guide effective teaching and learning in computing, particularly as the field continues to evolve. Here is a summary of the 12 principles along with examples that exemplify each principle:

  1. Lead with Concepts:
  • Example: Utilizing glossaries, concept maps, and regular recall and revision to support the acquisition of key concepts, terms, and vocabulary.
  1. Work Together:
  • Example: Encouraging collaboration through pair programming, peer instruction, and structured group tasks to stimulate classroom dialogue and shared understanding.
  1. Get Hands-On:
  • Example: Using physical computing and making activities, such as combining electronics and programming with arts and crafts, to provide tactile and sensory experiences.
  1. Unplug, Unpack, Repack:
  • Example: Teaching new concepts by unpacking complex terms, exploring them in unplugged contexts, and then repacking the understanding into the original concept, using an approach called semantic waves.
  1. Model Everything:
  • Example: Modeling processes or practices, such as debugging code or binary number conversions, using techniques like worked examples and live coding.
  1. Foster Program Comprehension:
  • Example: Utilizing activities like debugging, tracing, and Parson’s Problems to consolidate knowledge and understanding of program function and structure.
  1. Create Projects:
  • Example: Implementing project-based learning activities, focusing on design and evaluation against specific criteria, to apply and consolidate knowledge.
  1. Add Variety:
  • Example: Providing activities with varying levels of direction and support, ranging from highly structured to exploratory tasks, to engage all pupils and encourage independence.
  1. Challenge Misconceptions:
  • Example: Using formative questioning, concept mapping, peer instruction, or quizzes to uncover and address misconceptions.
  1. Make Concrete:
  • Example: Bringing abstract concepts to life with real-world examples, analogies, storytelling, and connections to other curriculum subjects.
  1. Structure Lessons:
  • Example: Using supportive frameworks like PRIMM (Predict, Run, Investigate, Modify, Make) and Use-Modify-Create when planning lessons to ensure differentiation.
  1. Read and Explore Code First:
  • Example: Focusing first on code ‘reading’ activities, encouraging pupils to review and interpret blocks of code, to augment their ability to write code.

Submission

I encourage you to submit your answers to the questions (and ask your own questions!) using the Class Activity Questions discussion board. You may also respond to questions or comments made by others, or ask follow-up questions there. Answer any reflective prompt questions in the Reflective Journal section of your OneNote Classroom personal section. You can find the link to the class notebook on the syllabus.