snow and sandwiches

Day 28 of 30. Snow is on my mind today, and only partially because it's falling from the dark Copenhagen sky as I write this. This may sound like the most Canadian thing to say, but since we moved to Denmark one thing I've missed is snow.

To me, snow is the true sign of winter; it blankets the world, rendering it peaceful and quiet; it's a great tool for play, whether sledding (sorry, tobogganing) or building snowmen or flapping out snow angels in a massive drift; it brings memories of skiing and camping and snowshoeing and being out on big, open, frozen lakes.

This baffles most non-Canadians I've met, and even a good number of Canadians as well. For many, snow is somewhere between an inconvenience and an imposition. It gets all grey and slushy and gross in the cities, it soaks your boots and clothes and leaves you shivering, it takes great effort to shovel out of the way, it's hard to walk in. Fair enough. I suppose snow is one of my favourite shit sandwich flavours: it's a challenge worth the effort.

Sometimes people ask me what being a software engineer is like, why I enjoy it. Reasonable question, and I'm happy to answer it, but it doesn't give a complete picture.

A more interesting question: what's hard about being a software engineer? What are the challenges? A few that jump to mind:

Being an interpreter. You are, in a sense, an interpreter between the real, messy world and the tidy, precise machine world. Most of the time, software engineers are tasked with building systems to represent something in a domain they know little to nothing about, for people who know little to nothing about software. Maybe it's law, or HR processes, or e-commerce, or telemedicine. This is a corollary of software eating the world: the world consists of non-software fields and problems that suddenly need to be software-ified.

Finding deep focus. As a software engineer, you need deep focus. Unfortunately for you, open offices have become more and more the norm, despite the negative impact they have on focus and satisfaction. It doesn't help that the modern office environment is also rife with notifications and other micro-interruptions. At some point, you'll need to negotiate boundaries around noise, communications, or remote work, just to get the focus you need to do your job. This is related to being an interpreter: software engineering is a relatively new field, and you'll need to help others around you understand what you need to do it well.

Constant knowledge churn. It can feel like each day brings new web frameworks, new architecture best practices, new cloud resources, new data engineering tools, new buzzwords, entire new specialisations of software engineering. You can't keep up with all of it. You'll have to pick the right parts to keep up with, separate the interesting parts from the faff. Most software engineers I know really value employers that support their learning and growth - partly because it's rewarding to learn and grow, but also because it's essential in this field.

What's your snow? Every field has challenges. Every job has drudgery and toil, even the exciting ones. I lived with a National Geographic photographer many years back, and once saw him try hitting a bowl of water with different kitchen implements for two hours to get the right splash. There may be many awesome and rewarding parts of being a National Geographic photographer, but his ability to see hitting that bowl of water over and over again as an intricate design puzzle to solve is why he does that job, and I don't.

The question isn't just whether you can tolerate the challenges. It's whether you can learn to love them, to find joy in the parts that most others don't. To see the snow as something to play in and marvel at, not something to trudge through or gingerly step around.