How to Get Better at Programming: Lessons from Competitive Shooter Games

How to Get Better at Programming: Lessons from Competitive Shooter Games

Alright, you caught me! I couldn’t help myself. Once I wrote that article about music and its relationship to programming, I wanted to write about all of my hobbies. Today, we’ll talk about one of my favorite hobbies, gaming, but specifically competitive shooters. There’s no doubt I’ll do one of these for one of my other favorite genres: role playing games.

Table of Contents

Competitive Shooter Expertise

I was born in ’94, so my relationship with competitive shooters starts with Halo. I played the first three Halo games pretty regularly before moving on to games like Gears of War and Call of Duty. Back then, I was a console kid, so all my shooter experience was with a controller: Xbox, GameCube, or otherwise.

Realistically, I wouldn’t say I was competitive in these games. Sure, I played a lot of ranked. For instance, I remember getting stuck at the border of Colonel and Brigadier in various playlists in Halo 3. I don’t think I was ever quite that good at Halo 2. Likewise, I climbed fairly high in Gears of War in the Wingman playlist with a friend. That said, I never went to any official tournaments for these games. I generally just solo and duo queued in various playlists.

As I got older, I transitioned into PC gaming. For instance, I started to get into Overwatch, which was my first PC shooter, at the time of the beta. These days, I still play Overwatch, but I’ve also begun to dabble in Valorant. And, I even sometimes leverage tools like Aim Lab to get better.

In terms of competitive play for these games, I’m pretty mediocre. My Overwatch rank peaked at Masters in support, but I’m a plat player at heart. As far as Valorant is concerned, I haven’t even attempted ranked to salvage what little confidence I have in my performance.

All that said, I wouldn’t consider myself a casual gamer. I tend to take competitive gaming, including shooters, about as seriously as I take some of my other hobbies like music. And since I’ve been playing for so long, I’ve definitely learned a few lessons that I think translate well to computer programming.

Lessons From Competitive Shooter Games

Given what we chatted about in the opening, I’d have to say that competitive gaming has a lot in common with programming. Sure, programming isn’t exactly competitive in the same sense as a sport, but a lot of the ways you can get better are applicable to both. In this section, we’ll take a look at a few lessons I picked up from shooters that transfer well to getting better at programming.

Learn When to Take a Break

When it comes to doing anything competitive, psychology matters. In the competitive gaming world, we actually have some vocabulary in this space. The language varies by game and community, but there are some general commonalities. For example, when you start to get frustrated while you’re playing, that’s known as getting “tilted” or being “on tilt.” The more tilted you get, the more likely you are to throw a game—meaning you cost your team the game.

Ideally, if you want to win games, you need to be able to roll with the punches. In other words, you don’t want to get too mad or upset when you lose. That way, you can quickly put losses beyond you and move on to the next game.

I find this skill to be fairly practical in programming as well. In other words, if you start to get frustrated when code isn’t working, it’s probably a good time to step away for a bit. Very rarely has anyone solved their problem by beating their head on a desk. You’re more likely to waste more time and grow even more frustrated the longer you stick it out. Come back with a fresh head. Better yet, ask for some help!

Make Your Gear Grow With You

When I was a kid, gaming was pretty straightforward. As long as I had the console and the disk, I could play whatever I wanted. These days I’m more of a PC gamer. As a result, I have to make sure I have the right equipment to enable my success. For example, if I want to be competitive, I need to make sure that my mouse and keyboard are responsive. Likewise, I need a monitor with a high refresh rate and a PC that can handle the games I want to play.

In a lot of ways, programming isn’t much different. In fact, as I write this article, I’m using an incredibly slow Surface Go laptop. It’s not my ideal choice, but it works for writing. That said, I could never use this for gaming, and it’s pretty painful to use while coding. If the tools you use cause you fustration, you’re going to be spending a lot more time taking breaks. Getting the righht gear could minimize that frustration a bit.

That said, I’m not here to be an elitist and say that you need all the best equipment to be a coder. Much like when I first started PC gaming at 6 FPS, you might be coding with a hunk of junk. That’s totally okay! We all start somewhere. In fact, I probably should have mentioned this tip in my music article. After all, I started with a cheap starter horn before I knew I was going to get more serious about music. If you’re not sure you’re going to stick to coding long term, it’s probably not worth the investment to get a nice desktop setup.

