My Journey to NeoVim

My Journey to NeoVim

Learning to improve by feeling dumber

In 2022 I did a lot of things. I changed jobs to find work that was both fulfilling and challenging (and happened to pay better). I sold a house in Colorado to move to scenic, rural Michigan for a better quality of life. I started using Twitter again after about seven years of ignoring it. I also took up a strange new hobby: watching software developers on Twitch. As a husband, father, and seminarian, I rarely found myself in a position to consume technical content that wasn't specifically connected to my job, but I found a strange and passionate community that I could have on in the background that didn't interrupt my focus while I worked. Previously, my technical opinions revolved around whatever software or library I needed to use for work. I would work on side projects sometimes, but my limited free time meant that I often just defaulted to using the same tech stack that the company was using, because I didn't want to waste precious time learning something new.

Maybe this is where you are currently, trying to move forward faster by reusing old tools as long as possible. This is just as bad as putting off changing the oil in your car, eventually, your engine is going to seize, it's just a matter of when.

If you take nothing else away from this, take this:

Learning a new skill or tool today, while slow, will often make you faster tomorrow than if you kept using the thing you are already familiar with that is not right for the job.

So here I was, in 2022, suddenly hearing from all sorts of developers in various contexts. This online community, along with a new IRL developer friend, all seemed to have really strong opinions about... development environments? To go back for a second, I have used a pretty decent number of IDEs in my time programming. I got started doing development in Notepad when I was in High School programming early PHP. Eventually, I transitioned to Dreamweaver MX (the last good Dreamweaver) followed closely by BlueJ and Eclipse when I started learning Java / C++. Eventually, I found my way to IntelliJ as I started my career as a Software Engineer which I used for a long time. In 2021, a friend introduced me to VSCode, which at the time seemed pretty great for what it was. I used this happily until this fateful time in 2022 not knowing any better and just wanting to get the job done and go home at the end of the day. So, once again I'm back in 2022, confused by the desire to try out this rogue offshoot of Vim that seemed like it would be hard to get used to.

you'll be more efficient - developers on the internet (2022)

One day I just gave in and tried it. I installed NeoVim on my computer, made sure I remembered all the basic keybindings, and clumsily typed out a few lines of code while getting frustrated at how slow I was in this new environment. I would have given up here, but I watched a few guys on Twitch who were super duper fast and knew it was possible to be better (Thanks Teej_dv and ThePrimeagen). Thankfully, my IRL friend (make sure you have a few of these) told me to check out the kickstart.nvim repo, which has a solid foundational init.lua file to use and build on. I procrastinated getting it set up, but when I finally did configure it, I felt like I had entered a new world -- even though I was just as slow as before, at least I looked cool and slow at the same time.

Somewhere around here, the hubris kicked in. You can tell me that you have never looked at other developers and felt superior because your tool or language is better, but we'll both know that's a lie -- especially if you're a Rust developer. Let's be clear though, this kind of ownership over your work is also beneficial because it doesn't let us just put things down when they're hard or confusing. I kept on chasing the dream of being fast at NeoVim because I knew it was possible.

For a while, I was using NeoVim and VSCode side-by-side, in the same project, to handle different tasks. If I needed to find something in the codebase I would use VSCode because I just didn't know how to search in NeoVim. If I needed to modify a file or start a development server, I would use NeoVim because it was much easier being already in the terminal for it. This continued for some time until I realized that I could live like this forever and be worse off than when I was just using VSCode. At this point, I went back and re-read those kickstart configs to learn what the heck was happening under the covers, and to my amazement, I found out how to do the very searches I wanted to do in NeoVim! Not only that, but the searches were MUCH faster and more efficient than when I was fumbling around in VSCode trying to scroll through endless results that you could only see the first 20 characters of without clicking into them. I was finally able to do the unthinkable: ditch VSCode for good.

From here on out, I started eating vegetables, became a better lover, and was suddenly able to grow facial hair -- not really.

It's easy to get to the end of a post like this and think "Your situation is way different than mine. I can't just figure everything out in a few sittings like you." And while I do want you to think I'm very smart, I have to confess, this didn't happen overnight. It took me several weeks of doing things the wrong way to find out how close I was to the right way. Even now, as I type this up, I am painfully aware that my use of Vim motions is lacking and that I could be even faster if I would just sit down and learn them better. I need to rewrite my config files to clean everything up and make maintenance easier down the road. I'm still not sure if the font I chose is the best one, so I need to sit down and spend a day using a couple of different fonts to be sure. And I probably haven't tweeted about NeoVim enough to be considered a "real user" yet, though not for lack of trying.

Now that I have been using only NeoVim for a month, it has been incredible to see how much speed I have gained from ditching my mouse in favor of more keyboard interaction. This, I think, is the moral of the story: sometimes you will have to slow down to get incremental improvement in your process. Don't view steep learning curves and periods of lowered speed/efficiency as a non-starter. Sometimes you will need to slow down to speed up. Sure, there are caveats to this rule, since in the grown-up, you've-got-a-job, real world you are sometimes required to maintain a timeline that doesn't allow for much slowing. But consider this: could you spend the first 30 minutes of your workday upgrading or improving your workflow? Maybe just 15 minutes? I ran two IDEs (or an IDE and a PDE, depending on who you ask) at the same time for a while to maintain efficiency, could you do that? If your only pushback is "that sounds like too much work" then perhaps you're not ready to up your productivity.

Time to go tear down my house and build two better ones - Not me

I'm going to get back to improving, by using NeoVim some more and participating in the Readme book club that Teej_dv is putting on. I hope reading this made you want to improve your process too, or at least try out NeoVim. Either way, happy hacking, and I'll see you around the internet.