I was looking through the MonoRail project today, and I found this little nugget:
[…] Developers that were introduced to Web development using pure WebForms also lack the basics http protocol concepts required to use MonoRail (or any other web framework for that matter).
I’ve been working with ASP.Net a lot lately. There are somethings like I like — ViewState can be nice, as can the form validators and data binding. However, in general, I can’t stand it. And I do agree with the above statement a bit, though I wouldn’t have been so caustic about it.
ASP.Net is such an abstraction. It’s like one day Bill decided that we all knew too much about how the Web worked, and he needed to invent a framework that changed all the rules and hid all the scary HTTP stuff so that a generation of Web developers that he trained on his stuff exclusively would have a very skewed perspective about how the Web actually worked.
I hope that didn’t sound arrogant, but I do think that if you’ve never done any Web development except ASP.Net using Web Forms, then there’s a lot you missed about Web development.
Every Web developer is well-served by getting “close to the metal” occasionally with a language that has no framework or big set of rules behind it. Digging into HTTP requests and responses at the ASCII level is really pretty interesting. (Would you believe that I read the original HTTP spec once, all the way through? RFC1945, I think, but it’s been a long time.)
I’ve always maintained that there’s a difference between a “Web Developer” and a “[insert platform here] Developer”. If you’ve never done any work outside of ColdFusion, then you’re not a Web Developer, you’re a ColdFusion Developer. This is fine if you work in an exclusively ColdFusion shop, but you’re depriving yourself of a lot of learning by not digging into other languages and the core protocols in general.
Neal Stephenson — of Cryptonomicon fame — wrote a famed essay years ago called “In the Beginning Was the Command Line.” In it, he wrote this utterly brilliant paragraph about why it helps to learn more than one operating system. It’s long-ish, but do yourself a favor and read it (emphasis mine):
Young Americans who leave their great big homogeneous country and visit some other part of the world typically go through several stages of culture shock: first, dumb wide-eyed astonishment. Then a tentative engagement with the new country’s manners, cuisine, public transit systems and toilets, leading to a brief period of fatuous confidence that they are instant experts on the new country. As the visit wears on, homesickness begins to set in, and the traveler begins to appreciate, for the first time, how much he or she took for granted at home. At the same time it begins to seem obvious that many of one’s own cultures and traditions are essentially arbitrary, and could have been different; driving on the right side of the road, for example. When the traveler returns home and takes stock of the experience, he or she may have learned a good deal more about America than about the country they went to visit.
I’m way off track now, sorry. So, to get back to our discussion about ASP.Net Web Form exclusivity —
The problem with Web forms is classic Microsoft — they have a big set of rules and “extensions” to the core than you grow to depend on to the exclusion of everything else, and you don’t bother to learn how things actually work. Take away those extensions and you’re in trouble.
ASP.Net, for example, has a tendency to abuse the concept of GET and POST. If it were up to Bill, everything would be a POST and no one would ever know about silly things like querystring arguments, request bodies, etc. The whole “one FORM tag to rule them all” theory alone has caused me more heartache and frustration than I can articulate.
I think what annoys me the most is that I really like C#. It’s a great language, and the .Net framework is awfully well put-together. I really enjoy spending time with C#, but then along comes ASP.Net like the loud, overbearing, half-drunk uncle at a family reunion, tips over our picnic basket, and ruins everything.
When I first starting working with ASP.Net, I was convinced that I could abandon Web Forms completely. I tried working with just StringTemplate and HttpHandlers, but it became obvious that I was building an app for a client that a very limited number of people would be able (or willing) to maintain.
(Even though I abandoned it, I still use handlers every once in a while. It’s nice — the joy of C# without the pain.)
I have quite a bit more to say about Web Forms and the whole “HTML control” concept, but it’s for a different post. I’ll stop now and open myself up to be shredded in the comments. Have at it.