ASP.NET
Normally I don't care about the new programming languages Microsoft has invented lately, but I stumble over them from time to time, as we are learning them in school, or because I start using some software written in it.
While I must admit that C# is indeed a powerful language for Windows environments, and definitely better than Java, at least for the average Windows Forms developer, I just can't say the same thing for ASP.NET. In this entry, I'm talking about version 2.0, coming with the all new Visual Studio 2005.
As you maybe know, ASP.NET is supposed to be the new solution from Microsoft when it comes to web applications. Admittedly, they have put a lot of hard work into it, but in my opinion, these endless man hours have been completely wasted.
The Microsoft web solutions evolution, as seen by me
As far as I can tell, Microsoft's web solutions started with Microsoft Frontpage. At that time, many people just used plain HTML to create their web pages. No fancy server side processing, no JavaScript extensions, just plain HTML. People from Microsoft noticed this, noticed also the poor (dumb) people who couldn't write HTML code and therefore weren't able to create web pages. These people, however, could reasonably handle Microsoft Office products, like Word, and they were able to create their documents with it, offline of course.
So the guys at Microsoft made up a reasoning: Word documents somehow look like HTML pages (text, images, etcetera), our customers can operate Word, but they can't write HTML code. So we make a program like Word that can create HTML pages. Similar to that step was the MS Word HTML-Export feature.
The result, as everyone can tell, was terrible. Web pages with yellow background and brown text, blurry JPEG images as buttons, mixed with uncompressed bitmaps imported from MS Paint. Company homepages created from Frontpage templates, etc. As in every thing, you can argue about that. Even today some people are using MS Word or Frontpage to create web pages, but in my opinion they've all missed a very important point: The web wasn't designed for all this stuff. The web isn't about colorful documents that are loosely linked together. It's a global network and it has more features to offer than a word processing program. Oh, and worse than that, Frontpage used things that were only possible with Microsoft Internet Explorer. Unapproved, non-standard stuff. All the time.
But I'm digressing. ASP.NET. In my opinion it is only the next incarnation of Frontpage. Microsoft has noticed the new features of the web. As always, they are trying to create "innovations" (make some already existing technologies available to ignorant people). New features include server-side processing (CGI scripts), JavaScript, new CSS and HTML features, etc. They want to make these features available to their customers. And while they are looking for the closest equivalent to hand-made web applications in their product offers, they get to Windows Forms. Simple reasoning: Web application = Web + Application.
Web application = Web + (Windows Forms) Application?
They apparently believed this, or else I can't explain why they have integrated a whole Web Development Environment into Visual Studio. (Microsoft) users don't have to fumble with scripting languages and web servers anymore, they just drag and drop so-called "components" into their "application window". Just like Windows Forms development. Except for the fact that you don't create a Forms Application, but a bunch of web pages, which is a completely different technology!
People who don't know anything about web development, PHP, Perl, CGI, HTML, web server architecture and all that stuff, especially if they are Windows Forms developers are probably very happy with that new addition. They don't have to fiddle with all that scary things, almighty Microsoft cares about the "low-level stuff". They write their C# code and everyone is happy. Just as happy as the Word guys were when Frontpage showed up.
And what's the problem about that?
The problem is that when you use ASP.NET, you use a technology you don't understand while believing that you understand it. Some features you use don't exist in reality and are emulated by the development environment, exploiting technologies in a way never meant to be by the inventors. Some other features are existing, but not available in ASP.NET (at least not directly), because they simply don't fit in the Windows Forms style of thinking. The result are web pages with a lot of unnecessary JavaScript, unreadable HTML code, ignoring advanced HTML and CSS technologies.
Oh, and one word about the "user-friendly" Visual Studio 2005. Maybe it was coincidence, but I was using it for approx. 5 minutes (I talk about the Web Developing part here, not the C#, which I consider pretty mature) when I discovered the first bug. When testing a web page, VS starts a built-in IIS Server (the ASP.NET server) and a browser displaying the page. It determines the browser by looking up the associated program for the file extension ".HTML". So far, so bad: If you have Notepad associated with HTML files, it opens Notepad. And here comes the terrible (buggy) part of it: The first time Visual Studio looks up the program, it creates a file called "browsers.xml" somewhere deep in your C:\Documents and Settings...\ folder and then loads the setting from there. So our poor Notepad user can't change the browser associated with VS anymore (unless he finds the XML file and deletes it). And no, you can't change it in any of the "Options" dialogs in VS itself. And what makes me even angrier: Dumb people (who only know Internet Explorer as web browser, who don't know how to change file associations in Explorer) don't even notice it. I guess that's the kind of customers Microsoft wants.
My personal advice to ASP.NET developers
Don't use ASP.NET! Invest a little time learning about HTML, CSS and JavaScript. Do some research about the architecture of the Web and about Web Servers. Don't use some almighty program to design your web pages -- first know the technology, then use it. Hell, you can even get great results using ASP.NET, but only after you know what you are doing. And at that point you will be much happier using something like Perl, Python, or PHP.
Yeah, I know, learning is always difficult, especially learning something that is completely new to you, but it will pay off. It makes you smarter, and even more willing to learn, and that it (IMO) what makes the difference between an average developer and a good developer. And as a side-effect, you remove the dependency to Microsoft. A corporation dedicated to operating systems doesn't have to tell you how web development works, has it?