From CodeRush to Resharper and Back...
I've been using CodeRush together with Refactor! Pro from DevExpress for over a year. A few weeks back I made a decision to leave my comfort zone and use Resharper from JetBrains for a few weeks .
Why?
- It's only when you're uncomfortable you really learn.
- I wanted to get a better feeling what some of my friends in the Alt.Net community is raving about when they talk about Resharper. (It is my perception that among Alt.Netters Resharper has a stronger foothold.)
- My CodeRush subscription (which comes bundled with Refactor! Pro) was about to expire. (99$ to renew)
- A need for change...
To be fair, I consider myself a CodeRush power user and I have invested significant amounts of time learning it. I am biased towards preferring CodeRush even if only in the sense that I don't want to loose my own investement. CodeRush comes bundled with Refactor! Pro, so whenever I write CodeRush it implies Refactor! Pro as well.
I'm not going to make this an exhaustive comparison, but rather try to point out the major areas of concern in my case. The bottom line is that both tools are excellent.
Note: It's beyond me how someone can write code without the support that is given from tools like these.
Here's what I did 3 weeks ago:
- Uninstalled CodeRush and Refactor! Pro (v 3.0.8)
- Downloaded and installed ReSharper (v 4.1)
- Downloaded the keyboard map for ReSharper.
- Read through 31 days of ReSharper by Joe White.
- I started to watch the tutorial videos on the JetBrains site, but I found them annoying.
I did the above in a couple of hours during an evening at home. I also remapped some of the key mappings to match those of CodeRush so make the transition easier. After a few hours of coding (with the keyboard map close), my biggest surprise was that I didn't slow down as much as I expected.
I managed to stay with ReSharper for the 14 day trial period, but then unistalled it and reinstalled CodeRush. Here are the main comparisons that I made.
Navigation
The ReSharper navigation is just better than that of CodeRush. For example, the following code is common in our system.
ISomeInterface someInterfaceImpl;
someInterfaceImpl.DoSomething();
There are many classes that implement ISomeInterface and I often will position the caret on DoSomething() where the next action is to navigate to the implementation that I'm currently interested in. ReSharper prompts me with a list of implementations and I just select one and it takes me there.
+1 for ReSharper.
Refactoring
Both tools have very strong refactoring support. Refactor! Pro has many more refactorings, but the essentials are covered by ReSharper as well. (For me the line between CodeRush and Refactor! Pro is somewhat blurred)
+1 for Refactor! Pro
Code Issues
ReSharper's static code analysis is more mature than that of CodeRush. In the current daily builds of CodeRush there are too many false positives to make the feature very useful. DevExpress is however releasing a new version of CodeRush with static code analysis in the near future. I especially liked the feature in ReSharper that let me turn off CodeAnalysis for a specific file. (Excellent for designer generated files)
+1 for ReSharper
Templates
The CodeRush template engine is so much better than that of ReSharper that you can't compare between them. Any comparison will do CodeRush injustice. It should be noted that it takes time to learn the CodeRush templates, but once you do you will not give it up.
This is a deal breaker for me.
+5 for CodeRush
Discoverability
Both tools come with a significant learning curve. The CodeRush training window is indispensable when learning the template shortcuts. Other than that, you need to memorize shortcuts. DevExpress has started a video channel on their web site with lots of good tutorials.
+1 CodeRush
Intellisense
ReSharper replaces the built in intellisense with its own. It is better than that of Visual Studio. It took me some time to get used to, but I liked it. I'll miss it! The template engine compensates somewhat for this.
+1 ReSharper
User Interaction
For all of those who whine about all the arrows and UI fireworks in CodeRush, let me just state that I don't use any of it. I have them all turned off.
With that out of the way, the CodeRush UI much better than that of ReSharper. Not only in the way it looks, but in the way that it lets you work in a more fluid way. No dialogs or wizards. The preview of changes to your code before a refactoring is stunning. Stunning as in beautiful, but also very useful.
+1 CodeRush
Performance
I didn't notice any performance problems with either. Machine spec: DELL M1730 Core2 x9000 at 3.0Ghz, 4GBRam, 2x200GB Raid0 HDD.
Misc
While I found the ReSharper unit test support very nice, it didn't add much to what I already use. CodeRush doesn't have a unit test tool.
A note about the future
CodeRush and ReSharper become more and more similar with every release. IMHO, the company that manages to get the community to invest in plugins for its tool will be the winner of this battle. On this account both companies are losers as of now. While they have great extensibility support, it's a dark art of those with too much time. I don't have any experience with developing plugins for ReSharper, but I saw a few complaints on blogs about lacking documentation and samples. The CodeRush plugin API is also mostly undocumented. Mark Miller of DevExpress has two excellent plugin tutorials, but developers need solid API documentation for plugin development to take off. I have several plugins in the drawer actually, but not enough time to dig through undocumented APIs to cover edge cases that don't appear in the samples that ship with the product.
Conclusion
As I stated earlier, both tools are very good, but CodeRush with Refactor! Pro let me develop with less friction.
Happy Coding...