They once asked a famous Czech mountaineer why he’s doing what he’s doing. Why does he risk his life climbing huge, cold, barren rocks? His reply:
Let’s unwrap that for a moment. Mountaineering, at that level, entails the following things:
- Walking long distances in snow
- Sleeping in a sleeping bag
- Eating low amounts of food
- Having difficulty breathing
- Suffering frostbite
Does this sound like fun?
Of course it doesn’t. But there are different meanings of “fun”, and one of them is the feeling when you overcome a significant challenge in the real world. It’s the “fun” of being in a life-threatening situation, where all your decisions have real meaning, and any misstep can have dire consequences.
In other words, it’s not the same meaning of “fun” as when I say “this movie was fun”, or “it was fun talking to you”, or “let’s play a fun videogame”.
Software engineering doesn’t give you frostbite, thankfully. It’s not a life-threatening situation.
But the thing about software development: it’s incredibly frustrating. Once you’re trying to build — and finish — a real world software project, you’ll encounter these things:
- Failing to solve hard algorithmic problems
- Encountering frustrating faults in your tooling
- Having to redo days of work from scratch
- Trying (and often failing) to understand incredibly difficult concepts on a regular basis
- Reading long articles that turn out to be irrelevant to your problem
- Debugging for hours, with an anti-climax solution (like finding a typo)
And yet, some people insist that programming is “fun”. I’m one of them.
The trick is to accept that software engineering is frustrating. Yes, it is. Nobody owes you an easy, frustration-free experience — especially once you’re past the codelabs/experimentation stage, and into the real world.
Here’s a scenario I’m seeing way too often (in and outside of programming):
- Start doing something
- Encounter a problem
- Fail to solve the problem
- Get angry at yourself
- As a result of your state of mind, become less able to solve the problem
- Go back to #3, or quit.
You see this a lot when people are using any kind of technology: computers, phones, apps, appliances. And of course, you see it with programming, too.
The only solution is to embrace the frustration. To embrace the failures. To try and avoid being angry at yourself. Then, go back to problem-solving. That single thing can separate you from a lot of failing developers.
Just keep going, keep improving.
And at some point, someone will ask you why you’re doing what you’re doing. Why are you sitting in front of the computer for hours on end, biting your lip, staring at a screen full of gibberish? And you know what you’ll tell them.