• tips
    • using graphviz to visualize giant database schemas, for example
    • edit in a different context than you write (HT ceej)
    • frameworks
    • code review: the role of code review, how to be a good code reviewer
    • generalize at gunpoint
  • stories
    • how i worked through burnout
  • my favorite languages and why they are my favorite
    • rust, bash, javascript
  • talk about drawing / painting!
  • what do you think of as important that isn't actually important
  • XYZ a review / in context
    • pick technologies, put them in context of the history of the field and review them
    • assume no prior use, but go in-depth

Fuck it, it might be time to learn how to use curl.

There are tools and then there are tools. There are tools with a low difficulty curve that leave you beholden to the tool, there are tools with steep difficulty curves that pay off in the long run, there are tools that unlock potential in every other tool you use. There are tools everywhere in between, too.

Over the years, I've used fewer and fewer apps. I'm down to just two primary apps today, to be honest. Of course, these tools stretch the meaning of the word "app": I have Firefox open with pinned Gmail, Gcal, Twitter, and Slack tabs. I'm writing this post in the other application: macOS's builtin Terminal. I'll usually keep up to ten tabs open in each, occasionally garbage collecting them. This is a niche use case; assumptions I've picked up over time pushed me here gradually.

I wonder idly if I'm really just optimizing for Command+Tab. I got sucked into StarCraft 2 back around 2011/2012. (It was an easy sell: I have many fond memories of hanging out in my friend's basement playing StarCraft and Tribes over a LAN in the nineties -- his dad had three (3!) computers.) One of the core concepts in StarCraft 2 was "actions per minute", or "APM."

I feel earwormed by the concept of "keeping one's APM up" -- SC2 turns into a bit of a rhythm game where you divide focus to a particular, self-set beat. One-hop-to-resources, two-check-on-attack-squad, three-hit-the-larva-inject, etc. This creeps into how I work: I'll tab rapidly between the browser and the terminal, then cycle through windows of each with Cmd+Grave and Cmd+{. One-check-on-Slack, two-check-GitHub, three-look-at-vim. Hop between contexts with Cmd+Tab. I use Divvy with preset keyboard shortcuts to throw windows to the corners or sides of my screen with gleeful abandon.

I've turned my interactions with the computer into a decision tree about 3 levels deep. The first question in this decision tree is "am I talking to someone else or reading prose, or am I editing?" Then the tab structure provides a second level: what task am I working on? Finally inside a tab I might have some context -- a slack channel, or a backgrounded NeoVim session. If I'm using anything other than Vim, I'm using the macOS Emacs-style keybindings. My mousing has gotten really, really abysmal since I abandoned StarCraft 2: I really don't have a lot of occasions to use the touchpad.

There's a spatial axis to how I practice using my tools. Certain work lives in certain places. Throughout the day I'll flip through these spaces rapidly for hours on end, primarily navigating via keyboard through muscle memory. I'm always only two or three keystrokes away from any conceptual space.

One axis I evaluate tools on is how well a tool fits into this conceptual space. Another axis might be "applicability" or "potential for serendipity": does investing time in learning how to use the tool make my use of other tools more expressive, or does it deepen my understanding of all of my tools? Bash, for example, is something I was extremely slow in picking up, but knowing the basics of the language unlocks the potential for radical composability in all the tools I use in half of the conceptual space I work in. Powershell on Windows is similarly leveraged knowledge.

(Anecdotally, it seems like domain languages are some of the most worthwhile knowledge you can practice. If you learn Graphviz DOT syntax & are willing to generate it programmatically, you can really easily create ad-hoc visualizations of directed graph structures. Coincidentally, you can't take two steps in computer science without tripping over a graph data structure.)

If I have any advice here, really, it's this: don't let yourself suffer when using your computer. If you think to yourself, "sure it's tedious to press the arrow key left twenty times to edit this statement", it's worth halting and looking up the shortcut. It's worth practicing the shortcut for weeks until it's muscle memory. How often do you need to make a web request to test a service you're writing? Is doing this in Chrome -- or via Postman -- making your other tools more powerful? If not, fuck it, it might be time to learn how to use curl.