Learn to Be a Team Player

Generally, in competitive shooters, there is a team element involved. In some games, teamwork matters more than individual play. A perfect example of this is Overwatch where subtle things like regrouping could mean the difference between winning and losing. Meanwhile in more traditional shooters, you can carry a bit harder by being the best player in the game.

Regardless, there is always going to be a team element in competitive play. This can include things like good communication (i.e. where are the enemies and what’s the plan?) or playing a coherent style as a time. Individually, you can contribute to the bigger whole by being aware of your team and the enemy and making proper callouts. In Overwatch in particular, things like hero selection matters, right? You don’t want to run heroes into their counters. Doing so is a detriment to the team.

As someone who mostly codes alone, these team ideas don’t really apply as directly. However, they do apply to various versions of myself. For example, documenting code is important because it helps my future self with development. Similar arguments could be made about technical debt and other things that contribute to work in the long term.

That said, if you work on a team, there are certainly things you can be doing to benefit the greater whole. Of course, you need to keep proper boundaries, so there’s a balance. Generally, I think communication is an important skill that can make you more of a team player. These applies in both competitive shooters and programming because it can alleviate a lot of confusion, and confusion can be the enemy of progress.

Don’t Forget Your Objective

In my experience, shooters are very rarely just about getting picks. In Overwatch, there is no deathmatch game mode beyond arcade. In Call of Duty, there are various objective modes including my personal favorite: Search & Destroy. Meanwhile, Valorant’s main game mode is just another form of Search & Destroy. Also, I’m a huge fan of capture the flag and king of the hill: both of which appear in some form in just about every shooter I’ve played.

In all of these games, playing the objective matters. In theory, you could probably get away with neglecting the objective if you could keep the enemy completely contained, but it usually does you better to do both at the same time. Being able to do both requires coordination and awareness that takes time to learn and develop.

From a programming perspective, objectives matter. A lot of times, you can really get lost in the weeds by pursuing little bugs or features that aren’t contributing to the greater objective. This can cause you to fall behind or worse: break things. Generally, the team will appreciate you more if you can keep your eye on the prize. The way I do this is by making sure the team assigns priority to certain tasks. That way, I know which order to attack the tasks, so I can stay organized and productive.

Funnily enough, I’ve personally thrown games and projects by forgetting about the objective. In the Overwatch world, we have a hilarious term for this: C9. Here’s the context:

https://www.youtube.com/watch?v=yAEOBK7_WjY&ab_channel=GINXEsportsTV

Moral of the story is: don’t forget your objective.

What Else Can Programmers Borrow?

Once again, for my programmer friends out there, how did I do? Did you pick up any new ways to practice coding? Are you interested in exploring competitive shooters? Were you surprised by any of the connections I made?

For my gamer friends out there, what did I miss? Are there other practice techniques that you think can transfer over to programming? Do you do anything like this? How else has gaming helped your programming career?

With all that said, I’m going to wrap this one up for the day. If you liked this article and would like to see more like it, feel free to head over to my list of ways to grow the site. There you’ll find links to my Newsletter as well as our Discord Server and Patreon page. Otherwise, thanks for sticking around!

Jack of All Trades (4 Articles)—Series Navigation

One of the things I’ve learned as an adult is that we’re all whole people. Every single one of us comes to a domain with knowledge and experience in a lot of different areas. As someone who tries to write in a particular niche, I feel like I fail to capture the reality that I’m a whole person as well. As a result, I decided to write the Jack of All Trades series as a compromise.

This series attempts to capture my “whole person” mentality while balancing it with the reality that this is a site about code. In other words, I finally get to talk about my interests while tying them back to ways you can improve your programming! Let’s give it a go.

Jeremy Grifski

Jeremy grew up in a small town where he enjoyed playing soccer and video games, practicing taekwondo, and trading Pokémon cards. Once out of the nest, he pursued a Bachelors in Computer Engineering with a minor in Game Design. After college, he spent about two years writing software for a major engineering company. Then, he earned a master's in Computer Science and Engineering. Today, he pursues a PhD in Engineering Education in order to ultimately land a teaching gig. In his spare time, Jeremy enjoys spending time with his wife, playing Overwatch and Phantasy Star Online 2, practicing trombone, watching Penguins hockey, and traveling the world.

Recent Posts