Reflections on a computer science project

Last semester I tried something new: replacing my entire computer science course with one big project. Instead of lessons and homework assignments, each student chose an individual project that they worked on for 5 months with mentorship, and that was it. While VISST generally favours project-based learning, this was extreme even for us. 

I came to this approach for a few reasons. First, I knew the students had vastly different amounts of coding experience. It was the classic teaching dilemma — either some students will be bored or others will be lost — taken up a few notches. Second, it’s easy to lose interest in computer programming. When coding, all it takes is an extra blank space, a forgotten semicolon, or a missing parenthesis to blow up the entire program, usually resulting in a cryptic error message like “SyntaxError: unexpected EOF while parsing.” To beginners, the whole process can feel unforgiving, arbitrary, and impersonal. A project, on the other hand, stems from a personal connection. I traded a comprehensive but potentially un-relatable foundation course for a shot at igniting a spark and opening the students’ minds to how computer science can help them pursue their interests. Ultimately, it is a trade I plan to make again in the future.

Let me tell you about some of the student projects:

Verity, an accomplished pianist, wrote a program to automatically generate Bach-style chorales. By mining a database of chorales for statistical patterns, she could generate plausible melodies. Then, she used her music theory knowledge to generate accompanying chords that conform to musical conventions:

You can read Verity’s writeup (and listen to some of her chorales!) here.

Tobias created a motor racing game to accompany his Formula One–inspired stop-motion YouTube channel. One letdown of my old job teaching at university was how narrow the scope was: I was there to teach a specific topic, and if I saw other rough edges, I did not have time to address them. Tobias’s end-of-course reflection was satisfying because he talked so much about project management, both practically and psychologically, including the difficult judgement of when to call something “done”. This is technically not computer science knowledge but … who cares! I’m more than happy for the VISST learning experience to be holistic rather than siloed.

You can check out Tobias’s reflection video here or download the game here.

Niobe created a web application to keep track of our books in VISST’s library. For computer folks, this was done in Django and postgres, which she learned from scratch for the project. Educational and useful!

Kiera and Simone created visual novels, Kiera’s about a student stuck in a time loop and Simone’s about a student navigating real-world relationships at school. This entails not only coding the logic of the story but also creating all the art and dialogue. 

Kiera’s project: February 11th, 7:10am 
Simone’s project: WithDrawn (password: VISST2026)

Video games were popular! Chris, Eric, Joshua, Marcus and Valerie created video games, while Attila, Natalie, Ariel and Luca created AIs to play a game. Luca’s project is at a graduate school level and you wouldn’t even believe me if I described it, but you can take a look if you’d like. 

Natalie’s writeup: You Can't Out-Wordle the Bot: Building WordleBot
Ariel’s writeup: Teaching an AI to play Geometry Dash
Chris’s humorous writeup: Shootout Hockey Game
Attila’s video reflection: Pong AI

To round out the group, Riley created a security camera system using a Raspberry Pi, and Yusuf wrote a program to generate artwork with fractals. 

Now you might be thinking to yourself, there’s no way a Grade 10 student did this level of work. This brings us to the question of our time: what about AI? Misuse of AI is a serious problem for universities and potentially even larger high schools, but in a small environment like VISST it is more straightforward. At the end of the course, I conducted a 1:1 interview with each student, sort of like an oral exam where the topic was their own code. This took about a week of class time for 15 students. Although I cannot say if students got help writing some lines of code – and in fact that is fine by me in some circumstances! – I am confident they understood their code to a level that they could explain and extend it. 

So, did it work? My sense as a teacher is that it did. I also conducted a survey at the end of the course. The class estimated that they learned about as much as they would have in a traditional course, but that the project-based course kindled their interest in computer science much more than a traditional course would have, and much more than they expected at the start. Success! There’s only so much computer science you can learn in a semester, but there’s almost no limit to how much you can learn in a lifetime of enthusiasm. Teaching this way means students may have some holes in their knowledge compared to what a systematic, traditional course would have given them in a 5-month span. But I have the privilege of thinking long-term here. I was able to utilize the flexibility afforded by VISST’s unique environment: logistically (small classes), culturally (highly motivated students), and philosophically (curiosity and enthusiasm are so important but hard to measure, and therefore often overlooked). I’m a happy camper.

I’m especially happy as someone who previously taught computer science at a university, where we worked so hard to improve diversity in the field, but found that students have often solidified their interests by early adulthood. I don’t take for granted the opportunity to have an impact at a younger age and facilitate a positive computing experience for a broad group of students. 

Of course, there are a few things I would do differently next time. The course included some mini lessons sprinkled throughout: environment management, version control, the DRY principle, object-oriented programming, indirection, documentation, testing, speeding up code, binary representations, floating point errors, and (just for fun) my personal history with computer science starting in the late 1990s. In the future I may front-load some of the key mini-lessons, such as version control, to ensure students start their projects on the right foot. I would also add a couple more checkpoints, such as submitting a draft of their writeup for feedback (most students did this anyway, but not all). Finally, I would love to co-teach this course; though resource-intensive, it is hard to mentor so many different projects across domains from game design to information theory to web development. 

Just like the students’ projects, I don’t know if the course will ever be done or perfected, but I look forward to improving it a little bit every year.


If you enjoyed this post, consider joining the VISST mailing list at visst.ca/#updates.

Next
Next

State of VISST, 2026