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...