The miracle of 'devcontainer' and others

I am typically the guy you face in a new company and feel they do magic. The one who lives in the terminal, who never uses anything other than vim, whose only GUI application is the browser. Even though I’m definitely not a magician, I do live in the terminal, or at least, I used to.

For the last few years, my main text editor has been vim, the pure one, not the crappy bloated neovim. I don’t use any plugin manager other than git for installing those very few plugins I need, the ones that cannot be implemented directly in the config file. I have a few shortcuts that open terminals in vertical and horizontal splits where I can use lazygit or perform shell commands. The only other plugin I have is Copilot which is a game changer. And looking from the outside, I sometimes understand why people think I’m doing magic.

But things change! Me, who wondered why people like to use VSCode, finding myself not just using it, but making a blog post to encourage others about it too. What a world… If you can hold your anger by the end of this post, you may give me some level of right to want to ditch my lovely vim setup for working on projects that are larger than a few files.

Why VSCode?

Because of powerful extensions that are hard to simulate in vim. Don’t get me wrong, vim is perfect. The one and only text editor I use for the rest of my life. I have installed it on my work machine, on my homelab server, and even on my Android Linux terminal. You learn vim once and you use it for the rest of your life. Though you cannot use the full power, you still can benefit from its shortcuts in almost any other editor including VSCode. Yes, you don’t have macros, but at the end of the day, you give some and you gain some. Here, I want to elaborate what I have gained that made me switch to VSCode after years of Vim.

Dev Containers

The absolute game changer. The one and only that made the migration from vim finalized. The one that is possible to re-do in vim, but it is by far easier to deal with in VSCode. Life is just easier when I open the editor, and it jumps into the relevant container and even beyond that as it supports compose files, it can bring up the whole orchestration for your local development. Extensions that can be installed for each project individually is a huge plus. I don’t want to carry extensions for all languages I work with to bloat the editor. If I am working on a NodeJS project, then I just install relevant extensions for it.

But this is beyond just an easy setup for my development workflow. It goes beyond me, and can turn into a team culture. When you set up the devcontainer for a project and commit it in version control, you are giving the power to any of your teammates to be able to simply have your development environment within a few clicks. With this, there won’t be any problems in setting up projects on different operating systems. No issues in working with older Linux kernels or even in MS Windows. The team clones the repository, opens the project, and boom! they can start building and testing. This is what you cannot get with vim.

One more advantage of this extension is the culture of containerization of old projects. This is the first step, where you can simply extend the Dockerfile to be used by your CI pipeline or even be a base for your deployments in the future. It brings more than just a new tool into the desk, it can bring a new culture.

Find it here: Devcontainer Extension

Live Share

Another essential part of my VSCode is this extension. Yes, again you can gain the same benefit by using a session persistent tool like tmux in combination with ssh, but that is not only hard to do but as you give ssh access to others, it may result in unwanted side effects. With this extension you can start working together on a project on your pair programming or workshop sessions. Changes are saved on the host’s machine, and the terminal environment can be shared if the host allows the permission. This is yet one step toward better team communication and culture, especially in remote teams where people need to set up many things to pair program.

Find it here: Live Share Extension

In the end, it all comes to how comfortable you are with the tools you work with the majority of your time. There is nothing more important than your efficiency and confidence and the post here did not intend to change your mind. It’s just a discovery for me. I still use vim, in fact I am using it to write this blog. But when I think about bigger work, collaborations, and simply somewhere beyond just me, then I can see benefits of a more sophisticated tool like VSCode. Anything you choose, just remember a tool does not make us a better/worse programmer, it’s just a tool.

Happy Coding,
Spring 2025, Oulu, Finland