Once upon a time my primary editor was vim. I picked it up early in CS1 after hearing about the dreaded emacs pinky and used it at a novice level until I left college.I never stuck in an any single environment for long enough to become accustomed to any default bindings. Eclipse (and family), VS, Processing, Matlab, Notepad++, NetBeans, KWrite, Textmate, GEdit, Anjuta and vim were all about equal with familiarity. It wasn’t until my last job that I had to settle on VIM or emacs for serious development. I decided to learn VIM at a deeper level once I got frustrated with the lack of a context menu and quick edit that I’d grown accustomed to from GUIs. Knowing the basics of navigation and mode changes is enough to get work done, but learning shortcuts became addictive. I didn’t get good enough to play golf, but I did learn the search and replace regexes well enough to do large code refactorings of repetitive exports. I only ever installed a few plugins, so I knew I wasn’t even near the top of hill for efficiency. So now, more than a year later, after living and soaking in the land of point, click and drag editors it is with great surprise that my advanced knowledge of vi bindings has not completely disappeared. I’ve been doing some quick Python and Go on a remote machine so I was in vim for more than just a quick config edit. At first I almost was frustrated again, I couldn’t think of certain syntax and I had lost some of my rc aliases that I’d used by reflex before. But the less I thought about what I had forgotten, the more I used. If someone had asked me how to navigate to the end of the line or change the case of a character I would have blanked. But when I needed to do it, it just happened without a thought. I literally didn’t know what the key was until after I had hit it, and it felt good! I got back in the groove pretty quickly even without my plugins and aliases. With all the fancy column select and multi-cursor goodness of Visual Studio and Notepad++ I thought that I’d lost my touch with just the keyboard. And while it felt good to always be pressing buttons and have a very smooth flow of text, in the end I didn’t actually feel that much more productive. At least I didn’t feel like I was hindered or pushed by my editor to do more than I normally did. VI was great to master while VS is great to use casually.
I think this speaks to the comfort of doing one thing really well to the exclusion of others. As with programming languages, being a poly-editor user won’t ever feel as productive as doing the same thing over and over. But it also won’t let you know what you are missing, the problem and solutions you know are framed as much by your tools as your domain. As glad as I am to have my hands remember VI so that I don’t lose much productivity when doing work over ssh, but I’m much happier when I have my debugger, editor, and build system integrated out of the box.
I was once very against relying on Visual Studio to do magic due to the complexity in debugging the whole process when things went wrong. On some of my first projects I became very frustrated with VS because of its many hidden configuration options and fragmented documentation. I avoided using it for any new projects I set up and did much of my workflow outside of the VS environment with a separate test and version control system. And from time to time I still do find it easier to call the compiler and linker directly for simple, low-level projects (and as a sanity check). But for any moderately complex project, reading sln and vsproj can be just as frustrating as makefiles and custom build scripts. I’ve begun to bite the bullet much earlier on learning the very low level details for the CI/CD systems I use because doing it manually is only easier because it’s slower in the long run. Even my experience with Jenkins is that while a plugin promises to do magic and make things easier I often have to know the secret so I can debug when necessary.
Keeping track of experiences like this is part of the process to remind myself how many different things I’ve done and knowledge that is so far in the back of my brain that I’m not even aware that I know them anymore. If I keep on this track I might even reach the level of mastery where I’ve forgotten more skills than I even knew existed when I started out.