I said that the next blog I posted was going to be about the technology I use at work. I do use Vim, but I don’t use it as my main editor, although I’m pretty comfortable with it (I’m using Vim to write this right now). C# is just so connected to Visual Studio it is unfeasible to switch. I do use vim everyday for changing configuration files or reading code when I’m already on a terminal. But I’m not here to explain my tools or processes yet though, and this doesn’t pertain specifically to vim.
The title is a little misleading, as I really want to explain my thinking in learning the basics of the tools that are available to you. Vim being a very common example. This isn’t about the bump in performance you can gain as a developer (you’ll probably be way slower at the start than with the tools you use now), and this also isn’t targeted specifically to developers (though I use that term a lot). This is about being prepared for the situations you can encounter, knowing what tools are at your disposal as well as their use cases, and expanding your knowledge to make you a better developer.
In this case when I say learn the basics, I really mean the absolute minimum for how a technology works. One of my favorite teachers would say “enough to be dangerous”. With the example of vim, I consider the basics as knowing how to open a file, write some text, navigate the file, and save your changes. Going further is totally up to you and your workflow, that goes a little further than point 3 and this post. I may go specifically into how I feel about vim in a different post.
In software development specifically, we can get very complacent and used to our tools and although I am a firm believer in knowing your tools inside and out, and customizing it to exactly what makes sense to you, there are situations where you won’t have your normal set of tools and configurations. When you are connected via ssh to a server or working in a tty, for example. Having knowledge of the common tools that are on every Linux distribution (or at least in their repositories), and knowing the use cases is a big plus in never being surprised and remaining productive.
In the past, when Unix was large and the GNU project started, there were only command line tools. A lot of the GNU tools(which were remade from the tools included in Unix) are still very applicable and useful in my every day work. Instead of spinning up a huge program like Visual Studio, or even a comparatively light tool like VSCode, to search for an exact string of text, you can just use grep and find the same text based on a general pattern, all without leaving the terminal. There are many more examples, even for more specific use cases like reversing text or sorting it. Instead of reinventing the wheel, or doing it by hand, knowing that these tools even exist can save a lot of time(I said this wasn’t about any performance gains, but I kind of lied).
My last point is learning for the sake of learning. I really like learning about computers, and how different technologies work. Anytime I see a situation where I know I can use a new tool, I get a little giddy. So on one hand, it is for fun, and to satisfy my need to tinker. On the other hand, learning these tools keeps your options, and mind as a developer(or general computer user), open and helps you with your problem solving skills. This is more of a lifestyle point because personally, I believe you should be constantly learning, even the most basic concepts, because you’ll never know where it can come in handy.
I’ve never been a strong writer (or been able to explain my points in a way that makes sense to most people), so excuse the awkwardness of this first post. I can’t really say it’ll get better from here, but I’ll try. If you aren’t someone who is familiar with much of what I’m talking about, but still read the whole thing, I really appreciate it!