Russell Gordon

Search CTRL + K

Building Computer Studies Classes for Student Agency

No teacher knows quite what to expect in this coming school year.

What teachers do know is that the intrinsic motivation of our students is key to a positive outcome.

Whether we are learning in-person or remotely a student has a finite number of hours to dedicate to schoolwork.

And naturally we want computer studies to come first. 😇

How do we make that happen?

Student Agency

Writing software is a creative endeavour.

Since we teach computer studies it's a fair bet that we've all experienced that feeling of being "in the zone" while coding and the rush that comes when a goal is reached or a challenging problem solved.

In speaking with colleagues who teach visual art I've come to the conclusion that the emotional experience of writing software is not all that different from an artist working on a piece.

There is absolutely a place for specifications, one-size-fits-all assignments, and asking students to complete a defined task to learn a technique or evaluate a particular skillset.

If that is, however, the majority of a student's experience with our class – while their time with us may be occasionally interesting – it is unlikely to have felt terribly creative.

It must be our goal for students to finish our course feeling like an artist.

How many artists are told what to make?

Start With Conversations

What do your students do for fun?

Is it chess?

Drawing?

Going for a run?

What do your students worry about?

What problems do they want to solve in this world?

Facilitate a discussion about this.

Once students have warmed up to it, ask them write about their interests.

Use their responses as your guidebook to each student for their time in your course.

Foster a Culture of Sharing

How often have you achieved a goal when writing a program and then immediately sought out your best friend, partner, or child to show them your brilliance?

How often have you been a bit disappointed when they didn't seem quite as impressed as they really honestly should be?

Students want to share what they've made.

If they can explain it with enough clarity that someone else might be able to at least appreciate the effort involved – then it's a fair bet that the student really understands what they've done1.

It's our job to make that a regular part of class – something that students look forward to both as the person sharing or as the audience.

Have an extrovert on your hands? Let them share a success live in class.

Does a student worry about missing a detail or stumbling over words when speaking in front of others? Have them record a screencast demoing their work and explaining a key piece of logic.

Might someone not like how they sound on video? Ask them to write a blog post instead, and give other students the chance to read their work in advance of a class discussion.

Reserve time in each class for this exchange of ideas, with two or three students sharing each time you meet. Set up a regular schedule so students know when it's their turn.

This kind of conversation is not just for end products. It's a work in progress? Great! You're stuck with a syntax error or a logical error? No worries! Especially reinforce for your students that sharing challenges, and strategies employed in an attempt to solve the problem, are often more valuable fodder for discussion.

We want our students to feel like they are in cahoots together. That they can freely lean over, or speak up, and help someone else out.

Our students will be largely working toward their individual2 goals in the course and it's that process of creation throughout the year, as much or more than the end product, that must form the bulk of evidence used to determine a student's final grade.

Since students are each working on a differentiated product, and they'll understand that they must be able to explain their work, we have everything to gain by encouraging a healthy collaborative environment in our classes.

Evaluate Mastery of Learning Goals

My second semester as a teacher was in the Mathematics department at Erindale Secondary School in Mississauga in the winter and spring of 2007.

I will never forget a meeting where the department head, John Flanagan, had one activity on the agenda: take a photocopy of the same student's responses for a unit test, take a copy of the solutions, go away and grade it, and then come back in twenty minutes to share and discuss the results.

Across the ten or so colleagues in that department we had a range of percentage grades for that test from 70% to 90%.

As a young teacher just starting out, that was an eye-opening experience.

Most teachers will, at least in private, acknowledge that numeric grades convey a false sense of precision.

Can you honestly tell someone the difference between a student who has earned 96% versus one who has earned 97% in your course at the end of the year?

Now can you do that for some subset of time and curriculum expectations?

Contrast that to a binary evaluation – yes or no – of whether a student has met an expectation. Most teachers feel comfortable with this.

Teacher: Can you decompose a problem and apply that in code?
Student: Sure I can – see here where I've used functions, and in this other program where I wrote a class – see, I reused that from an earlier program I wrote.
Teacher: OK, decomposing a problem... ✅

I grudgingly issue a percentage grade when required to for reporting deadlines at my school, but only after I've spoken to the student one-on-one, they've shown me their portfolio containing evidence of mastery for various learning goals, we've talked about what they've been able to cogently explain, and the student has made a proposal for what grade they feel they have earned. Far more often than not, students are realistic about where they stand.

Time Out

Right about now, you may be feeling like this is a nice picture being painted, but get real. This sounds like a tall order in a normal year. During a pandemic? That's madness.

