Why IntelliJ IDEA is hailed as the most friendly Java IDE (many screenshots)
blog.jetbrains.com
blog.jetbrains.com
For example, Ctrl-w is a very important keybinding on IDEA, one that I use all the time (it expands the selection to the enclosing expression). It's literally wired in my brain now. To the point that I now use it in Eclipse as well and I even started using it in other places (Sublime, etc...) and... closing the window as a result. Very annoying.
Another one is that Ctrl-n sometimes creates a new file (expected) and sometimes... something completely different depending on your current window. Again, not friendly. Optimized for development and a life saver on the long run, for sure, but it's fairly user hostile.
Just swap the CTRL+F4/CTRL+W and ALT+INS/CTRL+N bindings and IDEA behaves like every other piece of software in the world.
It makes sense, but it's not user friendly, which is the point I was making.
The thing that frustrates me most in IntelliJ is that all of the dialog windows are modal for no apparent reason. Why can't I focus the main window or at least interact with it to change tabs, select text, etc when I have dialogs open?
"Find in Path" is a particularly obnoxious example: it's fairly common that I want to search for a string fragment, so I open the search dialog and set up my search context, then try to select text to copy as the search term, but I can't, so I have to start over.
I want to be able to interact with the editor at all times, though I could see locking it during complicated refactors to keep me from changing code while the IDE is trying to change it too (only while a progress bar dialog is visible).
Modal windows should be the exception, not the rule.
---
To be clear I love IntelliJ. While I prefer simpler editors in many situations, I can't see myself going back to anything else for medium-to-large JVM projects (Scala especially). The modal niggle and a few other minor usability issues are small blemishes on an otherwise great IDE.
Funny, as soon as you said that, I nodded and I immediately thought "For example, the universal search dialog should definitely not be modal". And then you follow with...
> "Find in Path" is a particularly obnoxious example
Totally agree and I'm surprised I missed it. Modal dialogs are not user friendly (and very old school UI).
In terms of overall usability, speed, and stability IDEA is incomparably better. Yes, there are a few minor things that eclipse does better/IDEA can't do (so I keep reading). But this is hugely overshadowed by the fact that IDEA is a high-quality, well-supported professional-feeling product. In comparison, eclipse looks, smells, and acts like a kludgy, bloated, long-lived open source project.
The main important difference is that eclipse is free, and thus some folks seem to really go to bat defending it. There is a certain powerful frugality ethic among developers.
But really, if you're not going to get bent out of shape about spending a few bucks for a piece of software you spend many of your waking hours using, there is no serious comparison.
Proprietary, closed source development vs. Open Source software development in a nutshell.
I'm really glad a friend recommended IntelliJ IDEA to me. It's a great product. Having used both Netbeans and Eclipse on a rather powerful machine, the UI would lag. I don't like to wait for computers to finish computing things when I'm programming pretty much in just a text editor ("writing code mode")...which brings up another point - Atom is not a great text editor either because it is so UI laggy it slows down development.
The Ultimate Edition is worth the money, but the whole system is just a bunch of very well built plugins atop the CE.
This times a million.
Though I do love open source both in principle and in many products, certain proprietary software tools are entirely worth paying for due to how much more productive they make you. IDEA is my prototypical example.
To elaborate, on a MBP Retina, you'll find that the UI lags slightly if typing fast, especially if a lot of syntax highlighting is happening on the screen. It does not happen if you are using NetBeans on an external monitor. The NetBeans team claims it's a Java issue, so in the end I just didn't want to wait anymore, and I downloaded IntelliJ.
As for dark theme and theming Intellij/Eclipse both have their quarks (Eclipse being far more quirky).
Here is a screenshot of a personal port of the Atom One Dark theme (I love that theme) to both IntelliJ and Eclipse (left and right respectively): http://imgur.com/Myo4KxM
IntelliJ One Dark Theme: https://gist.github.com/agentgt/bf2271786c250e86ab19
Eclipse One Dark Theme: https://gist.github.com/agentgt/fcaf75eb8acf92e08926
You can configure IntelliJ to behave similar, the option is disabled by default. Its the "Make project automatically" option in the "Build, Execution, Deployment -> Compiler" settings window.
Also, IntelliJ can use ejc if you like, the "Build, Execution, Deployment -> Compiler -> Java Compiler" window, the "Use compiler:" option.
Also the Save Actions in general, I have found eclipse to be better (even over the special Save Action plugin for IJ).
It's just a fact, not a slight.
(And I say this as someone that happens to love just about everything this company puts out!)
And my interpretation makes perfect sense, especially if you consider the individual in question might not be a native English speaker. Seriously, I think people complaining about this are reading far too much into this. Chill.
Edit: and not that I'm telling the jetbrains folks how to do their job, but a marketing manager who has communication difficulties in a given language generally isn't given the responsibility to make public company statements in that language.
Basically your objections aren't holding much water.
The git "commit and push" workflow is less ergonomic than eclipse's - you have to wait for it to perform the commit and then ok another dialogue to do the push, rather than just hitting "commit and push" and letting it happen in the background.
There's no obvious way to search within a directory. I don't want to search everywhere which is the only option I see in ctrl-A. I want to be able to right click or similar on a directory in my project and search just in that directory.
I can't tell how to reorganize the UI. In Eclipse I have the Window > Views menu. In IntelliJ panels seem to appear and disappear arbitrarily as I invoke particular actions and I have no idea what rules it follows or how to control it. Edit: aha, there's a weird square in the very bottom left corner: having clicked that the tabs for the panels have appeared which makes it much easier.
No save button means I can't tell the IDE when not to try to compile. This is important when working on complex code (particularly Scala) and I know compiling it is going to take a few seconds of sluggishness.
The Scala presentation compiler (admittedly not really the subject of this article) has too many spurious errors (most prominently one I reported as SCL-9700).
Most importantly of all, continuous building simply isn't reliable enough. In eclipse, if I've hit save I can tell when the build has finished, and if the build has finished and there are no problems in the problems view then I am 100% confident that my code actually compiles. This simply isn't the case in IntelliJ (e.g. after renaming a class it won't necessarily complete the rebuild and so errors don't always show up until after you deliberately make).
Right-click on folder, "Find in path..." does exactly that, doesn't it?
I switch between Mac (work) and Linux (home) and trying to remember which Linux shortcuts move onto Cmd is turning out to be a struggle.
On OSX at least: CMD+SHIFT+F brings up the Find dialog. Scope defaults to Whole Project (ALT+H) but you can change it to Directory (ALT+O) which seems to default to the directory of the currently selected file. (Or maybe Scope actually defaults to the last one you used.)
I'm wondering what version of IDEA you tried that wasn't this way?
I don't run into compiler issues too often, but I also don't use shapeless or scalaz so I wouldn't be surprised if more complex type signatures give IDEA trouble. I have noticed a drastic improvement with the Scala support since IDEA 13 or so.
Sadly the Scala support is still quite unreliable at least at the presentation level - lots of spurious red in the editor - maybe better than it was. I use both shapeless and scalaz extensively.
That being said, as someone who uses IntelliJ frequently, I wanted to respond to a couple of your points:
> No obvious way to search within a directory
In the "project" pane (the place where it shows the folder structure of your files) just right-click on any folder and select "Find in Path" (Ctrl-Shift-F). Definitely an important feature, I use this all the time.
> I can't tell how to reorganize the UI.
You solved this yourself. ("aha, there's a weird square in the very bottom left corner...")
> No save button means I can't tell the IDE when not to try to compile [...] compiling it is going to take a few seconds of sluggishness
Interesting. My experience has been that the compiling just takes up background, low priority threads and doesn't interfere with my work -- I don't even notice it getting behind. I have never tried it with Scala code (which does a LOT more during the compile phase) so maybe it's more noticeable when doing that.
> continuous building simply isn't reliable enough [...] (e.g. after renaming a class it won't necessarily complete the rebuild...)
Curious. I never seem to encounter problems like this. I wonder why. Does the ability to trigger a make when you want it mitigate this somewhat?
Indeed. I think this whole thread is showing that the UI has a lot of surprising/nondiscoverable aspects though. It would be better if all the functionality was accessible via the main menus as a fallback.
> Does the ability to trigger a make when you want it mitigate this somewhat?
Ironically it would probably be better to get myself into the right habit if the continuous building were less reliable - it goes wrong rarely enough that I feel dumb insisting on a make every time, but if I start trusting it I get tripped up.
The key combination for make is relatively fiddly. Maybe I should try binding it to ctrl-S.
There is a "commit and push" button. You have to hover your mouse over the Commit button in the Commit Changes window to see it.
Did you check the articles' URL? It's blog.jetbrains.com (i.e. an official JetBrains blog). A disclosure would be redundant.
What really really turned me off was when I found and reported a really annoying bug only to be told to buy the not yet released(IIRC) upgrade.
At work I mainly work on two APIs that work closely together so in Eclipse I can have both open and just jump between the projects easily and at home I like to have all my scratch pad projects/ideas in one eclipse workspace so I can jump between them all easily.
I know there are kinda workarounds with modules but it doesn't really work well, if they allowed the ability for multiple projects in a workspace I'd jump ship but sadly it seems it'll never be supported (according to co-worker who is a die hard IDEA fan).
I think my favorite keyboard shortcut in IntelliJ is double-tapping shift to get a really smart search to pop up.
I'm starting to use IntelliJ for other reasons though - double-shift is one of my favorites as well.
Eclipse seems to take some its UI look and feel from the host operating system, resulting in a weird mish mash of conflicting colours and difficult to read text.
I ended up just settling for changing the editor colours (to my favoured Sunburst theme) and keeping everything else stock.
IDEA is great for dark themes though. No messing around getting everything consistent and readable.
Also - the Model dependency diagraming is phenomenal in RubyMine.
http://stackoverflow.com/questions/539231/how-to-use-multipl...
The only thing I can complain about is that IntelliJ's Maven support is atrocious. Maybe I'm missing something but I've played around quite a bit and I just can't make it search Maven Central's catalog properly. I literally have to drop back into Eclipse to add dependencies. It's OK given that you usually set up your dependencies once and are OK for a while, but it's definitely out of step with how perfect everything else is.
The better question is, what is eclipse doing right that all the others can't?
Me, I use the two day-to-day and never have issues, even not when I open all of the TomEE examples in addition to my normal projects.
Though honestly I never use this feature, I prefer to research library website or, if I'm looking for a latest version, use something like search.maven.org , it might not be the fastest way, but I'll be sure that I use correct version. Maven repository contains some outdated duplicates for popular library and it might not be obvious.
Like I said, I've played around a bit with it in Netbeans and Eclipse and I'm familiar with the idea of downloading the index before I can search. I can't make it work properly in IntelliJ. Is there a Youtube video of an install->index->download workflow somewhere?
You can fork Idea on Github and send pull requests...
Oh, and auto-import of SBT changes? Turn it off. Definitely turn it off.
Same here. It sounds like my MBP is going to take off when it has to build it's indices or whatever. Would be nice if it didn't cane my machine so much but I guess it's all the type stuff and implicits, etc.
Code generation. Getting a bunch of getters and setters from a right click is nice sometimes. But more importantly is being able to go to a class definition, do an Alt + Enter, and create a test file for that class in the correct tests directory.
Auto-completion is very powerful. If you're trying to call a method on your AbstractBeanFactoryImpl, you don't need to start by "Abstrac", if there are other results with that preface. You can just try "abfi" and it will probably get the right result. Super useful when you have multiple variables that start with the same sequence of letters.
All the space-saving it does. Have a one line getter or setter? It will display those as one line (with highlights to let you understand they're actually three lines, brackets included). Even some common things like creating a Runnable in Android and overriding it's Run method. Replaces three lines with a straightforward: "Runnable myRunnable = () => {". Feels like you're programming in a less verbose language.
Sad thing is, really new interesting features are rare. There is no deep learning IDE that watches you debug, and associates source code by changing variable X fixed bug in file Z via time of change correlation and instruction flow graph.
There is no real approach to layered responsibility. Meaning, a beginner should be allowed to change functions, but not add classes and interfaces to existing well structured code, without the author signing those "big" changes off. This crucial "zoom out into algorithms and architecture" and drop back in to display details- still often happen via external tools, as the IDE is not able to abstract Information from the actual sourcecode away.
Finally - debugging and Unittests, these are actually highly automate-able task- yet here im stepping it, even though by now at least conditions can be attached to the various execution paths.
Finally, no ide has a "User" Simulation, to detect crappy requirement engineering before the whole thing is gone into software. A proportioned team of simulated "persons" and "use-situations", that gets to traverse a draft of the gui and the workflow should detect hotspots and annoyances, and avoid a lot of unnecessary & expensive itteration.
It's nice having my relevant Java, grails and php projects in one window, which eclipse is quite good at. A way to get multiple maven and grails in the same window is pretty much a must for me.
If your on Mac its Ctrl-Alt-H and if your looking for Eclipse find references for intellij its Alt-F7. If your looking for mini outline mode (aka command-o in Eclipse) its command-F12.
https://www.jetbrains.com/idea/help/navigation-in-source-cod...
Then I get frustrated with that workflow because it doesn't well working on remote servers and go back to VIM. Which I also can't seem to get comfortably configured.
So then I boot one of my macs into Windows for a while and use VS with Pyrhon Tools and get frustrated with Windows, and well . . . .
Sorry, I know this isn't about Python. I've just never found that jet brains products work well for me. I feel like I'm fighting with them. Maybe it's time to give it another shot.
After learning the keyboard shortcuts for "Jump to Symbol"," Jump to File", and "Jump to Class" my productivity increased maybe 3 fold. Why should I remember where stuff is when the computer can do it for me?
I'd recommend turning off tabs and using split views though. You can get a lot of mileage if you tweak PyCharm (especially for web projects, where the HTML/JS/Typescript integrations help a lot)
Also, if it helps, we just did a Getting Started nine-part series of screencasts, available on YouTube. Of course, if the part that isn't working for you doesn't get mentioned, then I need to add to the series.
The title should be "Enjoying Java and Being More Productive with IntelliJ IDEA" as per the original post.
Specifically Java2EE/Web?
To be fair, most Java IDEs suck. Eclipse's usability is the worst I've seen in any IDE and, surprisingly, one of the most popular.
Please stop pretending you're not doing this for marketing. IntelliJ is all over "social media" (who would have thought you've already submitted this on Reddit, too [1]) and is constantly pushing a campaign for its products. That's very fine by me – but don't pretend it's not advertisement.
[1] https://www.reddit.com/r/java/comments/48xf5h/why_intellij_i...
(Curiously, I've found IntelliJ to be actually better for Python development than the Python-specific offering from the same company - PyCharm)
Of course, you get support for lots of other languages in IntelliJ that aren't available in PyCharm.