With a risk of starting a religious war between these schools, I will be bold enough to say that when it comes to Java development, IntelliJ wins hands down, and I’ll explain my perspective below.
But, before moving on to the gist of it, let me add some context and background to my current situation. Having been a geek at heart, I am always looking for even geekier ways of doing things. For example, rather than just deploying one of the few hundred blogging applications out there, I’ve written my own using Django. It’s not because I have a masochist mind, but because I find it fun, exciting and challenging. Based on that, I can basically summarise my professional (IT and programming) needs as: geeky, fun and exciting. Others, come second (yes, that includes remuneration and benefits). I’ll jump on to anything that is interesting and challenging. With that out of the way, lets continue.
I’ve been building front office trading applications for a good part of 2.5 years now (straight out of college). All of it in Java. No J2EE, just all in good ol’ plain J2SE. In a short span of time, I’ve managed to use so many Java technologies – Hibernate, Jetty, Tomcat, JBoss (we never used it as a J2EE container), Log4j, Slf4j, commons-*, etc. I’ve learnt how to write performant code, to think twice on how a JVM might compile this code, and how JIT might enhance it. I’ve learnt to plan and code very quickly as well. Summing all of these up, I need an excellent tool for programming to ensure that I spend all my time solving the problem at hand, rather than solving the problems of the tool.
I had used Eclipse in college, albeit sparingly. It was OK, and I thought that IBM did do a great job in initiating it. Then I graduated and started at my first job. The team had a standard on using IntelliJ, and for the first time in my life, I started using it. I saw how team members around me were using it and I picked up some shortcuts and tips on how to code quickly by leveraging IntelliJ features. At some point I saw this one guy use IntelliJ and he was literally killing it. Till that point, I have never seen so much code being generated in such a short time, and it was useful code! Not templated rubbish and stuff that you’d add to an API “because someone might need it in the future”. He was really productive. So, I did what I think has changed the way that I code: I copied him (shamelessly)! I observed and learnt what he was doing, and why. How his thoughts flowed while coding and how he tied that in with his tool – IntelliJ. Safe to say – I learnt more about IT and programming in my first 4 months of my job than 4 years in college.
From then on, I did not look back on Eclipse at all for Java. I even bought a personal license for IntelliJ. It was one of the most productive times in my professional career. I took ownership of the team sometime early 2007, and was advocating IntelliJ to everyone in the firm. Everyone got about doing their work, and maybe once in a while had a tiff with IntelliJ, but that’s about it. Best part of all was that it was fun coding with IntelliJ. It does what I’m expecting it to do, and quickly at that. Refactoring is a sheer pleasure as well.
Towards the end of last year, I had a bit of a problem. One of my servers had 2GB of physical RAM, and I needed to chuck in 10-20 JVMs for one of my personal projects, and that just won’t scale well. FYI, a busy running JVM does take quite a lot of heap space. So, I started looking at Python as a light weight alternative. I really like Python as a language, and am advocating its use in building low latency trading apps (tied in with the use of Psyco). The only problem was that there wasn’t an IntelliJ equivalent for Python. All the IDEs just sucked! I wanted to be able to kill an IDE and spew out just as much code as I did when programming Java with IntelliJ.
This was when I started using Eclipse heavily. I settled with PyDev with Extensions and it’s actually not too bad compared to the other Python IDEs out there. Take away all Eclipse’s nuisance, the plugin is pretty polished. It has code completion, some refactoring, satisfactory code browsing and as a whole it was OK. I started to convert most of my Java personal projects to Python, though not at the level of productivity that I had desired. IntelliJ 8 is due to have good Python support (including debugging). If that’s satisfactory, I’m ditching Eclipse for my personal
At this point, I was using IntelliJ at work, though I did not code much for a year. I did build prototypes, but most of my time was spent in managing the team and running the show. I used Eclipse outside work for Python. In effect, I ended up spending most of my coding time in Eclipse.
At the beginning of this year, I moved firms and am back to coding full time. At this new place, the mandate is to use Eclipse. What a shocker it was! My productivity almost halved. What took me 30 minutes to complete in IntelliJ took an hour in Eclipse, due to its clunky refactoring, code browsing, searching and interface. At this point I realised what the problem with Eclipse was: its just trying to satisfy too many people. It’s trying to be the mother of all IDEs and support every bloody language in the world. In my opinion, IntelliJ have perfected this – for a long time, they’ve focused primarily on Java. They’ve done an amazing job, and at the moment, just replicating their success to other languages. Being unhappy with coding Java in Eclipse, I went about in the firm asking why there aren’t many IntelliJ users – the main reason: cost! Apparently, the cost to benefit ratio of IntelliJ was appaling.
I am not entirely sure how they conducted their research, but in my humble opinion, there is almost no way that you can make a statement like that. While IntelliJ costs money, you quickly recover that cost from the individuals higher contribution levels. In the big picture, its an extremely small cost ($599 per enterprise license) compared with the other costs of keeping a developer seated in an office. You have overheads, admin costs and other misc things to worry about, which really makes the one off $599 miniscule. In fact, I think Eclipse actually costs more – the time spent working with the tool, instead of the problem at hand has an internal cost. There is no way in Eclipse to get about doing a big refactor of a few code bases without changing perspectives (most common for me is switching between Java and Team Synchronisation). The lower levels of productivity have more costs associated to it. What about repercussions of delivering late? Reputational risk? I can just carry on and on about the extra costs that comes with Eclipse. Plenty of folks in management who decide on Eclipse over IntelliJ just don’t realise that the $0 on Eclipse is not a true $0. At the same time, the $599 for IntelliJ is not a true $599 – there are additional costs with using IntelliJ as well, but in the big picture in hiring and keeping a developer in office, its amounts to something really small. The benefits from using IntelliJ are pretty evident – it’s so much simpler to use, and developers tend to spend more time on the problems at hand rather than on the IDE itself. How did they carry our the cost-benefit analysis? I can only assume that they took the cost of Eclipse at a flat $0, which really does not reflect reality.
So, here I am. For the past 4 months, during my day job I am using Eclipse for Java and at home using Eclipse for Python, until this morning when I added a tutorial section to XP-Dev.com (which is still in Java using the amazing Wicket framework) and fired up IntelliJ for the first time. I added some code here and there, and only took a few minutes to add the section in and deploy it out. I was so relieved and excited to use IntelliJ, that I just had to rant about it and how Eclipse has been picked as a standard Java IDE in many organisations due to costs.
I am waiting eagerly for Python support to improve in IntelliJ, and then I can start using it again for my personal projects. On the work front – I never give up without a fight. I will carry on advocating IntelliJ for the right reasons, even if it’s all about the costs. I do want to put back the fun in coding at the workplace! I do want to get the firm (or at least my immediate team members) on to higher levels of productivity.
Tags: Eclipse, IntelliJ, Java, Programming, Python


