When I was a kid, I was a star memorizer. At an early age I could memorize sections of prose, poetry, and all kinds of facts. When I started working in mathematics, we did more memorizing. I was good at that part, memorizing math facts. Trouble was, I didn’t really understand them as deeply as I needed.
Now that I found myself in charge of my son’s math education, I started to branch out from the lesson plans and exercises I had purchased and tried out. Since we were working together, and he was curious, I decided to experiment a bit. First of all, I wanted to help him with a different approach to math than I had experienced. I had struggled a lot with math, up until university. Next, I wanted to be sure our approach to math was appropriate for his learning. Instead of being guided by my own experiences, I would let them inform us, but try to get my direction from kiddo and his interests.
Looking at my own struggles with mathematics required a bit of self reflection. Over the years I had thought a lot about why I had struggled, and for me, it was often because critical information was withheld. Someone, somewhere, had decided that parts of the topics I was learning weren’t age appropriate, so I would learn a certain set of facts at a certain grade level. Later on, more information would be added, and the facts and approaches I had learned were challenged or upended completely. Those transitions were hard for me. I also had trouble because I needed to understand the topic more deeply. When I would ask questions about math topics, particularly with regards to their application in real life, I didn’t get satisfying answers.
Most of the time, the explanations from the teachers didn’t leave me feeling like I fully understood the topic. In fact, I wasn’t able to delve deeply enough in math concepts to truly own them until I took math classes in university. I memorized and applied, but I didn’t fully understand. It wasn’t until I had a math tutor in Grade 12 that I found someone who could fill in those blanks for me. When I went to university, that changed. Whenever I asked math professors “why” questions, they usually appreciated it and explained further, or pointed me to publications with alternative explanations, or trips to the library. I was also inspired by how some of my math and computer science professors taught math to their own kids. They focused on simple, intuitive application that was relevant to kiddos, and they didn’t gatekeep and withhold information. Once things began to click for my math brain in university, I vowed that my kids would get help on the “why” questions. If it was from me, then so be it.
To brainstorm, I talked to programmer friends and asked about their math learning experiences. Many of them just understood math naturally, and didn’t struggle with any of it. Many had mixed experiences, and some had experiences that sounded like mine. They didn’t like how rules changed and wished they had been given a fuller picture earlier. Furthermore, when any of us were curious about topics beyond our grade level or outside of the curriculum, that was usually discouraged. “You’ll learn that later.”
All of us found that programming helped out math skills since it was a real world application. The math facts come alive, and you understand a lot of the “whys”. For example, an abstract concept like a variable in algebra (a letter symbol in an equation) is part of what you always do when you program: you create variables and do things with them. High volume automation of math provides visualization and patterns that you can’t replicate with paper and pencil, and that provides more insight. Even better, small errors can have huge implications in a program, so your attention to detail changes.
My question for my programmer friends was: “What did you miss out on in your early math education that you think I should provide kiddo exposure to?” Their answers provided this list:
Working with fractions earlier
Multiplication basics alongside arithmetic
Thinking about functions
Sequencing and loops
Abstract data types: lists, arrays
Data operations: stacks (LIFO and FIFO, evaluation, etc.)
Some of these are quite simple and actionable. For example, starting to count with 0 instead of 1 is trivial, and should always be done, in my not so humble opinion. When you start looking at place values, or even counting beyond 10, it is extremely helpful to have started at 0. Negative numbers aren’t that easy to grasp, but you can work with them, especially with number lines. Fractions, multiplication, decimals and variables can be worked into early math exercises, but it takes a bit of thought.
About half the list relate to computer programming, so I wasn’t sure how to handle those. Kiddo wants to learn how to code, but I would really need to gauge his interest and follow his energy there. However, they can easily be broken down into concepts he can understand at 5-6 years old.
That led me to thinking I needed to help him understand math concepts at a simple, intuitive level first. If he could relate a math concept to everyday life, and to things that mean something to him, we could build on that. From there, he would need to learn and apply the concepts, and through repeated exposure, he would memorize rules and facts by doing something with them.
I went in two directions with this: utilizing informal math concepts on every day life at home, and a formal math learning structure.
She has wonderful ideas about counting actions (claps, steps, etc.), adding and subtracting toys, multiplying with groups of objects, dividing up food (this is great for fractions too) and applying fractions from recipes. These were great, and we were able to do a lot with them to help make these concepts intuitive. For example, a kiddo who understands how to divide up chocolate chips equally will have an easier time learning division formally later on.
Food division is a lot of fun because you can really focus on the basics of division, with a payoff of a tasty treat. To start, I gathered 10 chocolate chips and asked kiddo to divide them equally so we could share. Kiddos often have an innate sense of fairness, so he carefully arranged them in two rows. At first he made a pattern and tried to make a symmetrical pattern with the other group. That was fine, but he was worried that one person might have more than the other. We played with the patterns by re-arranging them into shapes that were easier to subitize. Five is a wonderful number for this because you can create unique patterns. Next, I asked him to count each group, just to be sure. Once he was satisfied we had divided the chocolate chips equally, we ate them. Nice!
After we had worked on dividing up food objects into equal parts, either for two or three of us, I decided to see how he would manage a remainder. Instead of 10 grapes, I gave him 11 grapes, and asked him to divide them into five equal parts. He started in by making pairs, but then he ended up with an extra. I left him to twist in the wind a bit, to see how he would manage it. He tried adding it to one group, but one group had three grapes while the others had two. He kept rearranging, trying, going back to his original pairs, and puzzling over the extra. Finally, he set it to the side and asked me for help. “I can get 5 pairs, but there is an extra that doesn’t fit, so I just put it to the side.” I praised his thinking because he had just discovered remainders. “This is exactly what you do when you divide numbers and end up with some numbers left over. In division, this is called a remainder!”
Kiddo wondered what use a remainder might be. Using food as a guide, I suggested that if he was the one divvying up the chocolate chips, he could secretly eat the remainder. This is one of the perks when you cook food for others. You can surreptitiously snack as you prepare. This appealed to him greatly. It turns out, stolen edible division remainders are an effective math learning tool.
I also discovered a helpful homeschooler blog from the Natural Math community, Duct Tape Rocket. I got some helpful ideas on games to get kiddos thinking and working on simple programming concepts. After reading some of the posts on the blog, kiddo and I started playing around in the Scratch Jr. program.
We also discovered CodeSpark Academy, a fun app where kids learn programming basics in a simple game format. CodeSpark not only helps kiddos learn about sequencing, but all kinds of concepts including loops and working with stacks. Kiddo would get rewarded for his algorithms, but he got more points when he used constructs like loops. When he was disappointed he wasn’t getting full stars for a task, we had a chat and worked through the concept. He was motivated to achieve more in the game, so he started to use loops in his own work and was rewarded for it. We also spent a lot of time together figuring out how to do LIFO and FIFO tasks in the game.
Next, I formalized what we should cover based on this list from Natural Math:
Subitizing: The ability to instantly recognize quantities without counting
Counting: Addition and subtraction are based on sequences, dealing with objects one-by-one
Unitizing: Multiplication and division are based on equal groups or units
Patterns are a clear underpinning shared with all of these concepts, so getting kiddo to work more formally with identifying and creating patterns was a natural place for us to work on. Identifying patterns and groups and performing operations on them can be done with just about anything, anywhere, especially if you are out in nature. Subitizing is also a patterns activity. Thankfully, I had a lot of helpful exercises from my kindergarten no-prep lesson plans, so we were able to move forward with pattern and subitizing exercises for a while.
Exponentiating work involved watching videos and looking for repeating patterns in nature, such as in the veins of a leaf, or in the crystal formations of ice. Unitizing was more difficult. I needed to figure out activities that were appropriate for a 5 year old, so I started to research further.
As we transitioned to math activities that were more engaging for my kiddo, I started to notice similarities and patterns. At this point, I was using the book Moebius Noodles as our primary inspiration for math activities. For example, we would have a lot of fun playing around with body symmetry exercises, where one person mirrored the other. We would estimate height by guessing and then building a tower with Duplo blocks. The tower would inevitably collapse, leading to lessons about structure and making a solid base. We played a “program Dad” game where he would direct me around the house by telling me exactly what to do. We found that using a checkerboard tile exercise mat helped a lot. For example, kiddo would tell me to move forward three squares, then turn one square to the right. We played around with grids, working with numbers or drawing items within the shape.
I am a programmer, so playing with grids make me think of arrays. Arrays are used a lot in programming languages as handy data structures. You can use them to store and access objects that you want to interact with in a computer program. When I was learning about arrays in programming, I found simple examples made sense, but when you added more dimensions or started thinking about performance, I struggled. I had trouble with thinking in abstractions. It took a long time to overcome that. The actual concepts, code and mathematics were simple, but my brain struggled to think about something virtual with different dimensions. Similarly, when I started a linear algebra course, I spent too much brain power getting my head wrapped around how arrays were formed, and keeping track of what number was in what row or column. The actual math was often elementary level, but the abstractions were difficult to grok. I felt that adding in thinking about more than one dimension, and thinking about abstractions in math would help my kiddo develop better math skills. If he could get used to thinking about abstractions I wasn’t exposed to until I was in my late teens, what would that do to his problem solving brain?
We would also look for array patterns around the house. We would examine Duplo and Lego bricks, muffin tins, egg cartons, game boards, crayon organizers, drink holders, watercolor paint trays… the list goes on. There are array shapes everywhere, and we would find them and discuss them. What pattern do they make? What could we call this in math or programming? Soon, kiddo was spotting array patterns himself and pointing them out. Next, I wanted to add a bit of structure to his thinking about arrays. To make things more interesting, I would ask him to identify the rows (horizontal) and the columns (vertical). We would play around with that concept. For example with an egg tray, it is natural to set it down so that it has more columns than rows, because that is how it is labeled. But what happens if we turn it so it has more rows than columns? We would identify an egg and its location: 3rd row, 2nd column, and then move the egg tray. Now it is 2nd row, 3rd column. Did the egg change, or did the “address” of the egg change? Turns out the egg is the same, but the way we describe to find that exact egg can change, depending on our perspective.
Games and Arrays
Since kiddo could easily count to 30, he could easily keep track of rows and columns in a 10×10 array. I printed out a 10×10 checkerboard and we started to play with it. I would ask him to help me determine where the rows and columns were. This took some practice, and I told him that when I was taking linear algebra in university, and then later when I worked with tables in HTML, I would remember that columns were vertical, like columns holding up a roof. Rows I remembered as horizontal, like rows on the ground in a vegetable garden. Columns hold up, rows are planted on the side. Next, we would count, making sure we kept track of the row number and the column number, which is the “address” or location in the array. Once kiddo could identify rows and columns on his own, and find a location when prompted, we started to add complexity.
I would set the checkerboard down, and ask him to locate row 2, column 3. He would take his finger, and count down to row 2, and then he would move his finger 3 spots over. While my brain was thinking of patterns in applied math, his brain was spotting a familiar pattern: games. We transitioned from counting and pointing to making simple games together. Every morning, we would take out the checkerboard, and we added in dice and game play pieces. Using dice meant I needed to expand the size of our array to 12×12. Next, for playing pieces we found Lego bricks, bingo chips, and other objects worked, but we settled on mini ring fidgets. These worked best because they weren’t associated with anything else that distracted us. From there, we would take turns rolling a single die. We both started at top left, just off of the grid, and after a roll, you would count forward to match the number on the die and move your playing piece to that position. We would move row by row from beginning to end. The first person to get to the end won.
Next, we added a die so we had a pair, and rolled both dice at once. The number on the left most die represented the row, while the next number represented the column. Instead of moving through the game board from the first column and moving through from row to row, you had to keep track of the row/column pair. This added a lot of randomization, and could cause someone who was “winning” to get knocked back. Now we were thinking and playing and having more fun. To add more randomization and surprise, kiddo would add in extra objects. If you landed on a Lego brick, you had to count the rows/columns of the brick and move to that spot on the board. If you landed on a different colored fidget ring, you had to start over. If you landed on a smiley face sticker, you could skip to the end. Now we were having a lot more fun, but it was hard to “win” because of all the randomization. To move beyond this, I added in two variations. The first was to get him to create the activities from scratch, and the second was to add in zero-based counting.
We were playing with the emerging array game every weekday morning. We would set up on the floor, and we would play around and have fun. When it started to get stale, I asked him to run the sessions. At first, I just had him tell me the rules of the game, and explain how everything worked. It was often muddled, the rules would change to favor kiddo and disadvantage dad, and the lessons about arrays were completely lost. However, I was pushing for engagement rather than mastery, so I didn’t care. On days when I ran the game, we did it according to rows and columns and reviewed what we knew about arrays. On days he led the array games, whatever happened was what was supposed to happen that day.
At first I was concerned he wasn’t taking anything away from the lessons, but when we played the game the way I had set up, he seemed to grasp the concepts more firmly. The random play was reinforcing what I was hoping he would learn. Even though he wasn’t playing by “the rules”, he was exploring the boundaries and being creative. Math lessons aside, creativity with designing your own game with dad has tremendous value on its own. It was actually reinforcing the lessons, even though it didn’t seem like it at first. He was truly owning the concept and chasing down ideas he had as things in the lesson reminded him of games we played, video games, following recipes in the kitchen, etc. There were also disagreements and lessons about playing fair, being a good sport, and other important issues. It was hard at first to not correct and bring him back to the topic at hand, but I found his brain was working on it, even if I didn’t see it at first. If I could just shut up and be a 5 year old with him in the moment, good things came out of it. I realized he was doing what I was hoping for anyway, he was applying the math. He was taking the theory and making it real.
The next variation was to make it more difficult, and to keep track of rows and columns using zero-based counting. One of my frustrations when I was programming was having to switch my brain from starting at “1” to starting at “0”. Many programming languages use zero as the first number, and I found it hard to adapt at first. When I taught adults to program later on, many also struggled with this. Instead of using your programming brain, you were expending energy trying to count to 10 starting at 0. With kiddo, I am a stickler for starting counts at zero, not one. It makes everything easier for him to have that solid grasp of zero. It helped him with place values, with counting, and it helps him with simple arithmetic. Understanding zero also helps with abstract concepts as well. Since he was familiar with starting to count with zero, and using place values to increase or decrease, transitioning from 1 to 0 based counting for arrays wasn’t that much of a stretch.
Arrays and Muffin Tins
To make this come alive, I looked for kid friendly array activities to explain this better than I could. Unfortunately, I couldn’t find anything online other than identifying arrays and looking at rows and columns. Good activities, but not what I wanted. I wanted kiddo to start thinking about arrays as an abstraction, but add the realism by keeping track of rows and columns to access something stored at each address. I wondered about a cardboard fold out activity, like a mailbox. I talked to a programmer friend, and she said her daughter had worked on a “muffin tin” math activity. Each indentation in the pan was covered with cardboard, and the kiddos would take the top off to discover items in each section of the tin. This is easy enough to do, why couldn’t I do that with arrays?
With a bit of thought, I came up with a simple activity. I printed out slips of paper with a pair of numbers to represent the row and column, which would cover the indentations of a muffin tin. Under each address, within the muffin tin indentations, I put in a small toy. I started with Lego pieces and one Lego character. Next, I asked kiddo to find the Lego character. He needed to lift up the paper that had the row/column location, look underneath, then put it back and move on. Finally, he found the Lego character. I asked him what row and column he found the character at. Unfortunately, the location papers were scattered, so we repeated the activity, but with more care this time. To add interest, I changed the location of the character, and asked him to write down the row and column on the paper, once he had found the character again. This time, it worked. He was starting to engage. To increase engagement, I turned my back, and asked him to put the character in a new location, and then I would have to find it. He started to have fun.
Kiddo hid the Lego character at a location, and put the paper locations back on top of each indentation. Trouble was, they were out of order. Instead of pointing this out, I pointed along with my finger by moving by address, rather than physical location. Instead of starting at the top corner where 0,0 should be, I started where 0,0 actually was placed, which was somewhere else on the tin. Next I found 0,1, then 0,2 and so on. Some where in the correct location, but some were not. I feigned surprise and said I was confused. Kiddo patiently explained I should start at the top and work my way down. I suggested that if that was the case, he needed to make sure the addresses of each tin indentation was in order. He quickly shuffled the papers around so that the muffin tin rows/columns matched correctly. I then started and worked my way through until I found the Lego character.
We took turns with this activity several times, and he had lots of fun. He would try to surprise me with the location of the Lego character by putting it in the last position so I had to count all the way to the end, or at the beginning so I found it right away. He would put it back in the same location, or he would try to distract me by saying something funny while I was moving through each item. There was a lot of giggling, and when the papers with the row/column addresses got mixed up, he was quick to help sort them again.
The next day, I asked him to set up the muffin tin activity. His job was to put items in each indentation, and then put the correct address slip of paper over top, in order. We had a couple of oopses with 0,0 and 3,4, but with some clarification he remembered how it worked. This time however, we got Mom to hide the Lego character, and then we took turns trying to find it. To begin, we both started at the top left and worked our way through. The next time though, I surprised him with an algorithm. When it was my turn, I didn’t start at the beginning, I started at the end. Then I switched back to the beginning, then back again and so on. I found the Lego character first, since I was using a consistent approach. Next, I checked at the end, then the middle, and then moved back and forth from middle to end, and once again, I found the Lego character first. Kiddo was disappointed and feeling a bit frustrated that I was winning. He accused me of cheating.
This turned into a wonderful teachable moment where I could explain algorithms.
How do you explain algorithms to a 5 year old? The simplest way to describe it for him was that it was a set of steps to solve a problem. We looked at recipes for food we had prepared together, we looked at Lego instructions, and we looked at simple school assignments. Next, I explained what I was doing, that I was using a strategy called Binary search to find the Lego character faster. Since the array is small, it doesn’t give me much of an advantage, but I had lucked out by winning twice in a row. That had piqued his interest. I then explained that he had intuitively used a good algorithm, linear search, and that had worked well. He had started losing the game when he got excited and stopped concentrating. Instead of using a linear search, he was using a random search which is the least efficient. He might choose the same wrong address several times using a random search. That’s not efficient, or as effective. It is more effective and efficient (ie. find the Lego character faster) by using a consistent strategy.
A consistent strategy to solve a problem is another way to think about an algorithm. When you start to lose discipline due to emotions or getting distracted, your problem solving suffers. It’s harder to keep track, it’s easy to forget, and an opponent with a consistent approach will play better.
To reinforce the algorithm idea, we worked together on using each search algorithm. Since it is a small set of data, both linear and binary search were effective. He wanted to try binary search, so we worked together on finding logical places to divide up the data, and then work within those divisions. For example, he might look at the last address first, then look at the middle address. Next, he would move between those two addresses with each turn. He might then change tactics and try a linear search from the first address to the middle. This is a bit tricky for a young mind, because kiddo has to keep track of rows and columns, as well as the artificial divisions we were making in the grid of the array. To help keep track, we used pencils or longer Lego pieces as placeholders.
After a few days, kiddo was doing really well with the muffin tin array game. He was using a strategy to choose an algorithm, and he was comfortable with zero based counting. One day I sat back and watched him. I felt amazement and joy watching him. Not only was he demonstrating a basic understanding of arrays, but he was thinking about computer programming on his own terms. This applied math, or the “why” is absolutely crucial in learning. It was within his skill level, it was relevant to his interests, and it was fun for him.
We do programming work because kiddo has an interest in it. The TedEd Think Like a Coder series was particularly interesting to him. He had discovered this series on his own, and he looked forward to new episodes when they were released. Each episode prompted a lot of discussions about coding and me trying to replicate what they were doing in the story for him on my own PC. Sometimes I would struggle, and remembering to show him my mistakes, we would talk about how my code wasn’t working, or when I needed to look something up or ask for help from a colleague with better coding skills.
Programming is also an easy place for me to answer applied math questions, and to talk about day in the life applications of math. Sometimes the only way I can start to answer a “why do we do this” question is by working it out in code to show him an example. No, we don’t learn math for no reason at all. Yes, some people work with math every day.
Making it Real With Code
Looking at array addresses of rows and columns as zeroes felt arbitrary to kiddo. While he understood it and got it right most of the time, it really felt like one of those “grown up” things that didn’t make a lot of sense. Isn’t zero just another way to describe “nothing”? To help with this, we worked together on our home address vs. that number represented as a quantity. Next, we looked at my phone number, and then represented it as a quantity. Then we added some numbers together, which made a sum. What was different? Kiddo explained that the number in our home address and in my phone number stood for something unique, so people could find it or phone me. But a quantity was an amount of objects. A sum was calculating the total of groups of objects. We played around with this concept for a while, and stuck to the idea that an address for your house is a sort of unique label. Our neighborhood has free standing mailboxes that are labelled with a unique number that is assigned for each house address, and the contents are accessed by a key. To get the mail from another part of the world to an individual here, depends on various unique number labels.
Next, we looked at array addresses. We aren’t counting items, we are using the location in an array as a unique label. When we use zero-based counting, “0,0” is the first box in a grid. If we use one-based, “1,1” is the label. But what if we used names? How about emojis? Could we use sounds? Absolutely! We could use anything at all, really. However, number labels that follow a logical pattern work well. They are efficient and effective since they are easily understood.
To take this further, we opened up a language interpreter on my PC called irb, for the programming language Ruby. Kiddo had visited a local fish hatchery, so I typed in the following:
fish_array = ["trout", "pike", "perch"]
I explained that this was a simple array of words for fish. We read through them together I asked if he could help add in more. He suggested “walleye”, “goldeye” and “sturgeon”, so I added them to the array. We now had this array of strings, or words for fish:
Next, I told him that I was going to use a bit of code to access the first fish in the array. I typed in:
and the interpreter printed this to the screen: "pike"
“Aha! Dad! That’s not the first one!”
What do I need to do to fix it?
“You need to type ZERO, NOT ONE!”
I changed the code and tried again.
the interpreter printed this to the screen: "trout"
That worked! You fixed the bug!
Kiddo really enjoyed this. We were controlling the computer, and it was important to keep track of what you were doing, because one simple error could give you the wrong answer. I explained that in computer programming, we often call this an off by one error.
We played around with this for a while, adding in array indexes that didn’t exist, to see what error would be produced. Then, I created a larger array, and used an iterator to print through each item, rather than typing in an address. Kiddo liked the idea of looping, we could do things quickly and efficiently, and you didn’t necessarily have to figure it out yourself, you could get the computer to determine what was correct for you.
We had fun. He wasn’t learning these concepts, but I was exposing him to some simple programming basics and explaining what we were doing. He had opinions and ideas about the content of arrays, and what to print out, and I would follow his lead by adding in conditionals, branching, etc. He then asked an interesting question. Essentially, he wanted to know if we could have an array that was made up of arrays. “Of course!”
I muddled around in the code to generate an array made up of arrays, and showed him how we accessed elements in an array of arrays. This started to look to him like our muffin tin game, since we needed to keep track of more than one index or address number. After a while, we had the code looping through each array within the array and printing things out, but that was getting complex and he was getting tired.
I sat back and I felt a bit shocked. Here we were, playing around with concepts I had struggled to learn when I was nineteen or twenty, and my 5 year old kiddo had grokked the basics. He could follow the form, he could play and have fun, and he understood that things could be stored in arrays, whether they were in muffin tins or mailboxes (physical), or in computer memory (virtual).
In software development, there is a programming philosophy called “fail fast”. The idea is that you start by generating an immediate and visible failure, and then you add just enough code to fix that failure. This is a paradigm shift, since normally in software development you write code first, then test to see if it works. Both approaches work, but failing fast has the advantage of helping you be more proactive in developing reliable software, but it also has a side effect: confidence.
Here is an example, from a fail fast software development approach called Test-Driven Development. You want to write some code for a mobile gaming app, and you have your IDE (Interactive Development Environment) ready to go. You’ve sketched out some screen designs, and you want to work on initial game play by placing an object on the screen that can be interacted with. Instead of writing the code that starts drawing things on the screen, you write a test for that code. Then you run the test, and of course it fails, so now you start to write the program code to get that test to pass. It might take several quick attempts of writing program code for that test to pass. Next, you add some variation and elaborate on that simple test by adding more.
Once you are satisfied with your combination of program code and tests, you proceed with your program development. Again, write a new test first with no corresponding program code, run the test, watch it fail, then add code until it passes. After a while, you have a suite of tests that you can run when you change your code, to verify that you haven’t broken existing functionality. That suite of tests provides confidence that allow you to make simple changes, but it also makes you think more about writing code that is more reliable as you are writing it. In short, the computer provides you a level of safety before you commit a program to a build and deliver it for people to look at. It feels really weird at first, but your brain makes the paradigm shift after a while.
FAFO, or fucking around and finding out, is a popular term in online culture, but it also applies to learning. In fact, much of learning is about fucking around and finding out. Kids constantly do this. They try something, they observe the effects, and they learn and move on. Adults do this too, and not just when they engage in crappy online discourse. The scientific method, or hypotethico-deductive model is a formal, powerful, peer reviewed version of FAFO. FAFO, when it is safe, is a fantastic learning tool, and it comes completely naturally. As kiddos, we touch things, we taste things, we poke them with a stick, and we squeal and run away when things go awry. Trying, observing and adapting is crucial to learning. When you start adding knowledge and facts, FAFO gets squeezed out.
In childhood learning, we put a lot of pressure on kids to get things right. Instead of putting a worksheet in front of them, encouraging them to write out answers, then grading them on an answer key, how do we get them to fail fast and build their confidence? For me and my kiddo, using play and technology helps us fail fast, so we build confidence and explore in our learning, before committing to a correct answer. FAFO is a great learning tool, but it’s high risk when you use worksheets. You have to commit rather than explore and find out. That ability to explore wrong, right and indescribable answers before committing them to get graded is key.
…using play and technology helps us fail fast, so we build confidence and explore in our learning, before committing to a correct answer.FAFO is a great learning tool, but it’s high risk when you use worksheets. You have to commit rather than explore and find out.
Feeling Safe is Crucial
Failing fast in software development is possible when you have a safety net. FAFO is fun and a great learning approach when it is safe to do so. It turns out that other things like productivity, quality problem solving and providing feedback also require safety to be effective.
In the corporate world, there is a lot of talk and training about creating psychological safety in the workplace. In essence this means you create a culture and environment where people aren’t afraid to ask questions, make mistakes, or speak up when something is wrong. A psychologically safe workplace isn’t about enforced or toxic positivity, in fact, it is a place where problems can be confronted without punishment. Criticisms about product can be raised without also feeling forced to offer solutions. Outrageous ideas are welcomed and brainstormed together. Tough feedback, especially to leaders is welcomed. The people who need to hear the hard truths welcome hearing those hard things because it makes the product and the workplace better. The article What Is Psychological Safety at Work? How Leaders Can Build Psychologically Safe Workplaces articulates this well:
“Psychological safety at work doesn’t mean that everybody is nice to each other all the time. It means that people feel free to ‘brainstorm out loud,’ voice half-finished thoughts, openly challenge the status quo, share feedback, and work through disagreements together — knowing that leaders value honesty, candor, and truth-telling, and that team members will have one another’s backs.”
In my consulting work, I found that high performing teams had a high degree of psychological safety. They could try and fail without judgment, they could provide brutal, but important feedback without fear of reprisal, and they handled conflict well. I also noticed this in training sessions, especially with corporate clients. When I would set up in an office and participants in the company would start to trickle in, I could sense the fear almost right away. They were also afraid to take part in any of the group learning activities, because they were afraid of failing, and then being judged or punished for it.
In many companies, if management was around in the training room, people were extremely tentative. They didn’t want to answer questions or participate in the vital learning activities. If management left the room, they started to participate. I put a lot of work into my courses to make people feel safe to do whatever they needed to do to learn, as long as it was respectful of those around them. I didn’t always get it right, but I worked at it. Two instances stand out in particular.
In one instance, I had a room of about 60 employees with their managers sitting at the back. The development manager left early on along with several other senior managers. The QA manager though wanted to stay to learn for himself. At the first break of the morning he came up to me and said he felt his presence was interfering with participation levels, so he was going to leave. Sure enough, once the bosses were gone, people started to speak up, and they brought up problems they were having with their software development and asked how to apply coursework to their current situation. We had an extremely productive two days. My third day on-site was partially spent going through a highlight reel of the course with the manager. This was early in my training career and was extremely eye opening.
In another instance, I had a smaller team of about 15 people in a training session. When the development manager would come into the room, everyone went silent and would look at the floor. When they left, everyone would look over their shoulders to see if she was gone, and then they would participate again. She walked in again during a complicated systems problem solving activity and no one noticed. Instead of working as a group, they had asked to work on it individually to make it more challenging, and then they would compare their work as a group. This is a fantastic learning opportunity because you get a lot of perspectives. The right or correct answer with many systems thinking exercises is to generate different, yet valid perspectives. One of the shyest participants spoke up first, and mentioned that one of the prompt categories had been hard for her. It turned out she had misinterpreted the prompt, and wasn’t able to think of anything relevant. Usually when this happens, it leads to rich discussions about mental models, shared language and how different people or groups can interpret things differently. In fact, they may have completely different definitions for words that you use in a different context. The participant wasn’t “wrong”, and in fact, she had inadvertently brought us to our next discussion point, all through doing the work and feeling safe about it. Unfortunately, this didn’t happen. The manager who was standing at the back of the room suddenly spoke up, joking around and mocking the person for getting it wrong. She was instantly deflated and upset, and the tension ratcheted up with the entire group. The afternoon learning was completely ruined, no matter what I did to try to get them back on track.
When kiddos learn, we can put enormous levels of pressure on them, even by accident. When you are a parent homeschooling, this pressure increases. You want them to get the “right” answer, they want to please you, and you can give away a lot with your body language, your tone of voice, your approach, etc. Imagine this scenario. You work through some simple addition facts with small numbers. You carefully review the addition and equals symbols. You help them translate an equation into spoken language, “one plus one equals two”. You help them visualize it with some of their toys. You then have them review it with a fun online video. You then take out a math facts worksheet with 10 questions that have simple equations for them to solve. You read the directions on the worksheet, ask if they understand, and then you work through the first question together. You review, and they seem to get it. They know what is expected, they have the required background information, and they understand the concepts and have the skills to work through the problem. You turn them loose, and what happens? Are they feeling energetic and having fun with a challenge to show what they know? Or, are they freezing up and serious? As a parent learning coach, I’ve had both experiences. At first, we had a lot more of the freezing up and pressure than challenge and fun.
To help make this activity feel safer, I did away with the worksheet. I would take toys or math manipulatives, a plus sign and an equal sign and put them into an equation. I would take 2 Hotwheels cars, set them down on the table, then next add a plus sign. Then I would add 1 Hotwheel car. I had two Hotwheels representing the first addend, and then one car representing the next addend. I would add the printed out equals sign, and leave the sum empty. I asked kiddo to get Hotwheels to fill in the sum. After a bit of trepidation, he grabbed three Hotwheels to represent the sum. Next, I asked him to use his mini whiteboard to write out the equation in numbers. “2 + 1 = 3”. It took a few attempts, but in a day or two we had finished off the worksheet material, but in a way that allowed him to experiment before committing an answer. he could manipulate the Hotwheels or other manipulatives until they felt right, then write it on the whiteboard. Also, the whiteboard was easier to fix mistakes than writing down in pencil and then erasing. Also, I worked with him on how to check his work, so he could feel more confident before asking me to check his answers.
Experimenting with toys and math manipulatives are all well and good, but technology makes experimentation, failing fast and FAFO even more psychologically safe. I have long used virtual simulators, emulators and high volume test automation to experiment and learn about software systems. They are extremely powerful technology tools that allow you to explore and find out what happens to systems when they start to fail. You can then design and enhance your system to be much more robust, reliable and performant under real world use.
One of the first things I worked on to reduce risk in math work was to use technology to help, and make the activity virtual. I opened a slide deck, added in a plus and equal sign, and a bunch of small images at the top. I then asked him to create equations. I made text boxes where he could type in each addend and the sum, and he could add them up above the equation to experiment or check his work. He had a lot of fun with it, and would often ask to be alone to play around. Once he had written down some math facts, he would proudly show me his work on each slide he had created. When he made a mistake, I was very careful to ask him to review his work with me, and we would try to find a learning lesson if there was something to work on, or I would brush it off as a typo. After all, we all make typos!
Next, I used high volume automation using the programming language Ruby. Together, we wrote a function to add two numbers together. He came up with variable and function names, and the function would add the numbers and return the sum. Next, I added in a function that would loop from 0 to a number of his choosing and demonstrate the sum. Each addend would increase by 1, and with a bit of a delay added, he could watch the sums increase as the addends increased. We then repeated this with a subtraction example that would iterate down from a large number to 0.
Experimenting with toys and math manipulatives are all well and good, but technology makes experimentation, failing fast and FAFO even more psychologically safe. I have long used virtual simulators, emulators and high volume test automation to experiment and learn about software systems. They are extremely powerful technology tools that allow you to explore and find out what happens to systems when they start to fail. You can then design and enhance your system to be much more robust, reliable and performant under real world use.
If it works for adults who are solving incredible problems, then it is surely going to work for kiddos who need a safety net to fail fast, to FAFO and feel safe in making lots of mistakes and learning from them.
I found that our virtual work provided a lot of opportunity to fail fast, adjust quickly, and reduce the perceived risk of school work. Beyond that, we could use the tech to FAFO. What happens if you add in a character instead of a number? Well you get a type error. Ok, so what does that mean? We have to be explicit with the computer when programming and give it what it expects. But can a letter be a number? Well, sure.Then we talked about algebra and ended up working on one step algebra. We moved seamlessly from having trouble with simple arithmetic to basic algebra, all because kiddo felt safe to experiment and once his brain wasn’t processing anxiety and fear, we could move in whatever direction his curiousity took him. Technology is a wonderful place to safely play with exploration, but sadly, we seem to mostly try to replicate classroom experiments with virtual worksheets rather than tap into its power to enable and provide safety for judgment free failures and productive FAFO.
One issue we were struggling with in home school was overcoming the fear of getting answers wrong in mathematics. Even at five years old, kiddo’s exposure to counting heavy math activities had provoked some anxiety. He could count to 30, he could identify numbers and do simple calculations while playing games, or around the house, but in a math learning context, he would get anxious and stop engaging.
At this point in homeschooling, I was using Natural Math activities from the book Moebius Noodles by Yelena McManaman and Maria Droujkova. There were fun activities such as symmetry and mirroring, creating functions, having fun making and playing with grids, and much more. The activities were fun, math time wasn’t prone to anxiety and conflict anymore, and we were progressing. We were still at the kindergarten level so I wasn’t overly concerned that we weren’t doing math fact work or determining calculations. However, I wanted to move beyond the form and function and start helping kiddo develop number sense.
Trouble was, whenever I tried to bring in math he had been doing in preschool, he got anxious. He felt pressure to get the right answer and it stopped being fun. We had conquered the “fun” aspect of math activities, but we needed to look more explicitly at numbers and their relationships to each other. We could go through the process of solving math facts, but now we needed to talk about the facts in a non-threatening way. In short, how can we banish the anxiety kiddo feels on always needing to provide the correct answer? I looked to web discussion forums for inspiration.
Cunningham’s law describes an online phenomenon about asking for help. In essence if you want to get help online, you don’t ask the question you want answered, instead, you make an obviously false statement and wait for refutations. If you ask: “How do I do…” you won’t get much engagement. People don’t seem to want to answer direct questions, especially if they have appeared on the forum before. However, if you confidently post a wrong answer, you will get many people pointing out that you are wrong, and providing examples to show you just how wrong you are. Soon you will get the answer to your “How do you do X”, you just had to ask it in a way that people would react to and feel compelled to engage with. The xkcd comic series has a cartoon describing this obligation.
Don’t Ask a Question. State an Incorrect Answer Instead.
When I was starting out as a public speaker at software development conferences, I had a lot of anxiety. Part of it was because it was new and public speaking is hard, but part of it is because the audiences in software development can be ruthless if you get something wrong. Heckling and heated arguments can occur when you get it right, let alone if you mess something up or if you have an incorrect interpretation. At the time, software consultant Brian Marick was very kind to me and offered encouragement and advice. One tip he had was to start off with a mistake in a talk, and get it out of the way. That way you could just focus on your content and not worry about making a mistake. You’d already made the mistake, and it wasn’t so bad after all, so now focus that nervous energy in a positive way.
I found this helpful, and with experience I learned to improvise and incorporate my mistakes into the talk. If I got a fact wrong and I was corrected, I thanked the person for taking the time to help me, and corrected my materials as best I could. Mistakes weren’t so bad, and in fact, they added a richness to my corporate training. Sometimes, this was due to me getting an important detail wrong. At the time I traveled so much I would forget what city I was in, or what company I was currently at.
I also used to use incorrect answers to warm up a shy group. If I had a group that was reluctant to engage with the activities in the training, I had a secret weapon. I’d deliberately pose and then answer a question with the wrong answer, and usually someone in the audience would blurt out that it was wrong. Or at least you could see them move from surprise to chuckles, once they figured out I was doing it on purpose. People would warm up and start adding in ideas about a better solution. It also helped with groups who didn’t know each other. If they were a bit reluctant or shy to collaborate, I would break the ice by suggesting incorrect solutions, then transition to correct examples.
There seems to be an innate need for many people to correct something that is wrong. If it worked with adult learners why not try this with kids?
In the book Moebius Noodles, they discussed teaching subitizing. This is something adults have developed through working through math over a number of years, but many of us weren’t explicitly taught. I liked the idea, but I had never heard of trying to teach it before. I started reading and watching videos about how to teach my kiddo how to subitize. Trouble was, if I held up fingers or a dice or pointed to a small group of toys and asked “How many?”, the old math anxiety would flare up. The fun would stop, and kiddo would be disappointed. I felt that we could easily work from 0-6, especially since we used dice in games and he was familiar with that number range. However, instead of doing it right, I was going to do it wrong and see what happened.
I started with body mirroring activities. We stood facing each other, and I bent one arm at the elbow and held my palm facing up. Kiddo mirrored me, watching intently. Next, I adjusted my hand so I was holding up three fingers. Kiddo mirrored me, watching quietly and intently. Then I blurted out: “I am holding up FIVE fingers!” He stared at me in shock. He didn’t say anything, so I said it again. “I am holding up FIVE fingers!” He gave me a puzzled look, so I repeated myself. “I am holding up FIVE fingers!” He responded this time: “No Daddy, you’re wrong.”
I repeated myself: “I am holding up FIVE fingers!” “No Dad, that isn’t right.” I asked him what was wrong with what I was saying. “It’s wrong, you are not holding up five fingers.” He looked concerned and wasn’t sure how to proceed. This time, I started using silly voices, making faces and hamming it up. “I am holding up FIVE fingers!” Once he realized I was being silly, he started to laugh, but kept telling me it was wrong. Finally, I asked him why it was wrong. “You’re holding up three fingers.” “Pardon?” “You’re holding up three fingers.” “Pardon?” “You’re holding up THREE fingers.” He was starting to giggle now. “What? How many?” “DAD! YOU ARE BEING SILLY. YOU’RE HOLDING UP THREE FINGERS!”
Aha! Finally! Math without fear!
I then asked him to do it. He started hamming it up and holding up random numbers of fingers and deliberately stating the wrong amount. He would ham it up until I guessed and corrected him, and then we would switch. After about 5 minutes, we were doing a basic subitizing exercise that was incorporated into our mirroring activity.
This was a huge breakthrough. We hadn’t had an experience like this in weeks/months. Now we could build on this.
Wrong Answers Only
In our daily work, I started to incorporate subitizing, simple arithmetic and counting. We would use manipulatives like mathlink cubes, Lego bricks, rocks, basically anything we could use to visualize. However, we had a rule. wrong answers only! I wanted to try to get the anxiety out, and model how math should feel. It should be challenging, but it should also be fun. It should be about discovery and exploration, and the mental math and memorization will come with doing, not by being judged on your accuracy.
I deliberately chose math problems that were below his current level, and then had him come up with the wrong answers only. I could tell that he really wanted to provide the right answer, but I would delay that and remind him that we were going for wrong answers only. In fact, the reward here was for the silliest answer. After a while, he would be practically vibrating to try to correct it, and then and only then would I ask him for the correct answer.
Here were some variations:
Try to make me laugh, or make yourself laugh with your answers.
Make them sillier and sillier.
If they want precision, then I have a rule that there needs to be 3 silly answers first, before doing the correct one.
If they are tired of doing wrong answers and want to do right answers, follow their energy and switch it up.
My goal here is reframing the learning. Instead of a winner takes all, high stakes math fact question, we explore and see what happens. Instead of getting a question wrong and fixing the answer, we embrace mistakes, and to try to banish fear. Part of this approach is to get kiddo used to the format of solving problems. Part of it is to overcome anxiety and panic when posed with a math question and being expected to get the right answer, every single time. If you can get the wrong answer and the wrong answer is the correct answer, then you have the capabilities to get the correct answer when you need to provide the right answer.
Switch the Context, Gently
I wanted to tap into the knowledge he had, and to get him to demonstrate it to us, but without any anxiety or fear. I worked hard to be matter of fact and not point something out and wreck the energy of the activity.
Once we were having fun answering with only incorrect or silly answers, it was obvious that he had the capabilities to answer correctly. Once he was tiring of silliness, or if he was starting to answer with the correct answer, I would silently shift. I might verbalize this if it felt confusing, or I might just go with his energy and watch him answer correctly. I didn’t praise him for the wrong answer, or the right answer, I reacted the same way no matter what he did. I was rewarding the approach and the effort, not the answer itself.
After a while, we could do subitizing without fear. I would hold up fingers, he would answer correctly. Then I would get him to do it with me. We would take turns with fingers, dice, toys, cereal pieces, or anything else that was a small number to count. To add some variation, I started holding up 1 finger on my right hand, and 2 on my left, slowly easing in to some basic arithmetic.
If he started to freeze up or show signs of anxiety, I would ask for “wrong answers only”. If he was really starting to get wound up, we would move and work out his emotions together, and return to mathy stuff later on, or the next day. After a while, he would ask to not do silly or wrong answers, and preferred to work at providing correct answers. To keep the positive energy going, I didn’t tell him if his answers were correct until he asked me because he was curious. I was careful not to reward him for being correct only, but to reward his efforts and the process we were doing. If he got one wrong, I built up his self esteem and let him know it was ok.
Finally, we were moving out of math anxiety, and were developing a solid base we could work from. Subitizing, counting activities and simple arithmetic could be completed without anxiety, fear or conflict. This was a major step forward.
In my previous posts, I wrote about issues we had with a traditional, North American approach to teaching and learning math basics. Utilizing popular approaches and activities weren’t working, so we had to try something new.
Natural Math was a lifeline for us to explore learning math with our kid. I liked the philosophy of opening up math, not putting in artificial age-based gatekeeping, that it de-emphasized counting based activities. I loved the focus on exploration, personalization of math and fun. This article, 5 Year-Olds Can Learn Calculus was an inspiration to us.
Reflection and Symmetry
One of the first activities we tried from Natural Math was body mirroring. I would stand and my son would stand opposite. I would move my right arm to a position, he would move his left arm to match me. I would extend my left leg, and he would match with his right leg. Then it was his turn. He would waggle fingers, kick a foot, or pull a funny face for me to match. Reflecting each other could easily devolve into silly giggling and fun, if someone got it wrong or did something funny
To add more variation, I also had him stand in front of a mirror and move himself, and watch carefully what happened. We would add more variation in with movement, such as moving to the side so only part of his body, or half his body was reflected. I would ask him to think like a scientist and carefully explain what he was observing. I was cautious with feedback, and I praised whatever he came up with. I also started modelling behaviour by doing it myself, and describing what I saw using different approaches. Then he would try and add more to his observations based on what he had seen me do.
My Gen Xer brain didn’t feel like this was really math, but at least he was enjoying it. I started to research reflection in mathematics to assuage my parent guilt, since I didn’t feel like I was doing a very good job in math learning.
After a few days of reflecting fun, I started to hold up a number of fingers for him to reflect as well. He would reflect different combinations of fingers on both hands with ease. I had to be careful though, if I called attention to it with: “How many fingers am I holding up”, he would get suspicious and stop having fun. I also ordered a small foldable mirror for him to play with, and once that arrived, I would put in a Lego character or a small toy, and show him the initial reflection, then fold one side in to increase the number of reflections.
Kiddo would play with that for extended periods of time, looking at things in the mirror, shifting the angle of the reflection to increase or decrease the numbers, and adding and subtracting items to add variation. It was also interesting to see what happened to an object placed in the centre, and how the object itself would get partially reflected. Reflecting half a Lego character would lead to us exploring symmetry. If you don’t get your Lego person exactly in the centre of the foldable mirror, it can reflect in unexpected ways.
Mom is an artist, and she suggested using small colorful and geometric objects to make patterns. Tangrams are fantastic items to use with a foldable mirror. He could make mandala-like reflections using tangram shapes and folding in the mirror. This led to conversations about infinite numbers, and to a topic that piqued his interest: fractals. We found videos on youtube discussing fractals, and we started to look for repeating patterns in nature. He would spot patterns in leaves, in rocks, in certain plants growing in the neighborhood or the river valley and shout out FRACTAL!
Since this was appealing to kiddo, I decided to try to tie fractals back to our reflection work, and found instructions on making a Sierpinski triangle. You draw out a large triangle on a piece of paper, find mid-points in each side of the triangle, and then draw a new triangle within the larger one. You repeat this process as many times as you can.
The Sierpinski triangle was a bit advanced for his learning at this point, and I realized we needed to look at symmetry more. Determining the line of symmetry in an object was intuitive from mirror play, but now we needed to be more explicit. I downloaded drawing and coloring worksheets to help learn more. I started with symmetry drawing exercises where a simple object would be drawn on half the paper, but at the line of symmetry, the rest of the paper would be blank and the child would need to draw it in. They would reflect the drawing in the other axes on the blank half. He found this a bit hard, so I started looking for exercises that were on a grid. The grid helped provide a guide, but the grid also had some hidden benefits. We were sneaking more math thinking we could build on later.
Counting away from the line of symmetry and then drawing a smaller part of the overall shape within that box requires more math thinking. There is counting, but now you are thinking in two dimensions. You need to keep track of rows and columns in a grid. There is counting involved, but the underpinning mathematics brings us to a matrix. Matrices lead us to arrays, and arrays lead us to different powerful abstractions for mathematics and programming. Cool!
Kiddo enjoyed working through the symmetry worksheets. We also found that the side that the drawing was on could have an effect. It was easier if the drawing was on the right side, with the left side blank, while a drawing on the left side with the blank right side left to fill in was a bit more difficult. The further away from the line of symmetry, the harder it was to get right. To get precision he was happy with counting, and keeping track of rows and columns. If he forgot, I coached him to write down the co-ordinates on his white board.
To add variation, especially when little hands get tired of drawing and coloring, we found worksheets that used the grid to make pixel-style art. He declared them to look like retro videogames or that they looked like Minecraft, and he would color in a block, rather than drawing with precision all the time. We also used bingo daubers to color in objects, as well as manipulatives like Mathlink cubes and color counting chips. These required less fine motor effort, but provided more time for variation and play.
After a few weeks, I noticed that our math time during the days was turning into a lot of fun. Instead of dreading it, or checking out when I put the math sign up to help with transitioning, he was starting to look forward to it. There was positive energy, questions, frustration with execution rather than with concepts, and he was becoming comfortable and fearless. Discussions would lead to math in real life, and he would spot symmetry in nature, or point out things around the house. Helping out with cooking and baking in the kitchen would lead to more topics for us to research and explore together.
Things were falling into place, now we needed to build on it.
Thoughts on product development, management, design, mobile and other topics.