I’ve been using ReSharper as a complement to Visual Studio since version 2.0 of JetBrains‘ powerful refactoring and productivity tool in my .NET projects. ReSharper, which fully supports both C# and VB.NET, is not only a time-saver when applying refactoring patterns but is actually a great assistant in making you a better .NET developer. In a few moments, I will provide my thoughts that support these statements and more.
In my previous job at a small ISV (seriously, we were three), my boss which is very much on the technical side of business made sure to provide us with the necessary tools and resources to deliver high quality projects to our customers. In order to achieve this “high quality” level, we had to make sure that our productivity was high, our “comfort zone” was in the green and the tools available to us would support both of these needs at a minimum. That being said, he provided for us a dual monitor setup (I wish we had three…but then again I wish for a lot of things in life), powerful machines, comfortable chairs…and reliable software tools such as modeling tools, profilers, code analyzers, etc. Of all these things, I believe that software tools are the most important because even though your productivity might slow down if you’re lacking a second monitor or that chair isn’t as comfortable as it should be (one benefit of having a bad chair is that it reminds you to get up and walk around every 15 minutes which is very good for your back), you can radically lower your productivity and your quality output if you’re not provided adequate tools to fulfill your job. In my software toolbox, my favorite one is a refactoring tool because it helps me to reduce code duplication, augment code intention when applying refactoring patterns, and supports TDD from the get-go. In my .NET development toolbox, this tool is satisfied by ReSharper.
Unfortunately, there are many companies that produce software that don’t provide these kinds of necessities to their developers. My guess is that their CIO or technological managers aren’t as technical as they should be or they don’t see these necessities as a real necessity (maybe it doesn’t align with their current fiscal year’s objectives, who knows…). My goal in this post (and with your comments) is to present a case to management that developers who aren’t provided the necessary and essential tools to help them in their daily development tasks is like sending a soldier to combat without the appropriate gear (it’s the first example that popped out in my mind…I must confess that I’m watching the late night news as writing this post…and what else is there to talk about than the war in Iraq itself?). The tool I’ll focus on is ReSharper (but feel free to share your own tools as well!)
All right, here we go. As you may know, the .NET framework base classes and interfaces are all grouped in various different logical namespaces. According to Patrick Smacchia’s lately post on on the number of types in the .NET framework, there are close to 933 namespaces and 39 509 types alone in the framework. I doubt that Kim Peek can memorize all of them. A tool like ReSharper actually is a time-saver in this scenario because it is intelligent enough to assist you in importing the right namespace for a type. This is extremely helpful, because when programming, you really want to focus on “the type I need/want to use” and much less on the “which namespace holds the type I need/want to use?“. I don’t know if it happens to you, but I tend to lose my concentration whenever I’m shifting away from focusing on the real task at hand (such as browsing the MSDN documentation or the Object Browser to find a compatible type, a base class, an interface or a namespace). So this is my first argument for giving a ReSharper license to your employees: a refactoring tool like ReSharper reduces a developer’s time and increases her productivity by letting her focus at the real essence of the application (the code) and less on the plumbing (figuring out which one of the 933 namespaces holds our type).
Furthermore, a tool like ReSharper actually helps developers who are novice in object-oriented programming. I’ve been doing consultancy for a while enough to know that not many .NET developers have sharpened their OO skills compared to Java or C++ folks. I’m glad to hear that the ALT.NET movement is making a serious effort in this area, but until this is mainstream, tools like ReSharper can be a valuable resource to help us in this direction. For example, ReSharper will actually propose you to use a more general type (such as a base class or an interface) whenever possible (check out the screenshot below). This is extremely useful as it helps to fulfill the principle of favoring interfaces over implementation (which decreases coupling to a specific type) and facilitates testing and maintenance. Therefore, my second argument for giving a ReSharper license to your employees: a refactoring tool like ReSharper can make your developers more aware of some key OO principles. And if your organization takes time to do some code reviews, more people can participate in sharpening their OO skills at the same time.
I’ll give a final argument to my case for enterprises to supply their developers with a tool like ReSharper (the rest of this case will be continued by your comments and ideas). Whenever you’re doing some contracting for another client, or your changing jobs with another organization, most of the time you’ll have to familiarize yourself with another coding standard or coding guidelines. This is the perfect situation where a tool like ReSharper can leverage this pain since it can assist you in coding to a standard. All you have to do is provide the tool with a coding template and that’s it. That’s actually how it should be. I once heard that Albert Einstein didn’t even know his own telephone number and when asked why that was the case, he simply responded “I don’t need to remember my own phone number, I can just look it up in the phone book!”. It’s the same scenario in this case. Why memorize and remember such a static information like a coding standard when it can actually be enforced by a tool? The less I have to remember things, the better I am at performing my work because I can concentrate more on the essential and less on the “plumbing”. The beauty of a tool like ReSharper, is that you can tell it to format your code according to a given template whenever you want. That’s my third and final argument for convincing management to provide a tool like ReSharper to their developers: it helps them (once again) to focus more on the essential code and less on the “esthetics” aspects of it by delegating multiple coding standards to the tool. This guarantees that the customer will always have a codebase that respects her standards.
Of course, there are countless more reasons to provide refactoring tools like ReSharper to your developers. I highly recommend to take some time and view the features offered by this incredible product. I know some developers that actually purchased their own licenses or even are using some cracked version of the tool just to satisfy their own needs (man, it sounds like being addicted to drugs or something) because at the end, the tool proved itself more than valuable. This shouldn’t be the case. Supplying the right tools to your developers is a great way to let them know that you care about their work, and as a result help your organization to increase in both maturity and capability.
Granted, ReSharper isn’t a silver bullet, but in many cases it provides us with the support we need to concentrate on writing essential code while giving us the opportunity to easily apply refactoring patterns and driving our design with TDD. That alone gives us a boost in productivity, which can vary on the user’s experience with the tool (see the ReSharper Jedi video for more info) and quality. That, I believe, is a bullet strong enough to harm the werewolf constantly that frightens developers to respond to changes, refactor their code, organize their unit tests and more.
Similar posts you might be interested in reading:
- ReSharper 3.1 Released and Getting Better Than Ever!
- Mapping a shortcut to execute unit test in current context with ReSharper
- The Broken Windows Theory in Software
- Rely on your experience and knowledge over some tools’ recommendations
- What Test-Driven Development Has Taught Me So Far
- Better Modelling with the Visual Studio Class Designer
- My five favorite features in ReSharper 4.5