From the beginning of my Software Engineer career I'm working with git directly in the terminal — I'm not using any GUI wrappers. If some GUI app have a CLI, I prefer to use it instead. In this blog I'll describe why I prefer to live in the terminal.

Better control

When I'm using GUI I have the feeling that I don't know what is exactly happening when I click the button. It feels like authors of the app put a curtain before me and my PC, and they are doing something behind it which I can't see. Of course, this is totally subjective and actually exactly the same can happen when using command line — I still don't know what is happening under the hood. But for some reason when using CLI I feel like I'm one level closer to the code.

Less resource hungry

That's kind of obvious. CLI apps don't use resources required to paint windows, controls, layouts etc. Today's PCs are a lot more powerful than 10 years ago — that's true. On the other hand software gets more and more complicated and 16 GB of RAM today is not that much, especially when you need to spawn multiple instances of the same software (like multiple IntelliJ).

Fewer layers of abstraction

This is a bit similar to the first argument. I feel like GUI have too much bloat. Fewer layers of abstractions means less code and less code means fewer bugs and easier maintainability. The last one is especially important in FOSS. Easier to maintain and modify code means potentially more people can contribute to that software and make it better. If you find a bug you can easier fix it when the software is simple than when you need to go through multiple layers of abstraction to find the root cause.

I'm faster

One of the most important reasons is this one. I'm simply faster when I'm using terminal. Instead of smashing Ctrl + Tab to get to the app I want, then clicking the mouse until I'll do everything I need, I'm simply typing the commands. I'm not switching the context so much, I'm not wasting energy on pointing precisely on buttons.

More than 100% of features

This is the most significant reason I prefer to use terminal. When I'm using CLI in the terminal, I have the whole shell to be used along with my app. I basically can extend the CLI functionality by using pipes and other tools available in shell. I can automate things easily with few lines of bash. You can't do that with GUI unless you write code which automates mouse clicks etc.


Of course, it's not a rule that all CLIs have the properties described above. Additionally, some reasons are subjective. At the end it's not about convincing someone to switch to using terminal, it's just my point of view.