I don’t use many tools. I used to think that the most important thing when choosing which tools to use is to use the one that’s most suited for the task. Not every problem is a nail, so put that hammer away sorta thing.
I’ve since mellowed out my philosophy around tools. The reasons why aren’t very subtle at all, and anyone who’s worked in the industry for long enough has probably reached the same conclusions. It comes down to what goes into making a tool suitable for a task in the first place.
In a vacuum, maybe there’s a kind of Objective Suitability Theorem, where tasks can be broken down into discrete requirements and those requirements can be met with precisely built tools. No one works in a vacuum though. The real world is messy, unpredictable, and built in layers by a magnificent number of individuals and organizations.
Nowadays I stick to just a few tools for my day to day. Universal (as opposed to the less flattering generic) over narrow is my approach. As far as hammers go, these are pretty sweet:
vim - all purpose text editor, this is my Blackwing 602
tig - super charged git interface, I use this for staging, committing, rebasing, diff'ing, and generally all things source control related
curl - flexible, portable, and scriptable requests engine
With resourceful Googling, I can get most of what I have to get done with just these and language specific stuff like compilers. What I mostly want to avoid is learning a tool that is so specifically tuned for a task that it’s useless to me in any other context.
There’s one last tool that my developer friends swear by and that’s tmux. I’ve messed around with it once or twice but never truly grokked it. I think I’ll give it another shot in the new year. I’ll be in a better mindset to learn it more deeply, as opposed to where I was when I first started programming and I was bent on learning everything all at once.