Well, that's correct – we are in a pandemic.

Can you count on in-person instruction for this entire school year? No, of course not.

Any evaluation plan dependent upon seeing a student do something within a defined period of time in your class is a non-starter.

Any evaluation plan centred upon all of your students solving the same set of defined problems with the same expected output will be fraught with the kinds of challenges none of us became a teacher to spend time upon.

Perhaps you are a dogged personality and insist on trying to replicate the types of evaluation you've used for in-person learning with remote learning.

"In class or at home, I'll demand rigor by requiring all students to complete the same tasks on the same timeline."

I'd encourage you to consider whom that stance advantages and disadvantages. If your students are learning from home, do they all have equal access to a quiet space to learn? The same high-speed Internet? A reliable device? A parent who is not sick with COVID-19? What is it that your highly rigorous evaluation plan is evaluating? What a student knows or how much privilege they have? Do you really want to get into the privacy and ethics morass of testing-at-home software?

I'm painting a caricature, of course. I doubt that any teacher's thinking is so rigid.

If we are to have students:

... what does that look like, on a practical level?

Start at the Beginning

Not with "Hello world."

Especially early on in my career I made the mistake of overemphasizing programming skills.

Computer studies is far more than that. Says who? Says the Ontario curriculum.

A table describing that 'effective learning in all aspects of computer studies depends on the  development of knowledge and skills in the following four areas.' Those four areas are: 1. Software development (including project management and software engineering principles) 2. Algorithms and data structures 3. Program correctness and efficiency 4. Professional and ethical responsibility

What does effective computer studies learning look like?

It's not just programming. From page 4 of the The Ontario Curriculum, Grades 10 to 12, Computer Studies, 2008 (revised).

If we want a broad range of students to be engaged with computer studies, if we want to see greater enrolment from under-represented groups, we must be true to the curriculum.

Begin with the design cycle.

That student who loves chess? Help them arrange a video interview with a local chess club and find out what their members think a learn-to-play-chess app should include.

That student who loves to run? Set them up with athletes in a local running club to find out what functionality they'd like to see in their ideal intervals training app.

Maybe your students need a bit more structure – maybe they can't put their finger on a problem they want to solve.

In that case, consider speaking to an elementary teacher in your board. Younger students become the clients – your students are the developers. Use class time to set up video interviews between the two classes. Your students write educational games to the specifications of the elementary school students.

Your students cannot be their own audience.

They need to experience what it's like to speak with a potential end-user.

They need to know what they are shooting for when, inevitably, they get frustrated with syntax in your class, or you are tackling a particularly challenging coding concept.

When students know they have an authentic learning opportunity, I'm not exaggerating, it's like magic. They will find you to ask what can be done next. Project management becomes something students want to learn, because it's helping them achieve a goal they care about.

Use Source Control

Source control, and git in particular, have a questionable reputation for usability.

In truth, basic usage is not that hard. There is a graphical client. And GitHub has a lot of nice project management features built in.

You can explore the GitHub Education offering, or you can keep it simple:

With source control, you know exactly what code a student wrote and when.

A table showing a list of commits to a student's repository that took place over several weeks.

Commit history for a student's culminating task

When a student commited code is clear. Coaching students to use descriptive commit messages is an ongoing task. Code changes can be seen by selecting the hash link (in blue) for a given commit.

Teachers know how a program is written – it's organic, bit by bit – and it most definitely doesn't happen with a single commit. Tracing the evolution of a student's work, from an academic honesty point of view, is straightforward4.

Use of GitHub means students can easily provide evidence for their portfolios – including specific line numbers of a given file.

Source control makes it a snap for students to identify and retreat from situations where their code has stopped working. Have a problem? Do a diff on your code to quickly see what's changed since the most recent commit. Can't figure it out? Revert state to your last commit and try again.

It's possible to write an entire series of articles on using source control in the classroom.

The short version is – basic usage is straightforward – and it's essential if you wish to differentiate your class and allow students to be specific when providing evidence of having met learning goals.

Use Portfolios

Artists create a portfolio of work, even as they learn. Students cannot apply to post-secondary programs in the arts without a portfolio.

Increasingly, summer employers in the technology sector want to see what a student has on their GitHub profile as evidence of what they can do.

Students looking to differentiate themselves from the pack in university applications can use their portfolio for that purpose, too.

When populating a portfolio becomes a regular part of your class (and it really needs to be a part of the daily process) students will learn the expectations. They tag evidence with the expectation they believe it fulfills. This becomes second nature. The onus is on students to show you what they know – it's not feasible for you, the teacher, to seek out evidence on your students' behalf.

