My climbing shoes
My dusty climbing shoes.

What Climbing Taught Me About Programming

Seven Tips for Continuous Growth

Miki Tebeka
6 min readJul 17, 2023

--

https://pragprog.com/newsletter/
https://pragprog.com/newsletter/

I have been climbing walls (bouldering) for fun for more than ten years now. I find many similarities between climbing and my other passion — writing code. I hope that sharing these similarities with you will help you become a better developer (and maybe climber).

Let’s start!

1. Technique Is More Important Than Strength

A lot of beginners think that all they need is strong arms and a firm grip.
Novices soon learn that strength will get you up to a point, and even then — you can’t climb some low grade routes.

Image of Natalia Grossman from Wikipedia
Image of Natalia Grossman from Wikipedia

If you look at the top-level climbers — they are not that muscular. I climb with my daughter, and although I have more strength than her, she climbs circles around me. Needless to say, her technique is much better than mine.

Once I started working on my flexibility and balance (yoga is your friend), I managed to climb more difficult routes. Learning to work with your feet, for example — heel hooks, will save you a lot of strength.

Taking it to programming: Eschew the common approach of “just throw more hardware at it.” If you select the right algorithms, data structures, serialization methods … you will accomplish the same tasks with fewer resources, which in this cloud-centric world means saving money.

Spend your time learning new techniques, data structures, and algorithms.
Maybe on your next project you’ll find that a suffix-trie will work faster than a map/dict and will take less memory.

2. Select the Right Tools

In one of my climbing lessons, the instructor said — “Sure you can climb with sneakers; it’s just like you can take part in a bike race on foot.”

The right shoes will make a big difference, you can stand on smaller holds, stick to slabs and much more. Breaking in new shoes is painful, it takes time for the shoe to adjust to your foot and it also takes time for you to learn how to adjust yourself the shoe. Some climbers have more than one pair of shoes, each good for different types of routes. And of course the biggest tool is your body, you need to make it stronger, more flexible, improve your balance and much more.

Taking it to programming: Using the right tool is important. Once you have the right tool, you’ll be able to do things you couldn’t do before. For example, an Ops person who masters the command line can do wonders by chaining several small tools or a one liner awk script.

What we hope ever to do with ease, we must first learn to do with diligence.
— Samuel Johnson

It takes time to master a tool, so exercise, exercise. Don’t get discouraged the first time you fail. Which brings me to…

3. Failure Is Built-In

It is rare to finish (send) a route on the first try. Usually, it takes several attempts, unless the route is an easy one for your level.

In some cases, it takes me more than 50 times until I manage to reach the top. And in some cases, even after 50 times I still don’t manage to succeed.

Failing means you also need to know how to fall. The first thing they teach you when you get to a climbing gym is how to fall without hurting yourself.
I’m pretty good at falling, and I also know when it is time to let go before the fall becomes more difficult.

Taking it to programming: In programming, we do not like to fail. But, once you are okay with failing, and are willing to try several approaches before choosing one, you’ll see a much better end result. You also need to reduce the effect of failure, whether it is by investing in testing in the development stage, or by reducing the blast radius in production.

4. You Learn A Lot From Others

I start a route by trying it myself — I like to try and solve the puzzle of how to climb it. Sometimes when I get stuck, or even just by watching someone else climb the same route — I see a different way to climb it (called beta). Sometimes this new beta is better for me, and I manage to send the route.

I have learned many tricks and techniques from other climbers, and it has greatly improved my climbing.

Taking it to programming: Learn from other programmers. Find programmers you love and read their code. For example: I like to read everything the Peter Norvig publishes. His spell checker blew my mind.
You can also find books that cover coding, for example The Architecture of Open Source Applications has some excellent good code examples.

5. Don’t Let Fear Hold You Back

In some routes, the only thing that fails me is courage. The step looks risky, and my mind says, “You can’t do it!”

Once I do take the step and make it — I feel so happy. And if I don’t make it — I know how to fall :)

Taking it to programming: In software, you might choose to go the safe route instead of risking it. Sometimes the safe route is the right call. But ask yourself first, “Am I avoiding a better solution just because I am afraid to fail?”

6. You’re In It For The Long Run

Climbing, like any other sport, is a long and twisted road. Progress is not linear, and some days you feel like you are going backwards.

You need to take care of yourself and try to prevent injuries as much as you can. Sleep and reset are important, as well as good nutrition. In general, take care of yourself outside the gym as well as inside of it.

Taking it to programming: Development is not linear either. Sometimes you fix a bug, only to introduce ten others. Or maybe the new feature you added degraded performance by ten times.

Know that setbacks are part of the process, and plan for them. Also, take care of yourself outside of work. If you work hard but in doing so burn yourself or get sick, all the hard work will be diminished by the sick days you will need to take.

The most productive developers I have worked with go home early, exercise, and have hobbies.

7. Sleep On It

I can try a route many times during a session and fail. Then a couple of days later, I will go to the same route and finish it without a lot of effort.

Also, a route that took me several attempts to climb will seem much easier the next time I try it. The body learns somehow when you go away and rest.

Taking it to programming: The same goes for programming. Instead of banging your head against a problem, try to take a step back — maybe even sleep on it. Don’t be surprised the next day if a solution emerges. I find a lot of solutions to technical problems in my morning walk after a good night’s sleep.

Don’t take my word for it, listen to Rick Hickey. And get a hammock while you’re at it :)

Final Words

I hope you found these insights interesting — climbing is the best sport I have ever attempted. I hope that some of you who read this story will give climbing a chance. All you need is a pair of climbing shoes and some chalk!

Miki’s books with The Pragmatic Bookshelf:

--

--