Making games is not the only way to learn code
Video games are great, making them is extraordinarily creative and fulfilling, but they’re not the only way to learn to code. There are so many different projects we can make, so many different fields to explore, yet it seems like learning to make games is always at the top of the list. I like making games, so I get it, but I also like making apps, I like writing scripts, I’ve automated my lights, I’ve built websites and I even occasionally like writing SQL. So why do we keep using this one neat trick to teach coding?
As children we all learn about the world through play, as we grow older video games continue that play in a multitude of different interesting ways. It can be a medium for storytelling, learning, exploring, building, competing, creating and even just fun. Plus, on top of all of that, video games are really engaging. It’s no wonder so many kids (and adults!) love to play video games. Since video games involve coding it seems to follow that making a video game is a good way to learn coding.
Learning to make video games is definitely worthwhile, I’m still learning myself and there’s so many facets to explore. You can try building a game engine, make tools (like level editors), create your own graphics and effects, AI and scripts, procedural generation — so many interesting projects. In a beginners project though it’s common to use an existing game engine or framework and try and build something from there. Unfortunately students quickly get bogged down by things that aren’t coding.
To make something that really feels like a game you’ve got to put in art, sound effects, animations, music, levels, gameplay… the list goes on. This is where it all starts breaking down, something’s got to give! Students will jump on the internet, download some packages, find some scripts, and then copy code so they can move on to art, or level design. Even if your students are diligent about coding themselves they’ve still got to work on the other bits.
Ultimately this is one of the pitfalls of a game as a coding project. Games can be really fun to make, but to make one by yourself is a massive task — it’s a rich multimedia experience and it’s incredibly challenging to finish all those parts alone. Not to mention how ambitious students can be! A small indie game, like Birdsketball pictured above, can take more than a year for an experienced developer to build and polish — there’s not just the obvious elements of art, sound, levels and gameplay but subtle things like “game feel”. So students end up spending lots of time on these non-coding tasks when we really wanted them to get stuck in to coding. Some of these tasks are great if you’re trying to hit curriculum points about user interface development, or user experience design—but a lot of it can really feel like a distraction.
Even if we can guide students around this, there’s another pitfall, coding a video game isn’t always an interesting way to explore computer science. When you’re focusing on making a game the interesting computer science part, like writing a physics engine, gets quickly added with an existing package or with a game framework. Putting all of these different existing packages or libraries together involves a lot of “glue” code, essentially plugging one library in to another. When code is tied up in library calls and event handlers it’s very difficult to point at one little bit and say “here is an interesting algorithm”, making it much harder to assess. Plus all this complexity can make it easy for students to miss the basics — like loops and functions. Students can end up learning more about how the game framework behaves and less about computer science and computational thinking.
So, what can we do? All of this put together makes a game a really tough project to set and a difficult way to learn. With the right guidance and a learning task designed to avoid these pitfalls a game project can be an engaging and rewarding experience. But maybe instead of a game project, you can try something just as engaging that isn’t a game! Here’s some ideas we really like:
1) We’ve had a lot of fun making instagram filters with Year 9 students. Python Imaging Library makes it easy to get going. If you’re interested in trying out our alpha course, send an email to firstname.lastname@example.org.
2) Building a search engine can be an interesting task! One of the core components, a web crawler, is quite self contained and can be used in lots of different ways. Try finding every website about LEGO, ordered by most pictures!
3) For the younger ones, we think our Monster Maker course is a great way to get creative with code. You build monsters using layers of stickers, stencils and paint.
5) Venvi is an environment that teaches coding through dance. Combining scripting dance sequences, with learning dance moves is an interesting cross-curricular (coding and physical movement?!) that is apparently quite engaging.
6) We love our micro:bits. With micropython and the radio you can make some very interesting projects, like Dab Dab Revolution!
7) Data Science is an interesting way to approach cross-curricular topics like science, economics, geography or statistics. Our co-founder Tara runs an excellent online course in data-driven astronomy, though this is for tertiary audiences. You might like to try out our Intro to Databases (SQL) course with high-school students.
8) Games! To avoid the pitfalls mentioned above we’ve enjoyed making text-based adventures. Our short (and free!) activity The Dark Tunnel gets students started. By removing the graphics, sound, animation, level editing etc you can create some really engaging projects that are very code-centric. Recently a number of indie text-based adventures have been quite successful like Lifeline, Device 6 and Killing Time at Light Speed.
Now this list is nowhere near exhaustive! There’s not an industry or field of research that isn’t massively changing because of code. You know your students best, and you know what they’re learning in their other classes. With the right project you could have them learning computer science, computational thinking and a little bit of something else.
What’s exciting about these sorts of projects is that they’re engaging, they involve a real-world context, they explore computer science and computational thinking in a way that is very code centric. This means that you can be sure your students are really learning to code.
So, what non-game projects do you do with your class? We’d love to hear!