On programming tools, extensions and IDEs
If you’re involved in software development in any capacity, chances are you have your favourite toolset. If you are a .NET developer, you’re most likely using [Visual Studio [Community or Pro/Ultimate]](https://www.visualstudio.com/" target="_blank). If you are in Java-land then you get pick between [IntelliJ](https://www.jetbrains.com/idea/" target="_blank) and [Eclipse](https://eclipse.org/downloads/" target="_blank). And if you’re an iOS and OSx developer, you have [xCode](https://developer.apple.com/xcode/" target="_blank) (bless you). Web developers are more flexible because they don’t have to compile any code. However, they still have options when it comes to editors: [Sublime](https://www.sublimetext.com/" target="_blank), [Atom](https://atom.io/" target="_blank), [Visual Studio Code](https://code.visualstudio.com/" target="_blank), [Notepad++](https://notepad-plus-plus.org/" target="_blank) etc. And then, there are the exotic tools such as VI, [Vim](http://www.vim.org/" target="_blank), [Emacs](https://www.gnu.org/software/emacs/" target="_blank), .
Most of these tools support extensions, plugins and add-ons. They are supposed to help us do our work easier and faster, increase productivity, throughput etc. That’s every developer’s wish and manager’s wet dream. I’m not knocking any tool. The exact opposite. I stand by my statement that you should use whatever tool/software/platform makes you happy. I have so much software installed on my machine that I lost count (I like new shiny things). If you’re comfortable working in Notepad, be my guest! All the better for you, since you don’t need a license for that. So, what’s the purpose of this post then? Valid question and I’ll answer this next. But first some context.
I usually do my development work either on a fully spec’d MacBook Pro Retina or my Surface 3 Pro. These are fast machines and can handle almost anything you throw at them. They don’t flinch with 2 or 3 instances of Visual Studio and SQL Server running locally. However, I recently got a contract where I have to use the ancient and slow hardware. That's what the client allows on-site. Limited CPU and RAM with no SSDs etc. You get the point. Suddenly, all the bells and whistles I got so accustomed to don’t work. Its only when you’re forced to use crappy hardware that you realise how all these add-ons and extensions can hog resources. The application codebase we work on is small (ish). I would say that it's standard size for an inhouse application. Yet, we had to turn off everything in Visual Studio – ReSharper, nCrunch, WebEssentials etc. Just to get a workable environment.
And you know what? It was liberating in so many ways. For me, it was a chance to decouple myself from platform specific tools. I focused on moving to more cross-platform, lighter toolchains (npm, gulp, vscode, git bash etc). It was also an excellent opportunity to delve deeper into the amazing tools, shortcuts and functionality that come built-in with Visual Studio. As it turns out, these features work really fast and efficiently and get the job done. I expanded my knowledge of third party tools and now have more than one ways for achieving the same outcome. Compiling sass-check, building the solution-check, compiling TypeScript-check and so on! These are skills that I can transfer to any environment and I can expect the same/consistent behaviour.
In the end, the biggest benefit for me, and the one that I would like to highlight in this post, is that I don’t have to rely on heavy, bloated IDEs, tools and extensions to do my job. I still use Visual Studio, but only with the default settings. No add-ons, no extensions. Ok, that's a lie. I had to install [nCrunch](http://www.ncrunch.net/" target="_blank) because the default Visual Studio Test Runner is appaling.
Edit. One of the commenters asked me what my final setup looks like with regards to the tools I use. Unfortunately, this can vary wildly depending on the project I work on, but I'll try to generalise as much as I can. So, let's see:
The specific project I'm working on is an MVC/Angular app. I do all my .NET coding in Visual Studio 2015. I also use TypeScript so that's also .NET. This is still a slow and painful process and there's no workaround for it. However, since this a vanilla install, I take full advantage of the built-in tools for search, etc. All css (sass and less) and a number of compilation tasks are all done through Grunt/Gulp and Node. We also use Grunt/Gulp to run our unit, integration and UI tests. This means I can run them from the command line any time I need to. I can optionally run them from the VS Task Runner, but the command line is much faster. All front-end debugging (JavaScript/CSS) is done in Chrome Dev Tools. We use Git so again, it's all command line, i.e [GitBash](https://git-for-windows.github.io/" target="_blank) with [p4merge](https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools" target="_blank) for merging conflicts etc.
For all other projects, I prefer to use VS Code (where applicable), but I can easily switch to Atom or Sublime. I also love [ScriptCS](http://scriptcs.net/" target="_blank), [NancyFX](http://nancyfx.org/" target="_blank), [Node.js](https://nodejs.org/en/" target="_blank) etc. I think you get the point. It's all lightweight, fast-as-hell tools that run everywhere (or almost everywhere). If I can find a (Open-Source) tool that allows me to jump from one platform to another and still get a consistent behavior, I add it to the list. Note that I'm equally happy to pay for software if this is what it takes to make my life easier and portable. I'm not all about the free :)
Decoupling as many processes from the underlying toolset makes things easier to work with and interchangeable in case some part of the chain fails along the way. Do you know all you need to know about your vanilla IDE? Can you work with Git both from the GUI (of your choice) and the command line? Can you build your project both from the command line and the IDE? Do you see where I’m going with this? To be able to decouple yourself from your toolset, you need to know how things work (to a certain extent). The more you get out of your comfort zone and rely less on tools, the more confident you’ll feel about your abilities to tackle a problem. And you free yourself from specific platforms as much as that’s possible.
What are your favorite tools? Can you live without them?