# Why Many Developers Hate ASP.NET… and Why They’re Wrong

Few platforms draw the same amount of ire as ASP.NET (or .NET in general) from the development community. While there are certainly valid criticisms of the platform (what platform doesn’t?), the majority of negativity comes from those who haven’t spent any time with .NET. Those developers typically rely on misconceptions or flat out hatred to base their opinion, and they do a disservice to others looking to learn a new technology and to the platform itself. So, let’s examine these excuses and add a dose of reality on why you shouldn’t listen to the rabble and give ASP.NET a try.

## It’s Made by Microsoft

This is probably the #1 reason for all ASP.NET hate.

Microsoft is a massive software corporation, and like all other corporations, they’re in business to make money. Duh, right? Unfortunately, this is probably the #1 reason for all the ASP.NET hate: it’s a Microsoft technology, and the “evil” taint still lingers over the giant in many people’s minds. I’ve always found this interesting because the other major technology companies, such as Google and Apple, are just as “evil” as Microsoft, but the zealots fans of those other companies typically turn a blind eye (or are in denial) to those “evils.” I personally think the majority of people are normal minded people. They don’t really care who makes a product as long as that product works well.

But I’m not talking about normal people, right? Normal people don’t see a headline containing "ASP.NET" and have an automatic urge to make an inane comment. Instead, I’m talking about the developers (and geeks) that treat technology, and/or the company that creates it, as a religion. I’m not kidding—find any article or tutorial on X platform, and chances are good you’ll find comments stating “X Sucks! Y Rules!”

It’s as if these people are on some weird crusade to defend their chosen tech/company to the hilt and bash the competition in an attempt to bring the unwashed masses into their fold.

It’s sad that the technology = religion mindset exists. Technology is a just tool, and a real developer is going to try multiple tools in order to find the right one for the job. That’s not to say that someone cannot dislike a technology, but to echo our parents, "you don’t know you don’t like it until you try it." In order for someone to truly dislike something, that person has to try it. So don’t listen to the rabble—they haven’t tried it and haven’t formed an informed opinion. If you decide you want to try it, they’ll attempt to dissuade you by saying it costs too much.

## Misconception: It’s Expensive

Find any article comparing ASP.NET with any other platform, and you’ll read, either in the article or in the comments, “ASP.NET costs more than [insert any other server-side tech other than ColdFusion here].” Before discussing the actual cost of something, it’s important to put the term “expensive” in context, as what is expensive for personal use can be considered cheap in a business environment. In business, there are many factors that make up the “cost” of a product. The initial price obviously needs to be considered, but the benefit of the product is also factored into the overall cost.

If a product is $10,000, but it saves the company$1,000 a month, the purchase decision is a no brainer. But on a personal level, it would more than likely be difficult to justify the initial $10,000 cost. So when talking about cost, it’s important to keep things in perspective according to the context in which it will be incurred. To keep things simple, I’m going to assume that if you’re reading this, you’re more concerned with the personal cost than the business cost (if I’m wrong with that assumption, I’ll make this very easy for you: if you have a Windows environment, ASP.NET is cheap). You don’t actually need Windows to develop ASP.NET apps, thanks to the Mono project. Let’s get the biggest cost out of the way: the Windows operating system. You don’t actually need Windows to develop ASP.NET apps, thanks to the Mono project (more on this later), but Mono typically lags behind the official .NET Framework coming out of Microsoft’s ovens. So, if you want all of the latest features and .NET-goodness, you’ll need Windows. Most OEMs (companies like Dell, HP, Acer, etc) ship their computers with Windows already installed; so, if you buy your computer from an electronics chain store like Best Buy, chances are pretty darn good that the computer will have Windows. If you’re more of a power user and build your own computers or plan on run Windows in a virtual machine, you will have to purchase a copy of Windows. An OEM version of Windows will run you anywhere from$99 to $189, depending on which version of Windows you buy. You don’t need to have Professional ($139 OEM) or Ultimate ($189 OEM), but if you’re a power user, you’ll more than likely want to opt for one of those two versions (OEM versions are cheaper than retail versions, but they are tied to the hardware you activate them on). ### Development Costs With that out of the way, let’s review development costs. ASP.NET development is thought to be expensive for two reasons. 1. It’s Microsoft. They supposedly don’t give anything away for free, but that’s exactly what they do. Everything you need to develop ASP.NET applications (or .NET apps in general) can be obtained without spending a dime. Beginners: First, Microsoft gives away WebMatrix, a development environment targeted at beginners. It combines an integrated development environment (IDE) with a built-in web server (IIS Express) and a database engine (SQL Compact Edition). It also has tools to help users deploy their websites to a remote host. Advanced Users: For more advanced developers, Microsoft makes available the Express editions of Visual Studio. Like WebMatrix, these trimmed down versions of Visual Studio are free, but they offer some of the features and abilities found in the full versions of Visual Studio. The web-focused Express product is Visual Web Developer Express (VWD), and it, too, has a built-in web server. It doesn’t have a built-in database engine, but Microsoft gives away SQL Server Express, a trimmed down version of SQL Server, that you can use for development (and even some deployment situations). If you later decide you like Visual Studio and want to purchase the full version, the projects you developed with VWD can be opened with Visual Studio. Students: And if you’re a student, you can get lots of Microsoft software (Visual Studio Pro, Windows Server OSs, and Expression Studio to name just a few) for free through the DreamSpark program. 2. Secondly, Windows-based hosting is thought to be mucho expensive-o. Ten years ago, that argument held some weight. Today however, you can find no shortage of reasonably priced hosting for ASP.NET. DailyRazor (the company I use) starts plans at$2/month, and you can find other hosting providers that sell their services at low prices.

So cost isn’t really a problem, but naysayers will then say ASP.NET is only suitable for enterprise-class websites as opposed to your personal site(s).

## Misconception: It’s Horrible for Small, Personal Websites

One only has to look at the .NET Framework’s class library to get the “this is for enterprise” feeling.

It’s actually easy to get into the mindset that ASP.NET isn’t suited for anything but large-scale sites. Microsoft is a platform company, after all, and their products are primarily focused towards business solutions. .NET isn’t really different in that respect; it’s huge in business environments, and its foothold continues to grow as Microsoft expands new and revitalized products like Azure (Microsoft’s Cloud platform) and Windows Phone, respectively. One only has to look at the .NET Framework’s class library to get the “this is for enterprise” feeling. It’s almost as if the framework guides developers to a mindset that (ASP).NET applications needs to be highly structured masterpieces of object oriented design. A lot of .NET is complex, and doing simple things isn’t always as simple as it should be. It sounds like I’m making the naysayer’s case, doesn’t it? I kind of am, but there two things to consider.

### Simplicity

First, Microsoft wants you developing on their platform, and they’ve recognized that it needs some (perhaps a lot of) simplification in order to grow. After all, PHP is as popular as it is specifically because of its simplicity, and that’s the primary reason Microsoft released WebMatrix: to offer new developers (either to .NET development or web development in general) a simplified approach to writing sites with ASP.NET.

Not only is the all-in-one IDE easy to use, but Microsoft created a simplified API to make ASP.NET development easier and less complex.

### Multiple Approaches

You can also build sites with the same kind of “scripting” mentality that thrives in PHP.

Second, you don’t have to fall into the “highly structured or die” mentality. There are many approaches to ASP.NET development. If you want to create highly structured masterpieces of object oriented design, you can. But you can also build sites with the same kind of “scripting” mentality that thrives in PHP. The point is, ASP.NET development is flexible enough to fit your needs, and you can choose the development approach that best fits you.

Oddly enough, there’s a somewhat prevalent idea that ASP.NET isn’t suitable for enterprise-class websites. o.0

## Misconception: It’s Horrible for Large, Enterprise-class Websites

I honestly have no idea where this comes from because, as mentioned earlier, ASP.NET excels in the enterprise space. But don’t just take my word for it; let’s examine a real-world website (well, a network of websites) that run on ASP.NET.

Have you ever heard of StackOverflow.com? You probably have, and if you haven’t, it’s a Q&A website for developers (regardless of technology). Its an invaluable resource, and one I find myself visiting quite often.

StackOverflow is a member of the Stack Exchange Network, a network of Q&A websites for a variety of topics: servers, databases, legos, sci-fi, cars, and so on, and so on. There are currently 71 sites in the network, and it continues to grow.

The folks at the Stack Exchange Network are pretty open about their network. Much of the code running on the site is open sourced, and they often provide information regarding the network in general. In a March 2011 blog post, Kyle Brandt provided an overview of the technology powering the Stack Exchange Network, as well as the traffic the network gets. Keep in mind this information is regarding the entire Stack Exchange Network. It gets 95 million page views a month and handles 800 HTTP requests a second, and those requests are handled by twelve (yes only twelve) Windows web servers, two MS SQL Server servers, two Linux load balancers, and two Linux caching servers (fail-over hardware is not included in that count).

Reread those stats—I’ll wait. Phenomenal, right? It’s amazing that only twelve servers, serving many different websites, handle that amount of traffic. It’s a testament to just how good Microsoft’s server and application architecture is.

## It’s Statically Typed

Dynamic languages rule the web. Be it on the server side, where languages like PHP, Ruby, Python, and Perl live, or in the browser with JavaScript, dynamic languages are the backbone of the web. It’s not that these languages are better, but they are quickly adopted because dynamic languages are typically easier to learn and understand than statically typed languages.

