About Me
I'm David Oliver. When I was a kid, I watched my friend build a PHP website for our Counterstrike clan, and as I watched him I became enthralled by programming. The idea that I could use a few fairly simple constructs to string together an endless array of programs which expressed exactly what I wanted, myself in essence, was enchanting.
I tackled HTML and CSS first by following, "Dave's HTML Tutorial" which concluded in my downloading of some malware from the site. After that, I dug into JavaScript and then into PHP. I stuck with PHP for several years throughout high school, and tinkered with Java in my Computer Science classes. I spent time on https://www.hackthissite.org and other similar hacking sites in high school. At the time, I was hell-bent on learning how to hack (security sense) which was ultimately a vehicle for teaching me a lot of programming concepts. I tried to write my own web proxy so that I could get around Websense at my high school and watch https://www.newgrounds.com and https://www.albinoblacksheep.com . After spending a while trying and failing to make things work on my own with regular expressions, I ended up downloading someone else's open source web proxy and studying and hosting that; it was a good learning experience.
At the time, we didn't have websockets, and I didn't have a great understanding of the programming world outside of PHP. So, I became sort of obsessed with building real time chat in PHP. The way that most people did this back in the day was through "long polling" which basically meant that you'd hang an HTTP connection from the server side without sending a complete response until some piece of real time data was received (i.e., the next message). This let you abuse the fact that HTTP is actually built on top of TCP which is a "live and stateful connection".
After high school, I landed what could maybe be termed an internship at a local store called MegaWatts or MegaMacs (https://www.megamacs.com). I spent the summer prettying up their site a little bit (I'm not much of a designer, but it needed a lot of help visually) and adding some organization. We decided to go with infinitely nested popout menus for the site's main index for some reason (probably my idea) which got me playing around with recursion. I also didn't really understand how the site was being rendered and decided to use PHP's output buffering to basically capture and change parts of the site I was interested in (a terrible idea). At the time, I was also still writing code without any indentation (psychotic?). And, it was working on that site that I got my first experience with Linux and Apache (I still remember the site going down when my senior dev wasn't there and digging through VHost configurations with afind
+ grep
incantation trying to figure out what was going on). I also didn't really understand database indexing at the time, and ended up building out my own indexing schema as a separate table in order to support some pagination work that I was doing when I figured out that LIMIT queries in MySQL with offsets get progressively slower as you increase the offset on the query. It worked, and I made a fancy loading bar for it.
Anyway, at the end of the summer, I was pretty pleased with myself and I came back in one last time to pick up something that I had forgotten only to be lectured by the senior dev because he had discovered that none of the stuff I had written had any error checking, testing, documentation, good naming conventions, or anything other than raw behaviors, really. At the time I saw the rest of it as being a waste of time.
I went to college and studied pure mathematics and computer science. But, in college, I had some great math professors, and I started learning how to think well (and which battles to fight). I really enjoyed Modern Algebra, Number Theory, and Combinatorics. I spent a lot of time tinkering with math problems even outside of what was required by my classes.
During college I had interned at a place called Educational Concepts (now called VetMedux) and did more PHP work. Among other things, they wrote a veterinary journal on Drupal; I learned Drupal and helped them introduce new features via Drupal's plugin system. I attended my first programming conference and got to learn a lot about Drupal quickly.
I really enjoyed that job and the team was close. At one point though, they asked me to programmatically parse contents of a medical book to be converted into a different medium. I flipped a little bit and started thinking about how introducing bugs into that parser could actually result in incorrect dosages being prescribed and whatnot. I think that fear coupled with some of the thinking that I had been doing about automated testing started pushing me to think about quantifying risk and what we can do with formal verification -- two things that I still think about a lot to this day.
After Brief Media came NutraSpace, where I was first introduced to smalls startup culture. I also loved that job and had a ton of fun tinkering with encryption for our healthcare agent. I spent a lot of time digging into open source libraries, and I learned a lot about how to read code well. I also got on a kick of really digging into Git's features, and a fair amount of expertise. I also formally ditched PHP and started writing C and Python on the backend. I actually built a websockets server in C bound to an embedded Python instance. I also was working on a fitting tool for EVE Online which would allow users to preview their ship's stats before shelling out money for equipment in game (the websockets server was the backend for the fitting tool). There were already a lot of fitting tools out there, but at the time there weren't any complete ones that were fully web based or that got close to matching the look and feel of the in game interface. This was also kind of a nice conclusion to my "real time" obsession from way back when; I had finally written the real thing, and pretty close to the metal, too (I was fairly obsessed with performance at the time). All the while, at NutraSpace, we were working with MeteorJS and I started getting familiar with Node.js.
Unfortunately, NutraSpace ran out of money, and I got laid off, and EVE Online released an in game fitting tool that was nearly identical to the one that we were building.
Next was a contract role at AT&T hacking out fairly idiomatic JS (actually, I used CoffeeScript) and then I worked at a company called W Energy working on Oil and Gas accounting software in Ruby on Rails. It was my first exposure to Ruby on Rails, and, to be honest, even though I work on a Rails stack now, I've never been all that blown away by RoR. But, in any case, it consistently gets the job done. During that time I started tinkering with PureScript, and I was still thinking a lot about formal verification and quantifying risk. PureScript made a lot of sense to be because I wanted to be able to use the same application on the frontend and the backend and I also liked the idea of having access to JavaScript's very large package ecosystem, but still wanted to get closer to formal verification; I liked the idea of not needing to write many test cases to be confident that my code was correct.
I was working on a game with my brother called Primacy which allowed users to upload custom maps to our app and play on them asynchronously. We originally wrote the whole thing on top of MeteorJS, but eventually ported it over to Node.js because MeteorJS was slow and poorly maintained. We deployed Primacy on the Apple App Store and the Google Play Store and it was a massive PITA. I got to experience the joys of debugging character encoding issues on Safari because it didn't (doesn't?) support the whole unicode character set in JS, and I was using fancy symbols in my PureScript. I got to debug our app crashing on iOS because Safari didn't support regular expression features that have been around for over twenty years. And, I got to pay Apple for the pleasure while they turned our app away over and over again without real explanation, giving only vague citations of some policy or other.
PureScript was a big bite, and I got lost in it for a while. The language is elegant, expressive, and more than a little challenging. Eventually, however, I ended up moving back to Typescript as my go-to. I had learned the PureScript idioms well enough that I could write TypeScript like PureScript with a bit of extra work, but with much better support from the ecosystem. Alongside PureScript, I ended up learning a little language called Elm, which is similar in a lot of ways, but took a leaner approach to functional programming on JS by essentially only supporting features functional features that map well to JS. Learning Elm and PureScript landed me my job at HubTran right around the start of COVID allowing me to return to fully remote work (previously I only worked fully remote at AT&T).
HubTran exposed me to a different caliber of development work. My previous jobs had been challenging and engaging, but the code at HubTran was thought out and relatively up-to-date. The team moved quickly and there was both a higher tolerance for and expectation of asking lots of questions and moving quickly. So, that mostly catches us up, and that's my history in a nutshell.