Edit & Continue (or Good vs. Evil)

With last week's announcement that Edit and Continue would be supported for C# in VS 2005, there was an initial cry of 'hallelujah' from many developer blogs. I've opted not to link to any for fear of having someone feel singled out, but in my aggregator this past weekend, I must have browsed past a couple dozen posts about how great this announcement was. Now that a few days have passed, reality sets in and a few different voices have stepped up to suggest that E&C isn't a silver bullet for developers.

It's interesting to watch the reactions play out in the blog posts, which usually go like this:

.NET VoR (Voice of Reason): Edit and Continue makes it to easy to screw things up and get sloppy with your development. You should be taking a reasoned approach to your debugging, use unit tests to confirm your approach, and not fix bugs based on a specific condition that exists at that particular runtime.

.NET E&CE (Edit & Continue Evangelist): Just because it's possible to screw up with E&C doesn't mean it should be pulled out! Would you also suggest that [insert analogy of tool mis-use here]?!

I guess what I find interesting about it is that the E&C evangelist types seem to think it's an all or nothing proposition. Unless I've missed it, none of the people arguing against E&C are suggesting that it should completely be removed from the product. Rather, they're suggesting that it should be used with great care because of the ability to fix bugs with small, one-off fixes in code instead of shutting down the debugger and fully thinking through the problem.

I recall Juval Lowy talking about this on .NET Rocks at some point last year (probably around the PDC when it was announced for VB.NET). His comment was along the lines of E&C being somewhat incompatible with the "C# personality". That personality, which often comes to C# via C++ or Java and tends to be component-focused, is different than the VB.NET personality, which comes from a more RAD place and tends to be more app-focused. As he put it, when the C# personality is faced with a bug, (paraphrasing) "they lean back in their chair, stare at the ceiling, go get some coffee, ponder a
solution, and THEN they lean forward to hit F10 and move to the next line
." :) For those people, E&C isn't as attractive as other features that focus more on code quality, profiling, performance, and so on.

Sure, it's great that you can fix things like a typo in a string literal or some other no-brainer quick fix. But bugs that involve an application's logic or workflow aren't the type of thing that should be fixed while sitting on a breakpoint at runtime.

It's also worth noting that the inclusion of E&C is a good example of Microsoft's newfound community awareness and desire to work closely with its developer customers. No question -- it shows responsiveness. 

I guess the two thoughts that come to mind for me in all of this are:

  • E&C can be handy in some scenarios -- but it's not a panacea, it can be easily misused, and I think few would argue that its use is a "best practice" for professional developers. My hope is that the  .NET developer community comes up with some collective guidelines or general agreement on where/how it makes sense to use or avoid E&C.
  • I also hope that many of the other things that are being worked on for the 2005 release aren't scaled back because of the work on E&C.
  • Even Microsoft has limited resources and time when it comes to development. Sam Gentile's post
    about refactorings being missing is a good point -- let's hope that the inclusion of E&C doesn't come at the expense of refactorings or other features that do promote best practices.