So what we essentially end up with is a massive community of developers who have only used dynamic languages, and that community almost has an aversion to static languages.

I fully understand the mindset. I used to be one of those people, and I understand the desire to stay within one’s comfort zone. After all, dynamic languages are lenient, and there is some comfort found in that leniency.

Static languages have a strict type system.

But there’s a bad side to that leniency; it is extremely easy to introduce bugs into your app if you’re not careful. You’ll typically not find that bug until runtime, and a common cause of bugs is the assignment of a different and unintended type of value to a critical variable. This is where the primary benefit of static languages comes in: type safety. Static languages have a strict type system, in that a variable can only contain one type of value (eg: a variable declared as an integer can only contain integer values; it cannot contain a string or floating point numbers). If you mistakenly assign a string to a number variable, you will immediately know of the error when you compile the code because the compiler with halt and alert you to the error.

Type safety can also alleviate the type checking you need to perform in dynamic languages. For example, how many times have you written code like the following to ensure the data a function accepts is of the expected type:

function add($a,$b) {
if (is_int($a) && is_int($b)) {
return $a +$b;
}

// throw error
}

This is a simple PHP function that adds two numbers together. In order to ensure predictable results, checking if the supplied values are of the appropriate type is imperative (admittedly, the type checking here isn’t complete; there are numeric types other than integer); otherwise, your app could break at unexpected times. In contrast, let’s look at the C# equivalent code:

int add(int a, int b) {
return a + b;
}

This code defines an add() method. C# is the most popular .NET language, and it is purely object oriented. There are no functions; only methods of a class. This method accepts two integer values (denoted by the int keyword before the a and b identifiers), and it returns an integer value as denoted by the int before add. Because C# is a static language, the type checking is performed by the compiler—not by you. So, if you were to call this method, pass a string as one of the arguments, like add("hello", 123), and attempt to compile the code, the compiler will stop the build process and alert you to the error. Chances are, however, you wouldn’t even try to compile the code because Visual Studio performs its own type and syntax checking; the IDE will warn you of errors before you even try to compile (see the below screenshot of Visual Studio 2010).

Also consider that Microsoft continually updates and improves the C# language. In the first two versions of the language, you had to identify a variable’s type when declaring it like this:

XmlDocument document = new XmlDocument();

This code creates an instance of the XmlDocument class by declaring its type prior to the variable’s name. Admittedly, this syntax is rather cumbersome and adds far more typing, but as of C# 3.0, however, you can simply use the var keyword to define a variable, like this:

var document = new XmlDocument();

There are .NET-enabled versions of PHP, Ruby, Python, and PERL.

The compiler is smart enough to infer that the document variable is an XmlDocument. This syntax sort of blurs the line between dynamic and static languages. You get simple, typeless variable declarations with the benefits of type safety… a win-win in my book.

But if I still can’t persuade you to give C# a try, ASP.NET sites do not have to be written in C# (or even VB.NET… but who would want to do that?). There are .NET-enabled versions of PHP, Ruby, Python, and PERL (and others) that you can use to write ASP.NET sites with, and they are just as dynamic as usual thanks to the Dynamic Language Runtime, a feature of .NET 4. So while I recommend anyone picking up ASP.NET to learn C#, you don’t have to leave your comfort zone if you don’t want to (but if you do the benefits are worth it).

## It’s Compiled

The same dynamic languages that rule the web are also interpreted, and there is a certain benefit that comes with interpreted languages. Unlike compiled environments like ASP.NET where you typically write your code, compile it, and upload it, interpreted environments let you simply write your code and upload it. The common idea being that compiled environments require an extra step in development, and that wastes time. But it really doesn’t. The compiler gives us many benefits that you just cannot get in an interpreted-language environment.

First, the compiler checks the code and can give you warnings. Warnings are just that: a warning. It’s something you’ve done that may be a bug, but it won’t stop the compiler from compiling your code. Let’s look at the following code that would cause a warning:

string DoSomething()
{
var foo = "Hello";
var bar = "World!";

return foo;
}

This code defines a method called DoSomething(). Its body creates two string objects, foo and bar, and foo is returned to the caller. The bar variable is not used, so the compiler would issue a warning stating that bar is assigned but its value is never used. It may be that I created bar and forgot about it, or that I ended up not needing it. But it could be the source of a bug if I forgot bar already existed and used it elsewhere in the method. The compiler brings it to my attention so that I may address it and avoid future bugs. Here’s a screenshot of what Visual Studio tells me:

Do you want another example? Sure you do:

void DoSomethingElse()
{
var foo = true;

if (foo = false)
{
// this code will never execute
}
}

In this method definition, a boolean variable, foo, and defined as true. It is then used in an if statement, where it is assigned a value of false. That may be exactly what I intended (although I would argue that I should never do that), but chances are I meant foo == false (yes, the logical not ! operator would be better here… but it doesn’t work for my example). It’s not an error, however, so the compiler will compile the code. However, it will issue a warning asking if I meant == instead of =. These are issues that I would have found an in interpreted environment, but I would have needed to run the app and test it in order to find those mistakes.

Second, the compiler checks the code for errors. Naturally, a compiler cannot catch logic errors, but it can type check and check the code’s syntax. Although, a decent IDE will do these things for you without needing a compiler, and Visual Studio does.

Last, you get a performance boost. Compiled code runs faster than interpreted. Admittedly, .NET isn’t a truly compiled environment. Our code is compiled into an intermediate language (IL), which is then just-in-time compiled by the .NET runtime. The IL, however, is optimized, and the .NET runtime executes it. But it’s still very fast.

## Misconception: It’s Closed

Microsoft makes the source code for the .NET Framework available for free.

Microsoft is a company that sells software, and they are naturally very protective of their products’ source code. So, one might think that ASP.NET (and .NET in general) is closed source, but that is not the case. Microsoft makes the source code for the .NET Framework available for free, and you can step into the code while debugging your own apps. You can even build your own personal version of the .NET Framework.

Microsoft also gives you access to the source code of ASP.NET releases, like WebForms and MVC, via CodePlex; giving you the ability to test new features and provide feedback to the ASP.NET team. I encourage every developer using .NET to download these free resources and study them. You’ll gain a greater understanding of how it works under the hood, and you can apply that same knowledge when writing your own code.

## It’s Windows Only

Microsoft’s openness with the .NET Framework is what helped birth the Mono project, a cross-platform version of the .NET Framework. While Mono isn’t officially supported by Microsoft, the project has been publicly acknowledged by Microsoft. Mono isn’t going away; in fact, it’s growing in popularity  Regardless of what your favorite platform, you can probably use the .NET Framework and C# to write apps for it (you can even write iOS apps with Mono!).

## It’s Not in Demand

Lastly, it’s often espoused that ASP.NET is not in demand, and that simply is not true. Demand is somewhat subjective because different areas of the world and in the country you live have different job markets. For all intents and purposes, .NET has been the development platform for Microsoft Windows environments (both for the desktop and the web) over the past ten years.

Most software developed for Windows uses the .NET Framework, and so there is a huge opportunity for new .NET developers to find work.

The Mono project also factors into demand. Mono is huge, and the community is just getting bigger. With its wide breadth of OS support, you can write apps for any of the big OSs, including mobile devices. There is opportunity galore, regardless of OS!

## Conclusion

So where does all this leave us? Well, the haters and naysayers are wrong, and ASP.NET is a technology that you should try and get to know. After all, successful developers are polyglots—able to write applications in different languages for different platforms. So give ASP.NET a try. What do you say?

Jeremy McPeak is jwmcpeak on Codecanyon
Tags: .net
Note: Want to add some source code? Type <pre><code> before it and </code></pre> after it. Find out more
• http://www.marisic.net Chris Marisic

Haters gon’ hate

• Selcuk

I was going to write exact the same thing.

I like how Microsoft put documentation together. Everything is so clear. I’m not strongly in love with it nor I hate Java etc.

I just use it and when it comes to “it’s too expensive” discussion, if you are running a business, 10G is nothing.
It saves too much time for us.
Especially web development part of it when you mix it with MVC, linq to sql, JS frameworks, that’s the perfect match for me.

• http://www.twolittlefishes.co.uk Nick

Interesting article, however it doesn’t deal with my main objective to .NET, which is the HTML code it produces.

Unless things have changed a lot since I last used .NET the HTML it produces isn’t anything like clean and standards compliant and there seems to be no way to change that.

• http://www.wdonline.com/ Jeremy McPeak

Non-issue. Markup is only an issue if you use WebForm controls, and then only if you’re using ASP.NET prior to version 4.

• Raphaël

You should take a look at mvc.net, you now have full control of the rendered HTML. Webform was a real pain for the outputed HTML.

They’ve fixed it in MVC. The only person you can blame for dodgy .NET generated markup today, is the developer.

• Mario

Hi Nick, In this case I know since 2008 version ASP.Net allows you to to create your own controls based on what you want to produce (html) and now with ASP.Net MVC3 was made thinking, among a lot other things, in what you said. Is very easy to use and realy helps you to focus only in programming or produce html (html5 native engine) just we have to give it time to learn it, like any other thing. I am not saying is better than others just want to say is very usefull and powerfull in my experience

• Ciwan

