Hacker News new | ask | show | jobs
by camgunz 2048 days ago
I'll bite; I'm real good w/ Vim.

My thesis, which is a borderline polemic, is that if Vim doesn't suit your needs you are doing it wrong. If your program/language/environment needs a smart editor, you've built or chosen a program/language/environment that is too complex, and an IDE won't ever solve that fundamental problem. I get we don't always get to choose these things (wh o hasn't had to learn React, Typescript, or the general JavaScript ecosystem) but my cultural stance is the people who made those things should have used Vim, realized it was hard to manage w/ Vim, and questioned their priors.

That might sound nuts or the ravings of someone who's completely drank the kool-aid; who got good at one difficult thing and now like, jams it in everywhere to ladder pull or whatever. And so I should say that I'm super amazed by the capabilities of IDEs like PyCharm or even Eclipse (or, honestly, even Code::Blocks). The sheer engineering effort alone is awesome, but some of the stuff you can do with them is incredible. I can't imagine developing the source code of Eclipse with Vim. But does using an IDE to develop Eclipse make Eclipse great, or does it simply make Eclipse _possible_?

I contend Eclipse shouldn't exist, at least not in its current form. It's too complex for humans, and its design necessitated so many engineering hours it was a net loss for humanity. If the complexity of your program/language/environment rises to the level you need an IDE to manage it, the only thing to do is start over.

2 comments

Just to reassure you, you are not alone and I share this feeling exactly. It would worry me considerably if I could not use a generic text editor to work on some project. I would feel that the battle against accidental complexity was lost right from the start.

Fortunately, it never occurred, even when complex Java or Javascript frameworks were involved and coworkers thought specialized IDE were mandatory.

hmmm, if I apply that logic in other places it doesn't seem to work.

* if you can't cook with just a knife then it your food should be redesigned to need only a knife.

* if you can't film in with a camera then you should rewrite your movie (no CG).

* if you can't send it by paper then it should be re-written (no animation, no interactive diagrams, no apps)

To put it another way, I'd much rather use Final Cut Pro or Davinci Resolve to edit a video than FFMpeg. If someone became an expert in editing snippets into movies with ffmpeg from the command line and then told me that writing movies that require lots of editing is just bad writing and that it would be better if I wrote my movies so they required as little editing as possible I'd look at them funny.

Isn't it possible building up the system is a force multiplier in the same way that all the examples above the false restrictions prevent lots of progress?

It's not about force multipliers in general. It's about looking at what force multipliers incentivize/deincentivize and amplify/muffle.

With your examples, I would say something like:

OK I once only had a knife, but now I've invented an egg beater. This will allow me to do some things a lot more easily like:

- Bake cakes

- Eat soup

This will also mean I cut myself a lot less when I do decide to do something like eat soup.

So we're gonna have more cakes/soup in the world. Good? Great, egg beater stays. Bad? Woof, burying this thing in the yard. But wait I hate cutting myself. OK I'll figure out some other way to keep myself from gorging on cakes, or I guess be content with that.

So, broadly it's about thinking systemically--how the design of our tools affects how and what we build. Because it definitely has an effect. If it's easier to use a nailer than a screw gun, guess what, you're nailing more stuff. If it's easier to write a PRECONDITION clause in a function definition than a unit test, guess what you're writing a PRECONDITION clause.