I Still Prefer Eclipse Over IntelliJ IDEA

Over the years I’ve observed an inevitable shift from Eclipse to IntelliJ IDEA. Last year they were almost equal in usage, and I have the feeling things are swaying even more towards IDEA.

IDEA is like the iPhone of IDEs – its users tell you that “you will feel how much better it is once you get used to it”, “are you STILL using Eclipse??”, “IDEA is so much better, I thought everyone has switched”, etc.

I’ve been using mostly Eclipse for the past 12 years, but in some cases I did use IDEA – when I was writing Scala, when I was writing Android, and most recently – when Eclipse failed to be ready for the Java 9 release, so after half a day of trying to get it working, I just switched to IDEA until Eclipse finally gets a working Java 9 version (with Maven and the rest of the stuff).

But I will get back to Eclipse again, soon. And I still prefer it. Not just because of all the key combinations I’ve internalized (you can reuse those in IDEA), but because there are still things I find worse in IDEA. Of course, IDEA has so much more cool features like code improvement suggestions and actually working plugins for everything. But at least some of the problems I see have to do with the more basic development workflow and experience. And you can’t compensate for those with sugarcoating. So here they are:

  • Projects are not automatically built (by default), so you can end up with compilation errors that you don’t see until you open a non-compiling file or run a build. And turning the autobild on makes my machine crawl. I know I need an upgrade, but that’s not the point – not having “build on change” was a huge surprise to me the first time I tried IDEA. I recently complained about that on twitter and it turns out “it’s a feature”. The rationale seems to be that if you use refactoring, that shouldn’t happen. Well, there are dozens of cases when it does happen. Refactoring by adding a method parameter, by changing the type of a parameter, by removing a parameter (where the IDE can’t infer which parameter is removed based on the types), by changing return types. Also, a change in maven/gradle dependencies may introduces compilation issues that you don’t get to see. This is not a reasonable default at all, and I think the performance issues are the only reason it’s still the default. I think this makes the experience much worse.
  • You can have only one project per screen. Maybe there are those small companies with greenfield projects where you only need one. But I’ve never been in a situation, where you don’t at least occasionally need a separate project. Be it an “experiments” one, a “tools” one, or whatever. And no, multi-module maven projects (which IDEA handles well) are not sufficient. So each time you need to step out of your main project, you launch another screen. Apart from the bad usability, it’s double the memory, double the fun.
  • Speaking of memory, It seems to be taking more memory than Eclipse. I don’t have representative benchmarks of that, and I know that my 8 GB RAM home machine is way to small for development nowadays, but still.
  • It feels less responsive and clunky. There is some minor delay that I can’t define well, but “I feel it”. I read somewhere that they were excessively repainting the screen elements, so that might be the explanation. Eclipse feels smoother (I know that’s not a proper argument, but I can’t be more precise)
  • Due to some extra cleverness, I have “unused methods” and “never assigned fields” all around the project. It uses spring, so these methods and fields are controller methods and autowired fields. Maybe some spring plugin would take care of that, but spring is not the only framework that uses reflection. Even getters and setters on POJOs get the unused warnings. What’s the problem with those warnings? That warnings are devalued. They don’t mean anything now. There isn’t a “yellow” indicator on the class either, so you don’t actually see the amount of warnings you have. Eclipse displays warnings better, and the false positives are much less.
  • The call hierarchy is slightly worse. But since that’s the most important IDE feature for me (alongside refactoring), it matters. It doesn’t give you the call hierarchy of default constructors that are not explicitly defined. Also, from what I’ve seen IDEA users don’t often use the call hierarchy feature. “Find usage” I think predates the call hierarchy, and is also much more visible through the UI, so some of the IDEA users don’t even know what a call hierarchy is. And repeatedly do “find usage”. That’s only partly the IDE’s fault.
  • No search in the output console. Come on, why I do I have an IDE, where I have to copy the output and paste it in a text editor in order to search. Now, to clarify, the console does have search. But when I run my (spring-boot) application, it outputs stuff in a panel at the bottom that is not the console (it’s called “run tool window”) and doesn’t have search.
  • CTRL+arrows by default jumps over whole words, and not camel cased words. This is configurable, but is yet another odd default. You almost always want to be able to traverse your variables word by word (in camel case), rather than skipping over the whole variable (method/class) name.
  • A few years ago when I used it for Scala, the project never actually compiled. But I guess that’s more Scala’s fault than of the IDE

Apart from the first two, the rest are not major issues, I agree. But they add up. Ultimately, it’s a matter of personal choice whether you can turn a blind eye to these issues. But I’m getting back to Eclipse again. At some point I will propose improvements in the IntelliJ IDEA backlog and will check it again in a few years, I guess.

