ewintr.nl

Unix is my private cloud IDE - part 1: introduction

Saying that your development environment should be simple and productive is like saying you like good food and that you enjoy nice holidays. That is, it isn't saying anything at all. Of course you enjoy a nice holiday. You wouldn't call it nice if you didn't enjoy it, right?

Explaining what exactly the words 'simple' and 'productive' mean to you may take some time, though. And that is assuming that you even are aware of the reasons you like to do things in a particular way. I have been using computers to manipulate text for a long time. Some habits have formed. Along the way, I have also been distracted by shiny new things many, many times. Stumbling across some magical new system or app, prompting myself to learn new habits, only to abandon them after the novelty wore off.

But I have noticed that that doesn't happen a lot anymore. I do enjoy a good write-up, or video, from someone who is enthusiastic about a tool, but I rarely feel the urge anymore to immediately download it and turn both my computer and my workflow completely upside down.

This made me wonder. What exactly is it that I value that led me to my setup? What is my setup anyway?

Let's do a quick check. I:

This is where the title of this post formed in my head. Terminal, shell, modal editing, I am very much a Unix person. Whenever I need to test an API endpoint, I use curl, not Postman. If two programs need to work together, I vastly prefer scripts and long commands over invisible magic. You can hear me audibly groan when I have to use an app that only works in a browser. Why is that?

Pondering about my experiences, I remembered several posts on the internet about how Unix is the greatest thing since sliced bread for developers. That Unix is all you need to when you are looking for an complete, integrated development environment (IDE) for your programming work. I mean posts like these, I am sure you've seen similar:

It is not exactly sure whose IDE Unix is, but many people definitely think it is one. Is that my group? Do I belong to that tribe?

Often the reasoning goes as follows: A developer tends to use many different tools and apps to do their work. Obviously, the process runs smoother if those tools and apps work well together. That the output of one program can be used as input to another. That one program can configure or control the workings of a smaller tool. Et cetera. An IDE is a software package that offers just that. It says it right on the tin: Integrated Development Environment. A collection of tools that work well together, packaged in a single program, likely polished by a team of professional interface designers. You can download an IDE for free, or you can buy one, and many developers do.

However, the word package carries a double meaning here. It is also a package deal. Do you like the editor, but don't like the database inspector? Tough luck, this is the only one there is. Of course, one could use a separate database app outside the IDE instead, but that would break the whole integrated experience and many of the usability advantages would be gone. This makes using an IDE pretty much an all or nothing deal.

The other approach is to let the developer (or the computer user in general, really) pick their own favorite tools, but provide an environment where they can be integrated easily and where the user can build their own IDE. Cut out the middleman and improve the whole computer experience. For everybody. Unix offers this and that statement is not in any way new or revolutionary. Brian Kernighan already casually explained all this more than forty years ago. The idea is that you can become your own IDE designer, and all your favorite tools can be neatly composed together as you deem best. The computer becomes one big plugin system on steroids and there is no need for that extra IDE layer. Of course this system was invented in a simpler time, when text was the main way to interact with a computer.

I have used IDEs on and off for a while, but I vastly prefer the Unix way. Also I am old. That means I fit a certain stereotype. Old developer, unironically uses technology from the 70s... I guess that means I am a wizard greybeard now.

But no. That argument feels far too convenient. Greybeards are mystical creatures that, like Neo in The Matrix, are so deeply familiar and intimate with the system that they simply force computers to do what they want by sheer force of will. Comparing myself to seasoned developers who know so much about the inner workings of computing that they seem like wizards feels very flattering. But I don't buy it.

The thing is, I am actually not that proficient with the shell. I do have a beard, there are some grey hairs in there, but that is not enough. I never use awk, or sed. I need help from the internet or an LLM to build a command that uses xargs. Come to think of it, I don't really pipe the output of one program into another one all that often. I never counted, but probably 90% of the pipes in my history are of the form curl ... | jq . which does nothing more than pretty printing the JSON response of an API. For the rest I just stumble around, like everyone else. That is not how the real programmers accomplish work.

That Kakoune editor I mentioned in the beginning? It is so exotic that even Vim users look puzzled when they learn about it. But I can't exactly say I have mastered it. My configuration file is very small, only the bare necessities are customized. Simply because I constantly struggle with getting the output I want. Even after years of using it, I still consider myself an advanced beginner. Yet at the same time I feel attached to it. I have turned down jobs where I wouldn't be allowed to use it.

This is a good thing. Apparently, just as how Brian and his fellows envisioned it decades ago, my development environment evolved to something that works for me, by stitching together programs that I like. Just as a normal user, without the help of professional interface designers. To me it feels simple and productive. But reading that didn't tell you anything. And it doesn't tell me much either. It works. But what, how and why is still a mystery.

At the same time, I am not a normal user. Because if I were, I would just use "normal" programs apps and not feel so... offended when someone suggests to use an browser-only app like it is the most normal thing in the world.

Listen kids, switching between programs is done by pressing alt+tab, or whatever shortcut your system has for that. Switching between browser tabs is done with ctrl+tab, or something similar. The point is that they are not the same. So if you have a few programs running on your desktop, and a few in your browser, and you want to quickly switch between them, you now suddenly have to do a whole lot of mental gymnastics to remember in which of the two lists you program lives and how many times you need to press which shortcut to switch to it. This is something that can drive me mad. Yet people look at me like I am the weirdo if I try to point out the constant degradation in user experience that using their in-browser app will cause.

To be fair, it is not a topic that comes up often. Not many people take the time to carefully think about these questions. Apart from frequently getting annoyed, I haven't done that either.

This post is enthusiasticly titled 'Part 1: introduction'. That implies that more installments will follow. But there is no schedule. To be honest, I don't even have a clue yet what part 2 will be about. But I would like to take some time to figure out how this all works for me, and why. My main activity in life appears to be using computers, most often for the mundane task of manipulating text. Simple as that sounds, in practice there are plenty of rough edges. That warrants some reflection.