On Configuration

One question I get a lot is, “are your dotfiles published anywhere?” For some reason, people want to know how my computer is configured. What’s the secret sauce that keeps me productive?

As programmers we are voyeur-tinkerers. We study our colleagues’ work environments and adjust our own in response. What works for them might work for us too.

Settings are there to be set, and smart people surely aren’t satisfied with the defaults. The older I get, though, the less interested I am in fiddling with settings.

For well over five years I was a die-hard user of Zsh, a souped-up command line shell. But last year I switched back to Bash, the plain vanilla shell that ships with nearly every Unix system.

Most people who trade up from Bash to Zsh never look back. Zsh is an improvement in nearly every way: better tab completion, friendlier syntax, and a slew of shortcuts that make life in the terminal much more tolerable.

But after years of Zsh, I was utterly lost every time I found myself back at an unconfigured Bash shell on another machine. Zsh’s shortcuts spoiled me to such a degree that working without them was unbearable.

And so when I switched back, I ended up deeply learning about all the functionality built into Bash. Stuff you can use everywhere without any configuration.

What I discovered is that in many cases, my ability to adapt to a foreign environment without frustration is more important than the benefits of configuring a local environment to suit my whims. And that being able to quickly recreate my environment from scratch is an asset.

Looking back, I can see the trend started when I bought my first Mac in 2001. It accelerated in 2004 when I started programming with Ruby on Rails. Both systems are designed with thoughtful defaults that free you from tweaking things and let you focus on getting the job done.

The next time you adjust a setting, think twice. Sometimes it’s better to change yourself to appreciate the defaults than to change the defaults to suit you.