I don’t use vim or emacs, but for some reason whenever I used to read a vim or emacs article or blog post, I used to download, install and spend the rest of the day reading books, manuals and playing with the editors. I’ve done this several times in the last few years with each iteration making a more firm resolve to switch to vim/emacs for my day to day tasks. However, I always ended back at Visual Studio.Net/Eclipse/Notepad++ as the tools of my day to day work. For some reason I always felt inferior to all the Guru* Hackers** using vim and emacs and having this crazy productivity and superior intellect. Why couldn’t I be part of this “elite” club? The same holds true for several other areas as well, for e.g. downloading Python, Ruby, J and spending the day learning the language only to forget the next week.
All this kind of reminded me of my experiences with finding the perfect weapon while playing Call of Duty 4 over the past year. I spent 3 hours a day almost every day for the past one year playing this game, reaching the max prestige level (the “elite” club) in the multi-player version. I became really really good at it and could kick a lot of ass no matter what weapon I was using. But I remember when I started out and I really sucked, I became obsessed with finding the perfect weapon with the perfect set of perks and addons. I used to wander the forums asking people about which weapons and perks to use on which map and what the best tips were etc. Thinking that having the perfect weapon would make me a good player. In the end, the only thing that mattered was all the hours I put in to learn all the maps, routes, tricks and my ability(I like to think). The surprising thing was that once I mastered the game, it didn’t really matter what weapon I chose, I was able to adapt any weapon and do a decent job.
Based on my experiences with the game I started thinking about why I felt I needed to be using vim/emacs. I realized that I was really efficient at doing everything that vim/emacs claimed to do using my own toolchain. And I didn’t really need to un-learn the toolset that I am the master at and pick up another toolset because a lot of people claim that it’s only way to do it right. The same applies to my language/platform of choice (C#/.Net) and my OS of choice (Vista). For some reason I was giving more weight to the opinions posted by people on the Internet than to my own experiences. I have no angst for the vim/emacs folks, they’re probably folks whose first editor was vim/emacs and that’s what they became comfortable with like to share their passion for the tool and help others in mastering it. For me coming from a DOS background with Turbo Pascal and Turbo C++ as the first tools, it’s a different perspective of what an editor should be able to do. I like the deep intellisense that Visual Studio and Eclipse are able to provide, this coupled with Notepad++ for quick edits is all I need right now.
I’ve now made peace with my choice of tools, I know it’s limitations and advantages compared to the other tools and I think that’s more important. The reason I have this confidence now is that I’ve written, read and debugged enough code to have an appreciation for our craft and what it entails and I don’t think I could have gotten this confidence by reading blog posts and books, you have to actually do it to the get confidence to be able to make those decisions. I am going to continue checking out new tools because I inherently love learning new things, but I’ve learned to have confidence in my own choices and to make an objective decision on the tool to use for a particular task.
To summarize, I’d say Pick a tool/language/platform “YOU” are comfortable with, stick with it for a non-trivial time and once you master it, you can do everything that some other tool claims to do, because in the end the tool does not matter a lot, what really matters is the mind using It.
*,** – Really interesting that I spewed the adjective Guru Hackers, “Guru” was what the term used for master programmers before Paul Graham popularized “Hacker” as the de facto term.