What Vise Grip Pliers Taught Me About Programming
This is an obituary for what was the most-used tool in my toolbox: a pair of Pittsburgh brand vise grip pliers - the very ones pictured at the top of this post. The pliers were originally purchased for me by my father when I moved out of his house. They were part of a rudimentary toolbox composed of cheap but good enough Harbor Freight tools for doing basic home maintenance.
Most of the tools in that toolbox came in handy occasionally and wore out after a handful of uses. I replaced what I needed to over the years and augmented my toolbox with new tools to unlock new capabilities. Recently I bought myself a nice rolling tool chest. As I was unpacking various cardboard boxes full of tools and organizing them into their new chest, I realized that only one tool had survived the Ship of Theseus toolbox given to me all those years ago.
Sadly the vice grip pliers were just beyond their useful life. The adjustment knob was so badly rusted that the tool's use required another pair of pliers to turn it. It was time to let them go. I'm not sentimental about my tools, but I couldn't help but to reflect on the astounding number of things I did while using this tool. Here's just a few uses I can remember:
- Various sink leaks fixed in multiple dwellings
- Impromptu bottle opener
- Served a short stint as the shifter on an old motorcycle when it broke on a road trip
- Pulled screws out of tires
- Built an entire bicycle from scrap parts with only a multi-tool as aid - the pliers served as every size wrench because I couldn't afford a wrench at that time.
I am always looking for links between things I'm doing in the physical world and my approach to programming. Abstracting concepts between multiple domains helps encourage well-roundedness and creativity. This technique has been a constant wellspring of innovation in my life even when I was a composer. I constantly had novel sound design ideas not because I spent all day composing (that's a good way to write dull music), it's because I fought to keep some time for adventures, Dungeons & Dragons, travelling, etc. - that's where rich ideas flow from.
So what are some things that my trusty vice grip pliers have taught me?
Know your tradeoffs and why you're deciding to make them
In the example of using my pliers as an impromptu socket set there were few tradeoffs to consider. I was dirt poor when I was working on the bicycle. I had salvaged enough parts to build an entire bike but was limited on tools. My finances were paycheck to paycheck - each month I earned enough to pay rent, buy food, and get enough gas to get to work (which the bicycle would help remedy). The tradeoff was simple in this case - the pliers would serve as a wrench but either strip the fuck out of or otherwise mark up the bolts. Seeing as how a bike with ugly bolt heads is significantly better than not having a bike, I moved forward with my plan.
This lesson has come up multiple times in my programming career. In an ideal world we'd all be writing the sexiest, newest versions of every language. In the real world there are tradeoffs - deadlines to be met, products to be rolled out, bugs to squash. I do two things in these situations.
First I push back on deadlines. Deadlines are rarely as strict as they're made out to be. Even if there is a hard deadline, a house can't be built in a day just because the architect wants it to be so. These situations can have knock-on effects, poorly created code will hamstring development every time future development work has to be done on it.
Second I make the fast and ugly tradeoff if it's a guaranteed one-off. A good example of this might be something like a script that batch renames a bunch of files on users' machines while transitioning to a new version of software that needs a different naming format. The script will be used one time by each legacy user and then never used again. In situations like these there isn't a downside to stripping a few bolt heads as long as the code holds together.
I've met a number of programmers who would vehemently disagree with point #2 out of some attachment of ego to the code being written. It's good to hold ourselves to a high standard of workmanship in code, but it's ideal to be able to adjust this standard based on the use-case.
The programmer's creativity, not the tool is usually the limiting factor
Bash is a shitty command language - but can you really say that you've maxxed out it's possibilities? My guess is no. I've been using Bash extensively for years now and am aware that I've only scratched the surface. It's intimidatingly broad. Perhaps the analogy isn't fair since Bash is more like a toolbox than a tool. What about
git? With some minimal scripting I once created a command that would print my commit messages from yesterday (or Friday if current day is Monday) under headings for each relevant repository. Why? I have the memory of an ant and could never remember what I worked on the previous day during daily standup meetings.
My point is this - even something as seemingly simple and taken-for-granted as Bash can give a knowledgeable user incredible powers. Even if you never plan on using Bash for anything more than navigating around files - apply this concept to whatever stack you're working on. All tools have limitations but most of the time all but the most ambitious aspirations are achievable by applying a little bit of creativity instead of yet another tool. Limitless computing power and memory has made us weak and unimaginitive. The current generation of programmers risks succumbing to this trend of consumerism instead of expanding their creative potential.
Rest in peace, vice grip pliers. You served nobly from about 2008 until 2022. You were born low-of-status but aspired to outwork your peers that were born with every advantage available. You were an inspiration to me and were the magic wand through which I manifested many ideas into matter. You've been supplemented in my tool chest with a new pair of Husky brand pliers that will fulfill your old responsibilities but probably not give me any more life lessons, as I now own a socket set and various wrenches.