A programmer’s wife approaches him on a Saturday morning and says, “Honey, I need you to go to the store and buy a jug of milk… And if they have eggs, buy a dozen.” The programmer returned home with thirteen jugs of milk.
While humorous, this joke displays one of the hardest aspects of programming to learn: computational logic. As computer science and programming begin to encompass more and more of the new curriculum in the coming years, the need for beginning and entry level teaching tools will become more and more prevalent. I think I may have found one that can effectively be used alongside traditional education methods called Code Combat. Code Combat is an online educational game that uses elements of RPG’s and dungeon crawlers to teach students about computational thinking. The seemingly strange logic and syntax rules of basic coding appears to be the most difficult concept for students to grasp, and this is a great tool to build that knowledge and provide fun context to dry and abstract subject material.
My personal experience of programming courses have been incomprehensible walls of jargon, inexperienced teachers, bare minimum understanding, and final project program that can sort numbers from smallest to largest. Code Combat gives students a chance to learn computational thinking, basic logic, and a small amount of programming skill through traditional video game elements. Video games have become an important aspect of modern Canadian society, with roughly 54% of Canadians defining themselves as “gamers”, playing roughly 2 hours and 44 minutes per day on average between the ages of 15 and 24 (Statistics Canada, 2010). Video games are different compared to other forms of media since the element of interactivity allows for many instances of learning experiences to arise. Students can see their character interact with objects on the screen and immediately adjust and iterate on their codes in real time. While many consider video games to be “play”, there is a growing body of evidence to suggest that play gives students the chance to apply knowledge that they have learned in an unintimidating setting.
Code Combat can be written in Python or Javascript. Python is easier to learn and can be used on most operating systems, while javascript is a little more difficult but used frequently on devices and web pages. Additionally, higher level courses are available which teach students about website building in HTML 5, but I wouldn’t use it with a class much younger than grade 10 due to the complexity later in the level set. Let’s go over what Code Combat looks like.

To the right is the code window where students type their code. Notice how it is set up exactly like any script-writing program such as Jcreator or Notepad++. The lines of code are numbered and all commands are processed in numerical order. The methods used are outlined in the middle so students know exactly how to type them out. They can also be highlighted and copy+pasted as well. To the left side is the game screen. Since we only have hero.moveRight(); in our code, it shows the path the character will take. There are spikes on the walls, so an incorrect movement will damage the character and fail the level (though “failing” just means you hit the reset button). At any time, students can click the “hints” section if they get stuck, meaning that every student has the capacity to succeed regardless of academic level (these can be disabled in the “class settings” if you want to challenge them).
I feel like the most appropriate use of this program is to do a brief lesson on the vocabulary and computational logic involved, then assigning a couple levels relevant to the lesson. The scaffolding of Code Combat works quite well, introducing basic methods first before moving on to loops, like the level where you have to remember where the fireballs are going to come out and put a series of movements into a loop to dodge them. Later, students will have to program their character to attack if confronted by an enemy or else continue as normal, before ending with a boss that attacks in a predictable pattern.

Additionally Code Combat has level sets revolving around creating a game (eg. Spawning obstacles and scenery, spawning enemies, setting win conditions, etc – pictured below) and creating a website (similar challenges but with HTML).

The strength of Code Combat is its ability to teach fundamental concepts of programming in a setting in which most students are familiar and unthreatening. I don’t expect students to become star programmers, but I do expect that they learn basic fundamentals like: the importance of syntax, the importance of order, loop logic, problem solving, and the trial-and-error method that often accompanies problem solving within a computer science setting. Another strength is that you can create a “class” to track your student’s progress and assign specific levels or challenges, including some co-operative ones where two students must work with each other to complete the level. This is as simple as making a free account and adding student emails to it, though you may want to use throw-away emails since the program is based in the United States and is probably not FOIPPA compliant. This is what I think separates this game from others similar to it – the polish, ease of use, pace of scaffolding, level design, and the crucial collaboration component.
Some weaknesses of the program include the lack of FOIPPA compliance which may make using the classroom feature difficult, the lack of supporting course material or vocabulary to set up the concepts in each level (though this is why I recommend its use alongside a traditional lesson format), the initial learning curve involved, the limited number of programming languages to choose from, and the problem of motivation – not every student enjoys games like this.
Overall, Code Combat is a great tool for structured play involving programming and computer science concepts and provides context to very abstract subject matter, though it would need to be used to supplement and reinforce what is learned in class and should not be used by itself.