Ideally you have access to a tool that makes this process sustainable.

That might be something fancy – a dedicated tool like Spaces or something similar.

Or it can be very basic. Last year, I had students maintain a Google Doc, submitted through Google Classroom, using a template I provided at the start of each portion of our course.

An excerpt from a student portfolio, showing a narrative text and links to source code snippets on GitHub.

An excerpt from a student portfolio

A point form narrative with links to snippets of source code is maintained throughout the year and forms the basis of regular 1:1 meetings with students to discuss grades at reporting time.

Be the Guide at the Side, Not the Sage on the Stage

Class time is valuable.

In-person class time, this year, is precious.

Do you need to teach a specific concept? Explain a procedure?

Don't do that live to the whole class. Especially if you are teaching remotely.

Convey specific skills or concepts by video. Record your own if you have to, but work now to build a stable of resources you can refer students to.

Use synchronous class time, whether in-person or remote, for follow-up and discussion. For check-ins, for paired programming, for anything other than students listening to you talk at them.

Timelines for when a proportion of learning goals need to be met, or when specific learning goals need to be met, must be clear to students.

Big-picture thinking and identifying in advance what resources will help your students with each learning goal will form a large part of your planning.

However, for most of the year, you are unlikely to have a specific lesson plan for each class. Your students will be working on different things each time you meet. What have they worked on? That will be documented in their portfolio – remember, students maintain these in each and every class. How do you know that's happening? You're reviewing their edits as a part of your planning time. Use software that makes that sustainable.

Again, to be clear, we're absolutely not sitting back and reading Twitter while our students flail about.

In class, you must be present for consultation, guidance, direction to new resources, or a timely piece of small-group direct instruction. You may be familiar with just-in-time compilation. I tend to think of a differentiated classroom as just-in-time teaching. Despite our best efforts, most students retain very little from full-group instruction. Find that moment when a student is curious, or frustrated – and know what to say, or where to direct them – that's when the learning will stick.

Out of class, we corral useful materials. Provide asynchronous feedback. Record our own short, targeted videos. Build our own skillset. Reach out to parents – to share student successes – or, rarely in my experience – to talk about challenges you haven't been able to sort out through conversation with a student.

Spectrum of Possibilities

Much of what I've described probably sounds like project-based learning.

While I've served up a main course with my students on occasion, I've more often dished out dessert.

That's an honest statement about my past practice. I know where I'm headed, though.

It takes time to figure this out. You don't have to start in the deep end.

Douglas Kiang speaks about birdhouse projects. What's a birdhouse project? You know arts and crafts time at camp? Everyone is building the same birdhouse, but painting theirs in different colours than their peers? That's the idea, and it's honestly a great way to focus on a more specific subset of a curriculum. I'll take a course organized around birdhouse projects over one built on tests and one-size-fits-all assignments any day of the week.

What are some practical examples?

Talk with teachers in other subject areas. What are students learning in Physics class? Chemistry? Biology? Have your students earn credit in two courses at one time by building a program that models a concept from another subject area.

Generative art is a full of algorithms that contain a rich overlap between art, mathematics, and programming. Plotters bring generative art from the virtual realm to the physical.

Generative art can be animated:

Generative art built by a student

This builds upon an algorithm outlined by Casey Reas that involves moving circles around a canvas based on when they are about to overlap. Opacity of lines is a function of the distance between the midpoints of circle. The hue of lines is controlled in part by the amplitude of the music being played.

Or static:

Example of a t-shirt design being transferred using photo-sensitive ink.

Making tees with photo-sensitive ink

From a past Grade 10 Introduction to Computer Studies class. Students demonstrate their understanding of sequence, selection, and iteration by making images that can be transferred to t-shirts using photosensitive ink.

Prioritize

Whatever you do with your students, this year, more than any other year, some things will fall by the wayside.

Don't stress about this.

Decide now what's an essential understanding.

Then be flexible.

Err on the side of being generous.

Assume best intentions.

What will students remember about your class?

Afford students even just a little bit of agency, and you'll never look back.


  1. It certainly sounds like such a student will have demonstrated that they can convey meaning through various forms (see page 16). ^
  2. Or group goals, in Grade 12 Computer Science. ^
  3. Most of what you evaluate is a differentiated task that students document in their portfolio, right? There is no need for secrecy. Encourage a culture of students learning from one another. ^
  4. Should that even become necessary. My experience is that when students are doing authentic, differentiated work, cheating becomes a non-issue. ^