In order to be really good at any craft, including software development, you need to be good with your tools. For a software developer, your tools are not physical, but you need to know them well all the same.
- Language
- Compiler/Interpreter
- Libraries
- Editor/IDE
- Version Control
- Tooling: CI, static analyzers, etc.
Any time you need to stop and look up information on your language or libraries, you are distracted from solving the problem at hand. When language features immediately come to mind, you almost seem to be thinking in the programming language, instead of translating from English (or your native tongue). Knowing your language, libraries, and compiler/interpreter well means that you can express your intent more clearly to someone else who is also familiar with the language.
Despite the long-running (more than half-joking) feud between vi and emacs or the more recent arguments between using an editor versus an IDE, which tool you use is much less important than how well you use it. Someone who knows their editor/IDE well can sometimes make changes in a few keystrokes that might take several minutes from someone less familiar with their tool. This might seem to be trivial, but the ability to make substantial changes without stopping to think through multiple steps or erasing and typing in a bunch of code once again serves to keep you focused on solving the problem instead of the mechanics of entering text.
Version control makes it easier to experiment or try new ideas without the fear of not being able to get back to an earlier version of the code. Early in my career, I made certain to commit any changes to version control after I had made and tested a big change. Eventually, I realized that commits before a big change were just as important. (That prevented rolling back a big change from making me recreate all of the small changes that I had made before the big change.) With current version control tool, committing regularly is easy and painless. Getting comfortable with committing regularly, means low friction for anything you would like to try.
Good tooling like testing frameworks, CI, and static analysis tools make it possible to try out ideas with less worry about making unintended changes in behavior. The tools can quickly tell you when you’ve changed behavior. This can prompt you to confirm that the change was intended (and update your testing accordingly), or realize that you’ve broken something while you are still close enough to the change to fix it.
The more you know about these tools, the better you can tune your work environment to make you more productive. More importantly, everyone thinks differently and has different approaches that make sense to them. Without exploring what your tools can do, you may never realize that you are doing something the hard way.