I started playing with ASP.NET MVC almost two years ago and it was pretty much love at first sight. Granted, the reasons for that love had less to do with the virtues of MVC than with the sins of classic ASP and ASP.NET:

But traditional ASP.NET web pages are littered with cruft: hidden fields, obscure Javascript, and a ubiquitous <form> element even on pages which don't look, act, or talk like forms. The ASP.NET WebForms infrastructure extracts a price. That price is the sanctity of your generated markup. We could almost call clean markup the sacrificial lamb of ASP.NET WebForms development. It's what you give up in order to achieve the illusion of state in that stateless medium known as the World Wide Web. If you develop in ASP.NET, then you've probably spent a lot of time chasing your tail as I have, ferreting out how to clean up ASP.NET-generated markup to make it palatable...

Like many otherwise innocent (?) and well-meaning developers, I've struggled with the messiness of ASP and ASP.NET web development for years. I remember those years as a miserable tour of duty through web development perdition: psychotic VIEWSTATE fields, opaque "what the holy mother of all fuck is that?" Javascript invocations, recalcitrant datagrids that never do exactly what you want them to, and those lovable auto-generated HTML element IDs with names like:

ctl_100_really_long_freaking_annoying_name

The Battle of Yonkers print that made the rounds a while back summarizes my feelings exactly. Developing in ASP.NET is like doing battle with a legion of zombies, only not as fun, because you don't get to band together with your friends and stockpile supplies and go out on patrols and learn the nuances of zombie tactics and takedowns.

In ASP.NET your zombies are things like VIEWSTATE and you can't kill a VIEWSTATE, more's the pity. (Well, actually, you sort of can. But once you get into VIEWSTATE-removal-and-hiding techniques you really need to ask yourself if your web development platform is helping or hindering you.)