Excellent Article. I’ve fallen in love with ASP.net MVC3 C#. Not only is the technology very flexible, but it also pays more (or at least in the areas surrounding where I live).

• https://github.com/dublinan Andre Dublin

Yeah, Virginia is a great place for .NET developers.

• http://www.traviscastleman.com Travis Castleman

I can vouch for Richmond being .net jobs loaded!

• Ron

C# is a great language!

I don’t like the .Net Framework itself (bloated) or being forced to use Visual Studio (Windows only).
Mono IDE is garbage so there isn’t a decent alternative on other platforms. Not to mention the Mono is always behind what ever Microsoft releases for .Net.

I also prefer Apache over IIS (what a mess and again Windows only).

It would be great if an open source framework was built around C# with no ties to Microsoft. Built on LLVM + Clang, I’d jump on that! The truth is things just get done faster with other languages and frameworks, and are much easier to pick up then .Net.

Right now I’m looking at Perl 6 (looks great!), Groovy, Scala and Clojure.

• Myke

Have you used IIS 7? I find it smashes Apache in every way. So much easier to configure and maintain.

• Ako Kaman

(I think) IIS 7 is really good, but compared with IIS 6. When it comes to Apache, it is nowhere near Apache.
I know, it is difficult to configure and run Apache for a beginner. IIS with it’s GUI configuration is really easy for them.
But for an experienced developer Apache really beats IIS.

• http://www.wdonline.com/ Jeremy McPeak

If rich APIs that give you the ability to do just about everything you want is bloated, then bloated as a new meaning. As for HTTP server software IIS 7+ is a completely different beast than prior versions. It’s fantastic software.

• Alex

I still don’t understand why people complain that a technology is ‘Windows only’. First of all, you complain about Mono, but the Mono project has done a great job trying to keep up with the .NET framework considering how few resources they have to work with, when compared to Microsoft. And secondly, there are plenty of technologies that only work on one platform, but no one ever seems to complain about, for example, Objective-C being ‘Mac only’, or the fact that you are forced to buy a Mac to even program for the iPhone.

It all comes down to, once again, the fact that it’s ‘fashionable’ to criticize Microsoft. You get points with your friends. You all have a good laugh.

That being said, I didn’t even try .NET until the first beta of ASP.NET MVC came out. I’ve never tried WebForms, because I personally hate ‘drag-and-drop’ development. I love to type code. They have done an amazing job with ASP.NET MVC, currently in version 3. The flexibility of the platform is amazing. And, while I’m coding on Visual Studio on a Windows machine, and deploying to an IIS web server, the databases are all MySQL on Linux running on the Amazon cloud. In fact, our setup is about half and half, Windows/Linux, with even some Ruby on Rails for some stuff, and it all plays really nicely together. There is no reason for your setup to be ‘Windows only’ to use .NET.

• Patrik

Who forces you to use Visual Studio?

• https://github.com/dublinan Andre Dublin

@Chris Marisic – hate on hater

Great post, I worked at a Software Company briefly as a front end developer, my background is primarily PHP, Ruby, Opensource code. But they were a ASP.NET shop and wrote in C#. I’d have to say from my experience there I was highly impressed with the Visual Studio IDE and learned a lot of valuable knowledge of a strongly typed language (now that I’m learning Objective-C).

• http://oddnetwork.org haliphax

An excellent post! I use ASP.NET (C# and VB) at work and PHP for my freelance/hobby development, and I’ve got to say–I appreciate both languages. ASP.NET is definitely the winner as far as my employer’s enterprise-level web site is concerned, though I built several small-scale ASP.NET sites throughout college, as well. I’ve got to say, I like PHP mostly for the community, the abundance of documentation, and the flexibility. I use it when I’m wanting to get a bit experimental–or when I just need to bang out a simple script that performs a one-off function (which can be done in one easy-to-read file with PHP… not quite the case with ASP.NET).

The majority of my freelance work is done in PHP, because that’s what the customers want… likely due to a fair number of the stereotypes listed in the article.

• John

Not a fan of VB, if I have to use .Net its C#. I do find .Net bloated and like some have mentioned already it takes a lot more lines of code to get the same thing done in other languages. Not to mention the breathe of sample code on say PHP or Python etc…

I also prefer apache over IIS for deployment.

• http://wickedsoftware.net Michael Herndon

you can deploy ASP.NET applications on Apache httpd using Mono’s mod_mono module.

• Aaron Clayton

My experience with .NET and .NET developers is that it is more expensive to maintain. If you don’t have a developer on staff, the freelance developer costs much more than the typical open source developer. Also, the community is much better for an open source platform. This has just been my experience in my little corner of the world.

• http://andrescortes.me .NETDEV

I think that your comment is a plus for us as developers because we can charge more for a better technology.

• Michael A. Hess

I’m sorry but if you want to do serious development it is Windows only. Currently ASP.Net is at version 4 with 4.5 around the corner. From the Mono site,

“Mono supports ASP.NET 2.0, ASP.NET AJAX and a handful of 3.5 controls. ”

So it is barely at version 2.0. To state that Mono can be easily used is nonsense. It always has been. If you are going to use ASP.Net for real development then you MUST use a Windows server. Even if you do use Mono it is best with a Windows server because some of the libraries that are desired can not be delivered with Mono and are only available (by license) on a Windows OS installation of .Net.

I’ve developed .Net stand alone apps, Asp.Net applications for Windows servers, for clients, but for my own use and design I would never use Asp.Net. Why? Because even if using Mono you need to use a Windows Server and I will not use Windows as a server. Windows was never designed to be a server and should never be used as a server.

For me THAT is the limiting factor from using ASP.Net.

• http://www.wdonline.com/ Jeremy McPeak

I mentioned that, although not in so many words, in the article.

• NakkiNyan

I think you overly downplayed that fact though Jeremy. Seriously Windows servers are horrible and IIS is worse. When MONO is .NET 4.5 compatible and runs fully on an Apache server the argument may hold some weight.

I also use a Mac so I only have a horrible IDE for .NET, either I use that or all hand coding so I may as well just stick with something that works across more servers [place languages here].

• http://jonathanmh.com Jonathan

Plus, it doesn’t mean that MS never will press charges againsts projects using “their” platform.

• http://www.wdonline.com/ Jeremy McPeak

@NakkiNyan, you would have had an argument if we were talking about Windows NT Server or IIS 5/6. Windows Server has been rock solid since 2000, and 2008 R2 is an excellent server OS for just about everything (Web, File, Application, etc).

@Jonathan, that’s been said since Mono’s inception. It was as baseless then as it still is now. .NET is an open standard.

• http://wickedsoftware.net Michael Herndon

Orchard CMS runs on mono which requires a good deal of the newer bits that have been release from MS.

ASP.NET comes basically in two flavors these days. WebForms & MVC. Mono has for the most part kept up with the MVC releases and imho is the better option of the two.

You can write decent web apps using mono + nhibernate + ASP.NET MVC.

There amount of OSS projects in .NET is growing and there are some that would help supplement some of the missing pieces on mono. Nuget is helping to grow that aspect of .NET.

Newer out-of-band pieces of the .NET framework like MEF (managed extensions framework) are being released under MS open source licenses so that they can be used with Mono.

@NakkiNyan

You’re jumping the gun. 4.5 has not been officially released yet. Even so, the mono guys have already baked in C# 5 and 4.5 into mono. http://www.mono-project.com/Release_Notes_Mono_2.12

However, there will always be pieces of the framework that will never make it into Mono.

@jonathan

That argument is pretty empty at this point.

http://www.microsoft.com/openspecifications/en/us/programs/community-promise/covered-specifications/default.aspx

both the CLI & C# are covered under the community promise from MS. MS has a pretty decent relationship with the programmers that work on Mono these days. I don’t see Oracle making such statements.

• http://evansofts.com evanxg852000

I don’t use ASP.NET neither JAVA for web because of the compilation.
But .NET is the best framework I have ever work with (Winform, WPF ) and I know it is the same in ASP.
The organisation is Amazing !!!!
It’s so well organised that it does not required any learning apart from the languages (C++, C# or VB )

• theraot

What’s wrong with compilation? Java and .NET have their own virtual machine language, and then there is compilation to the “real” machine language (I mean native code). At the end it is all about translation, for example take PHP, every time you request the page it gets parsed and (tranlated to commands just in time) and executed… why not do that beforehand? Or take CoffeeScript, as you know you can “compile” it to javascript to get it run.

Of course, nothing of this regards to the language. You can get PHP compiled over .NET with Phalanger while it is usually interpretated code, you can get JavaScript compiled to a virtual machine language in Google V8 as managed code while it is (was) often interpretated code. On the same vein you can use ngen to compile or mono –aot to compile C# to native code where it will run faster for the target machine, and still C# is often used for managed code.

All in all, one way or another it ends up at your CPU where it is the real machine language (this time without the quotes because those where a reference to the OS).

Perhaps when people say “I don’t like that it gets compiled” they mean “I don’t like the way it gets compiled”.

• Lars

I’d like to mention the Phalanger project.
This project makes it possible to compile php straight to managed .NET making it possible to not only run php in a .NET context, but also use all of the MS framework components :)

Ciao,
Lars

• Lars

I’d like to mention the Phalanger project.
This project makes it possible to compile php straight to managed .NET making it possible to not only run php in a .NET context, but also use all of the MS framework components :)

