Programming a Better Life
Kyle Gill, Senior Software Engineer, Gatsby
Why learning to code has been one of the best choices I’ve ever made.
At a macro level, software is eating the world. The top 5 most valuable companies in the world (AAPL, MSFT, AMZN, FB, GOOGL) are all squarely situated in software. Antithetically (at a micro level), addictive software is eating lives with bottomless time vacuums of content that has little to no substance.
I think technology is a two edged sword, and like most things, software is neither entirely good nor entirely bad.
If software and its near infinite scale is taking over, it feels like a unique sort of superpower to be able to harness it. The easiest route to making software work for you, and not against you, is learning how to code. I want to give some examples of how learning to write software on my own has helped me craft improvements into my own life. Finding out I enjoyed writing code—and that companies will pay me for it—were delightful side effects to what was a really a new found freedom to build whatever I wanted.
When I get asked what I do when I’m off work, the answer is usually the same thing I do at work,
play minesweeper write code. Something interesting to me is that that answer is not particularly unique among software engineers. It’s a craft that many engineers seem to hone outside of work because they actually enjoy it. Like a chef going home from work and cooking for their family, I tend to go home and write code that’s just for me. This surfaces itself in all sorts of projects and tools that I’ll go into in more depth later.
In all my attempts to convince my friends why I love programming—and why they should learn to program—I can’t seem to articulate this message well enough (which is part of the purpose of this essay). Software is a craft that is rewarding to improve.
As much as software is a craft, I also mentioned learning to code is like a superpower. Interestingly, I ran into a piece from Nil Eyal who quoted a reader of his blog who stated:
If it can’t be used for evil, it’s not a superpower.
I find this defintion fascinating because it squarely fits the bill for programming. The same network protocols, databases, and open source code that deliver petabytes of addictive media for the profit of developers, set up mechanisms for positive endeavors like disaster relief. Just as there is an opposition in all things, a developer has the liberty to build a platform for vitriol and sludge or one that magnifies the best parts of technology.
Just like a chef has to be aware of different ingredients to cook, software engineers need to be aware of tools to code with. Learning to code has a stigma for being hard to pick up because it’s not easy to understand what’s possible. There was one line of code in particular that helped me understand what was possible, and it came to me as a conniving high schooler with free time in my computer drafting class. My friend and I stumbled across 2 very interesting discoveries one day:
- there’s a command to open a computer’s CD drive
- all the computers in the school were connected through the network
On their own neither of those is that ground-breaking, but when you combine them… well 😎. We were popping CD trays of our classmates left and right with reckless abandon. Finding the shutdown command was when we began to feel the responsibility inherent in our new power.
Code is all about synthesizing the existing tools in the software tool belt into new and interesting uses. That application of tools in the right steps allows software companies to do things like process financial transactions, generate entire websites, or run complex equations automatically. Unfortunately, some choose to use their skill for less worthy causes, but being able to build good things can meaningfully improve lives (including your own).
For the software engineer, knowing how to use those tools (and what tools there are) opens up the door to home automation, blocking all ads from their home internet, or in my case a suite of personal apps for the things I do from day to day.
At work I build tools for the aforementioned macro level, where my code is used for a whole bunch of random denizens of the internet. At the end of the day the real magic happens, I get to dive into the micro world and build tools for me.
The following are some things I’ve made outside of work that make software more than just a job for me:
Because I really value journaling and writing things down, I made myself a journal that had all the features I wanted but couldn’t find anywhere else. It works without internet, it supports dark/light mode depending on the time of day, it’s search-able, and best of all makes it easy for me to write in my journal from anywhere because it’s easily accessible from my phone or laptop (unlike my written journals). Then because software is great like that, I put it online so anyone can install their own version of it for free: https://github.com/gillkyle/sol-journal
Writing lots of things down started getting tricky for me when I wanted to actually find the things I’d written down later (especially with the ancient technique of writing things on paper). Finding a better way to store a lot of the ideas I was thinking about made sense in a home grown wiki where I could move all my content wherever I wanted, and build little features I wanted on top of it. Everything I record is automatically grouped by topic, making it easier to find what I want and add more to ideas I’ve been thinking about in the past. You can see it here: https://notes.kylegill.com/
Muscle memory kept taking me back to social media. Twitter in particular was my achilles heel until I built a chrome extension that blocked feeds but allowed me to see notifications. Now I don’t get caught infinite scrolling, but can still keep tabs on friends and events. You can view and download the extension here: https://chrome.google.com/webstore/detail/scroll-solace-hide-social/pkkpjcbjoplobnnihelcjnigckibeaog/related?hl=en
My favorite new application of software enhancing my life is in a 2021 goal tracking app I made for myself.
While I was a missionary for my church I learned a great lesson on setting goals.
When performance is measured, performance improves. When performance is measured and reported, the rate of improvement accelerates. -Thomas S. Monson
I figured for my goals this year (2021), I ought to make sure they were measured and reported. This falls in line with my thoughts on accountability through returning and reporting. Knownig that tracking goals can be tedious, I turned mine into an automated reporting process from my phone and a dashboard to view my progress on my goals at any point during the year.
Every day at 10:30pm I get a notification on my phone that prompts me to report my goals.
Just this notification on its own wouldn’t work for me to actually go and report a goal off in a spreadsheet somewhere or go find a paper to jot it onto, I needed to make the reporting as low friction as possible. In order to do so, the notification starts an iOS shortcut that allows me to select a goal and mark it as done, failed, or passed.
Once the shortcut has the info I’ve given it, it updates my airtable base, and rebuilds my website where all the data is displayed. You can see the dashboard of my goals here: https://goals.kylegill.com/
To top it off I have a spot on my homescreen that takes me directly to my dashboard or gives me a shortcut to start the goal reporting step.
It sounds silly but learning to code has actually made me life substantially better. Even though the de facto response to telling someone I’m a software engineer is usually “I’m glad someone else does that”, I can’t help but try and convince them why I think they too should learn how to code. 🙂