Development environment – where do we start?

Ever since I’ve got to know how to program, I’ve been a fan of coding efficiently. Looking for the perfect code editor, learning all the keyboard shortcuts, and learning how to program even faster & better – all of that was my bread & butter. My journey still goes on and I’m still looking forward to increasing the efficiency of my coding, even though I think I’m quite happy with my current setup. Maybe it’s because of my “Maximizer” trait from the CliftonStrengths® assessment, or maybe I just enjoy doing things quickly & swiftly. The answer is probably somewhere in between.

If you’re looking to take the next step in improving your development environment or something grinds your gears in it, you may find yourself in a moment in which I was in the past. In this article, I’d like to inspire you with a bunch of tips based on the most prominent things from past & current setups.

Please take these with a grain of salt as they’ll be extremely biased – what works for me might not work best for you.

Code editor shenanigans

My commercial programming journey started with the now unmaintained IDE based on Eclipse called Aptana Studio. It supported PHP & JS quite well and suited my needs for the time being. I chose it mainly because it was running on Linux very well. I wanted to keep using my beloved penguin-based operating system as opposed to my Windows-using work colleagues as it guaranteed great amounts of freedom in pretty much every aspect. From used packages to customization of the whole system. Even then I thought it would be a great idea to make sure the software suits my needs rather than the other way around. Aptana did work for me for some time but I started to feel it doesn’t give me that much freedom of customization so I started looking for a new code editor to stay.

Enter my first-ever Electron-based code editor – Atom. I have quite the luck with unmaintained editors, now don’t I? However, it was on the rise right then. Its sleek GUI and the promise of hackability to the greatest degree pulled me in immediately. And it was indeed something quite magical to discover its nuts and bolts. I kept on adding functionality upon functionality to it making it more and more into an IDE where I could be the most productive. What I didn’t know was that my computer & my editor have their limits. My RAM sticks got red with the amount of things happening in the Electron. One time it became so slow it used all of my 8 gigs of RAM. And that’s where I snapped and said “Enough!”. I enjoyed working with Atom but this sudden bump in my quasi-efficient flow left me with no choice but to… jump to another Electron-based code editor.

Of course, the choice was to use Visual Studio Code – my preliminary tests showed it was much faster than Atom. And boy how I was mistaken by my own tests. Even though it seemed to be faster at first, adding a bunch of additional functionalities to it made it unpleasantly slow. For most of the time, however, it was quite alright to use. VS Code was also my first contact with Vim motions – the olden ways claimed to be very efficient with the mouseless usage and even greater amounts of customizability. This was something that I dreamt of but was not ready yet. And so I learned the Vim motions first with a plugin available for VS Code. For some reason, however, prolonged use of this addon made my computer choke once again. The reason was the same as in the case of Atom – lack of RAM. Even though my powers… I mean RAM sticks have doubled since then, Electron was relentless in this concern. I stood the test of swap partition usage, but I knew it was not gonna take long until I snapped.

One editor to rule them all

And so my next move was to switch to Vim as I was already quite familiar with the motions. At last, a code editor which was not tainted with Electron! Loads of addons available seemed to be quite overwhelming at first but I picked and tested a few that suited my needs. I had to change my workflow to be more terminal-based as well and Oh My Zsh had me covered here – loads of quality-of-life-improving plugins, integrations with external tools & most importantly themes (because everyone knows that adding powerline to your command prompt increases your skills at least twofold).

Everything was going swimmingly for quite some time – I changed some of my add-ons from time to time but I was rather consistent with overall usage of Vim until I discovered Neovim. I got pulled in the moment I read it supports my beloved Lua language as an alternative language for config files.

What does my current editor give me?

Even though a lot of new editors appear in sight, I’ve decided to stay with Neovim and keep on perfecting the configuration and addons I use. And if you ask “Why?” I’ll answer “Because I can pretty much customize anything in it”. From keyboard shortcuts to themes (of course) & the elements of the UI. And the addons I mentioned help me immensely by providing a set of prepared tools, which aren’t too bloated.

One of the most important plugins I use is telescope.nvim. If you’re familiar with the Ctrl+P shortcut from VS Code or Atom, you should find yourself at home. Telescope, however, can do so much more, while offering a similar interface. Looking through files, LSP definitions, search history, or Vim commands just to name a few.

Keyboard shortcuts customization is however something that keeps all the addons in check. It’s also something that boosts my efficiency even more. Not only can I assign any command to any key, allowing me to even destroy the traditional Vim keybindings, but also I can use them in a chorded manner. With a few subsequent key presses, I can open the LSP definitions finder or run an external terminal program in a new tmux pane. You name it, you can run it.

Not so hard ware

I’m trying to stay away from the mouse as possible as you might have seen in the previous paragraphs. Being mainly a front-end developer means I sometimes have to use the mouse to click through the pages in the browser. I tried to use some plugins to emulate Vim-like keyboard shortcuts in the browser – unfortunately, I kept on finding some quirks sooner or later in each of them.

