Eric Sink just put up an entry that could easily be subtitled “why I think Edit and Continue is a bad idea.” Although he’s just good naturedly razzing VS in general, his description of a sloppy working style fits totally with what EnC is trying to enable:
Don’t take time to think about all the details. Instead, go for the instant gratification. Just hit F5 and see if the code works. When it doesn’t, try another quick fix and hit F5 again. Eventually the code will work, without ever having to give it any real thought.
Now, I’ll say I have no idea what Eric thinks about EnC, but there are certainly others who use this line of argument to attack the idea of having Edit and Continue in a developer product. Namely that it’s a bad idea because it enables people to code in a style that is ultimately non-productive if not downright dangerous. And all that is true. Really. I kind of glossed over it when talking about EnC before, but it is a real dilemma: giving the consumer more power is what they want, but it also greatly increases the chance that they’ll misuse it. And then everyone might pay.
An analogy that suggests itself is the car. Today’s automobiles are insanely more powerful than Ford’s primitive Model T – the top speed of a Model T was something on the order of 45 mph. And as the power of the automobile has increased, so has its dangerousness. A Ford Model T traveling at 45 mph can cause a good deal of damage, but it’s really nothing compared to what, say, a Ford Expedition could do when traveling at it’s top speed (100 mph? 120 mph?). Even worse, many cars these days are built specifically to encourage a driver’s sense of power and invulnerability, allowing them to drive more sloppily or dangerously than they might if they were driving something much smaller. Modern cars also boast a whole lot of features like 4 wheel drive that can lull drivers into a false sense of complacency, encouraging them to get themselves into jams that they would never get into otherwise.
And yet, I don’t think the genie can be put back into the bottle. Although some might wish it, I don’t believe we can go back to the day of driving Model Ts that are slower and less powerful than what we have today. Technological advances have a way of raising the stakes of ignorance and stupidity on everyone’s part – even good drivers get into accidents – but that’s just the price of progress, to my mind. The problem is that as technology gives people more power, there is a commensurate need to teach people how to use that power responsibly. No one is allowed to legally get behind the wheel of a car until you’ve proven that you can reasonably handle it, and that privilege can be taken away from you at any time if you abuse it.
However, we’re not going to be licensing programmers anytime soon, so what else is there to do? Limit the power and usability of our products to prevent the hoi polloi from (mis)using them? Or do the benefits to society created by putting so much computing power into the hands of the public outweigh the costs that are associated with that? I don’t think there’s any easy answer to that (especially after SoBig and MSBlaster and all their predecesors), but I generally fall on the side of progress. I do think we need better computing education out there, though, not just teaching how to slap a program together but also how to think about programming.
We sometimes joke that we should build a feature into the program that turns off all the “advanced” features of the product. Then, when you try to use one of them, we would pop up a dialog that says “You’re trying to use an advanced feature. Before we can let you use this, you must answer the following questions correctly:” and then test them to see if they’re advanced enough to really use the feature. It’s tempting but, of course, it would never work. Just as no one thinks they are a below-average driver, most people wouldn’t appreciate being told that they aren’t “advanced” enough of a programmer to use a feature…