Ciao,
Lars

• Lucas Berto

Very nice article. It’s good to know that open-minded developers still exist.
.NET is a pretty solid technology and, like you said, there are haters for almost anything in the world.
People should try to form their own opinions instead of just joining the haters and hating something that they know nothing (or almost nothing) about.
Hopefully, this article will help some developers open their mind. =)

• Alan

Well Microsoft owns it though, right? That is the real difference, that is the same reason everyone is turning against Adobe’s Actionscript.

• http://yobriefca.se James Hughes

Apples and oranges – ActionScript is a language. .NET is an ecosystem of many languages, tools and frameworks.

Adobe owning the actionscript monkier is not the only reason for its demise.

• theraot

.NET is an open standard at ECMA and ISO.

Just like ECMA 262 is EcmaScript which in turn is the base of JavaScript and it is the part of JavaScript we expect all browsers to have an support because it is open and standard…

And JavaScript is the base of ActionScript, which is an open… specification, which means that Adobe controls it, not like to open standard which means that everybody can use it, implement it, and even participate of how it develops. Of couse implementor (often companies) have more weight on this regard, still you are welcome to aks and suggest. That’s what happens with w3c and HTML and JavaScript. And what doesn’t happen with ActionScript.

Now, you can check ECMA 334 (C#) and ECMA 335 (CLI) for free at http://www.ecma-international.org (of course ECMA 262 (EcmaScript) too).

If Microsoft decides to shutdown .NET the standard is done and can be taken by third party (Mono or dotGNU, or any other) and continue the development. Also at the moment Microsft made this an standard it lost it’s power to sue anybody because of it’s use. Also the source code of .NET is available as shared souce (that is, you can see and use, only Microsoft will modify it, pretty much open source but without the coolaborative development community).

By the way, ECMA 376 covers PDF and DOCX.

• Patrik

Good point!

• Don

Excellent article. As an ASP.NET developer since 2004 I’ve seen most of what has gone on with the stack and I’ve built enterprise as well as small scale sites with it. For throwing together a site it works well and for architecting an enterprise scale site it works equally well. Caveat about SQL Express – it isn’t supported by most third party hosting sites so if you build your database with that, which is the default, then be prepared to upsize it to SQL Server or go with SQLite or MSAccess.

The snub to VB.NET isn’t really necessary as you say technology should not equal religion. The languages are basically in parity. The marketing machine that is Microsoft and their evangelists have done a great job of promoting C# over VB, but you can basically do everything in either language – exception XML Literals supported in VB. There’s an online converter to take code in either direction as well. The future of the languages as told by Anders is here http://channel9.msdn.com/events/BUILD/BUILD2011/TOOL-816T.

The issue I take with ASP.NET is not with the technology, but with the company behind it. My opinion, and that’s all this is, has changed in the last year from fanboi to skeptic. Since the migration of Guthrie to Azure with a toe in the water of .NET, there has been lackluster news on the ASP.NET 4.5 front. Instead of seeing amped up progress for 4.5 or 5.0 to target the HTML5 spec as well as the other huge things coming out from the W3C, Microsoft is adding minor bits and pieces here and there. The IDE is becoming more HTML5 rich and that is a core strength of Microsoft – the tooling, but the control set has been more or less static since 2.0, with the addition of the listview in 3.5. The WebForms architecture which Microsoft pushed hard in 2.0 has been beaten up by the evangelists with the addition of MVC. MS has a third iteration of ASP.NET called WebPages, which harkens back to the classic asp days in terms of putting everything in the page. MVC targets Ruby devs and WebPages targets PHP folks. It’s more or less about the sale and not about improving the technology to stay abreast with the latest greatest – albeit they stay abreast begrudgingly and without a roadmap that can be revealed to the developer.

The killing off of Silverlight and WPF also is something to be wise to about Microsoft. Microsoft will drop technology as they see fit and it doesn’t really listen to the developer community which has spent considerable time and money on books and training to get up to speed on the latest and greatest from Microsoft only to see the plug pulled before the technology is fully matured. They need to work on that more, but they make the majority of their money on OS and Office sales so do they really need to listen to the devs?

Why do I write this, well as an employed ASP.NET developer primarily using VB.NET, I think the bigger story needs to be told before someone invests their time and energy in the Microsoft stack. Another thing to consider is that development trends are changing. HTML5/JavaScript/CSS3 and the updated browsers are here to stay and what can be done server side is increasingly migrating to the client. There are also numerous canned open source apps that might fit one’s requirements and need some tweaking. Hunting for .NET apps versus say PHP open source apps reveals a disparity in what is available. Yes the main categories have a project or two on the .NET side, but compare that to dozens on the PHP side. Many considerations go into picking a package to mess with, but having the opportunity to consider a far greater number to pick from leads to a better choice.

All the points made in the above post are true and valid and solid reasons why to learn more about ASP.NET. It is a fun technology to work in and the tooling is the best part.

Thanks for allowing comments.

• http://yobriefca.se James Hughes

The .NET stack is a great stack, it’s also fairly broad which means that there are going to be “bad parts”. Many MS products suffer from this because of the the sheer volume of coroporate people they need to cater to.

I’ve drifted recently from ASP.NET MVC (I always disliked the WebForms abstraction) into an entirely open source stack (Nancy, ServiceStack, ORMLite etc) and there is a great open source eco system out there for the .NET stack. It’s also possible to go the, near pure, dynamic route with the new features in .NET4 – a good series covering this is http://www.amirrajan.net/Blog/dynamic-asp.net-mvc

Lets not forget the other aspects of Mono – MonoTouch and Monodroid – as a .NET/C# developer I am fully equipped to produce native iOS and Android apps without having to jump into the arcane Obj-C world.

In short – it’s better than most people give it credit for – so yeah, what you just said really :)

• Myke

Working with .NET MVC 3 and Visual Studio, IMO is the smoothest thing ever. Visual Studio is just flat our beautiful. I am not a big fan of MONO at all, especially for running business critical applications, it hardly makes sense not to go all the way and run it on top of a Windows setup.

For me, if it’s something I cannot pull off easily in WordPress and just a little too heavy to want to mess with in a php framework like Codeigniter, Zend, etc then .NET MVC is the clear winner.

^ 2 Cents.

• z3r0

ASP .Net MVC 3 is Microsoft’s late entry into MVC. Its a me too technology. Its not all that mature yet and hasn’t brought anything new to the table that you can’t find in open source MVC frameworks. Symfony, Zend, RoR, Pyramid, Grails, etc… all run circles around it.

You would learn a lot more and be more productive by learning one of the above mentioned open source frameworks vs ASP .Net, not to mention avoid vendor lock in.

MVC3 – as in version 3, and it’s pretty mature at that.

I can tell you’ve never tried it. If you had, you’d be able to give a single example as to why those other frameworks are better.

• z3r0

“MVC3 – as in version 3, and it’s pretty mature at that.
I can tell you’ve never tried it. If you had, you’d be able to give a single example as to why those other frameworks are better.”

You do like making a lot of assumptions don’t you?

ASP .Net MVC came in pretty late in the game compared to the others so it has a ways to go. How about you tell me why MVC 3 is better?

• http://wickedsoftware.net Michael Herndon

Grails & Zend Framework started about the same time asp.net mvc was started and they definitely do not run circles around anyone. Symphony on the hand has been around for a while. However I’d rather program in C# than PHP or Groovy.

Rails 3 was really promising with the inclusion of engines, merb, and arel, though they lost me in 3.1 when they decided to make HAML & SASS the default way of doing templates and css.

The reasons to use ASP.NET MVC have more to do with the more modern programming paradigms and language features that have been or are being developed. LINQ, Task Parallel Library, the async stuff in .NET 4.5, the ability to use multiple languages and the right one for the job (F# for parsec like parsing, algorithms, math or concurrency), Razor template engine, Expression Trees, Rx Extensions.

some of the more “dynamic” features that have been added to C# while retaining the speed/performance of a compiled language are also enticing. Dynamic Data/Scaffolding that change with the models rather than having to regenerate it.

The other interesting thing to watch will be Roslyn or the “compiler as a service”. This should enable C# to be scripted.

The razor syntax is can be friendlier to web designers who prefer HTML over learning a whole new syntax like HAML, though .NET does have NHaml.

• theraot

May be for the web, but Microsoft has been working on MVC for desktop apps from even longer. Personally I don’t like those soultion but they have their merit. Also I hope you are not trapped in any of these misconceptions: 1) that a real MVC must have it’s view in HTML. 2) And that any three layer architecture is MVC. Those I’ve found some people introduced to MVC for web but not for desktop.

• Dom DeStefano

Thanks for the article; I’m always curious to read up on other technologies. While this seems to be a good defense of ASP.NET and a dispulsion of popular myths, it still doesn’t seem to state why ASP.NET would be the language of choice over its competitors. Perhaps that’s not the intended purpose of this article, but I’m curious to see some solid side-by-side comparisons between ASP.NET, PHP and others that demonstrate applications in which its use would be superior. As a developer, that’s what I look for: superior technology given the requirements.

• Thomas

Hi,

Sorry to ask that but, are you paid to write this ?

• http://www.jeffrey-way.com Jeffrey Way

Snark, or honest question? Yes – he was paid.

• Dave

Jeffrey-