And even though moving hands away from the keyboard and back takes some time, the trackball mouse became my dearest friend in this manner. It made it so every such movement gets my hand in one defined place. And coming back from it to specific spots on my keyboard feels like a breeze. The mouse might not increase my efficiency that much, but what I adore it for is that it doesn’t get in the way of disrupting it.

However, the main weird thing you’ll see on my desk is my keyboard which is split in half. I’m currently using the Ergodox EZ. It was a great addition to my current setup. Not only does it take care of my posture during long seatings in front of the computer screen but also allows me for even more customization. Each key of that keyboard can be reprogrammed to match my needs. Currently, my key layout is quite similar to what you may see on a standard keyboard without the thumb clusters. My wrists, however, do not seem to like it that much. Particularly when I twist them to get to the Control, Shift, or Escape keys. Here my journey continues to find a better, more efficient layout, which would allow me to move my fingers and keep my wrists relatively in one spot. Nevertheless, the efficiency boost with the keyboard was quite substantial, especially with the programmable keys inclusion.

The Chorder story

I now have a great code editor setup and an awesome hardware setup. So what’s left to be done? The operating system controls of course. What I now wanted to achieve was the same amount of customizability as with Neovim’s options. I was especially fond of the chorded keypresses which could get me anywhere in a few clicks while being extremely flexible. With that in mind, I came up with an idea to translate that to the OS level. I tried to find a piece of software that would allow me to realize it, but unfortunately, it was nowhere to be found. The only logical solution was to create my own.

And so the “Chorder” was born – a simple GUI with a keyboard listener for a bunch of scripts I have lying around. Here’s an example screenshot after I open it with my configuration:

Chorder screen right after running it. Makes swtiching between things fast.

Each window shows currently available keypresses to get to other sections or run some scripts. So for instance, after I press the “s” key some “system” options like rebooting, locking screen, or setting the CPU power profile are displayed. And so for example the “Super-Tab s l” chord locks my screen.

Chorder screen after pressing the “s” key.

This allows me to get to important and/or repeatable actions in just a few clicks. Whenever I need to add some new actions or modify the old ones, I can just change the underlying script or modify the key shortcuts configuration. If you’d like to take a peek at the code of this version, feel free to do so here together with my current configuration here. Note, however, that it’s quite dirty and it’s quite tightly bound to the Awesome window manager I’m using. It just works though and I had no problems with it during my daily usage.

And if you’d like to take a look at a GTK rework I’ve started working on, here’s the link. As you might have guessed, it’s also quite dirty. Nevertheless, it’s more available to other users now.

Overall, this little Chorder app I created might not be very pretty, but it does work very well for me. 3-4 clicks and I can run a new tmux session with Neovim and Docker running from the start, I can open my system configuration files, or start a web search without opening the browser window. This feels amazing! Almost like magic.

Works for me! Will it work for you?

You might be thinking that quite some time went into my journey through the code editors, hardware setups & even some custom software I had to make. And you would be absolutely right. However, I do not regret any minute of it. Looking at all the adventures behind me makes me think that I wouldn’t be the same person without them. I wouldn’t possibly have the courage or experience to delve deeper into my development environment. Who knows? Maybe I would still be using my mouse to select some text in my Aptana Studio. And I’m feeling more comfortable with coding than ever before. And that’s what really matters to me.

You might also be thinking that the best thing I got out of my adventure was the Electron-Neovim jump. However, I’ll be putting that at the second place – the best thing I’m getting out of the efficiency improvements is the customization element. I’m not getting to know the already-existing functionalities and keyboard shortcuts of a bloated IDE or a code editor, but rather creating them from scratch to match my needs. When my needs are matched, some of my cognitive load from “how to do it” to “what to do” – I don’t think that much about every technical step I have to take, but rather concentrate on the goal I have to achieve. This sometimes might mean that I have to create a tool of my own. But creating a hammer for particular nails enables you to become its expert user.

I thoroughly recommend you get to know your development environment even deeper. After I discovered what I could improve in my setup, I took quite a few steps to research what could be improved. These steps have worked for me and some of my adventures might apply to you – there might be something that grinds your gears but you might not realize it yet. And changing that will not only increase your efficiency, but most importantly will make the coding more enjoyable. And I hope this is something that matters to you as well.

Aleksander Krawiel, the audacious Frontend Developer at Makimo, is a provocateur in the tech realm, continuously pushing boundaries with functional and system programming. A tireless explorer, he crafts articles that delve into the intricacies of DevOps, building developer environments, and mastering CSS & JS. Outside work, he morphs into a polyglot programmer, nimbly shifting between JavaScript, Godot, and Blender. Aleksander's multifaceted persona promises a riveting journey in the world of code.