The Nanobox blog is full of articles about technical tasks and projects its users might undertake, but there's only a little bit about us as people. Since this is a people-oriented company – striving to make things easier for the actual people creating neat things in the world – we decided it would be good to change that. So, introducing the Developer Stories series! In these articles, each of us will introduce themselves a bit, and share our stories of how we got interested in doing what we do, and how that led us to where we are today. We hope you enjoy getting to know us a bit better!
In The Beginning
My interest in computers in general started about 20 years ago. I was in the Boy Scout program, and was attending an event for accelerating completion of various merit badges (I believe it was called a "Merit Badge Pow-Wow"...). I had already selected a couple of the "required" badges – the ones needed to obtain the Eagle Scout rank – and needed one more, so more or less randomly selected the Computers badge because it seemed rather simple of the ones listed (I had already gotten both Fingerprinting and Coin Collecting in a "Pow-Wow" the previous autumn). I'm not sure what the requirements look like today, and the exact wording of the time I earned the badge escapes me now, but I know that one of the requirements was a "pick one of the following" type item. The options presented included diagramming a campsite in a paint program, building out a camping trip shopping list in a spreadsheet program, and "Build a program that does something useful". The others sounding boring and rather like what everyone else would be doing, I opted for the latter of those.
Now, I didn't exactly know how to write a program, regardless of whether it could do anything "useful", but I was determined that's what I was going to do, and asked the instructor about it. They told me to get back to them after the classes that day and we would go through the process of meeting that requirement. When I got there, they had pulled up QBASIC in their laptop's DOS mode, and I sat and watched as they built a program from scratch, explaining what each step actually did as they wrote it in. It wasn't terribly complex, given it was built in a matter of a half hour or so. It would accept a number from the user, then calculate all the prime numbers less than or equal to it. It was amazing to see how simple the interface between programmer and computer really is, and I was enthralled with the process. The instructor took down my parents' email address, and sent a copy of the code file to them so I could go through it again later on my own.
From then on, I spent more and more time at the computer, not playing games or exploring the Internet (we didn't really have much Internet access at the time, anyway, as these were still the days of dialup, and I was 11), but thinking up simple projects to turn into code. I went back to that initial example a number of times, and learned quite a bit from it. The biggest takeaway that, apparently, a lot of programmers still miss, is that when calculating whether a number is prime, one only has to check whole numbers smaller than (or equal to) the square root of the number – you'll have already ruled out numbers higher than that, as they'd need to be multiplied by smaller values to equal the number you're testing.
As time went on, I created progressively more complex programs. At one point, I deconstructed the code for both Nibbles and Legend of Lith 2, rebuilding both (well, Lith was already essentially complete for my purposes) to allow the player to navigate one of several maze levels, which both used the same file format to describe the levels' layouts. These mazes included portals and stairways and baddies to fight. The 2D version even included an opponent which you'd have to beat to the finish of each level. They were fun projects, and I have no idea where the code for those got off to.
Eventually, I "graduated" from QBASIC to Visual Basic 6, and now that I had an easily-built GUI to tie logic to, things really took off. I couldn't even begin to say how many projects I ended up working on over the next while, from tiny utilities to projects meant to catalog your optical disk data collection. It was the most fun I had ever had, turning ideas into code into working software; basically telling the computer what I wanted it to do, and having it do exactly that. I had discovered my passion, and life was pretty good.
Of course, no computer nerd in the late 1990s was worthy of the title without at least one computer dual-booted into Linux. Back then, you went with Red Hat (not to be confused with Red Hat Enterprise Linux) or Mandrake, or Slackware if you were really into what you were doing. Not wanting to be left behind, I tried these out, too, and quickly discovered that my beloved Basic was nowhere to be seen. I didn't make much progress there, at first. But then I was challenged to learn PHP.
I had been exposed to a tiny bit of Cold Fusion early in high school, but hadn't dealt with a "real" web programming language before. PHP 3 isn't most people's idea of a "real" language, but by comparison to CFML, it was a workhorse. I really got down into the nuts and bolts, here, and built an entire site from scratch, including a simple forum, a section for sharing uploaded content, and a handful of other features I can't even recall today. This was all in addition to other projects where I was manipulating the code for existing packages. The majority of my development time was now spent with PHP, and this stayed the case until about a year ago.
Things slowed down a lot when I joined the US Navy. Active duty didn't leave much in the way of personal time to work on my own projects. I grew a lot as a person while serving, though, and got to see a lot more of the world in 3.5 years than most of my peers growing up will see in their lifetimes. I'm still kicking myself off and on for moving back to Idaho from Hawaii, as the climate in the Pacific islands was much more compatible with me, but the move home did put me in a good place for a number of other opportunities I probably wouldn't have had otherwise.
Working In The Field
I didn't actually start getting paid to write code until 2011, when I first started operating as a freelance contractor on a website for a local nonprofit. This company has a number of unique traits when compared to other contracts. For one, they are a patient advocacy association, which means HIPAA compliance is a must. Layered on top of that is their structure – the entirety of two distinct boards is volunteer, with nobody pulling a paycheck. These features of the organization mean that the code they need is very different from what would be used or even wanted by other companies with different goals or makeup.
I did a number of other jobs as well, both before and after that point, to supplement that income, and to ensure I had a more consistent source of it. The first of these where I wrote code was for a social media marketing firm in the area, and I worked on internal tools. It was here that I first discovered Pagoda Box, which (as I explained in an earlier article on this blog) ultimately led me to using Nanobox. The project I did for that company was my last really big PHP project before I started to move more into other languages.
Currently, I work for OpenVPN on the QA system for their commercial products. The idea is to adapt the overall system to also test the open source project directly, but the setup needs time to mature under the commercial umbrella, first. It's pretty neat stuff, and I can't really go into many details about it all, here. But over there I've been working a lot more with Ruby and Python, with a healthy dose of Bash scripting to glue things together.
Outside of paying work, I contribute to a number of other projects. I currently maintain support for Nanobox in the Mastodon project, and provide lots of developer support for Nanobox itself both in Slack and elsewhere. I write articles for Nanobox on various topics that come up in the course of providing that support, such as this one! Overall, I'm pretty active as a dev, and wear several different hats.
But I think that's enough about me. I'd like to know more about your developer story. Where did you start as a developer, and what have you done since, that has led you to where you are today? Let us know in the comments, below, and stay tuned for more articles from the Nanobox team on their own Developer Stories!