I could be wrong, but I think Thomas may have been asking if he (Jeremy) was paid by Microsoft to write this article. Being paid by Microsoft would make it marketing. But, I believe that Jeffrey meant that Jeremy had been paid by NetTuts – as are all authors whose articles appear on this site.

However, anyone who follows Jeremy and his writing knows that he’s a fan of Microsoft development technologies and has written many outstanding tutorials on that subject. Being paid by NetTuts to write these articles is not equal to being paid by Microsoft in some kind of marketing arrangement.

For the record, I agree with Jeremy’s assessment of ASP.NET. It’s a great platform and it’s supported by great tools. For those of you who quibble with .NET because of problems with IIS or Wiindows Server, I would say: how’s it feel to be stuck in 1995? Microsoft has moved on and complaints about security or quality or ease of use just no longer apply.

Folks, there’s nothing wrong with saying “I just prefer language X or server technology Y.” That’s fine. But these days, given the way the technologies have matured, the truth is you can build secure, stable software using pretty much whatever language/framework you like. The hard fact is that the level of quality depends a great deal more on the developer than on the technology – a point which I think Jeremy made in the article.

• http://www.jeffrey-way.com Jeffrey Way

I see. No, he was not paid by Microsoft. The title was my idea; I asked him to write it for us.

• Coz

This article seems to be more preachy than technical. I use Net simply because it pays more but it isn’t my preferred language. It’s bloated, ugly and there is too much overhead. Pretty much all the other comments have covered what I would have said. Something I dislike about Microsoft technologies in general is the ‘dumbing down’ of writing code, for example ‘webmatrix’.

As a side note, I have the authors ‘beginning javascript’ book. That was pretty cool.

• Ramsey

Brilliant post!!! Thank you for outlining this so eloquently! I am a .NET Developer and have been since VB 5 days. I love code, any code really, but i cannot understand what the elitist hater attitude is against it from all the Ruby/PHP/[insert any other non MS framework here]. I don’t bash PHP for it’s short comings, nor do i openly gloat that ASP.Net is openly better. I simply respect the languages that pay my bills, and that I love to write code in. I’ve found that most of the “complainers” about ASP.NET have not tried to use it, or try to impart their way of thinking into the framework, forcing it to do something unintended or impractical.

Again, thanks for this post.. It’s about time someone put up some good .NET love on this site. :)

• http://yc.yccd.edu Peter Skillman

Because my first paying job was as a mechanic, I never have looked at solutions as other than tools. Thus, I could never understand the “haters” who trash a technology for reasons other than utility. Since I work in an .EDU environment — I actively develop web apps in PHP, MySql hosted by Apache. I really enjoy coding in PHP and associating with its vibrant community.

However, I have grown to love C# and the Visual Studio IDE — and, appreciate the utility of the ASP.NET framework.

One key for my developer contentment is to be open, flexible, expansive and agnostic when using tools of the trade. This article mirrors this approach.

• http://narutosoul.com pein

.Net has some very useful tools in it like master files, buttons, templates etc… but most of that has to be done in development. Because its compiled means its faster then other languages but it is not a true compiled language because it has to be ran through the CLR and turned to opcode for your machine. Its pretty much a lie to say its compiled because it is not, and it is instead intermediate code that needs to be turned into machine code. Other then that its fairly good but it does require a ton of code to do anything but the one thing it has going for it that no other system does is built in components that can be added via a tag. Some CMS have this but this is right in the IDE and saves work time. I’d personally never use it in the field unless I needed to because it is Microsoft and it is bloated and coded with hardware picking up the slack for sorry code. If they rewrote it to be a lean mean processing machine I’d think about but I’d need to see win 8 improvements in the speed and CPU usage.

• http://www.wdonline.com/ Jeremy McPeak

Didn’t read the article?

• pein

I’ve coded in .net for years now on the system level side and web side in college courses. Your article does not say much and you fail to mention anything about the CLR and it not being a true compiled language. In fact you make the point against your claim several times. Maybe you didn’t know that or maybe like the article on jquery users being non programmers, your simply trying to push your own agenda. Microsoft has a track record of writing hardware intensive code and its why other OS consume less resources when ran on the same hardware. The proof is in the pudding and microsoft is known for its lack of coding stand adherence, remember the IE problem?

• http://www.wdonline.com/ Jeremy McPeak

Actually, I did. From the editorial:

Admittedly, .NET isn’t a truly compiled environment. Our code is compiled into an intermediate language (IL), which is then just-in-time compiled by the .NET runtime.

So again I ask, “didn’t read the article?”

• Matthew

I hate ASP.NET because I work with it every day.

• Matthew

In addition, the part about hosting costs being the same is just silly. Any reliable host (we’re talking hosting actual sites here, not $2/month jokes) is going to charge more for a Windows server than a Linux server, due to licensing. Argue all you want, but developing and then hosting a .NET site just costs more. • http://www.wdonline.com/ Jeremy McPeak Mileage will vary between different hosting companies and their services. But$2/month isn’t a joke, and the services provided are more than capable for running “a real site,” whatever that means.

• z3r0

.Net is pretty much a copy of Java, except that its constrained to the Windows platform so it truly doesn’t “run everywhere”. Java on the other hand provides a consistent environment for development and deployment.

Lets look at Mono. The Mono Framework itself is a joke, its at least 2 full versions behind Microsoft’s releases. The Mono IDE is sluggish and does not have feature parity with Visual Studio meaning you are forced to use the Windows platform. So in other words vendor lock in.

While C# is nice, you are forced to use .Net, there are no other big name frameworks for the language. Take a look at any of the open source languages, you have options, with .Net you only have one and not a good one at that. .Net is bloated and makes doing the simple things hard requiring a lot more lines of code versus other languages or frameworks. This is big a drain on productivity (not to mention all the compiling).

Deployment is another issue, you are again stuck to Windows based OS. You could use apache with mono but again the performance would be sluggish along with a subset of features.

Its really reasonable to avoid .Net and at the same time vendor lock in with Microsoft by just skipping them and going with something else.

I can tell from reading this that you’ve never tried .NET. .NET is a copy of Java? Really? You’ve just compared a framework with a language. It’s like saying that Rails is a rip off of Python.

If you want to hate everything Microsoft, go for it, but don’t kid yourself that you’re making an informed decision until you’ve really tried it.

• z3r0

“I can tell from reading this that you’ve never tried .NET”

Really? Thats a completely arrogant assumption based on a few paragraphs.

“.NET is a copy of Java? Really? You’ve just compared a framework with a language. It’s like saying that Rails is a rip off of Python.”

I was referring to .Net platform vs Java platform as a whole. I don’t ant to waste time nitpicking and checking grammar. Think JVM vs CLR, if can’t understand that then I don’t know what else to tell you.

“If you want to hate everything Microsoft, go for it, but don’t kid yourself that you’re making an informed decision until you’ve really tried it.”

Another assumption.

• z3r0

“I can tell from reading this that you’ve never tried .NET”

Nice assumption based on a few paragraphs.

“.NET is a copy of Java? Really? You’ve just compared a framework with a language. It’s like saying that Rails is a rip off of Python.”

I was referring to the platforms as a whole. Think JVM vs CLR. If you don’t understand that, then I can’t help you.

“If you want to hate everything Microsoft, go for it, but don’t kid yourself that you’re making an informed decision until you’ve really tried it.”

Another assumption.

• http://zettersten.com Erik

Java is not a platform. It is a language. He’s right to assume you’ve never written C# .Net – as I’d assume the same.

You can compare .Net to j2ee.

• Nate

“.Net is bloated and makes doing the simple things hard requiring a lot more lines of code versus other languages or frameworks”

Not sure I agree with that. Are you talking about more lines of code behind the scenes, or lines you write yourself?

• z3r0

“.Net is bloated and makes doing the simple things hard requiring a lot more lines of code versus other languages or frameworks”

“Not sure I agree with that. Are you talking about more lines of code behind the scenes, or lines you write yourself?”

Both.

• theraot

Yes, .NET is/was mostly a copy of the mayority of Java*. And what with that? It has evolved on it’s own. What’s the matter with the copy part, ain’t that what all the free software guys advocate? that copy inspire development, improvement and colaboration? And now comes people and say that it is bad to copy, and take it against Microsoft. -_-

Well you can say that .NET did lack behind Java. For example you got “generics” in Java (with type erasure in 2004) and you got generics in .NET in 2007 (RTM in 2005). Well Microsoft did there another copy, but Microsoft did a copy of better quality than the original because there are constructions impossible in Java due to type erasure… for example type inference, and made possible Linq.

