My kids don't need another math game
Modern math games lost my kids and my money, so I built something that doesn't: a math drill sergeant.
I’m the proud father of three amazing kids, two teens and a toddler. Like many people were forced to do, we started homeschooling our kids when COVID hit. We liked it so much, that we never started back up!
Homeschool is pretty much awesome! Our kids get tons of time to pursue their passions more deeply than they would ever get to do at a public school. However, one thing I care deeply about suffers in our little circle of almost no structure: math.
Nostalgia
I too grew up homeschooled. I watched my older siblings slave over math textbooks for hours, my curiosity about their work probably drove them crazy, and before I could even read, I was biting at the bit trying to convince someone to teach me a thing or two about numbers. When I finally got started with my own math book, I was excited enough that to me, numbers were the most interesting thing in the world.
Then my family got a computer, and with it, a game: Math Blaster Plus! I was instantly obsessed and spent most of my computer time playing that thing. To my eyes, that was the epitome of technology, and I was going to take full advantage of it! Ever since, I’ve never seen a game attempt to teach math and succeed as well for others as that one did for me. The novelty of games wore off I guess, and in order to keep a player’s attention, games had to go much, much further.
Problem Statement
My own kids have tried several different games for learning math, and so far, no dice. Every one of them cost more money than we’re willing to spend and do far less with it than they claim. I don’t want to have to spend a ton for something that doesn’t do what it says it does because it can’t keep my kids’ attention for more than five seconds. I need something different.
A couple of weeks ago, I thought, why don’t I just build something then? I’ve got a home server I can run it on. I can make it work any which way I want it to. I can use AI to make it happen and guide it down the path I really want. Let’s make it happen!
Before I began, I needed to get my requirements all lined up. Just by looking at my kids, I can tell that little cartoon characters, aliens, explosions, asteroids, etc. in lo-fi graphics aren’t going to cut it. In fact, I’m not sure any actual game mechanics like story lines, RPG elements, etc. are going to help at all. I don’t actually need a game, I thought. Instead, I need something like a tutor and drill sergeant. I need it to give them a good enough UI that they can practice math over and over again like they practice music. That way, the concepts will solidify, take hold, and grow in their minds. Once they’re done with one thing, I want them to move to the next.
With all of that in mind, I came up with this list:
- Catalogue: the collection of math skills that a student must learn to make their way all the way from arithmetic to the start of calculus.
- Skill: a distinct mathematical concept, like fraction multiplication and division, plotting points on a graph, plotting functions on a graph, finding the zeros of a function, and recognizing and manipulating trig functions.
- Level: a simplified version of a specific skill that isolates one part of that skill for focused practice.
- Spaced repetition: if a more foundational skill hasn’t been visited for a while, the student should revisit it.
- Gamification: there needs to be some degree of competition in this thing to help motivate the kids to work harder.
Then, I thought about metrics I want to see as a parent. I want to see where my kids are in their math skills right now. While I care about how long they spend drilling, I care more about their speed and accuracy. So: in order to pass a skill, they have to pass a time trial accurately. If they do so, speed is automatically adjusted so that next time, they have to do it faster. If they fail to pass time trial enough times, the speed is adjusted down. The level of the player doesn’t depend on how much time they spend drilling, but rather on how accurate and fast they complete a level’s time trial, meaning that they can actually lose a level if they do worse in a later session than they did in a previous one. That way, player level is an accurate measure of how well the student is doing overall.
With all of this in mind, I was ready to get busy.
The Project
After discussing with AI, I decided to name this project Versine, after a now-defunct trig function. Why? Because it is somewhat brandable, has a nerdy history, and wasn’t used by much of anything else just yet. I don’t need it to be poetry or anything, just a name to call it that is at least somewhat unique.
My process for building projects like this is very much AI-centric. It consists of three main stages:
- Build a spec. The size of the spec depends on the size of the system I’m trying to build. In this case, the system is pretty small: a web server that supports multiple users and presents math problems in a dependency tree. From a web development perspective, this is pretty simple. However, the detail level of the spec is always the same: every little aspect of how the program will behave must be decided beforehand, so I have the AI interview me over the course of several days and record the results in a markdown spec file. I ask it to check the internal consistency of the spec over and over again, looking for bugs in the spec that would become architectural kinks in the code. Once the spec is ready, I move to step 2.
- Have AI build the spec. This is basically just a loop of “proceed” prompts and a few times when I have to poke the project myself before I can approve of how it was done. At each milestone, I test the results by hand, have the AI test the crap out of it, and then I commit the changes in git (if you don’t know what git is and you want to have AI write software for you… ask AI, and become VERY familiar with it, as it will save your projects over and over again). Once the entire spec is finished, I move on to step 3.
- The use it -> fix it -> use it loop. It’s not really 100% ready for prime time, but that’s okay. There will be bugs in there. Take note when you find them, and fix them. This whole loop is a LOT easier when you have other people using the thing that you built, because that’s time from others dedicated to feedback on a thing you built. Otherwise, it would be entirely up to you to use the thing, and you have limited time.
Results
That’s what I did with Versine, and to be honest, steps 1 and 2 were pretty quick. I’m now solidly in step 3 land, and so far, so good! My teen son is naturally pretty good at logic and mathy things, so he has made quite a lot of progress. My teen daughter has a good deal of math anxiety left over from her public school days even now, but she’s finally getting the hang of what negative numbers are and arithmetic with negative and positive numbers.
Truth be told, they’ve only been using it for like a week so far as of my writing this. However, our plan right now is to get them to keep using it daily, because, like any other talent, practice makes perfect. Perhaps I’ll have charts or other statistics to show off from this project eventually, but for now, I’m satisfied that the project has the core it needs, and over time, I’ll continue revisiting this to add more polish, fix bugs the kids tell me about, and improve the spaced repetition features and leveling system, and anything else that pops into my head eventually.
Also, because of this project, I can unequivocally say that AI has gotten a lot better at UI design over the last few months, because the UI in this one turned out fantastic with only a few small things I needed to correct it on so far.
So: if you have homeschool kids, or if you just want to start a math leaderboard with everyone in your household for some reason, get Versine, put it on your home server, take it for a spin, and let me know how it goes!