The Learning Game
Reading Time: 12 minutesIt has been said that we are all in a “rat race”, or in a “race to the top”. We even play the “game of life”. So if life is a game, and we are all racing toward a goal, then why can’t life be like a racing game?
In life, we all must learn. From the day we are first born, we learn to eat, breath, sleep, and as we get older crawl, walk, etc. Learning is something we all have to do in life, but this is especially true if you work in the technology field. We don’t just learn by reading books and absorbing information however. We have to apply that knowledge and do something with it.
This train of thought stems from a tweet that I saw from Joe Previte, where we had a discussion on how he likes to compare “learning something new to racing in Mario Kart”:
I like to compare learning something new to racing in Mario Kart.
— Joe Previte 🦀 (@jsjoeio) July 7, 2020
1. Make your map (outline your plan)
2. Stay on track (don't lose focus)
3. Find the flag (achieve your goal)
Once you finish, you'll have new knowledge to add to your belt, and maybe a trophy too!
But learning isn’t easy, and you certainly don’t win the race every time. In a game like Mario Kart, you have other racers, obstacles, and power ups that either help you or prohibit you from getting to the winners podium. Bananas, bullet-bills, and shells come at you from different angles and players, and it is your job to avoid them when racing towards the finish line.
Now, depending on how you look at them, these items can be beneficial to you as a racer, or they can be a hinderance.
Let’s take a look and see what the game of Mario Kart can teach us about learning software development.
The Main Characters
The racer: This is YOU. Mario Kart, as I learned, has different stats per each racer. This is true in life as well. Each software developer has different strengths and weaknesses, and may be better at one thing or another. I like JavaScript and Python. I am good at understanding business requirements and translating that to code. However, one of my weaknesses (for example) is that I don’t know the first thing about dijkstra’s algorithm. We can’t change our natural gifts; only enhance them. We can add skillsets and learn new things, but usually that works out better (for me anyway) when I need to learn them, rather than arbitrarily picking something to learn just for the sake of learning.
The Kart: This is your chosen field (or programming language). I program primarily in JavaScript, while others might choose Java. The right pairing of job and/or programming language can go a long way when it comes to career longevity and job satisfaction. I personally enjoy writing JavaScript and Python, and don’t really like writing .Net or Java for example. However, we may need to switch carts when it comes to different terrain, and the same holds true when switching jobs. Maybe you need to learn Java for full stack work you weren’t doing before. Thats OK!
The Power-Ups
Bananas: You can see these problems coming (lack of time for example), and with proper planning can avoid them. If you get stuck (lets say a bug) you need to make adjustments to get back on track like revert code. Sometimes you have many bananas in your path, and you can shoot them out of the way with a green shell for example, but other times you are so caught up in the race you don’t even see them.
Green shells - You can’t always plan for these issues. Sometimes they just hit you! You might be chugging along, and your child gets sick. Or, your internet cuts out and you can no longer watch that YouTube video to learn a particular concept. In the real world, your boss can stop by and make you shift priorities mid-sprint, and you lose several days of work because something needs to hit the back burner. My favorite example of this is when that sneaky PM (project manager) tries to add more tasks to your Kanban board for the sprint, and you have 2 days left (yes, this has happened to me in the past!). These things come out of nowhere, and sometimes you can avoid them, and sometimes you can’t. Just roll with the punches and make adjustments. Maybe this means de-scoping or scaling back. Reset your expectations, and things will work out!
Red shells - Red shells will hunt you down. You get a glimpse of them in your rearview mirror, and you see warnings. If you are not careful, you get whacked with one. You can keep a trailing power-up (bananas anyone?) behind you to knock it out of the way. Or, you can lean on others for support 😄 . In Mario Kart, you can push past another racer and sometimes those shells hit them! In the real world -ask for help to avoid getting stuck. Call on a co-worker or friend, or do “rubber duck debugging” to help solve a problem when stuck. Sayin the problem out loud helps your brain to better conceptualize what you see on the screen, and can help you sort out all the pieces when you have to explain the problem to someone else.
Blue shells - Ever feel like you are on top of the world and nothing can go wrong? All of a sudden, you see the dreaded blue shell. You are in first place in your race, and this shell hunts you down to knock you out. How do you avoid getting side tracked when pushing towards a goal or when you feel like you are rushing to fix a problem? Slow down, don’t rush, and think about things more deeply before rushing into a solution. I’ve felt pressure to meet deadlines, push more code, and get up to speed many times in life. Sometimes, this comes at the threat of losing my job, or other times the threat of holding the team back on a deadline because of an unfamiliar code base. when things get tricky, you need to sit back, take a break, and think things through. Make a plan, and stick to it!
Bullet-Bills: Mario Kart has these wonderful little creatures that come by and whack you out. They barrel past you at lightning speed and make you spill out of control. Sometimes you see these fast approaching problems (don’t get hit by one!) and can make adjustments. Maybe its a deadline, and you need to de-scope. Other times you are the bullet bill and charge full speed ahead because you are “in the zone”. The thing about these power-ups is that you have limited control. If you are the bullet, you are able to slightly shift direction, but for the most part, you are along for the ride. Got a boss who is ignoring your suggestions and telling you to “push through” a problem? Yep…Bullet Bill. Executive just move up the deadline for a project, giving you less time to work on a feature? Bullet Bill. Did you find a neat trick of module that shaves hours or weeks off a project because the work has been done for you? You’ve just used a Bullet Bill.
Bomb-omb: These power-ups can help you clear out a major problem quickly. Is there a racer in your way, and you want them to clear out? Throw a bomb! However, hang onto this bomb for too long,and you blow up yourself. Bomb-ombs in software development could be third party modules that you integrate into your code. This might be something like a form validator for example. It will save you from having to implement it yourself, but you may find out down the line that it becomes unsupported, or worse, has a vulnerability that now leaves YOU exposed since you used it. Use with caution!
Blooper: These little guys. They come in, mess up your screen, and cause momentary blindness! When it comes to developing code, you don’t even see it coming. You get stuck in tunnel vision. You ever sit and stare and something for so long, that all the code blurs together and nothing makes sense? Well, you have just encountered a blooper. The best way to get unstuck is to walk away and come back to it, or “sleep on it” (the equivalent of driving faster). Have you ever heard the phrase “sleep on it”?It is actually a thing! Your brain does amazing things when sleeping, and connects the dots to your previously encountered problems while you snooze.
I can go into a whole blog post by itself on this, but the tldr version is this - hypnopedia is the study of learning while you sleep, and research has been done which shows that you can learn new languages and music while sleeping. The same holds true with programming. Why? Because the frontal and temporal lobe are both activated when learning music and language, and those same spots are activated when learning how to program. Go look it up!
Mushroom: Ah I love these, especially the golden mushrooms. Mushrooms boost your speed in Mario Kart, and can make you so fast you wind up passing lots of other races. When learning, you can sometimes feel like you are slogging along, not making much progress. But lo and behold, you find a mushroom, and it propels your learning to the next level! You are picking up things quicker, and making incredible amounts of progress on your tasks. What are these mushrooms in real life? Blog posts, courses (paid and unpaid), YouTube videos, and even good old pair programming. When you find a resource from someone else that helps you learn, you’ve just used a mushroom, because it has boosted your understanding in a topic or shifted your thought process in another direction for the better.
Starman: With a Starman, nothing can touch you. You have ultimate control, and everything is in your favor. You drive fast, you can knock things out of the way quickly, you can steer towards anything you want, and no other power-ups can dampen your day. These power-ups are hard to come by. Got a few nights and weekends to code without interruption? Did you take week vacation and plan to learn a new skill? Upgrade your internet to watch and download videos more quickly? Yep, that a Starman alright!
The Grind
Mario Kart, much like life, is a series of repetitive motions to go through each day. In Mario Kart, sometimes you race the same track over and over to get the gold trophy so you can have a perfect record or gain a new kart. In real life, you get stuck on the same bug for days and days until you finally figure it out. Life isn’t perfect, and things come up which gets us stuck. This past week I lost a whole week’s worth of productivity tending to sickness in my house. Stuff happens! You just have to take things a day at a time, and DO NOT COMPARE YOURSELF TO OTHERS!
Let me say it again in case the capitalized text didn’t catch your attention : Do Not Compare Yourself to Others.
There are some people on the internet who like to plug their own courses, toot their own horn, and push stuff out there to make you think a certain way. The internet provides a curated, cropped and edited view of life. No one wants to share their failures. Everyone wants to present themselves as an expert, to make themselves seem smarter than they really are, or more productive than everyone else. They want to show you that they can “hustle” and “grind”. They push out “content” and use the same words I’ve just used 😜.
In all seriousness, don’t believe all you read. Some of these people I’ve just mentioned fall into the following categories:
- Unmarried
- Childless
- Self Employed
- Have a full time job making content for company X doing:
- Paid Blogging
- Developer Relations
- Marketing
Don’t get me wrong. There is nothing wrong with anyone in the above categories. However, they just have more TIME than the rest of us to do things. One thing you may not realize is that these types of people is that they may only be good at one thing. This is a blessing and a curse, but not every person is good at every thing; they either pretend to be, or people’s perception/assumption is that they are.
The Reward
Learning programming is hard; plain and simple. You need to be creative, and you need to be good at problem solving. Programming is much like putting together the pieces of a puzzle, and sometimes you need to learn the basics (put all the edges out) before you can dive into the advanced stuff. And that is OK. Learning the fundamentals of anything is the best place to start. Ever try shooting a three point shot in basketball without mastering shooting fundamentals? Follow through, stance, form - all required to shoot well. If you don’t have them down, you wont be able to hit any shot, regardless of how strong or tall you are.
The same holds true with programming. If you don’t start off with a basic ‘hello world’ and get sometime displayed on the screen, you won’t be able to use frameworks, modules, or other people’s code very easily. Create something! I’m sure you have thought to yourself “wouldn’t it be great to make…” and never know how to make it? Learn! Try it out. See what happens. Start by putting the pieces together. HTML, CSS, and JavaScript are the fundamentals of all web applications (and even some desktop and mobile apps too), and if you don’t understand how they work, and if you haven’t tried them out yourself, no amount of reading or YouTube videos will ever help you.
At the end of the day, practice makes progress. The more you try something out, the more muscle memory you have and the easier it becomes to connect the dots. Everyone can learn how to program (yes everyone). It just takes practice and patience. Programming is a skill that can be learned, and anyone can do it with enough time.
Programmers, start your engines!
Mario Kart is a trademark of Nintendo of America Inc