*: .NET was made to support VB, so it had to have events, optional parameters, support for late binding, and byref parameters. And it had to make VB better, so it got try catch right into the MSIL and make try catch fast [And I don't have to propagate "throws", I know the merits of contracts, but it made it hard for begginers].

By the way, “run everywhare” is a myth even for Java, but I have to accept that Java can target more platforms… but what do you call consistent? Do you know how different is to write for J2ME, J2EE and J2EE? I know, I have done them all, and it is not different to switch between Silverlight, .NET compact framework, .NET micro framework and so on.

About the “bloated” .Net the problem was the lack of a proper package system so you can get the core and the extra parts that are needed, that problem goes back to Windows itself.

And Mono is Joke?, well lets make it a graphic joke… see http://www.mono-project.com/Compatibility (of course it lacks behind on most topics, leading on the C# REPL, a better reflection API and a some low level optimization such SIMD and tail calls were pushed by Mono). Talking about that… how is Mono possible? Do you remember when Sun did a lawsuit agains Microsoft because of the implementation of the JVM? Well, Java is (was?) an open specification, but .NET is an open standard (Check ECMA 334, and ECMA 335)… so you want to run C# over something else, there you can get the syntax in ol’ good EBNF, write your parser… wait, you want one done, the trouble is that those that have been done are closed source, partial solutions, or are called Mono. I know that Microsoft wants that market too, they crated it, and they didn’t notice it early, that’s why they created the project Roslyn (http://msdn.microsoft.com/en-us/hh500769).

What I’m saying? I’m saying that the fact that they did copy doesn’t make it bad.

I have to agree that I prefer Visual Studio over Mono Develop, it is a shame, Mono Develop have had to catch up with Eclipse like functionality first. And even as it matures, you more a better extension for Visual Studio and that’s where Mono Develops (And Eclipse) fails. Compare Eclipse without extension, Visual Extudio without extensions and Mono Develop without extension and Visual Studio wins, compare then again with all the extensions and Visual Studio wins again. Only when you compare Eclipse and Mono Develop with extension to plain Visual Studio they win in some areas.

About the framework thing, it is more a problem on marketing. What we use to call .NET framework often refers to the BCL, which is the standard libraries. But the BCL is not a framework (the architecture and design) as we understand it, say for Ruby on Rails. I don’t know you but I distinguish: framework, language, standard libraries and runtime*. And for me ASP.NET MVC is a framework*, C# and VB are languages, and the BCL are the standard libraries, and CLR is the runtime. But according to Microsoft .NET framework includes all that. I don’t know if there are other popular frameworks for .NET framework (others than .NET framework), they just need to be done, like others frameworks that got done after the language was done. And we go and write a framework for .NET framework and we want to add the things that we know and love from others solutions then you are gonna say that it is a copy and therefore it is bad. hmm… http://tvtropes.org/pmwiki/pmwiki.php/Main/TheyCopiedItSoItSucks

*: The problem is worst with Java, because they call Java the whole thing, and we only call Java to the language.

On deployment I’m with you, I use PHP.

• Bob Raygun

Try doing something ‘simple’ like reading in a text file into a string variable. In Java, it takes about 10 lines of code. In .NET, you can do it in one line.

string andYoureDone = System.IO.File.OpenText(“C:\text.txt”).ReadToEnd();

In Java you have to mess around with buffers and all sorts.. ugh!

• http://xangelo.ca Angelo R.

I used to hate Microsoft and always thought of the whole ASP and .NET family as terrible.

Until I got to actually use them. I found them a little finnicky to set up, but after that things were amazing. Thanks to C# I prefer statically typed languages and I understand PHP (my primary passion) a lot more. Every language, whether you love it or hate it, teaches something about the language you love.

• Nate

Totally with you about the strongly-typed preference. I’d also go further and say that the strictness forces you to pick up OO principles and become a better programmer.

• Rob Grainger

@Nate
“Totally with you about the strongly-typed preference. I’d also go further and say that the strictness forces you to pick up OO principles and become a better programmer.”

Really? So Smalltalk doesn’t qualify as OO anymore? Strong typing and OO are orthogonal dimensions of a language, and for OO principles, few strongly-typed languages get it right. Strong-typing is useful and helps catch errors early, but has little to do with OO.

Frequently, a languages type system actually inhibits OO, reducing opportunity for polymorphism. Alan Kay (who coined the term object-oriented) stresses this – the important feature of OO is message-based polymorphism, and any object can respond to any message, regardless of relation through a class hierarchy.

• Nate

Love LINQ in .Net. It’s like jQuery for you database/objects/xml:

var crappyEmployees = myDB.where(e => e.flaggedAsCrappy == true).toList();

There are a ton of high paying c# jobs out there, even with the weak economy.

• Jenn

When did mono update their versions to support up to 4.0? This must have been very recent, because when I checked last month they only supported 2.0. Also, I have not found any web hosts who will host mono out of the box.

• theraot

Mono 2.12 is the first with “complete”* support for .NET 4, I don’t know exact date from which it is available, but I think it was this october. Anyways there were partial support available from early this year.

*: No EntityFrameworks.

• http://jonathanmh.com Jonathan

This post is just idealising and is not objective at all. The license agreement signed, when using or even downloading makes this software everyhing else but free. Sad, that the author does not see that closed does not only refer to “you have to pay” but also to “you can’t really contribute” and “you’ll have to sell your soul”.

Envato should really watch the quality and terminology of their posts.

You planning on giving some examples about this supposed ‘soul selling’ or you just hit and run commenting?

And someone should really let the ALT.NET community know that “you can’t really contribute”. Boy are their faces going to be red.

• http://jonathanmh.com Jonathan

By selling your soul I mean, that you have to agree to one of Microsofts insane EULAs (their all illegal themselves in big parts of Europe afaik).

“You can’t really contribute”, to the source code. You are free to read the code, but you are not allowed to modify it, to what I’ve read. As argued earlier in the comments, to use Mono doesn’t make a lot of sense, because it only supports outdated versions.

• Ashley Connor

When did Nettuts become Netopinions?

I thought Stackoverflow and Plenty of Fish cleared up any misconception or hate towards the MS stack.

Instinctive hatred towards anything MSFT is so deeply ingrained that the first tutorial you have to run for .NET has to be ‘why you should bother reading tutorial 2′. It’s an understandable reaction, when you consider the lemons Microsoft has sent out into the aether over the years.

Most of the people who refuse to even look at the stack are shoddy developers anyway, so the world isn’t exactly losing much as a result of their prejudice.

• http://zettersten.com Erik

I laughed at this… its true!

• http://www.paulund.co.uk Paul

I have been using ASP.NET for the past year and I have to say that I do like developing in c# because of the complied code and IDE makes this easy to create code.

But when it comes to using parts of the .NET framework I hate it. The markup it generates for you is just awful and out dated. Most of time I find myself not using any .net web controls because you don’t get much flexibility with them.

I haven’t tried the .NET MVC framework but I’ve heard that it allows you more flexibility than .NET 4, so I’m going to give this a go to see if it can convert me.

• Patrik

I think you’re mixing up “.NET Framework” and ASP.NET…

• Ed

To each his/her own I guess…

But as far as my own experience with it – I have made several honest attempts to learn and like .Net but each time I did, I just wasn’t impressed with it.

I just concluded it has to be a genetic thing – you were either born to love it or born to hate it…

• Kim Tranjan

When I started with ASP.NET I wasn’t excited to keep developing with WebForms, but when I found the MVC Framework I definitely fell in love. I like ASP.NET MVC and I’m pretty sure that it’s a promising framework.

• http://jonathancutrell.com Jonathan Cutrell

Disclaimer: I haven’t ever written in ASP anything.

So here’s my opinion:
I hate static ally typed languages for the web. I understand the merit, but I also understand that there are best practices to allow dynamic languages to take care of the load for you. Ensuring something is a float is simple if you know what you’re doing. But, this isn’t a good enough reason to ream a framework. It is, however, a good enough reason to dislike it (or in my case, to avoid it altogether).

I don’t like Microsoft as a company overall. Not because they are out for money, but because the experience I have with their products has been universally less appealing than my alternative choices, namely Linux/Mac. I’m a fan of open source, but clearly Apple often flies in the face of being “open” as well. I think it’s ignorant to call everyone who dislikes Microsoft a zealot. Obviously those exist, but on both sides of the fence.

The point of the article SHOULD be as simple as this: don’t knock it until you try it, or you have a decent reason not to try it. If you don’t like statically typed languages and licensed frameworks, then you probably will be adverse to trying ASP. If you’re okay with those things, then go for it – it clearl is a technically viable solution to a wide range of problems.

• theraot

I think that what you don’t like is to have to tell the type in the declaration of the arguments of a method (and others variables), not that your language is dynamic or static. I think this because dynamic also means that if you make any exports of your module (that is, you are making an API) they can accept anything because there is no way to early check the type of the parameters…. but what if you write your code without telling the parameters types and then the compilers/interpreter sneaks in and add those based on the way you use them? (even create overloads if necesary) As long as you don’t use things like eval from JavaScript that should be fine. And you are gonna enable a faster implementation of the language if you don’t have to account for mutating objects or adding extra check to see if an object has certain member. And we want a fast implementation, right? Of course we can’t enable this for exports, but for private and internal/package members where code analitycs can do the job. I hope we can head for that feature in future languages.

• http://igramsey.com Graham Ramsey

I’ve always found this interesting because the other major technology companies, such as Google and Apple, are just as “evil” as Microsoft…

You’re right. However, last time I checked, Google or Apple don’t make web application frameworks. All the other web application frameworks (like Ruby on Rails, Django, PHP-based, etc) are open-source, and not owned by a company, and completely free for everybody.

This is an embarrassingly biased article, because it *is* a bad thing that Microsoft owns ASP.net. Don’t try to wave it off as accusations against corporate greed.

• http://zettersten.com Erik

Google makes and owns GWT.
Apple makes and owns COCOA.

While I agree with your “point” your information is wrong.

• Graham Ramsey

Last time I checked, Cocoa isn’t a web application framework.

• http://www.wdonline.com Jeremy McPeak

Context is everything. The context of those comparisons were of technology, the companies that make them, and the zealots… sorry, fans that blindly champion them.

• http://wickedsoftware.net Michael Herndon

The ASP.NET MVC framework is released under an open source license, MS-PL. http://aspnet.codeplex.com/

Nuget is released under an Apache 2 license.

There are other bits of the framework that are being released under open source licenses.

• Paul

Great article! I personally use .NET MVC, RoR, Node.js, Linux and Windows Server 2008. for building web applications. I have found there is NO silver bullet when it comes to a web technology stack. If you build every web application with the same stack because that is the stack you know, than you are doing it wrong. Each problem needs to be approached from a technology agnostic view with the focus on solving business needs first. Once those important bits have been resolved, you can then look into your arsenal of technologies and choose the best solution/stack to solve the stakeholder needs.

In my 13 years of experience, .NET MVC and now FuBu MVC for .NET are easily one of the best technology stacks available. However, I also tend to choose PostgreSQL running on Linux for persistence needs as well as Redis on Linux for caching.

Other cool parts of the .NET ecosystem left out of the article are http://nuget.org, the equivalent to gems in RoR and sites like https://appharbor.com/ the equivalent to heroku.

• flyingfox

Agree very much with you,

the stack used should be be picked upon the type of problem you are trying to solve. I use Yii and Silverstripe/sapphire from the PHP world (always glancing at the Flow3 releases though, that will be a definite go when they release their first stable version), RoR and ASP.NET MVC.

PHP-based solutions are like a small inflatable boat with an outboard engine. Nice to get around the smaller bays, but always a little rough on the waves and you constantly have the feeling that you are the fool who is doing the dirty work while the other seamen on the bigger vessels lie on deck and let the sun shine in their faces. Not what you joined the Navy for.

RoR is the speed boat. Fun to ride, fast and agile. It has a nice weaponry and a small crew that works very well as a unit. There are battles though, where you wish you had more firepower.

ASP.NET MVC is the full fledged destroyer. It is big, powerful and sometimes intimidating. It can handle everything you fire at it. It as a modular weapons arsenal, so you can equip it for very different needs. But because it is so big, it is slower on the turns and it takes an experienced captain to navigate with it. Shallow waters should be avoided with it.

I like being the captain of a destroyer for a profession, but for quite a few tasks i hop on the speed boat and from time to time i even enjoy some waterskiing behind the inflatable little toy.

Good comment.

• Jared

Excellent reply, I couldn’t agree more. Anything that doesn’t follow the one simple principle of ‘right tool for the job’ is nothing more than ‘yay for my side/flavor’ elitism. I’ve been writing code since punch cards, used everything from Fortran to C to Basic and everything in between. I use Windows, Mac/Unix/Linux (hardware and software) for a range of tasks, both professional and personal. If a developer doesn’t have the good sense/curiosity to explore technologies as they evolve(including revisiting things they may have previously tried) with an open mind to what is an optimal solution for their present need, then I’m just sad for them. They will never get beyond their own preconceptions and will never be able to come up with truly innovative solutions to new challenges. It will always be the same old rehash of work previously done simply because ‘that’s the way we do it’ and not because it is a better way of doing it.

• http://omerfarukak.com Ömer Faruk AK

I’ll try. :)

