In his post Beware of Productivity Tools Mark Seemann explains why he shun from using so called “productivity tools” – tools like Resharper, CodeRush, JustCode or any other tool that is runs on top of Visual Studio in order to enhance development.
While I don’t know Mark personally, I’m in the middle of his book on dependency injection and I enjoy reading his posts – which I find well-written and enlightening.
Unfortunately this time I think he missed the point…
It’s not about productivity tools
I find it difficult to discuss “productivity tools” since the term productivity is misleading. Instead let’s put things on the table – I’m a Resharper user, in the past I’ve used CodeRush and in the distant past (and probably near future) used Visual Assist. All these tools were not used for productivity's sake. I’ve used them to perform two things: navigating my code and refactoring my code. Some of the tools perform additional tasks for me - i.e. run unit tests, background compilation, but most of the time I find myself returning to these two features.
So instead of calling them productivity tools – a category which my alarm clock belongs to – let’s discuss the merits of the tool instead of the abstract term of “productivity”.
It’s about getting the job done
There are two points in the post that I agree with:
- It’s difficult to measure if a developer is “more productive”
- Developers are doing more than just writing code.
When I do use Visual Studio without any tool enabled I find myself looking for files, classes and methods while using my mouse to traverse the solution tree. Instead of thinking of the problem I’m trying to solve, I play hide and seek with my files. I have Resharper installed on my machine and I use it when writing C++ code just because I can still use it to locate files without my hands leaving the keyboard.
As for refactoring these tools functionality exceeds the built in refactors and the find-replace dialog which leave you depending on compilation or (god forbid) runtime errors.
I can perform these tasks quickly and with precision, which means I have more time and focus to do the more “interesting” tasks – solving actual business problems.
It’s about writing better code
But there is more than that – more often than not I’ve seen developers shy from a certain refactor just because it’s difficult to execute by hand without fault.
The tools above can do amazing things from encapsulating code in a new method to renaming method/variable across multiple files and technologies (fore example code and XAML).
My boss and/or client would probably care less about how I call methods or if my code is readable if each time I change a method name it takes 1 more hour of testing to make sure I didn’t break anything.
I’m sure that a good developer would refactor his code to perfection (or he just wrote it perfectly) but lack of proper tooling (I’m looking at you VS) cause the average developer to refactor less and write less readable code.
Without proper navigation you get a certain solution organization “method” – when it’s hard to find specific classes developers tend to write all of the at the same file where a simple “find” command would suffice.
A word about zealous users
Some people love a certain tool and take it to the extreme. If a member of the audience complain that Mark has failed to use Resharper during his talk at NDC – I just feel sorry for him.
I use Resharper at work not at my talks!
Showing code during a session is difficult task to begin with – it’s hard to teach code in a limited time frame with a large audience – if I start to jump around with my “keyboard tricks” I would probably loose most of the listeners.
I don’t think that tools create dumb, lazy developers. I think that the lack of tools create frustrated one.
I think mark got it right when he wrote:
I'm writing because I think you need to be aware of the issues presented here. It might make you a better developer if I can get you to actively and consciously consider a choice you may have taken for granted.
And I couldn’t agree more – don’t use Resharper just because some Guru told you so – do it if it helps you.
The opposite is also true – some developers prefer not to install additional tooling on top of Visual Studio due to many reasons from performance considerations to plain “I’m just using official MS products” – please don’t do that, try them before you decide - it might make your work easier.