18 thoughts on “I Still Prefer Eclipse Over IntelliJ IDEA”

  1. It would have been nice to actually say what are the cool features of IDEA as well, not just list the problems 😉
    IMHO, these are:
    – autocomplete is amazing
    – instant search everywhere
    – easy refactoring

    You already mention support for new technologies, which they try to anticipate and prepare. While Eclipse team is usually adding support after the release, JetBrains already introduced some Java 10 support this week…

    Now one cool tip that really helped me – you can use Eclipse compiler in IDEA!

    Just go to Preferences – Compiler and change it. Incremental compilation FTW. It is way superior, much better then javac, as it is designed for use in IDE. Should be the default one, but it isn’t.

  2. True – ultimately it’s a matter of personal choice – I don’t agree with 2 points.
    You cannot blame the lack of knowledge of what’s “Call Hierarchy” on the IDE – that’s user’s fault IMO.
    Output console is searchable.
    Unless we’re not talking about the same “panel/window”…but in “Run” and “Debug” panels, where normally the app is sending default console output – it’s searchable and has highlighted matching in the text.
    Personally I find that the refactoring features are better than in Eclipse, and the code hints are awesome. Things like “getOrDefault” and “computeIfAbsent” on Map, inner classes to lamba expressions, method reference in lambda expressions, working with the streams API – way more easier than in Eclipse. Of course – this is again a knowledge aspect and is responsibility of the developer, not the IDE. But what I see among my colleagues, is that the people who use IDEA generally have better knowledge of the methods in new/recent Java APIs than the ones who use Eclipse – even for APIs that are not hinted from IDEA.

  3. I think at this point is just a question of religion. As long one is comfortable. I found I spend less time configuring with IDEA

  4. Completly agree with you. Tried IntelliJ for a year and than went back to Eclipse. I can even add something interesting about your first point, the projects not being built automatically. In projects I worked where team members used IntelliJ, quite often we had code being pushed/committed with basic compilation errors. Things that never happen with people using Eclipse. Simply because they see those errors right away.

  5. @Rodrigo
    Not seeing compilation errors using default IDEA compiler configuration indeed sucks.

    Having teammates that will push to repo without running the code they wrote at all… You’ve got much bigger problems than their choice of IDE 😉

  6. Interesting how even the most hardcore supporters of Eclipse switch to IntelliJ IDEA as soon as something else than Java-only is involved: as soon as either Scala, Android, Kotlin or Javascript (*) is added to the development stack, Eclipse is set aside.
    Also interesting: all issues you listed can be solved by taking the time to configure IntelliJ to your needs.

    (*) I almost added Spring to the list: indeed I’ve not seen a recent presentation by Pivotal where STS was used…

  7. “Projects are not automatically built ” – am I the only one who uses Nodemon for Java projects 😀 (both on IDEA and Eclipse)

  8. “No search in the output console.”
    did you try “ctrl + f” after clicking on a console tab? ))))

    “The call hierarchy is slightly worse.”
    did you try “call graph from here” or “to here”?

    “Projects are not automatically built (by default)”
    “You can have only one project per screen”
    “Speaking of memory”
    “It feels less responsive and clunky.”
    veeery strange “fault”, something wrong with you if it’s critical for you 🙂

    “Due to some extra cleverness,”
    that’s only your problem – fix code, project or disable checking (even it’s possible).

    “CTRL + arrows by default”, this is configurable, but is yet another odd default. ”
    can’t understand your problem here, if you can rebind it to a “CTRL+arrows” do it. What’s a reason for complaining?

    as for me I’ve never like eclipse cause it worked worse than a Netbeans (I wasn’t a spring developer that time), and now 3 years with Intellij and I’m really happy. Some things like key bindings I’ve tweaked and so on, so I’m really comfortable now and no one can force me to use eclipse 🙂

  9. “You can have only one project per screen” have you tried “new module from existing source” ?

    Works the same way as multiple projects on eclipse.

  10. @Kostadin,

    Hahah. Definitely. I agree with you. But then, why use and IDE that makes things even worse than they already are? They are supposed to make things easier, not the other way around. But mainly it’s a matter of taste.

  11. Basicly xD my machine have low ram = i hate idea. Well, u had to boost very much ur eclipse to have it working there. I remember having eclipse, juno? Boy oh boy, it was killing my machine, while jumped to idea, was much faster. Then u tweaked eclipse and it worked better. But guess what.. i had to turn off almost everything xD and thats not by default, and for u if not by default then eclipse is worse. Finding files is much more slowly, and thats a fact, not opinion. Ctrl+arrows is again opinion. And as u mentioned, u can change it. Then easly u can import settings between version changes – dont remember that in eclipse. As for another thing i love in in idea. Is ctrl +a find action and find symbol. About the unused methods while using spring.. i am not sure but in ultimate u wouldnt have it. Even if sometimes you do, I do remember eclipse showing me hundreds of errors while they were false positive. Again, dependa on project. Above all… Clickbait article and blog goes to black list

  12. 1. Projects are not automatically built

    yeah, this is annoying for me too, but I’ve gotten used to hitting the build hotkey when I’m done typing, in some ways it’s less annoying than having builds running when I’m not ready for something to be built. Though I would like a pre-commit build hook.

    2. You can have only one project per screen. Apart from the bad usability, it’s double the memory, double the fun.

    it shouldn’t be double the memory, the jvm should have shared memory in use. I That said some things may not be appropriately shared, I don’t know.

    3. It feels less responsive and clunky.

    it can be, switch to G1, I dislike the default, hopefully when Idea moves to Java 9, they will stop custom setting the garbage collector, this will also help with your excess memory usages as GC will run more frequently, and pauses will be faster.

    4. , I have “unused methods” and “never assigned fields”

    You can tell Idea to ignore fields/methods with *annotation*, it’s just not auto-done for you, and why would it be? why should idea know about every non standard framework. Though arguably the spring framework plugin should be better about detecting this. Though if you’re using constructor injection, the fields at least shouldn’t be a problem.

    5. No search in the output console.

    You can click the console and ctrl+f, or something, it’s possible since you’re using eclipse bindings this feature is unbound (I presume you mean the output console and not the built in terminal), but it definitely has it.

    2 cents, I tried eclipse first, all I can say about it, you get what you pay for. I’d rather use vim for editing java than Eclipse. Eclipse simply has too many bugs, and too much missing functionality for my taste. I <3 that ECJ will not compile things java will, but eclipse is dead set on having its own compiler.

  13. @yuri

    I know the “console” has search. But when I run a command-line application it’s not the “Console” view that’s shown, but some other… console (terminal output). Also, call hierarchy works mostly okay, except for finding default constructor invocations.

    Btw, you can’t say something’s wrong with the user, especially when he finds another product better 🙂

    @Szymon
    8G is still enough RAM. Unless I run 2 browsers, cassandra, elasticsearch and a game on the side, it is sufficient. That doesn’t mean IDEA consumes less.

    I find it odd how some people are triggered by me not liking their favourite IDE… This is not kindergarten, you know.

    @rmpestano these multiple projects are not so coupled to make them “modules”.

    @ the rest – thanks for your comments, appreciated.

  14. “these multiple projects are not so coupled to make them “modules”. a “module” in IDEA is the same as a “project” in eclipse. The “new module from existing sources” is the same as “import project” in eclipse.

  15. I feel exactly the same way. When I was working with an Android project, I even went through the effort to make Eclipse (not ADT!) work for Android development again to avoid the IDEA-based Android Studio.

    I know exactly what you mean with sluggishness. I think something in IDEA introduces as delay of about 100ms from you type a key on the keyboard until it shows up. I think most people have too slow nervous systems to even pick it up.

    Two more issues that I’ve experienced to add to your to your list of gripes:

    * IDEA has breaking refactorings. Even though IDEA supports more refactorings and in a more powerful way than Eclipse, IDEA may change the behavior of your code on certain core refactorings.
    * The Eclipse quick-fix (ctrl-1) is almost magical, compared to the rather pedestrian alt-enter in IDEA.

    All of the issues get even worse when you add the Infinitest autotest plugin to the mix. Running in Eclipse, on every save, all my affected tests run automatically. In effect, I often get feedback when I introduce a bug within 10 seconds, making the undo-button an easy option.

    I’ve seen IDEA-heads write code for significant fraction of an hour, just to be faced with a huge number of compilation or test errors in their code.

    I still run circles in Eclipse around the whippersnappers with their fancy IDEAs. 😆

  16. As one of my former colleagues said when observing another co-worker using Eclipse instead of IntelliJ, “ahh, I like old cars too!”

  17. I switched from Eclipse to IDEA about two years ago. It took a while to get used to the UI and the flow of the IDE design. I like it primarily because it saves me time because the supported plugins just work. In Eclipse, I would have to fiddle with Wildfly/Jboss settings each time I upgraded either eclipse or the plugins. Sometimes, it would take a while. But with IDEA, it just works right away with minimal fuss.

    Having said that, I do miss a few features in Eclipse that, to me, are more productive. For example, in Eclipse, I can debug an issue with a transitive maven dependency with the powerful search ui which lets me type in any part of the dependency and it will show me which jar is including it. In IDEA, there is a right mouse click -> Maven -> Show Effective Pom and there is also an option to diagram the dependencies but it is not easy to search for a wildcard name.

  18. The one thing that Eclipse hasn’t been able to fully implement in these years is a proper Dark Mode. The dark theme provided still seems inadequate, it looks like GEF does not support it completely. IDEA dark mode is just beautiful.

Leave a Reply

Your email address will not be published. Required fields are marked *