• sirfilip

I use Ruby cause it brings progress (REST, BDD, MVC). I use Python because its beauty and simplicity but mostly because of its Zen. I use PHP cause i really love it, it was my first step from html, javascript and got me riding on the server side in no time.

Why should i learn ASP ?

btw i use linux since 2005 (no viruses and love the terminal). Dont mean to hate just i dont see a reason to try it out.

If your toolbox is full, then the only reason to try it is intellectual curiosity, which also happens to be the best reason to try it.

Learning new languages and frameworks teaches you new concepts and strengthens the ones you thought you already knew.

Besides, learning a technology stack as widely used as .NET opens up a lot of opportunities employment wise.

• sirfilip

Yup i know that mate. I stick with learn new language every year.Besides the ones i mentioned I have done Perl and Java including Actonscript while i was still on windows. Maybe if i was still using that os i would give it a shot but to be honest i am pretty comfortable on linux so i dont plan to make a switch. However i could install mono and give it a try but i dont plan to go back to work with compiled languages since i did my time with Java and didnt feel very happy. As for employment i am not concerned i do what i enjoy and i plan to keep it up that way. Currently i am working as php dev maybe i could take python or ruby job but that’s it.
As for this post, based on the number of comments it was successful.
Dont know why nobody mentioned silverlight. At the time it appeared it was flex-flash fusion and i really thought that it will become very popular one day.

• Stimul8d

Wow,..there’s such an incredible amount of ignorance in this community.

For those read the title and jumped straight down here to drop some uneducated comment….

Clearly the desire to hate on MS is greater than the respect you have for the author of the article; even when the title directly addresses why you’re being an idiot. That’s pretty shameful if you ask me.

The sad thing is, the .Net devs I know are pragmatic and professional enough to see the benefits of a language or framework when they exist. Many know several languages and frameworks. If only the zealots of this world could be so sensible. You think you can handle 800 requests a second on dodgy server technology? Ahh,..didn’t read that bit I guess.

The truth is that platform rarely matters. Choose the best tool for the job you’re in or choose what pays best. Learn every language, platform and framework you have the time to learn. Be pragmatic, professional , ship your app and get paid.

Nice article by the way.

• Ramsey

Well said Stimul8d.

i know a laundry list of languages and frameworks and always end up working with the one that fits the needs of the project i am tasked to do… not because of hardware or my own personal biases.. hell i’ve even had to write applications in Access and BTrieve because of client need.

I just don’t get these younger, immature coders that learned to write a php script straight after reading a tutorial online and have know backbone in 2nd, 3rd, and 4th gen languages, or object oriented methodologies.

As for the other comments about this article being biased…. uh do you people even read the other articles on this site?? It is VERY rare to get a decent .net article on here. It’s part of the reason I’m not a plus member, because of the sever lack of respect for .NET.

• James

A small point, but actually Google and Apple, though not corporate saints, can’t get within spitting distance of Microsofts simply outstanding record for underhand tactics, sabotage and slippery behaviour with rivals, business “partners”, and end users. Not that this should stop anyone from exploring or using .NET, and I expect you will be always be treated fairly, because I believe Microsoft will always need good developers a lot more more, than good developers will ever need Microsoft.

• http://www.wdonline.com Jeremy McPeak

Without getting into a company A vs. company B discussion, I’m just going to say I disagree. Every one of the big three do something “heinous” better than their competition.

• Rob Grainger

You obviously haven’t been following the patent wars very closely. Or, historically, Apple patenting ideas they stole from Xerox, or… Hell, all big businesses make some good and some bad decisions.

Currently, I’d say Apple is stealing the show on that front, with things like the European Design Law to attempt to prevent other players selling tablets in Europe (actually, its a pretty silly law too, but there you go). Apple used to lead on innovation and design, now they attempt to prevent competition.

• lwinmgsoe

i love both asp.net MVC3 and php.

• Ed Kolis

I’m a .NET developer myself, but I’m almost surprised you left out this reason to avoid ASP.NET:

It promotes unhealthy coding practices.

What do I mean by this? Well, if you’ve ever heard of the Model-View-Controller pattern, you’re probably a step ahead of the average ASP.NET developer – sure, there’s ASP.NET MVC, but that was introduced rather recently – before that, you were stuck with (or at least strongly pushed toward) what I like to call the “View View View” pattern: code all your logic in “pages” that maintain state and have life cycles and all sorts of nonsense that flies in the face of good software design!

When I found out that Java has used an MVC architecture for web apps since way back when, I was astounded – why did Microsoft lead folks astray with this “active server pages” garbage? Did they think that MVC was patented by Sun or something? ;)

Yeah, some of the webforms stuff that’s been released over the years is enough to make my eyes bleed, but MVC has gone a long way to remedying that.

You could make a similar argument for not using PHP, since it pushes people towards the ‘vomit code all over your application’ coding method. Ultimately a framework is just a tool, and it is up to the developer to use that tool in the way it was intended. Some frameworks just have better guidance on that intention.

• Luke

Geez, these comments sounds like testimonials from a late-night infomercial:

“I never imagined that I could have clear skin, but then I found ProTronics.”

Seriously, it seems the only people who can be bothered to make comment on it are ASP fanboys. Except, maybe, myself. I will state that I have only had limited exposure to ASP, having to clean up a website which, due to (in my uninformed opinion) absolutely abysmal protection from SQL Injection attacks, no doubt due to a lack of insight/skill on the part of the initial coder. I am primarily a PHP coder, and so, whilst I have heard about ASP, I haven’t really taken the time to learn it.

Why?

+ Because I can install XAMPP on a computer/USB key/whatever and be developing within a matter of minutes.
+ Most webhosts support PHP, so I can put almost anything I build anywhere with no fuss.
+ The vast numbers of Open Source PHP packages which I can install and adapt or integrate into my own systems.
+ The support of a very active community.

On top of that, I can’t tell you how many times I have been interacting with an ASP website and have gotten that ugly yellow/white error page. I know it is not the language, but the writer, but still…

Anytime I look at a site and see “aspx” as the filename extension, I pretty much expect it to break on me. And as pessimistic as that may sound, it happens often enough to maintain that viewpoint.

