What separates a professional musician from an amateur? Practice.
There are, of course, many other things that separate professionals from amateurs, including attention to detail, effective mentorship, performance experience, and often a dose of raw, God-given talent. When I was learning to play the piano, I often heard people say “I’ve been playing since I was five years old” or “I’ve been taking lessons for ten years.” I found these statements intimidating.
My first summer playing piano my father offered to pay me $2 an hour to practice. So I spent that first summer playing four, sometimes six hours almost every day. Not only was I earning my first real money, but more importantly I realized that mastering the piano as an instrument didn’t depend on how many years I had “been playing” or “been taking lessons,” but how many hours I had spent with my fingers on those keys, hammering out exercise after exercise.
After that summer I found myself ahead of my peers thanks to that practice time. This virtuosity, however, was only mechanical; a means to an end that itself involved interpreting pieces of music and playing them masterfully.
I believe the same is true of software development and its instruments. The keyboard, mouse, the integrated development environments, editors, debuggers, and consoles we spend our waking hours on are real instruments. We often hear stories of the ragged, genius programmer who wrote all of his or her code in a plain text editor with ancient compilers, tiny amounts of RAM, and many an esoteric hack to placate the CPU architecture of the day. Eccentricities aside, in my opinion we owe it to ourselves to take time to practice with our tools and acquire a mechanical mastery that allows them to become extensions of ourselves, rather than something we constantly fight against as we’re developing software.
If you find yourself battling the default key bindings of your editor, manually adjusting spacing and indentation, renaming bits of code your IDE scaffolded for you, or in a constant search for the “perfect” development environment, it likely means you haven’t taken the time you need to master your environment.
Or that you’re just not using enter name of your preferred, superior editor. Either way, take it seriously and acquire virtuosity in whatever setup you use.