Your Tools and You

What is a tool

Precisely defining a tool is not an easy task. So let's break it down to its essence.

A tool is a thing that exists for a particular task. A hammer rarely exists as an object in itself. Without nails, there is no such thing as a hammer. Imagine if it were the sole existence in the universe, nothing to strike, nothing to build.

The meaning of a tool can only be understood through the web of things it refers to while it's in use.

A hammer exists for, well, hammering things of course, a nail into a plank, to build a bookshelf for the house, which exists for living. Tools exist for us.

A working tool in the hands of a skilled user is invisible. I'm not thinking about the keyboard while writing this. But imagine a key breaks mid-sentence. Imagine I reach for the keyboard and it's not there. Imagine it wants a software update before it lets me work. Now the keyboard is visible. It demands attention.

A good tool should become invisible, but that doesn't mean I'm not aware of the very keyboard I'm writing on right now, I'm aware of it, but my attention passes through it. I'm solely focusing on the text I'm typing.1

It just works

I vividly remember the first time I opened Vim accidentally, I couldn't exit, and I did the meme, I had to shut down my computer, I was very frustrated and confused about the whole thing, why would anyone use this crap.

Me being me, I tried again, embarrassingly enough I somehow got stuck again and had to shut down my computer again. Then I learned there was a thing called vimtutor, I did it a few times, the first few weeks felt very hard, I wasn't able to type anything efficiently, then slowly I got used to modal typing and got quite good at it.

Now I use Vim mode everywhere I can. My hands search for insert mode, for visual mode, jump words with w. I don't think about it, my hands just know what they need to do.

I grew with the tool, it doesn't interrupt me, it doesn't do anything I don't want it to, whenever I want to jump five words, it only jumps five words, nothing more nothing less, it doesn't demand attention, it doesn't crash, it's invisible. I'm writing this inside Vim.

This is one of the most important things about tools: you scale with the tool. Being good at it makes you better at the task, you work faster and do more, so you get more experience and more skill.

That is how humanity grew: from a child who can't hold a pen to the laws of the universe written on a blackboard in 1931.2

It never ends

I just wanted to find a cookie recipe, peanut butter, chocolate chip, doesn't matter, I just want a delicious cookie I can start baking. Naturally I type cookie recipe into Safari and hit enter, a bunch of Google results, I click on the top few, the website flashes with an auto-playing ad, I close the ad, now a cookie banner, I click reject all, after a bit of scrolling I get another pop-up that wants me to sign up for a newsletter.

The site demands attention for the meta-subject of being a website I'm visiting, I don't know who or what I'm fighting, but it's tiring. Knowing I can't win against these websites, I just ask the AI and get an answer in less time.

Is it accurate? I don't know, but I can't deal with cooking websites.

But who cares, right? There are cookbooks, and random websites aren't how professionals deal with recipes anyway.

Then let's look at professional tools. Say you want to contribute to a big open source project, you start reading the build section, it's a few pages long, pure dread. Each step requires you to install some other software with a few pages of installation of its own. You try to follow the procedure, you install one thing after another, and you are met with a couple of mysterious errors. Now there are three possibilities: you pain it through and install it, learning nothing, or you give up, or you simply ask the AI and let it deal with it.

It's easy to pick on random open source projects, so let's close the gap and pick software that supposedly just works.

LSP, a.k.a. the Language Server Protocol, one of the most beloved tools that exist for the modern software engineer: auto-complete, real-time lints, inline compile errors, go to definition. Sounds like a dream.

You open your project in your favorite text editor, your computer fans start spinning, you wonder why, then you remember rust-analyzer started working. You start typing, each time you press a key something pops up, something that demands your attention, you get used to it. Then your project grows larger and auto-complete starts to lag. You had expectations, it used to be instant, it used to be reliable, now every keystroke is a small gamble, and your attention is fragmented.

After fighting with auto-complete you save your changes, ah, now there are a dozen errors on your screen, all red, each demanding its own piece of your attention, divided a dozen ways, and you haven't even finished your work. Anyways, you fix the errors one by one, saving each time, and each save spins the fans a little longer, the computer a little hotter. Rust-analyzer does its work, and after a few seconds, one less error on the screen.

Now typing becomes a bit harder for you, your fingers got used to auto-complete, but hey, it's saving you a lot of time and everyone says it's a great tool!

You start another week, your LSP decides to auto-update, and it doesn't work anymore, there are a bunch of errors in your macros, you don't know what's happening, you can't start your work. You find an open issue on GitHub, oh okay, it's a known issue, let's revert the version.

Step back and look at what's happening: you are typing text into files, and it takes gigabytes of RAM, a CPU running hot, a laptop that can't leave the plug. You are constantly thinking about the tool.

Although it might seem like this issue is rust-analyzer specific, it's not. The lesson, apparently: things are slow and we have to get used to them, things are not deterministic, it's unreasonable to demand that things work, and work fast.

There are no skills to master, just procedures and rules!

What did years of fighting rust-analyzer teach me? Restart the server, revert the version, clear the cache. That knowledge expires with the next update. Vim was hard too, but what I learned is still in my hands years later. This never accumulates, it just repeats, tomorrow I dismiss the same popup, fix the same macro error, at the same skill level, forever.

GPU in the room

I can't define current AIs. Are they tools, or are they subordinates? They can do some work on their own, but are they intelligent enough to be trusted? I'm totally lost on what they are.

However, I started using them as tool-like things. I wrote my emulator by hand. I still strive for mastery. I deliberately limit automating my work. I let myself struggle when thinking.3

They help me greatly when dealing with things that we failed to make easy, such as finding cookie recipes or building big software projects. I can't possibly fight every battle I see. Not all of these battles are worth fighting. There is no skill, no value at the bottom of badly designed build systems, nothing to master. I let AI take that accidental complexity, the thinking is mine.

But there is a very fine line between these:

you working with your tool,

your tool working for you,

your tool working against you.

I believe if you are not constantly aware of these, AI will first do your work for you, then it will work against you: abilities that go unused atrophy.

Tool at hand

I stopped using LSPs, I don't believe they bring me any benefit. Software is largely about fighting complexity,4 I just do cargo check, my Vim config is barebones, I want to think about the work itself.

I largely use AI to help me think: I challenge my own ideas, change my opinions on them, trying to create friction to start a fire. Handle them with care and they help you take on harder problems than before, be careless and you get burned.

Be the one wielding the tools, make them your own. Start hammering, go build something yourself.

1: Ideas here are largely influenced by Heidegger's tool analysis in Being and Time (ยง15-16) and Aristotle.

2: Einstein's blackboard from his second Oxford lecture, 16 May 1931, its equations connecting the age, density and size of the universe. Preserved at the History of Science Museum, Oxford.

3: I wrote about how I actually do this in How To Use AI to Learn More Effectively.

4: Fred Brooks, "No Silver Bullet: Essence and Accident in Software Engineering" (1986).