• http://www.wdonline.com Jeremy McPeak

ASP is not ASP.NET.

Every platform is susceptible to SQL injection attacks unless you take the necessary precautions. In the .NET world, simply using parameters in your queries will make your app immune to SQL injection.

+ I can install Visual Studio or WebMatrix on a computer and be developing in the same time frame.
+ Finding good, cheap Windows hosting is a breeze; so, I too can put it there with no fuss.
+ Nuget makes downloading and installing OSS packages as easy as a double click (or a command exec if you prefer), and it’ll clean up those packages if I later decide I don’t want to use it.
+ .NET has a very active community.

Apps are only as good as their developers. Blame the devs for an app that breaks, not the platform. I’ve seen countless apps on other platforms that break… surely that means those platforms suck, right?

• Luke

OK, thanks for clearing that up (would it be possible that others are as uninformed as myself and also suffer from the confusion of “ASP” as opposed to “ASP.NET” in the same way as people used to get confused between “Java” and “Javascript”?)

Agreed that it is not the tool, but the user who causes security breaches (you would note that I made that observation in my initial comment “… no doubt due to a lack of insight/skill on the part of the initial coder.” I am saying that it was the cause of the job I was called in on, and I found the code I encountered pretty messy and not terribly easy to patch. Exhaustive searches for any kind of tutorials or resources to help me do that work was also unsuccessful. (I am sure there are good communities out there to help, and this was a few years ago – pre-StackOverflow – but I was disappointed.)

With reference to Visual Studio or WebMatrix, do they act in the same fashion as XAMPP, whereby they are an instant webserver allowing anyone to connect to your computer and execute the code? (Again, asking as I do not know.)

Sounds like Nuget is not far removed from being able to do a wget and unzip through SSH, apart from being able to use double-click.

As I said initially, I do recognise that the end result, in any language, is a product of the technology and the developer, just saying that, I have had a number of negative experiences with ASP-based sites.

I think that another reason PHP gets more attention than other languages is because of the similarities in syntax and style between PHP and Javascript, and, with Javascript having an even lower hurdle to learning/tweaking/developing, alot of developers I know follow the path of HTML > Javascript > PHP.

Horses for courses, I am sure there are things ASP.NET can do better than others, but I can also see why some may be moving away from it. Whether right or wrong, negative perceptions tend to cause reduced engagement/buy-in, which has has other repercussions (reduced skill pool, increased cost, reduced word-of-mouth) and repeats the cycle.

• http://www.wdonline.com/ Jeremy McPeak

The web servers in Visual Studio and WebMatrix are on demand; they don’t consume system resources until you debug your app with Visual Studio or you start up WebMatrix. They’re for development purposes only, but remote computers on the same network can connect to them if you so desire.

• http://rick.com Rick

You wouldn’t believe the number of PHP applications I’ve had to work with that held security vulnerabilities and were badly written…

• http://www.computingtweaks.com Srikanth Rao

Excelent post..! :) Very informative..!

• http://russelluresti.com RussellUresti

I think Web Forms was a big reason behind the ASP.NET hate. And, let’s be honest, Web Forms sucked, and still sucks. A lot of companies still use it, and haven’t switched over to MVC. I have no problem with MVC, but I still hate Web Forms.

• Tyrone Michael Avnit

Amen!

Awesome article. I use C# MVC 3 and and have dabbled in php with alot of experience in customizing and building themes for wordpress. I can say that I find it an absolute pleasure to develop with C#. I have yet to find an IDE that comes even close to VS 2010. With the introduction of Nuget, you can find well developed packages that can cut your development time in half.

I have been working with Javascript quite alot lately and have spent quite a bit of time working with Extjs and Backbone. I dont know if it is just me, but to debug js is just an extremely tedious task even with firebug and chrome dev tools. I feel I have to write small amounts of code, test the code, then do the process over again just to make sure I have not mistyped something. Even leaving a comma or console.log will break in IE. Spending time figuring out errors like that is quite honestly just a waste of time.

Right now I have no reason to dabble in other server-side technologies because MVC gives me everything I need. Clean html, separation of concerns and a community of skilled developers that are always looking to give back.

Tyrone

• Madhu Rakhal Magar

C# may be good but i can’t afford the Visual Studio 2010 which contains all the advance feature needed to develop windows and web application and improve developer productivity.
To buy it i have to spend the 4 years salary which i can’t do.

So just develop php and java application with free IDE make sense.

• http://www.wdonline.com/ Jeremy McPeak

Visual Studio Express Editions. They’re not as feature filled as the full-blown Visual Studio, but there’s enough there to practically do what you want.

• Hart

Your four year salary is 535€???? That’s not third world, must be fifth world salaries… ;-)

• Daniel Gerep

There is no reason discussing something that depends!

ASP.Net or PHP or Python or anything else, it depends on what you have on your server, what your client wants to run on his server…bla bla bla

Each one uses what it think is necessary and best for the job.

Useless conversation….no point to prove.

Is the same to ask, which is better: volley ball or soccer ball….depends on the f***ing situation.

There is no better, there is necessary!

• http://www.wdwfans.com Rick

Nice article, however I could never work with ASP.NET again.

I first had to use it at university to create a simple CRUD system to work with an access database. Since then I’ve used it a couple of times where I’ve had to and hated it for a number of reasons:

1 – Its not a ‘user friendly’ language, in that it takes all the fundamental language principles used in PHP, C, Java, Python, Ruby, etc and throws them out the window. I know your article goes into a bit about it being ‘by Microsoft’ but this IS very typical of Microsoft – do it differently. That attitude means its actually not hard to learn, but just a pain in the ass to work with when you’ve just come off a PHP/C project.

2 – for years and years its been the messiest language around. Poorly developed by the team at MS. I accept that they may now have turned it around, but as far as I’m concerned from a development perspective its too little, too late.

3 – documentation is poor and always has been. Maybe its just down to it not having the following of the ‘linux people’ (by that I mean the nice chaps who are happy to write reems and reems of info about what they are able to make) I dont know, but for me personally the documentation (not just from MS, but even around the web) has been sketchy at best. Even here on NetTuts+ the authors jump and skip around topic they think you might know.

Whilst I appreciate that its capable of some great stuff, for me I’d never touch it again.

When you say language, what are you talking about? .NET isn’t a language. C# was originally very similar to Java and it has only gotten better since then. You can use implementations of Python or Ruby with .NET so that’s not an excuse either.

When you say messy, what do you mean? When I think of messy languages, I think of PHP.

The Documentation might have been poor when you used it, particularly if it was around the .NET 1.1 era, but nowadays, I’d argue that .NET has the best documentation of any framework. MSDN is without equal in my experience and the community around it is the equal of the RoR or PHP community. And besides, the C# crew have Jon Skeet, so they win by default.

The .NET I work with day in day out bears absolutely no relation to the .NET you’re describing. Don’t get me wrong, web forms sucks. Always has, always will, but the underlying framework is solid and MVC3 is as serious an MVC offering as Rails or Django (and I know and both of them well).

• http://www.wdonline.com/ Jeremy McPeak

1. .NET isn’t a language, it’s a framework. C# is strictly an OO language, so naturally you use it differently than non-OO languages like C. As for comparisons to Java… really? Now, you may be referring to the WebForms programming model, which yes is very different than other approaches (except JSP), but that’s just what it is–a programming model. There are a variety of programming models you can use with C# and the .NET framework.

2. Uh… If you want a messy language, head over to http://www.php.net. It’s full of inconsistencies and redundancies. The .NET Framework and the officially supported .NET languages are exactly the opposite. Microsoft is a platform company, and they do it extremely well.

3. As James said, maybe in the early days, but .NET documentation today is superb.

• http://www.geekswithblogs.net/jboyer Justin

I agree with James. You should give ASP.NET a try again. So much has changed in the last few years and Microsoft has made some leaps and bounds with the platform. Stick to everything .NET 4 and up with VS2010 and ASP.NET MVC3. These have become some of the best platforms around. I never really liked WebForms and I hope to never use it again. I am 100% on board with MVC3 and it warrants a second look.

• Bob Raygun

ASP.NET is not a language. Please read the article more closely before hitting the “Add Comment” button. Thanks.

• http://rick.com Rick

I think you are complaining about Visual Basic

You do understand you can write ASP.NET Web Applications with Visual Basic or C# (maybe more) correct?

• Yellow

lol what a load of crap article.

Having a lot of experience with ASP from it’s birth to death I can tell you the vast majority of this information is pure garbage.

• http://www.wdonline.com/ Jeremy McPeak

ASP is not ASP.NET.

• jbak

I fully agree with this article, i had to develop ASP.NET 2.0 for the market and after changing the company I had to develop J2EE JSF 1.0. in house developement.
I was extremely disapponted as I had to discover how backward JAVA Web Client Development was compared to Asp.net 2.0, although I was at the beginning enthusiastically as regards JAVA as language which is like C# which I also like but which is a bit easer than c# and has not so much advanced features than c# has . In my very personal opinion .Net is extremly well suited for Client developement, with tools that helps you to be productive. When you have to sell your produkt on the markt you are lost with Java, users loves (I exaggerate) .net Client experience but hate Java’s (I exaggerate)
Thats my experience. Maybe Apple gets it better.
(English is not my mother language=german so please excuse me for my grammatical errors)