What Coding and Climbing Have in Common
Few things give me as much happiness as reaching for the last hold on a V7 bouldering line. The sense of accomplishment I feel having pushed myself (both figuratively and literally up the wall) to achieve this difficult feat offers an almost unrivaled sense of satisfaction.
It reminds me of the thrill I get pushing some new code to production. As one of Unito’s backend developers, I regularly get to see difficult projects that I’ve worked on come to life and get used by thousands of people. It’s extremely gratifying.
Beyond the joy they bring, my two passions of coding and climbing actually have quite a bit in common. If you enjoy one, there’s a good chance you might really like the other.
A problem to solve
I believe there are two types of people: those that avoid problems and those that jump at the chance to solve them.
If it wasn’t obvious, I — and I’d argue most developers — fall into the second camp. Every new development project is a new problem to dig my teeth into. Every new bug is like a puzzle I need to put together.
What most people don’t realize is that climbing is all problem solving. The large problem is always, “How do I get up the wall?” but to solve it you first need to solve several smaller, intricate, difficult problems on your way up.
Whether it’s writing code or climbing up a wall, I always start by making a plan.
- What’s the best way to reach my goal? There are multiple possible answers to this question, but only one best answer. In climbing, the solution I choose has to fit my body type and my abilities. In development, it has to fit the system and structure I’m working in.
- How am I gonna structure my code? It not only needs to work, but the next person reading it has to understand it. Same goes for climbing. Once I’ve decided on a general plan, I need to structure my climb hold by hold so I can move smoothly and make it look easy.
After that, it’s all about iteration. As ol’ Murphy dictated in his law, if something can go wrong it will.
When you’re actually up on the wall, you often realize the line you planned out isn’t quite what you expected. The holds don’t offer as much grip as expected or are further apart than you thought. In development, when we’re trying to fix things, we tend to break other things along the way. What’s the saying? “You have to break a few eggs to make an omelet?” I’ve broken quite a few eggs.
When that happens, your best bet isn’t to try and force your initial plan through; it’s to reassess the situation and chart a new course.
I tend to try one solution first and then change it until I reach the best solution. In climbing, that might mean switching my strategy mid-climb, or coming off the wall to try again. In coding, it’s about taking multiple avenues towards solving the same problem. You do this over and over until the problem is solved and your codebase isn’t littered with eggshells.
If you love solving problems, not only do both coding and climbing offer you that opportunity, the approach is quite similar.
Technique is everything
A pretty common misconception about climbing is that it’s all about upper body strength. People think climbers literally pull themselves hand over hand up a wall or rock face like Fezzik the giant climbing up the Cliffs of Insanity in The Princess Bride (if you don’t get this reference, watch the movie!). While strength definitely helps, successful climbers rely far more on technique.
In fact, the most challenging routes up the wall are often the ones that require the least strength. Instead, they force you to move your body into strange positions, to balance precariously, or to use inertia to move between holds. This requires technique that can only be acquired through hands-on practice. You can’t just lift weights for a year then walk into a climbing gym and succeed.
There are similar misconceptions about software development. It’s all a formula right? You learn it in school, watch a few YouTube videos, and you can code anything. Just power through.
This isn’t remotely true. Developers hone their coding chops by spending months and weeks coding. And most developers will tell you: the bugs you think you’re going to close in no time somehow end up being the most complicated ones to fix.
Only hands-on practice allows you to build the skills and techniques required to overcome these development challenges.
Individual activities that rely on teams
Be honest, when you think of a coder, you picture someone huddled in front of a computer screen in the dark. That’s okay; that actually is how many developers spend their spare time. But when it comes to professional software development, things aren’t quite so isolated.
While coding is an individual action — you, your keyboard, and as many monitors as the business will pay for — all of us rely heavily on our teams. We need others to review our code, to test it and put it through the wringer. We need front end developers to complement the work of the back end team, and vice versa. And we need development leaders to mentor us, to teach us those valuable techniques, and to walk us through complex problems.
What on the surface seems like an individual action, is actually far more of a team sport.
Climbing is much the same. At the end of the day, you are alone going up the wall of course. But all climbers rely on others to improve. Often at a bouldering gym you’ll hear people on the ground making suggestions on how a person can change holds or move on. Beyond offering advice, they’ll often just yell out encouragement. Sometimes when I feel like a fall is imminent, a “Don’t give up, you got this!” from someone on the ground actually keeps me climbing. That extra boost is invaluable.
Of course, then there’s rock climbing where you literally need someone on the ground to belay you — literally to keep you from falling. What better metaphor is there for the support of a team member?
In general, I would say both coding and climbing also have very strong communities. Our personal and professional interests tend to overlap quite a bit. We tend to meet up, share war stories and tips, and generally spend the majority of our time talking about our passions.
Wall of rock and walls of code
Coding and climbing, while quite different on the surface, actually share many similarities. If I can spend my days jumping from walls of code to walls of rock, solving problems and spending time with other members of these communities, there’s just nothing better. If you love one of these two activities, I highly recommend you give the other a shot. You might be surprised at how quickly you find yourself at the top of the wall.