A toolbox is your collection of tools to solve a problem set. Most people own a literal, general purpose toolbox. Some people own several toolboxes, specialized for solving specific domains. I refer to this as the toolbox metaphor: a collection of different tools for solving problems. Though I frequently use the toolbox metaphor when talking about skill building, it applies to the tools we use to self analyze as well.

When it comes to programming, we often have a non-literal toolbox as well composed of the different languages, frameworks and libraries we know. Just as it’s valuable to own a hammer and a wrench, it’s valuable to know different kinds of programming languages and frameworks.

I usually recommend people know at least two languages: a functional-esque scripting language for quick tasks and prototyping, and a more traditional heavyweight compiled language for speed and detail work. This might be Javascript and Golang, or it may be Python and Rust. The specific languages matter less than the differences in the tools.

Sure, you can use a wrench as a hammer in a pinch - but most wrenches make terrible hammers. In the same way you may know a more general language and sure, you can force it to fit every use case but it’s probably not great for many of them.

As we gain mastery, we tend to understand the subtle differences across slightly different but similar tools. Not all hammers are the same and in a talented hand things like hammer weight, size, strike face and material can make large differences. The metaphor extends to programming languages too: even similar but different languages can have value in your toolbox. Python and Julia, Rust and Golang.

Just as a skilled craftsman has preferred tools, you will too. Preferences are fun to argue about loudly on the internet, but ultimately it’s only important that you understand the limitations of your preferred tools and have a sufficiently large toolbox.

Blame, Shame and other Tools

Blame and fault assignment is a framework. It’s a tool for assigning fault, responsibility for failure, to a given entity. Sometimes blame is really important - it helps us determine failure. Sometimes blame is harmful and it distracts from solution finding.

Just as we recognize a toolbox can be a box of literal physical tools, and it can be a collection of virtual tools, it can also be a collection of mental tools. Blame, shame, honor, duty and so on are all mental tools. We use these tools to understand our external world and our relationship to it.

Many of these tools run into the same problem that hammers do - when you’re holding a hammer, everything looks like a nail. In practice blame and shame are blunt instruments that are easy to mis-use. Knowing what tool to not use in a situation is frequently more valuable than knowing the correct one. Just as the hammer can go back in the toolbox and be left unused, so too can blame.