The sickness of ASP.NET technology (and it is a sickness, and no, I'm am not down with the sickness) can be traced back to ASP.NET's overarching goal, which is to make web development as much like desktop development (i.e., as idiot-proof) as possible. Why? You're an idiot, that's why. You need hand-holding. You're unfit to work with technologies that don't hold your hand. The unspoken message of ASP.NET seems to be:

Hey, man, forget about all that difficult/confusing HTTP request/response stuff, the web is a design surface, you get? (Puff, puff.) Web development, desktop development, eh. It's all one, baby. (Puff.) Just drag and drop your controls, set a few properties, and bada-bing. You're done. You won't hardly have to write any code at all! (Exhale.)

And once you start going down this path, you've entered a world of framework and boilerplate and auto-generated cruft and tricksy little hobbits doing obscene things in the cupboards. Auto-generated cruft is what's required to untangle the impedance mismatch that results from trying to manhandle a web page with dynamic and asynchronous behaviors into, essentially, an overgrown dialog box.

Oh, look. Drag and drop. How cute.

It's what Scott Hanselman calls cargo-cult programming (giving it a slightly different connotation than the Wikipedia definition) an apt term, and one that describes the typical ASP.NET programmer to a T. Ironically, Hanselman has been one of the big proponents and popularizers and explainers of ASP.NET over the years.

(And if only the average ASP.NET consultant had one-tenth of Hanselman's enthusiasm and talent, the ASP.NET websites of the world might not be the celebration of worst practices, wasting-your-corporate-dollars-by-the-millions boobery that they in fact are. I say that as a former ASP.NET consultant who's participated in this grand fuck-off of money. No wonder your corporation can't turn a profit. You spend eighteen months and three million dollars to build an ASP.NET website any two competent developers could have built in three months for 20k. Two six year-olds running a lemonade stand have better fiscal sense than the average corporation, at least when it comes to IT expenditures. Believe it.)

Don't be a dragtard, America. World.

You are being marketed to.

The desktop is a completely broken metaphor for the web.

That ASP.NET is a deft execution of that metaphor doesn't make the metaphor itself any less broken.

No matter how many bells and whistles you hang on it, it remains broken.

Under ASP.NET 1.0 it was broken.

And under ASP.NET 4.0 it's broken.

Broken.

ASP.NET vs. ASP.NET MVC: No Choice At All



The sad truth is that ASP.NET is simply another throwaway business technology that will one day occupy a proud place of implicit or not-so-implicit deprecation alongside ASP and MFC and ATL and ActiveX and all the other proprietary Microsoft cast-offs, desktop, web, or cloud, in their various stages of decay.

(Nasty, brutish, and short. So goes life as a Microsoft "business technology".)

I'm not saying that ASP.NET has been or will be deprecated any time soon. It's achieved critical mass, and rest assured, ASP.NET websites around the world will be keeping the Internet in a happy surplus of cruft-laden, obfuscated markup for years to come.

And maybe that's the real ASP.NET web development horror; not that ASP.NET is doomed to obscurity, but rather that it's doomed to a long and frenetic sort of half-life, and many of you with it, as legions of developers go forward like zombies to swell the ranks of throwaway high-maintenance ASP.NET web applications spewing forth broken, bloated markup by the terabyte. It makes me glad that I was born a human and not a Google spider, because what a shit-eatingly miserable life that must be.

All of which is why I say: the choice between ASP.NET and ASP.NET MVC is no choice at all.

Despite having used and endorsed ASP.NET for years, I would now only recommend classic ASP.NET for one specific application type: namely, the Throwaway CRUD-Friendly Forms-Centric Line of Business App, little-loved as it always is, used internally by 10 to 100 employees for 2 to 5 years before being shuffled off its mortal coil in yet another inane round of corporate "strategizing".

But in this arena, you'll find that classic ASP.NET is everything you'd ever want it to be. Short-lived, high-dollar, with a nice set of drag and drop controls so that you can crank out those crappy UIs in record time, thereby hoodwinking your not-very-technologically-savvy client or manager into thinking value has been added, rather than subtracted, ultimately justifying your paycheck or your project's existence or your sense of ego or whatever tune you dance to, and allowing the great hamster wheel of clusterfucking waste which we've all participated in and bought into at one time or another, to continue...

But for websites that actually matter?

For blockbuster sites and labors of love?

For social sites, blogs, and forums?

For games?

For any website where subtlety and precision of HTTP request and response are important?

You either bow to the dirty utility of ASP.NET, acknowledging it for what it is, or you try to focus on true craftsmanship with ASP.NET MVC; trusting that when people like Steve McConnell (the author of Code Complete) say things like this, emphasis mine...

There's no such thing as a free lunch, and even if there were, there's no guarantee that it would be any good. Software development is a far cry from haute cuisine, however, and software quality is unusual in a significant way. The General Principle of Software Quality is that improving quality reduces development costs.

...that they know what they're talking about. ASP.NET is simply not a quality-producing technology. If anything it's a quality-nullifying technology. Labyrinthine, opaque, tightly-coupled, lousy with dependencies, leading to a hodgepodge system that's difficult to mock up, difficult to test, difficult to debug, and in general, just difficult. ASP.NET works great, except when it doesn't. When it doesn't, you'll often find yourself drowning in a sandpit of technical debt.

Compared to all of that, ASP.NET MVC is a breath of fresh air.

Far from being an experimental development curiosity put together by a talented-but-idealistic group of people in some Microsoft white tower, ASP.NET MVC is a shining example of how good it can be when Microsoft gets something right. Clean, capable, precise, completely open, extensible to the Nth, partaking generously of the same almost philosophical beauty that we see in certain areas of .NET, and in portions of Java, and in classic Bjarne Strousstrup-style C++. Etc. ASP.NET MVC is the most encouraging technology to come out of Redmond since .NET itself.

And having sipped but once from the MVC Kool-Aid, I really would rather face zombies than another year—another minute—of ASP.NET. And if you give it a try, I'm reasonably sure you'll feel the same way.