How I Met My Development Environment
3 min read
Years ago when I started my journey into the wild world of programming I was faced with an issue. I needed a developer environment. Problem was I didn't even know what that meant. All I knew is that you're not supposed to use Windows (which as it turns out is a bit of a misconception and a holdover from a bygone era but that is another story). At the time, the advice of my peers and the requirement, even, of programming schools and bootcamps was to purchase a Mac.
And to this I said, "No. For I am not a man of means, and already have I spent a lot of money on this very nice PC here."
So, I moved on to the next recommended option: run Linux in a virtual machine. This wasn't too complicated a task. I was already familiar with "iso" files from gaming and I'd even installed Linux systems before. Download VirtualBox, install the system, and presto. It worked! Except... It was kind of slow. It wasn't unusable by any means, but it was just slow enough to be noticeable. This is the kind of small thing that drags along my consciousness like a shrimping net of frustration until it bursts. This wasn't good enough. I wasn't comfortable. I wanted better. SSH-ing into it directly was a little better but there were still delays. To cap it all off, I kept running into technical issues. So the search continued.
Next I discovered "docker" and "vagrant". I made an earnest run at docker, but I found it confusing and overwhelming. Why did all my files go away whenever I stopped it!? Why couldn't I access this port!? Over the years I learned Docker's not nearly as complicated as I thought; I was simply trying to use it incorrectly. I now use it rather frequently for various situations. Vagrant, on the other hand, was almost perfect. Except again, my ignorance led into confusion and frustration.
My lack of general knowledge of programming at that point, a lack of understanding of virtual machines, container confusion, not understanding isolation... All of these things and more compounded with trying to force myself to adopt and learn completely new technologies as quickly as possible caused my brain to lock up. I was taking on too much, too fast, and nothing was clicking.
Eventually, I ended up dual-booting Linux. It worked great. The downside was, well, the actual booting. Moving between OS's took at least a full minute. This isn't a long time, but over and over and over again? Shrimping net.
As luck would have it, WSL first reared its head around this time. Still in its infancy but with decent promise, it provided a sort of bridge. I could do a lot of what I needed using WSL. What I couldn't, I'd jump into my full OS. There were setbacks during this period. WSL appended Windows' PATH for "interop" work. While this might seem nice, it meant that the two environments were not isolated. In the long run, it ended up forcing me to reinstall my entire operating system more than once because it made such a mess of my PATH.
Eventually everything settled into place. WSL2 brought some excellent improvements, and the newer builds of Windows can even run graphical Linux apps. Through trial, error, and failure I gained better understanding of all sorts of different tools and systems. It wasn't the most elegant or painless way to learn. But, taking the hardest paths in the past has helped me to identify easier paths forward in the future.