When I started getting into software development it became apparent that having a place I could learn at home was just as important as my workspace. To that end I designed my desktop computer to work for learning new development skills. A computer and a text editor are all you need to get started writing some code. From there my tool set started expanding.

My Desktop

While a laptop is fine for development work and got me through college and beyond they aren’t as easy to keep up to date. A desktop allows for you to trade out parts either as they fail or as they need upgrading. I built my current desktop back in 2013 and have done one round of major upgrades after a motherboard failure. I have bought my original and upgrade parts from Newegg.

Specs

I built the computer where I could avoid the need for an upgrade as long as possible. To help with that I picked fairly beefy specs from the beginning.

  • Intel Core i7-3930K
  • 8GB Quad Channel RAM
  • 128GB SSD Boot Drive
  • 3TB Storage Drive
  • 2x GeForce GTX 660 SLI Video Cards

Those specs served me well both for learning development skills and some gaming from 2013 up through 2019. In 2019 I had a motherboard failure which meant an opportunity for an upgrade. At that time I upgraded the motherboard, CPU, and RAM. The hard drives and video cards have still been meeting my needs. The upgraded specs were the following.

  • Intel Core i9-9900K
  • 32GB Quad Channel RAM

My IDE

Starting out I wrote a lot in Java from college so I used Eclipse or IntelliJ. Both are good IDE’s, but I have gravitated more towards IntelliJ and other Jetbrains products as I use Rubymine at work. As the number of languages I have worked in has expanded so too did the number of IDE’s to a point.

As of recent I have been using Visual Studio Code for everything that is not Java. The reason is both cost and ease of use. From a cost perspective VSC is free to use. The ease of use comes from being a single IDE that can handle writing code in any language. The wealth of plugins and configurations mean not only can you write in multiple languages but also run and debug in many of them as well.

My use of Visual Studio Code can be seen in multiple of the articles I’ve posted. Most notably my review of the Ruby language and my second post on writing an assembler in ruby. Visual Studio Code makes writing code and examples for articles and to learn new skills easy to do.

Version Control

One very important tool that I had to learn starting out in development was version control. Having not come from a formal computer science background version control was a new concept to me. With help of a close friend who did study computer science I got a quick introduction. I’ve used TFS, mercurial, subversion, and GIT on enough occasions to be familiar. Of all of the version controls I’ve used GIT has become my preference.

As GIT became my preference it made sense to use it with my personal projects. To that end I set up my GitHub account as a place to store and work on projects of high interest to myself. While these aren’t always the projects that I am most active on, they are the ones I would consider myself proudest of outside of work projects.

Virtual Machines

The biggest area of growth in my setup has been how I run Linux. I use Linux, primarily CentOS, for for projects either to familiarize myself with the more common way of doing something, or because it cannot be done on windows. The gap for what cannot be done on windows has been shrinking with Windows Subsystem for Linux, but still not to zero. For running Linux I began using virtual machines not log after building my desktop.

The primary tool I have used for running virtual machines on my desktop is VirtualBox. VirtualBox provides an easy to setup and easy to use way to run virtual machines. Virtual machines provided by VirtualBox are quick to start meaning I don’t care as much if I cause an issue with them.

I have used virtual machines locally primarily for my work on my own OS recently. While I could do the development and testing in Windows, a Virtual machine reduces the risk of harm. That protection from harm is critical when messing with the low level systems needed to build an operating system.

Home-lab

For using virtual machines to test larger applications that need multiple virtual machines my desktop can get a little crowded. I have been on the lookout for a server to use as a home-lab for some time to make spinning up complex infrastructure easier. Recently I was able to acquire a server that was being decommissioned at work. That server became the basis for my home-lab.

The server itself is a Dell PowerEdge R720xd with 16 vCPUs and 128GB of RAM. For storage it has a full array of drives giving a total storage of a little over 6TB. While not a high powered machine able to run a large business, it’s more than enough to run a small number of virtual machines.

On this server I have installed ESXi. That was done both because there is a free version, and it lets me work with a VMware product at home as well as at work. While the free version doesn’t have all the features I am used to at work with a vSphere instance, it covers my needs.

This setup is the one I used for both the Nomad and Consul articles. I was able to easily run a cluster of VMs to support the demonstration of each tool. I have also used this lab to test tools that I am learning for work. Having a server you can physically interact with for connecting a mobile device for testing can be invaluable.

Conclusion

As you can see my tool set has expanded with my time as a developer. Each time I have added tools to expand my skills or ability to work in a new way. If you are just starting out then I would definitely recommend Visual Studio Code. From there you can expand your tools as need them. Not everyone needs a home-lab, but if you do I recommend keeping an eye out for servers that are being thrown out. A good lab can be built from years old servers at a fraction of their original cost while still providing years of use.