If you are like me, then you spend most of your day in front of your laptop/desktop and a couple of screens. So it makes sense that you use the best tools available to make your life and work easier. This was my goal when I decided to set up my home dev rig to ensure that I enjoy it as much as I can.
So, what is my current setup and what tools do I use to make development as easy and enjoyable as possible? I will start with the hardware and then move on to software.
1. Desk & Chair
My desk consists of a standard, albeit small desk - which is imminently due for an upgrade, and an awesome chair. I seriously value my health and my back so I bought myself a Herman Miller Aeron Chair.
An Aeron chair could set you back between $700-$1200 depending on the configuration and options. Expensive, I know! However, it all make senses if you think of it like this:
$700 - Now, we're not talking about jewelry, or video games, or fancy pants. We are talking about a chair that is going to be sat on while work is done for hours a day for at least a few years. Figure 50 weeks a year, for 3 years (at least) for 5 hours a day (because these are round numbers) that's at least 1250 hours in the first year (and more likely much more) and 3750 if it lasts the 3. That's a 19 cents an hour for a comfortable butt. Invest in your own ass. - Scott Hanselman.
Don't dispair though as there is a cheaper option: you can get a second hand one. I paid around $600/£330 for mine - a fully functional in immaculate condition Aeron Miller chair with a 1 year warranty. There are companies that go into liquidation almost every day and their office equipment gets re-sold. You can grab yourself a bargain without blowing your badget!
2. Computer Hardware
Desk done, now let's move on to computer hardware. In 2012 when I was out looking for a laptop I had the following requirements:
- Something that can last me at least 3 years of rigorous work
- 16GB of RAM
- Latest CPU technology
- Good screen resolution (1080p minimum)
- Good battery life (4hrs minimum)
- SSD - nice to have
- Touchscreen - nice to have
- Not too heavy, as I move around a lot
At the time, summer of 2012, there were only 3 options that could match my requirements:
- The Asus N53JF
- The Lenovo Thinkpad W520
- The MacBook Pro
I will attach their pictures below and I will let you decide:
First the Asus
Second the Lenovo
Finally the MacBook Pro
Based on the pictures above, you will have to "forgive" me for chosing the MacBook Pro but to tell you the truth, there was no competition. The MacBook Pro is a beautiful machine it came with the best specs and the Retina display is perfect with a lot of real estate. The basic specs are:
- Core i7
- 16GB DDR3
- 256 SSD
- Retina Display == crazy resolution
- Very light
- Very thin
- Great battery
I also have a 64GB SD Card permenantly attached which I use for downloads and File History.
All, is not perfect though. The Mac is designed to run Mac OSx and so support for Windows is not great. Actually support for Windows is less than ideal. Bootcamp is usually wildly out of date and the Virtual Machine solutions (VMWare, VirtualBox and Parallels) are both expensive and affect performance.
I eventually ended up with Bootcamp as I wanted Windows to take ful advantage of the 16GB of RAM. The BootCamp drivers have been OK
and I can run Windows 8.1 without any issues. I am missing the multi-gesture feature on my trackpad, but it's a small price to pay. Over the 2 years I have been able to run Windows 7, Windows 8 and Windows 8.1 using the same BootCamp drivers, even if they are outdated. (last update was on 11-Feb-2014).
Finally, if you've never experienced it, the Apple service is awesome, especially in store! That's another reason why I like my Mac, I know any issues (hardware-specific) will be quickly resolved. I know that this is subjective and totally based on my personal experience with Apple. Feel free to have a diffent opinion as I'm not a fan-boy :)
In addition to my MacBook, I have this 24" Dell IPS monitor which (almost)doubles my current real estate. I say almost because the resolution is not as high as I would have liked, but it makes long hours of staring on a monitor much easier. I place my MacBook pro on a stand next to the monitor and I use an external Applie keyboard and wireless Logitech mouse. The setup is good but with 4K monitors becoming more affordable every day, I plan replace my aging Dell with two 4K monitors. But first I need to get a bigger desk #firstworldproblem!
My final setup can be seen below:
I am, predominintly, a .NET developer. I live, breath and eat in Visual Studio. I do my production work on VS2013.3 using the dark theme. If you don't have an MSDN licence, and cannot afford one, then you can use the free Express Editions of VS. Microsoft has done an excellent job in making the express editions first class citizens with full support for most plugins. For cutting edge testing, I use Azure Virtual Machines. I currently have two VMs one for testing VS2013 with the Roslyn compiler and one running VS2014 with vNext.
I also use ReSharper from JetBrains. This is an excellent tool but I have to say that Roslyn is quickly catching up so if you feel brave, you can pass on R# and go for Roslyn. I have them running side by side on my Azure VM and I find quite a few options overlapping. Kudos to the Roslyn team.
Another brilliant tool I got for Visual Studio is NCrunch, a continuous testing tool that analyzes your code at real time and provides code coverage and code testing feedback in a continuous loop.
For source control, I use both Visual Studio Online and GitHub, though lately I started favoring GitHub more, due to the openess and ease of use. And VS works quite happily with both providers. Visual Studio Online is your TFS in the cloud.
VS Online is fine, as long as you do everything the MS way. For example it is quite complicated setting up a unite test agent for nUnit or xUnit whereas MSTest is supported fine. I don't like these limitations. I much prefer the GitHub/AppVeyor combination where GitHub is my repository and AppVeyor is my continuous integration agent. Setting them up is breeze and all my projects use it. Plus it is free for all public/OSS projects. The price for private repos is reasonable at $39 p/m, but not as good as free :)
There is, finally, a suite of other small tools I use to support my day-to-day tasks:
- Ghost: for blogging
- LinkPad: for working with Linq
- Notepad++ : for opening and editingfiles
- Shotty: for taking snapshots on my machine
- ChocolateyNuget: a package manager for Windows. This is a command line tool that points to a massive software package repository and allows you to install any tool/software under the sun. The beauty of this tool is that all installations can be scripted so you can create a custom script with your ideal software and re-use any time you have to setup/rebuild a machine
- Sublime Text: i have had an on-off relationship with this, otherwise perfect, text editor.
I'm sure there are some of other tools I use from time to time, but the ones mentioned above are part of my main setup.
What is your developer setup? Feel free to share in the commments.
P.S Make sure you follow me on Twitter @christosmatskas for more up-to-date news, articles and tips.