The Problems With Differentiating Computer Science

Computer science presents a unique set of challenges to teachers who seek to provide differentiated education in their classroom. Coding can be a strict and unforgiving discipline, requiring students to demonstrate precision and organization before they can successfully build even basic programs. A computer science classroom is likely to contain both students completely new to coding and students already fluent in it, alongside students who lack the ability to type or require other individual education plans. How can a teacher instruct all these students in a single computer science topic, while giving some students extra assistance and others extra challenge, simultaneously keeping every student engaged, motivated, and moving together as a class?

We believe that differentiation is the key to achieving equitable access in computer science education, where every student regardless of race, gender, language, or socioeconomic background has an equal opportunity to succeed. To that end, this article presents our team’s approach to solving these problems. We have developed this solution over years of administering computer science education, frequently revising it based on teacher feedback and student outcomes, until it evolved from conventional classroom differentiation into a promising new approach combining technological innovations with computer science pedagogy.

Depth of Knowledge Scaffolding

Perhaps the biggest problem with differentiating computer science is the sheer range of students’ coding ability. We avoid splitting students into tracking groups, which can become exclusionary or limit students’ potential (Powell, 2016), in favor of a heterogenous whole-class approach. To allow students of various learning profiles and abilities to complete the same activities together as a class, we give every activity five levels of scaffolding differentiation.

These levels differentiate based on Norman Webb’s Depth of Knowledge framework, allowing students to learn and practice the same topics with the appropriate level of depth to support and challenge them (Hess, 2005). Lower scaffolding levels give students more direction, focusing on tasks involving code recall and application, while higher levels gradually remove scaffolding to emphasize critical thinking, analysis, and planning.

Table 1: Scaffolding levels for coding activities

It is important to note that each level includes the preceding one’s skills. That is to say, the levels don’t replace the previous level’s activities, they augment them by removing scaffolding and requiring a deeper level of understanding. Recalling code commands and consistently employing precise syntax (TechSmart level 1-2) are fundamental skills to mastering coding. Even when students focus on problem-solving and critical thinking (TechSmart level 3-5), they continue practicing these fundamental skills rather than ignoring them through code-adjacent activities that obscure or abstract them.

With every exercise containing these five scaffolding levels, the whole class can advance as a group through a well-designed progression of lesson activities while giving each student an appropriate level of assistance and challenge. Since teachers can easily shift individual students between levels for each exercise, students are not grouped into permanent and limiting tracks, but can progress through the levels of coding skill at the right pace to gain confidence and efficacy.

Assisting With Syntax

Computer science can seem to have a particularly high barrier of entry among academic subjects. Due to the nature of coding, students must enter exactly correct words and symbols, often with idiosyncratic syntax, to write code that the computer can interpret. Furthermore, many students have difficulty with keyboard typing, which can slow coding to a glacial pace. How can scaffolding ameliorate these problems while teaching students to master them?

To answer this question, let’s look at our coding exercises’ Scaffolding Level 1. Students are given starter code, detailed comments that provide all the program’s structure and organization, allowing students to practice recall and precision by filling in the individual lines of code. These starter code comments make the purpose of each line clear, while containing consistent keywords for each code command that needs to be used. Students can type or paste these keywords into Code Assist, a code-writing helper that sits alongside the coding environment. There they find not only explanations and examples of that coding command’s use, but template code that they can paste into the program to avoid needing to type it, simply tweaking it to fit its specific use in the program. By using the starter code in conjunction with Code Assist, students are able to practice code recall and learn computer science concepts without needing to type excessive text or memorize finicky code syntax.

Table 2: Example of Python Starter Code at Scaffolding Level 2

Empowering Teachers to Differentiate

Since differentiation is an active process of understanding and responding to students’ needs (Tomlinson and Allan, 2000), effective differentiation relies on the teacher’s ability to understand and accommodate their students. This can present additional difficulties in computer science, since teachers with deep experience in the subject material are scarce. Based on our experience, the most effective way to sustainably solve this problem is to train teachers to become computer science instructors who understand the material at an advanced level, while providing them with a full suite of tools to analyze students’ needs and easily administer differentiation.

To effectively differentiate, teachers need ongoing diagnostic assessment of students (Tomlinson, 2014). Our strategy includes both formative assessments as part of every lesson, and regular self-evaluations of students’ confidence and engagement. Teachers can view this data at a glance through an Insights data visualization, to identify students who need more scaffolding, additional challenge, or other ways of supporting their individual learning profile. They can administer differentiation by simply dragging and dropping students between different scaffolding levels, while still able to customize curriculum in other ways to suit student learning profiles.

The Importance of Differentiated Education

Many studies have confirmed the effectiveness of differentiation on improving learning outcomes. Both students with learning disabilities and gifted students have been shown to especially benefit from such an approach (McQuarrie, McRae, & Stack-Cutler, 2008) (Tieso, 2005). Lawrence-Brown (2004) affirmed that differentiation is effective in including a wide variety of student ability levels, while Baumgartner, Lipowski, and Rush (2003) found that differentiation improved student attitudes as well as their skill levels.

We believe that equitable computer science education is a crucial goal in preparing all students to understand and contribute to the modern world. In order to open computer science to a broader range of students, computer science differentiation is a problem that must be solved. The approach we have described is currently showing promising results in schools nationwide, and our team is continuing to collect data to improve computer science differentiation.

Works Cited

Powell, Mike. “Engaging Gifted Students in a Heterogeneous Classroom:
Challenging Students with Varying Skill, Motivation, and Preparation in Mixed-Ability Settings.” (2016.) Available: https://www.usma.edu/cfe/Literature/Powell_16.pdf