Posts RSS Feed
[...] have blogged in the past on a very sensitive issue – Eclipse vs IntelliJ. I come from the IntelliJ camp where I strongly [...]
Hi, thank you for taking to time to share your point of view. We can directly agree that productivity is worth more than the some euros/dollars of the license. What we can not agree on (yet?) is your statement that IntelliJ IDEA is so much more productive. I have tried this morning, installing trial, import existing maven project and try to find my way around. I really had much trouble with normal working. Varying from simple (why does my cursor not go to the next line when I pass the end of a line, some minutes lost going through configurations to change that) to more unsolvable issues: why can’t I have an simple uncluttered view of my Java sources like eclipse’s Project Explorer. In eclipse I see that the view is called ‘project explorer’ and knowing that I can find some options to configure it, google on more info. With IDEA is spend a great deal of time trying to have it show the sources per package _without_ cluttering it with resources, worst of all after chasing that issue for about 15 minutes I just gave up (hard to google for a view that is named ‘project’).
So my conclusion for now in my point of view is: nice that you worked with this other guy and learned a lot, but how about little me having to figure out things alone (preferable without days of nearly unproductiveness)?
Any tips or good starting points? (if so, please drop me an email on my google email: pjvleeuwen at … )
I personally dislike these types of discussions as they are about as livid and pointless as religious debates, but every once in a while I try and see if I can’t find someone who through it all manage to stay objective. This is usually right after IntelliJ misbehaved, I was forced to kill it and now have to wait for it to reload ever damn class from the JDK and any other library that I might have in my project (like it has been doing for the past 43 minutes).
I have been using Eclipse (3.2 no less) for a good two years, and recently installed 3.4 mostly due to my own laziness of having to get hold of all the plugins again (lest face it, reconfiguring your IDE is not the most exhilarating thing to do in the world). To be very honest, I am waaaaaay more proficient in Eclipse than IntelliJ, so of course I am bias, but in all honesty, my annoyances with IntelliJ never rivalled the inefficiency that I supposedly suffered (if any) with Eclipse.
My personal opinion is that projects should never be tied to an IDE. You should be allowed to use whatever you wish, as long as everyone else can do their work without being restricted by your choice of tool.
“There is no way in Eclipse to get about doing a big refactor of a few code bases without changing perspectives (most common for me is switching between Java and Team Synchronisation).”
I like your article (disclaimer, though: I prefer Eclipse), but this statement is just false. I never, ever switch perspectives in Eclipse. One of the things that I like about Eclipse itself is that you can do pretty much everything your own way. Rather than switching perspectives, I simply open up all the views I ever need in different tabs, all in one perspective. eg: I have my package explorer, my synchronization view, debugging, variables, breakpoints, ant, SVN repository browser, etc, all open in one perspective.
You can do anything you need to do without switching perspectives. I know this because I never switch.
Out of curiosity, how is IntelliJ’s refactoring better than Eclipse’s? I have had great success doing refactoring in Eclipse – moving classes from package to package, moving methods from one class to another, etc. I do it all within the IDE, and it does the CVS modifications for me too (actually, for some reason it won’t do CVS adds, it will do deletes though – and if I’m using an SVN repository, it does the adds for me automatically as well, it’s just with CVS that it’s not perfect).
CVS have to drop dead soon, we have SVN and even better we got GIT
hurray. And about that IntelliJ vs. Eclipse (Eclipse sucks on the mac) for some strange reason, it’s just that people always throws at me (why do you use a mac?) Well the Mac is pretty darn fast when it comes to maven, that’s why. And I love the terminal.