I've used Emacs for 32-33 years and I can't even imagine how many lines of code I've written in it.

Every 2-3 years since the early 2000s I would try an IDE for 1-2 months, but then go back to Emacs again because I was simply faster in Emacs and because the IDEs were supremely ugly, resource intensive and slow.

A few years ago things started to change. IDEs started to become less clumsy. Less horrible to de-fang to the point where they became tolerable. They might have gotten a bit faster too.

Then some time around february this year I felt it was time to give IDEs a try again so I spent about a week configuring VS Code to where it was tolerable. Mostly by removing visual noise. All keyboard bindings etc are standard because I think you ought to learn how to use a tool as close to its default configuration as possible because that means you can make use of the knowledge of other people.

Now, about 6 months later I think I might stick to VS Code for programming in the foreseeable future. Here are some reasons why:

- The support for various languages in Emacs just isn't being maintained. Every so many months my setup for Go would break hard, and along the way small things would constantly stop working and I would have to figure out "what the heck happened now" and hack my way around it. Or shrug and say "okay, so that's gone". This was no different in C/C++, Java and other languages in the past.

- Emacs doesn't have a sufficiently large active developer base. Not only does this lead to poorly maintained language support, but it kind of goes against one of my basic rules for choosing tools: no marginal stuff(1). And Emacs has become marginal. So while I love Emacs, it no longer qualifies as a viable tool in my eyes.

- Emacs isn't going to catch up with VS Code. And I don't think many long time Emacs users want to. They just want to be left alone. Emacs has too many failed attempts at making configuration and adding third party code work well (it really doesn't) and even work with the reams of elisp code each of us tend to end up with after years of trying to get broken stuff to work. Enough for us to develop Stockholm syndrome and thing we want all this chewing gum and duct tape holding things together.

- I don't like JS and its derivatives (like TS) and my dislike is almost militant -- but it beats elisp hands down on every metric that actually matters in the real world: chief among them the number of decent developers who will write and maintain extensions.

As I said, I still love Emacs and I've written close to 100% of my code in it for 30+ years. But I've kind of arrived at the conclusion that it isn't going to evolve fast enough for it to be an attractive option.

VS Code is far from ideal. For one it is written in a language I detest. But it is better for programming Go, and C++, and C and probably java (I haven't written a line of Java for 4 years so I don't know). Yes, it has shortcomings, but fewer than Emacs if your focus is to be a productive programmer and not muck about fixing poorly maintained bits that suddenly stop working.

If people think 30+ years of using Emacs represents an investment they can't afford to throw out I seriously doubt they have really tried. I also think people underestimate their own ability to rewire their brains. I turned 50 this year. I'm extremely conservative when it comes to tools, languages, operating systems because I'm just not that interested in wasting time tinkering with my environment: if it works it doesn't need messing with.

If I can get comfortable with a different environment for programming in a matter of weeks, so can anyone else.

(1) I try to avoid using tools and software that has too few users. Sure, there may be better tools, but tools with small audiences tend to not be well maintained over time. Few users also means fewer solutions you can find online to problems you might have. Pick tools that have large audiences and you will find people that have had the exact problem you are trying to solve. I apply this when choosing OS, language, hardware, tooling etc.