Why I Warm Up (And Maybe You Should Too!)
Over the past year, I got in the habit of running first thing in the morning. No stretch - just wake up, step outside and go run. It’s weird. I ran cross-country in high school and every practice we would stretch for at least fifteen as a warm-up. It made the whole endeavor seem heavy and eventually made me not want to run any longer.
Last year I read “Living With a Seal” and realized that the extremely fit man training the author didn’t warm up before runs. At all. I could get my head around that. Now I try and run at least five times a week if I’m not surfing or swimming. It’s not far, but it gets the day started.
I would never warm up for work, a place I over which I have marginal control in terms of intensity and volume of work. In contrast, running without a warm-up still affords me control over the pace and allows me to apply my best judgment for when things are ready to ramp up. Coding can be mentally strenuous, and when coupled with all the other types of thinking that comes with a typical development role, you could be talking a lot of context switches and uninterrupted periods of mental strain. It actually seems kind of crazy to just jump into work with no pretext - you can very easily have a sudden, dramatic acceleration capable of veering in multiple directions.
There was a nugget in “The Clean Coder” about doing fifteen minutes of warm-up and cool-down at the start and end of each day. And that resonated. So I started making time to warm-up with a coding exercise each day.
I really like it, for a few reasons:
At least one part of my day is focused on my programming skills. There have been days where I barely code a lick or think deeply about a programming problem. It used to be upsetting if I spent the day in meetings or didn’t get to work on a problem. Coding is a familiar space for me and my brain, and it’s where I’m likely to find a sense of flow and rhythm. My job doesn’t owe that to me on a regular basis, so I can get my fill even if the day is about to rule out the possibility of making time to code.
Warm-ups tend to be algorithmic problems, which keeps that mental muscle sharp. How many times am I challenging myself to think algorithmically in a typical week? The answer is not many.
Personally, I think there’s a specific pleasure in doing deeper programming work and making the code as clean and efficient as possible. I realized I would only consciously sharpen my skills around algorithmic thinking if I was looking for a job or randomly chanced upon a class that piqued my interest. Isn’t that silly? For a programmer, that’s silly.
Recently I have been wanting to learn Rust, and I had great intentions: I would browse code bases and compile stuff, I would read articles here and there, but I was stalling out on it. So I’ve decided to use Rust as my language of choice for my warm-ups. I use that time to learn the intricacies and foibles of a new language other than the one with which I am a bit too comfortable. Working with a different language helps hold a mirror to the things which I take for granted in Javascript. I appreciate that.
Finally, something I think ties the previous points together on a higher level: Life should be about growth, and you can’t always count on your job to challenge or grow you. There are going to be times when moving the project or company forward is more important than what you feel keen to work on. Having a small practice centered around the core premise of the job helps keep the momentum going through those times. Essentially, warms ups are a form of self-direction for a programmer, a skill worth developing in its own right.