Software I'm Thankful For

I read David Crawshaw's recent post about the same topic and I thought it would be nice to do the same.

Go

I've always tried to be a polyglot programmer to allow myself to learn and be a well rounded software engineer, but as time went on I realized that specializing in a small set areas is also important. I made a choice to really focus on Go back in 2015 when I was primarily doing Node.js at the time and even though it was a relatively new language and it was risky to bank on it being as popular and as marketable as it is today I felt it was the right move. I am thankful that I was right. While becoming more proficient in the language itself I also became more a more proficient distributed and systems software engineer as well. I was exposed to a lot more complex topics such as lower level CPU and memory management, consensus algorithms, software teams productivity, fundamental networking protocols, and the list goes on. Go even made me return to college to build up my academic understanding of computer science itself.

IP & UDP

I read the IP & UDP RFCs periodically to remind myself where parts of the internet started and how simple technology can have such a significant impact. So much of the internet today still relies on these two pillars of technology to allow you to do what you do on the internet today. If you haven't read the RFCs I urge you to do so.

Redis

I always enjoy pulling Redis into a project since it feels like a blank canvas when I need to reason about what data I need to store. Relational databases always forced me to think about objects, but Redis always makes me think about data structures. Having the flexibility to store and manipulate data structures felt more freeing when designing a new system or a feature. Connect over a socket and away you go playing with keys, lists, sets, and graphs.

SQLite

When I do need a relational database I like to use SQLite to start off with given its simplicity. Since it is just a file on disk there is no network issues or operational overheard that come with running a dedicated database server. The database file can even be backed up via Litestream which is another fantastic piece of technology.

Git, GitHub, GitLab, sourcehut, et al.

My background in source control many moons ago was Visual SourceSafe and most recently I've been exposed to Perforce and PlasticSCM which are heavily used in game studios. Git and the code sharing sites still continues to shine when it comes to building software as a group of software engineers with it's distributed model and its diffing capabilities.

elementary OS

elementary OS has been a fantasic operating system that reminds me of using a wonderful UI from the macOS days while still having a full Linux system at my fingertips to do anything I need to. I get the best of both worlds with a well supported and great ecosystem of native apps with thoughtful attention to details in their designs while still spending most of my data in Terminal working on what I need to do to ship software. I even start to install it on older systems to revive them and give them to family members instead of recommending they buy a new machine. I really hope this distro has a bright future and is around for a long time as the poster child for what a Linux laptop/deskop should be like for the masses.

Twitter

Despite the toxicity that can arise there is still some great parts to it to connect with other like-minded people. I have learned a lot from people I've carefully curated into lists and I even landed a job after seeing a job posting come from a person a friend of mine and I were mutually following. At the end of the day here it has been a great social tool since I've worked at making sure it is a positive environment for myself.