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

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.

In fact, ASP.NET’s raw performance is faster than PHP’s.


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
  • Tim

    Nice article.

    I’ve been developing for the web for a few years now and would probably have not used ASP.NET if it wasn’t for C#.NET. C# is a beautiful language and ASP.NET chews up HTML, its like building a table with a chainsaw, it will probably work, but won’t look very good until you’ve filled in all the gaps and given it 5 coats of paint.

    Now with ASP.NET MVC3 & Razor. You get everything a developer could dream of!

    • Angelo

      ASP.NET chews up HTML? First off, MVC is ASP.NET, you’re thinking of web form based applications in ASP.NET. Second, ASP.NET doesn’t do anything to HTML that you don’t let it. Sure, if you use the crappy, built in web controls then you’ll end up with ugly HTML.

      I never used any of those controls. I either spit out my own HTML where needed or created my own controls. There are also tons of free and for pay web controls and web control suites out there which make super dooper pretty HTML.

  • Zach

    Im not boasting but your example of the add function in PHP appose to ASP.NET I think you could write them very similar :P

    ASP.NET – your code

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

    PHP

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

    if not mistaking if a string was passed into the function it would fail.

    In my opinion, use the language that best fits the programmer and the task at hand….
    :O

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

      Nope. Invalid syntax. The documentation lists the type of value for parameters, but that’s only for documentation purposes.

      • http://valltek.com Don

        Not so, PHP lets you give a “Type Hint” I do not believe it has any purpose in the tokenizer but it does help when developing.

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

        this code runs on 5.3 which is what I am running on my servers.

        http://php.net/manual/en/language.oop5.typehinting.php

      • http://www.paultela.com Paul Tela
      • http://www.wdonline.com/ Jeremy McPeak
        Author

        Thanks, Paul and Don. I guess there’s something wrong with my PHP install.

      • Anthony

        I develop sites using PHP, and believe that PHP’s type hinting is only available if the type you need is a Class or and array, else, will always throw an error. Hence,

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

        $a and $b must be an instance of int class. But knowing PHP, you can’t just do

        echo add(1,2);

        unless 1 and 2 are instances of the int class, which is a different thing in PHP, because it is a procedural language, and not everything is an object.

        I am now starting to develop in C# and seeing that it is a very well designed langauge, and lots of good alternatives to the PHP’s mixed associative arrays.

  • Leach

    Thanks for the article – i agree with the conclusion – that everyone should try ASP.NET – and it has improved dramatically since WebForms.

    However not all the “facts” are correct: .NET is windows only since the Mono project is not a comparable environment in any way: compiler, language support, framework libraries – and in addition the threat hovering above (backed by Balmer’s quotes) that people using Mono might be sued in the future. MS hasn’t sued anyone yet, but the rumors circling the web about how it is going to happen are a real problem for any business that thinks about going Mono.
    In addition the Mono development environment is a far cry from Visual Studio.

    So if you want to develop .NET – develop on windows, using MS tools.

    About mono deployment – developing using the full .NET in VS and then attempting to deploy on a Mono only environment is a huge pain – assume you can pass all the coding problems by setting VS to target asp.net 2 – the libraries will kill you.
    Have you used this property, or that property of an object – wham the application will not run due to assembly missing – now go and find what is missing (that is the easy part), then find out how your code depends on it and remove that dependency (basically fix the holes in Mono that are stopping your site) – no thanks.

    So we are back to develop and deploy .NET on MS – not a bad option – but for me this excludes using it for my pet projects since i don’t have windows at home, and i don’t plan on making that expense.

    Another mistake in this article is the “open-source” of .NET – the source code is available for download, and you can debug it, and view it – however the code is not open to be used in any way you want. This has been a real problem for Mono development since they had to reverse engineer it without using the available source code – and this is a much longer work – assuming you can do it right. (and this is exactly where the threats of being sued comes from.)
    The way MS “opened” their source code did more damage in my opinion then good to the developers using it. Today i can not write a code in C# and release it to the public before i check that i have not repeated what MS already provided in their framework. (and sometimes reinventing the wheel can be good for you the developer – for learning, for including just the things you need etc…)
    I can use that code for my own, but i can not release it out as open source.

    One disclaimer about this point – MS did changed their licensing to be a bit more “open” lately – i hope they will continue in that direction.

    On the other hands code released using the GPL/MIT/Apache and other open source licenses is there for everyone to use – and no-one will prevent me from writing the same thing from scratch and then releasing it out again.

    • http://damieng.com Damien Guard

      Given that Microsoft made ASP.NET MVC open source and helped the Moonlight project (.NET Silverlight on Linux) I think it is highly unlikely they’d sue.

      Besides even using more “open” platforms like Java is no guarantee you won’t be sued. Ask Google.

      [)amien

    • JohnnySacks

      I was wondering why Mono even entered the discussion myself. ASP.NET is not Mono and never will be. Why anyone would want to implement a pseudo-Windows programming language on a non-Windows operation system with so many stable (and free) alternatives is a mystery. JSF has the same type of viewstate UI container/component hierarchy as ASP.NET if that’s the feature which floats your boat.

      Performance is a factor of programming knowledge. Sure, you can get some nice features right out of the box with ASP.NET, but if you don’t understand the ASP.NET concepts of viewstate, event processing, postback, etc. your application is not going to scale well. I don’t know PHP well at all, but I would expect that misuse would also introduce performance problems.

      • Angelo

        Since when do you have to know anything about viewstate or event processing much less use them? You certainly don’t have to use all the bloated ASP.NET web controls if you don’t want to.

        You can get by just fine without viewstate or event processing or any of the other built in browser to server plumbing that ASP.NET gives you. Sure, it speeds up development until your viewstate ends up being 10 times bigger than the entire page’s byte size with pictures included. And the web controls are nice for prototyping but when used in real applications, you end up spending more time trying to figure out how to tweak one little setting than just doing the whole control from scratch.

        Bottom line is, there is no requirement to use any of that stuff nor are you missing out on anything substantial if you don’t. You can handle browser/server interaction in the same ways you would with PHP or anything else.

  • Lino Garcia
  • Tobias Carlén

    I program in ASP.NET and I’ll tell you what I don’t like: The unnececessary redundancy of metadata for all the helper stuff.

    I really don’t like the way table adapters and SSIS constructs work: You have to specify a lot of unnessesary things that you don’t need and if something in the surrounding conditions change, the inflexibillity is maddening: Try changing the field type in a database and watch the shit hit the fan in the whole structure you built on top of the table adapters.

    It’s like that in a lot of places: for example, you have to set the code page for everything in SSIS components, and if there is a problem anywhere, you get nonsensical errors that don’t tell you where the problem really is. This in stupid – you should not have to set the code page at all and if you did want to mess with it, you should be able to set it in one place and then do exceptions from the norm anywhere you needed it.

    This is the way a lot of this stuff ought to work: Never specify the same information in more than one place – i thought this was a golden rule of objects and life in general, but Microsoft positively ignores this!

    I dream back to the days of Turbo Pascal when the compiler pointed out the exact location of the real problem and gave a correct and meaningful error message. I know this would be difficult to achieve in an architecture like .NET today, but come on, it could certainly be a lot better. it’s almost like it’s been turned into shit intentionally: look at the help files, Microsoft used to have pretty good help files for VBA for instance, but now we have shit. I almost never find any help with a problem in help, you have to google everything these days.

    • http://cockneycoder.wordpress.com/ Isaac

      Thomas

      What does SSIS have to do with ASP .NET? Nothing at all.

    • Angelo

      SSIS has nothing to do with ASP.NET so not sure what you’re on about with that.

      There are lots of frameworks out there and programming models in general that allow you to minimize things like database field definitions within your application. OR mapping technologies like Entity Framework and Fluent nHibernate are good examples of ways handle all the object to database plumbing and mapping.

      Basically, you’re not designing your applications properly, that’s why you’re running into issues. It’s very easy to do it the right way in .NET and the open source frameworks out there that do 90% of the work for you gives you no excuse to not be doing it the right way.

  • memost
  • http://joelalejandro.com/ Joel Alejandro

    In defense of the Mono project, you can check on the class status at http://go-mono.com/status/ to see the support level for each .NET Framework version. Also, since Mono 2.10, as stated in http://www.mono-project.com/Release_Notes_Mono_2.10, Mono claims that this version “Supports ASP.NET MVC3, Razor and new WebPages.” and that “VB Compiler can now compile to both 2.0 and 4.0 profiles.”. Doesn’t sounds to me that Mono is *that* behind from the .NET Framework.

  • David

    You missed the biggest benefit of all – the Framework itself!

    I could spend hours researching ruby gems or python bundles to include, hope and pray they work well together, and eventually cobble together a working app, or I can simply use a single cohesive framework to accomplish the same thing. It’s a simple win. With ruby gems, I can’t count the number of times the projects died on me, leaving me to support someone else’s code. Not something you have to worry about with Microsoft. They may deprecate things, but you get plenty of warning and there’s always an upgrade path, usually an easier one.

    The secondary benefit, which you allude to, is the IDE. Code completion, templating, instant notification of JIT compilation problems, and even things like spell check, all in one place and instantaneous. Now, you even get intellisense in Javascript development. The IDE and Framework combine to allow much faster development than any other platform I’ve used (Rails, Django, Sinatra, Cakephp, etc.) I’m not talking about a “5 minute blog”, but real world projects that do real world things.

    For all the IIS haters, you’ve clearly not used IIS7. It simply screams with speed. I actually have had great luck with 4, 5, and 6 too. Chances are, if you’re underwhelmed with the performance, you probably don’t know how to administer a server properly. I’d take IIS anyday over cobbling together another broken apache setup or spending hours (days) getting ruby and lighttpd to compile correctly on a particular centos build. Install Windows, install IIS, install the latest service packs, and you’re ready to go.

    I personally love the haters; it gives me job security. I don’t mind getting freelance work “upgrading” a broken rails site to ASP.NET.

    • http://ikeif.net keif

      I’ve made a lot of money switching sites from .net to PHP. Does it mean .net is bad? No, it means the original developers were bad.

    • http://ikeif.net keif

      I don’t mind getting freelance work “upgrading” a broken ASP.NET site to PHP. So thanks for that ;)

      Poorly written code doesn’t make the language bad, that’s like me saying the amount of poorly written .net code I’ve had to deal with means .net is bad. Using this logic, I could say jQuery is bad based on the poorly written plugins I’ve had to work with in the past.

  • brian

    I’m not sure if I would go along that dynamic languages are easier, even for a beginner! In my book they are a nightmare and are hard to use. Having suffered the horrors of Perl and CGI development using asp.net is just pure bliss, Javascript development is equivalent to going to the dentist (essential but not looked forwards too!).

    The c# compiler can tell me off as much as it likes, I prefer to know my dumb mistakes at compile time!

  • mtcoder

    I think the biggest problem is people haven’t looked at asp.net in years, past two releases asp.net 3 and especially asp.net 4 are huge huge improvements, and are still “fairly” new. In the overall aspects of a language life span. A bunch of things that were royal pains to deal with are now drag and drop operations.
    .net 4.0 was a huge clean up version as well with making it a full “split” in both the IIS and development IDE, MS was able to trim tings down to bare bones. Then let people add on as needed by them.

    For the stack as a whole, it’s just so powerful IIS7+ is a very lean and mean webserver, put with a super compact stable server 2008R2, and life is golden. People are usually surprised when I charge less for an asp.net site than I do a php / ruby site. When they ask why I say server configuration time, and the fact I have so many controls laying in my toolbox. I run sites on a hosted virtual server for about 15 bucks a month and have full access to it. Which means my deployment of a new site is about 4 clicks and it’s done. I don’t even get on the webserver to setup the site anymore, found a nice powershell script that configures custom security accounts, (each site gets it’s own app pool and security account), creates the file folder, assigns the security rights needed, and the port / bindinds needed. All from my desktop, with just a few parameters, after that it’s hit deploy and point to the server. Done. For the tools, a long time ago I started building my own set of control libraries, something that is so simple in .net it’s criminal. At this point I can just drag and drop anything I need for a site and it’s done. Yes you can do this in other languages but it’s not nearly as clean, and easy to do.
    Heck have my studio configured to load them by default, so I hit new site and drag and drop the entire thing, flip to the back end wire up some data pieces and hit publish. Clean refactored code every time, and in such a short time. The code is well documented as well and with a 3rd party program it’s self creates user documentation thanks to the xml inline documentation for classes, methods, etc.
    I know sounds high level / complex um well no it’s not self taught with about 4 books, and google.

    As far as documentation, .net beats them all out hands down. MSDN has every thing overly documented to point that it takes very little looking to see exactly how something works. For community I have never ever had a problem that I couldn’t post on the .net forums and have answered by an expert within a day. Usually.

    But I think the main problems is people just haven’t looked into .net in a while and make their judgements off of IIS6 and .net 2.0
    If you haven’t used .net4.0 and IIS7+ then you really should.

    • John Adams

      mtcoder writes:

      I don’t even get on the webserver to setup the site anymore, found a nice powershell script that configures custom security accounts, (each site gets it’s own app pool and security account), creates the file folder, assigns the security rights needed, and the port / bindinds needed.

      Could you share this script? Please? Thanks!

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

    I absolutely loved this article! I have programmed in Java and C# and have dabbled in Ruby and PHP and I prefer ASP.NET on all counts. I think that C# is one of the best languages out there, it is succinct yet very powerful. Those who refuse to use Microsoft are missing out on some amazing features like LINQ and Reactive Extensions that put C# above the rest (not to mention lambdas and the new dynamic keyword). New asynchronous features as well as the Roslyn project (a compiler-as-a-service) will allow C# to blow away anything else out there. Also, MVC3 is one of the best frameworks out there for web development and it is easy to pick up.

    That being said, I also believe that a developer is not a “Microsoft Developer” or a “Java Developer” or a “PHP Developer”. Those who identify themselves in such a way are closed minded and foolish. It would be analogous to a carpenter proclaiming to a client that they are a “Craftsman Carpenter” (only use Craftsman tools). The client doesn’t really care and it doesn’t matter what tool is used as long as the job get done. I personally enjoy learning new languages and frameworks and therefore specifically take time out to do such things. ASP.NET is definitely worth a try, just the same as LAMP, J2EE, and Ruby on Rails are worth a try. What do you have to lose? If you don’t like it, then you can move on.

  • Matt Wright

    I recently started working with a couple of Java software engineers to implement a business concept for me, and being a .Net student for about 5 years now, I plunged in head first to familiarize myself with their platform with the intent of better communication and understanding.

    Wow. I installed Eclipse, hoping I got the right package. I installed Tomcat. I downloaded J2EE. I downloaded Struts2. Then I needed Maven. Then I needed to figure out how to translate the tutorials written for command line Maven and Ant into Eclipse. Then I was looking at JSP vs JSF…

    Java is probably great if you have a team with experience and knowledge to work with, but as a single user? Pfft. Good luck. The community is divided between heavy enterprise convention (JBoss, Struts, etc), while the Open Source community is charging ahead with light weight convenience.

    Now, .Net owes a lot to the Java community for raising the bar, but the Java community would benefit from a single, comprehensive roadmap similar to .Net. Now, I qualify that by saying that Oracle/Sun are sort of trying this, but the same freakin arguments are leveraged against that effort: Too big. Too bloated. Not cutting edge enough.

    I have to tip my hat to the balance which Microsoft has struck, and recognize that they are competing by adding value to their products, and you have to respect that.

  • nickels

    I played around with mono. It doesn’t work. Well. at all, hardly.
    so I would have to be in the camp that says ‘windows only’.

  • Winston

    Articles like this make me glad I’m not a web developer. The main reason for a developer to hate a technology is when it’s foisted on him by management clueless as to the real issues, that do nothing but buy hype. So instead of solving problems, the developer is reduced to keeping up with the Gateses just so management can say they have the latest thing. Few platform tools of this magnitude offer any real advantage to the developer until he has rewritten everything (again) in the new platform and along the way, he finds the Gates Taketh and the Gates Taketh away. Programming may appear easier than it was 30 years ago, and again that’s a management perspective. The reality is, it takes as much effort if not more to develop a functioning data processing system than it did back then. The difference is that today, the non-functioning stuff at least looks good. Today’s programmers serve the platform. I remember when it used to be the other way around. And why I became a platform developer 30 years ago.

    • Tatyana

      I am sorry, but can you compare what applications did 30 years ago and now?!

      • Winston

        Actually what people usually fail to realize is that all of the things computers did 30 years ago still need to be done. They may be done better today. Or not. Computers do things undreamed of 30 years ago, but they still do every mundane thing they did then. I know web developers don’t like to think about mundane things like data integrity, rapid volume data entry, code that is still maintainable 5 years from now (since they’ll do a rewrite when dot crap 93.x is released anyway)… but that doesn’t mean it doesn’t happen and isn’t needed. I developed platforms for my own use, with the intention of using them as long as I could, and I did. I didn’t develop platforms just as busy work so I could sell the world a new platform and forced rewrite every 4 years. But clearly I was in the wrong business.. had I done that, I could be rich and “much loved” today… LOL.

  • MaSOuD

    Very nice article.
    .NET is a pretty nice and organized platform. Seriously, some people must get rid of their limited brains and then tell their opinion to public.

  • Eddy

    There are two types of “developers” that might try ASP.NET; the PHP-fanboy, and the .NET fanboy coming from WinForms/desktop.

    Both hate ASP.NET; the first for the obvious reasons, the second because it’s a very different structure from WinForms.

    ..it *IS* that simple.

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

      I disagree with your statements regarding WinForms developers. The initial ASP.NET programming model (WebForms) was designed explicitly for developers accustomed to RAD (typically VB6 developers). Naturally, there are some differences between WinForms and WebForms, but WinForms developers feel right at home in ASP.NET using the WebForms model.

  • http://mextoyou.com Oscar

    If it wasn’t for C#, I don’t think ASP.NET would be that appealing. I agree with your article in large part, even partially on the statically typed benefit. Although I feel Python is close to muting that benefit. And while certain costs (time and money related to IIS) for ASP.NET development are more, at least some web hosting companies are charging as little as $5/mo for Windows hosting. So the cost barriers to .NET development have come down significantly.

  • Fred

    The first paragraph says it all. I can’t tell you how many haters I’ve come across that have never touched .NET or Visual Studio. SQL Server Express is free. WebMatrix & VS Express is free. Windows Server Web Edition is ~$400 and includes IIS 7 FTP and SMTP services. If you’re such a broke-dick that $400 is a deal killer, then by all menas, stick to a retrograde scripting language.

    Enough with the anti-Microsoft jihad, already. Get a shave and a haircut, put on some shoes and a shirt with a collar and buttons, get a job and grow up.

    • http://www.dotnetpro.co.uk/ Monty Alhakim

      You can SPLA Microsoft Windows 2008 R2 Web Server Edition for $15 a month.

  • Ako Kaman

    I have been programming in ASP.NET for more than two years, and now I moved to PHP. Why?

    1. It is not open source. Microsoft controls the future of .net and cares nothing about the developers. Many developers have put so much time and effort to work on Sliverlight and now what? It’s going to be abandoned!
    You never get something like that with an open source alternative. And if we suppose that happens, there are many developers who pick the project and continue it.

    2. It runs only on Windows. You have to buy Windows, Visual Studio, MS SQL Server. You say it runs Mono? It really sucks. I have tried it and it really sucks.

    3. It is not as efficient as other alternatives (read PHP, Python and Rails). Suppose Wikipedia or Facebook was written in .net. I doubt it would be as fast as it is now!

    And one more thing, (I think) this site you are posting on is written in PHP. :P

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

      1. Silverlight was doomed just like Flash is. While I think there is still some life left for SL/Flash on the web, their days are numbered for that medium. SL is still alive and well on Windows Phone.

      .NET is in a completely different ballpark. It has been *the* development platform for Windows and Windows-based systems for almost ten years. Yes, you can still write software using C++ (or another language) and the Win32 API, but Microsoft has pushed .NET since 2002. Most developers writing apps for Windows are doing so on the .NET stack. It isn’t going away anytime soon, and that’s evidently clear with the Windows 8 development story. Stop fear mongering already.

      2. You only have to buy Windows. You don’t have to buy VS or SQL Server for development. The Express editions are free, work well, and work with the full versions if you later decide to upgrade.

      3. I provided performance information in the editorial; I encourage you to read it. TLDR version: it is very efficient and performant–more so than PHP.

      • Jordan Stevens

        Great discussion. I have been programming for the last 10 years in both php and ASP.NET. I moved from php to ASP.NET principally because I wanted one platform for apps and web. However, the move was not all good. I used to get really sick of how difficult something in WebForms was to accomplish. Many times I wanted to go back to PHP. Luckily MVC comes along, which I am slowly switching to. Still at work we have to program in PHP. I prefer MVC.NET with razor. And another thing: ASP.NET generally is a lot faster than PHP when executing. I don’t know where people get the idea that it’s slower. Only perhaps in certain cases is it faster, perhaps with simple native mysql database calls perhaps, but most of the time a lot faster.

        However, to get to my main point, we got to do a project in Silverlight and then a WPF project. Wow, wow, double wow. Once you get good at Xaml, Html is so completely outdated. It’s a dead weight in comparsion. It really is bad.

        Ok, so my main message is that now, I HATE HTML. I HATE JAVASCRIPT. I HATE CSS. After working with XAML, I can never be the same. Oh and I did projects with Flash, which sucks, of course, cause Actionscript is not much better than Javascript. However C# is on a totally other level. It is trully stunning and now shines clearly over Java. Linq is unbelievable. It catches bugs like nothing possible before and cleans up the code. Now comes Entity Framework. That raises the bar again to unimaginable possibilities.

        The comment about Silverlight being dead may be true, but not because HTML5 is so great. (But basically cause WPF is so much better and downloading a 40MB library is not so bad anymore.) One day people are going to wake up and say: Huh were we insane, HTML is so 1980′s. CSS is a disorganized as well, and javascript is a joke of a language. Huh? I really think the industry has gone insane to support these technologies any further. What is Mozilla thinking?

        Think about it. Is there no slower way to build a UI than with HTML? No. Everything else is faster.

        We need MVVM embedded in the descriptive language itself, combined with a power JIT language. That is Xaml. It has all the modern programming concepts built in. It is incredibly powerful. I can do anything faster in Xaml. I even programmed a databse app with WPF in a fraction of the time it took an Access programmer to program it and the spreadsheet took 700ms instead of 5 seconds to calculate.

        I think I can take over the world with Xaml and Entity Frameworks, but that is yet to be seen…

      • Ako Kaman

        1. We are talking about Web and Desktop development. For mobile development, it is only suitable for WP7, but how about those Android and iOS devices? There are many more Android and iOS devices than WP7 ones. And if I want to invest on a technology for mobile development, I would choose one which has more users!

        And I know that .net has been *the* development platform for Windows and Windows-based systems for almost ten years, but as you know most of the big applications are written in C++ and not .net. You know C++ beats .net in efficiency and performance.

        2. As you are .net guy, you should really know that express editions are really weak compared to the Ultimate edition of VS. If you are developing for the enterprise, then you WILL need non-express editions of VS and SQL Server. Again I know you can use other DBMSs with .net, but SQL Server is the best thing to use with it, and most of the developers work with SQL Server.

        3. I know that compiled languages are faster and more efficient than interpreted ones. But .net is compiled into IL and then interpreted. It is something like Java, but faster. I know it is really difficult to say which one is really faster and more efficient. And PHP is also compiled by the parser: http://en.wikipedia.org/wiki/PHP (see the usage section).

        At the end I should say it all depends on the developer and the usage scenario. But most of .net developers I have seen, are not as efficient as PHP guys with the same knowledge level.

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

        1. C++ has nothing to do with it. You originally implied that Microsoft will pull the rug out from under .NET devs; my response was to that.

        2. You first said that you personally could not afford Visual Studio, and now you’re talking about enterprise-class development (eg: business). The two cannot be compared. Cost is a completely different metric for business than it is for personal. Regardless of whether you’re talking about business or personal use, .NET is cheap.

        3. And at the end of the day .NET is still faster than PHP.

    • http://damieng.com Damien Guard

      1. Silverlight isn’t abandoned. There’s been no such statement from Microsoft and given its first class status in Windows 8 and Windows Phone 7 it’s highly unlikely. What is more likely is that the regular, Silverlight and XNA runtimes will be merged. Given that most of what you write in Silverlight is the same as regular .NET even if it dropped off the earth tomorrow you’d be in a better situation than other environments such as PHP where you skills are not transferrable to any other type of application.

      2. It isn’t dependent on SQL Server at all. ASP.NET runs just fine without it but yes, Windows is definitely the best place to run it on.

      3. Yes, code runs damn fast – much more so than PHP and Ruby.

      [)amien

    • http://www.bitcrazed.com Bitcrazed

      IL is NOT interpreted. IL is compiled to native machine code when installed (via NGEN) or dynamically the first time the code is loaded at runtime. After that, executes as machine code.

      Visual Studio Express is exactly the same VS you get if you buy a copy – except that it doesn’t allow add-ins to be installed. Because of this, MS bundles specially built versions of VS that include some of the tooling necessary to support specific scenarios – i.e. Windows Phone development, web development, VB/C#/C++ app development. If you want the benfits of VS’ full extensibility model and supporting ecosystem, then you have to buy a copy. I think that’s only fair, no?

      If you don’t want to use SQL Server but do want to use MySql (or Mongo, RavenDB, etc.) then just go download and use those products – they’re all accessible via .NET.

      And as for your comments on Mono – I am guessing that it’s been quite a while since you last looked at Mono too, right? In FACT, mono is now so highly compliant with .NET that it seamlessly runs and/or integrates with ASP.NET, MVC, Parallel framework & PLINQ, ADO.NET, WinForms, etc. They even provide a scanning tool that analyzes your code to look for potential compatibility issues: http://www.mono-project.com/MoMA

  • david

    microsoft are c*nts. if the north koreans bombed redmond, it would obviously be sad for the people involved & all that.

    but not as sad as if they bombed anywhere else

  • http://www.damkostudios.com Derek Damko

    I think we also need to clarify what ASP.NET platform we are working with. I strongly believe in web standards as all people developing for the ‘now’ and ‘future’ web should. ASP.NET WebForms needs to either go away or be dramatically revised. If I am going to develop in ASP.NET it is only in MVC. WebForms was made for WinForms developers to transition with but if you are going to develop for the web then use the best tool for the job.

    • http://thecodemonk.com Aaron Smith

      This makes no sense. You are comparing “web standards” to MVC or WebForms? Neither are a web standard. If you want to cry about web standards, Visual Studio already supports HTML 5 in both MVC and WebForms. I should know, I use them all right now in production code.

  • Computer Mage

    You cannot build your own .NET from the source from Source Servers that easy. Microsoft replaces parts of identifiers with dashes like “Mi—-oft” so you have to spend some time to restore that code and make it work correctly. and also it’s impossible to compile it without some native DLLs that is absent from that .NET source code.

  • Luiz Roberto Meier

    While you can have some source code to check out if your source code isn’t stolen from any programming language and even if you don’t do anything that should or could be confidential, with products like M$ you don’t have an easy way to check out for that. How can I trust that a full environment that download every single file from servers of M$ will not have a single, unique, simple function to get my code or idea? Should I break the terms of use and take several months to disassemble it and check each line of assembly language and calls to obscure API’s of M$ or I’ll need to have to down my firewall in/out bound security while I install – say – webmatrix – and then raise up my ZoneAlarm or Comodo firewall? I don’t see this kind of problem (security) with open-source solutions. No, I don’t make any kind of code that can’t be stolen, I’m just another coder, but, I must handle with care the informations of my clients that could be stolen. Don’t think that is too much hard or that in millions of users you will not be choose, because you can simple put/use a data word filter and catch just projects with a given subject of interest. M$ is good and evil. Open-source is good. You have tried to show that because it is really easy to code simple to average web solutions with M$ products and you successful make your point , but your article don’t talk about SECURITY.

    • mjohna

      umm if you think your open source code is secure and confidential.. i truly would hate to be one of your clients.
      Your implied claims that ASP.net is insecure are baseless and for lack of a better term, wrong. PHP & Apache, as an example, have FAR more security holes and exploits than an ASP.net site running on IIS 7/7.5 . Don’t rely on the magic black box to secure your code though, your data security is ENTIRELY up to you as a developer to secure.. If you write insecure code, the language or framework you write it is is moot.

      • Luiz Roberto Meier

        You see more exploits in PHP and Apache because the community is largest than those who develop .NET products and a company like M$ or other can hide more easily their security issues using terminology like “update avaliable”. I have read (almost) every c or c++ library and I know many issues in both systems so I have my own security box. After all, no matter what server/program did you use, you should always keep your client information aside from the same network and proper encrypted.

  • WT

    Like many other people, you confuse ASP.NET with .NET and C#. While the terminology is confusing, you should know better. .NET (and C# and to some extent VB) are the underpinning foundations of ASP.NET. But Active Server Pages is a web platform developed by Microsoft to provide a stateful web forms environment to the stateless http/html world, similar to the old win-forms of Visual Basic. And while that makes life simpler for the simple-minded ex-VB6 developer, the cost of that can be high. Having to understand and work atound what’s really going on under the covers of an ASP page transaction, in order to create a moderately efficient system with decent page load times, is why ASP.NET is so hated.

    IIS itself, without the add-ins needed for ASP and web forms, is actually an excellent web server. And Microsoft’s MVC is a good way to avoid the inefficiencies of ASP while still using .NET and C# or VB. My guess is that the terminology confusion that you fall victim to, and because there is a big learning curve for most ASP.NET developers (since you have to actually know how the web works and be able to use or write JavaScript libraries to use it effectively), plus the fact that it’s still “Microsoft”, is why it hasn’t taken off.

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

      You’re right that the terminology can be confusing; Microsoft should’ve picked a completely different moniker for ASP.NET. But I’m not confused at all. Here’s a quick reference:

      ASP: Commonly referred to as “Classic ASP” today, it is Microsoft’s first server-side engine. As far as programming models are concerned, it was very much akin to the spaghetti model ala PHP. There is no similarity between Classic ASP and the old win-forms model of VB6.

      ASP.NET: The successor to Classic ASP. It is built on the CLR and the initial programming model, WebForms, was very much like the win-forms of VB6 (although you could still spaghetti if you wanted). There are some similarities with Classic ASP as far as the API goes, but it is a completely different technology than Classic ASP. There are now multiple ASP.NET programming models: WebForms for RAD, MVC, and WebPages.

      As for IIS, I agree it’s a fantastic web server, but there are no add-ins needed for ASP.NET in IIS7+. The ASP.NET runtime is fully itegrated with IIS7+.

  • http://dan.cx/ Daniel15

    Mono isn’t that far behind any more. It can run ASP.NET MVC 3 including the new “Razor” templating language. It doesn’t support Entity Framework yet, but you can use NHibernate + Fluid NHibernate or Castle ActiveRecord instead (which works fine).

  • James

    The web is built on open source. Whats .net ? oh right…

  • Sebastiaan Franken

    I don’t completely agree with one of your points. PHP (5 anyway) is a statically typed language as well.

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

    • http://rick.com Rick

      PHP is not a static typed language. PHP has a feature called type hints which provide runtime type checking for arrays and object types in function parameters (not primitives/scalar types).

  • http://www.skycrm.net Wez

    PHP is for gays, .net is for lords

  • Random

    This article is missing something “CSS compliance”

    Ever tried it? Moving from C-ASP to ASP.Net – its horror

    and please dont mention – because it still shoves crap in that isnt necessary

    With that whinge though, once you get over the bumps its good….

    for those that are having CSS compliance problems – there are solutions that are “REALLY” good –

    http://code.google.com/p/aspnetcontroladapters/

    (old version which links to above http://www.asp.net/cssadapters/default.aspx)

    its free..

  • David

    Firstly I want to say that ASP.NET MVC / C# and .NET is ultimately a great platform but the misrepresented, biased, baseless opinions passed off as facts in this article is hell-bound to do more harm than good. This script reads very much as it was commissioned by an MS Marketer.

    >>> the other major technology companies, such as Google and Apple, are just as “evil” as Microsoft

    You’re trying suggest Microsoft, who’ve earlier declared Linux/OSS to be a cancer that’s publicly expressed others are in violation of an undisclosed number of patents creating a wall of Patent FUD over others’ own technology, who are aggressively seeking and successfully licencing patents on Linux and Android (i.e. technology they don’t own), fund lawsuits behind SCO and back lobbyists behind expanding Software Patents and SOPA with the same Evil as Google who’s not made a single offensive patent lawsuit, releases their entire Android platform as Open Source and gives it away for free, is a stern supporter of Net Neutrality, makes a significant investment in WebM/P to give it away for free so the Web has a royalty-free video option. And you try to discredit anyone who doesn’t see them equally as evil as a zealot?

    What we need is to enact change in Microsoft’s behaviour to be less evil, not hire marketers/apologists to spread their current predatory business practices are ok and that those who say otherwise are zealots.

    >>> Misconception: It’s Expensive

    Paid for software is always more expensive than Free OSS software no matter how you try to spin it. The fact you have to pay for the same licences again every time you scale effectively prohibits new start-ups from using it to scale horizontally. For this reason it will never be the choice platform for the next Facebook/Google/Twitter/etc who have no option but to scale horizontally.

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

    Somehow you’ve decided to select a company who do not prescribe to the proposed (application framework) Microsoft stack, employ aggressive caching strategies, use Linux/OSS-powered Load balancers/Distributed Cache servers/ Routers/DNS/etc. Who’ve developed their own ORM (MS ones are grossly inefficient), use many OSS alternative libraries (perf), leverage OSS infrastructure as a testament to how good the underlying app platform is? even when it’s behind a Cache wall? FYI Cached calls don’t execute Framework logic – you’ve drawn the wrong conclusion here.

    >>> Statically Typed / Compiled languages

    You’ve listed all the benefits of using a statically typed language but none of the disadvantages, namely iterative development is slower than dynamic languages and the gap only increases as the website gets bigger. You’ll find that this rapid turn around factor among the primary reasons dynamic languages are chosen for large-scale, multi-developer websites. Ultimately it’s a matter of preference but counter arguments like “But it really doesn’t” are simply baseless opinions which this article breathes on.

    >>> Misconception: It’s Closed

    Please do not try and sell “open access” to source code is the same as as “true” Open OSS frameworks being actively developed in the open who share thriving OSS communities, progressively faster releases, evolve with multiple contributions from a variety of sources, turnaround to patches/bugs/fixes is ours, etc.

    Note: whilst a lot of the MVC framework is open (i.e. ASP.NET Web forms is not), parts of MVC including Razor and the underlying .NET framework are not. You are not legally allowed to modify/alternate and re-use the non-OSS parts for your own purposes. This is very different from being able to.

    >>> It’s Windows Only

    The Microsoft ASP.NET Stack and a lot of the components and tooling you’ve gone to list the advantages of (WebMatrix/VS.NET/IIS/SQLServer+friends) “is Windows only”.

    >>> Conclusion

    This is an extremely biased, one-sided, misinformed article that has the potential to mislead new developers or draw the ire of experienced ones. The Internet does not need to be misrepresented with more baseless facts (that are at worst disingenuous) – IMO you’ve done a disservice to the platform your trying to promote.

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

      - I classify anyone a zealot who doesn’t look at a company realistically. Microsoft, Apple, and Google all do great things, and they all do bad things.

      - As stated in the article, business is entirely different than personal. I focused on the personal cost as I assumed most would be interested in that aspect. In business, there are costs associated with OSS. The initial cost may be free, but there is always a cost be it in support, training, or productivity.

      - And yet nearly everything you listed is running on the .NET stack on a Windows machine. Just because it’s OSS doesn’t mean it’s not running on the .NET stack. I chose Stack Exchange because they’re open about their technology, and it’s still impressive stats no matter what type of spin you try to put on it.

      - Editorials are allowed to be biased.

    • Oscar B.

      Wow! :D

    • Danny

      Bullshit.

      • Pritam Kumar

        real mature….If you disagree with him why don’t you grow up and make a counterpoint like an adult?

    • Brian

      That’s quite the rebuttal :) You should be writing for Nettuts+

    • Arjan Diepenbroek

      After reading this article and it’s comments with growing amazement at the sheer magnitude of obliviousness, your comment was like a draw of fresh breath.

  • Ganbold

    Nice article. .NET is great platform and C# adn VB.NET nice languages.

    I have experiences working with Java, .NET and open source frameworks(Symfony, Rails).

    For me I prefer commercial platforms and tools for high budget, enterprise systems. Microsoft provided us complete set of tools, platforms and support/documentation. I think microsoft’s ecosystem is far more advanced than other web platform/tools except Java. I don’t think Microsoft nothing cares about developers. There’s huge community around the platform. And MS listens their criticism. Clients doesn’t care about we’re using open source framework or not. We only cares about the result and time. Problem is not about technology, it’s about us. People are enemy of their unknown.

  • http://www.itoctopus.com itoctopus

    I can give you 3 other reasons (I don’t know if they’re right or wrong):

    - It has security issues
    - It is buggy
    - There’s nothing free on the ASP.net platform

    And an extra reason

    - Creating an environment to start an ASP.net project is cumbersome

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

      - It doesn’t.
      - It’s not.
      - Already been discussed.
      - Install any version of Visual Studio or WebMatrix, and you’re done.

  • T.Terlemez

    Hello

    Firstly, excuse me for my english, it may not be good enough.

    .Net is a nice platform in my opinion.

    I want to remind that Microsoft what did to software firms like Borland on time.
    Microsoft was hiding knowlodge (api changes, for example it says “this thing will be removed from api” but its software writers was using this thing) from software firms which develops for windows platform and belieing them.

    Microsoft could be defined as ugly and bad at good-bad-ugly triple.
    And I do not know I couldn’t forget this.

  • Anonymous coward

    @James: Java _is_ a platform – that’s the whole point in Oracle’s case against Google. If it was just a language, there is a decision in a previous case which would render Oracle’s case baseless. Similarly to .Net, the Java platform allows you to use several languages – Scala and Python being (IMO) the most prominent ones. In fact, there are tens of languages available for the Java platform. I think there are less than ten available for .Net. My guess is that what you meant to say is that a Java-based technology stack is modular and allows for choices (multiple runtimes/interpreters, multiple compilers, multiple application servers, multiple development frameworks – all of them completely compatible), whereas the .Net platform is monolithic – the only decent runtime comes from MS, the IDE of choice is VS, you have just one compiler, I think the only two serving possibilities for ASP.Net are IIS and Apache, not a single essential part in the stack is open source, only a small subset of the .Net framework is standardized, and even on that part nobody but MS has any influence.

    Last version I used was 3.0. Things may have changed, but so they did in regard to PHP and stuff since then. For example, PHP can be compiled to native code in the meantime, and it optionally provides static typing. Java has near-native performance, regarding CPU and speed, and lacks behind native apps only in regard to memory usage. It is IMO also a nicer language – for me, C# is a mess due to excessive syntactic sugar. I don’t mean to say I dislike everything in C# and like everything in C#, but I do think that if you put IDE quality, language, available libraries and whatnot together, ASP.Net provides a less pleasant development experience than Java or PHP. Putting together a decent development environment for ASP.Net is also not cheap – IMO a bare bones VS Express doesn’t qualify as a decent development environment.

    Pros of alternative technology stacks: PHP is much more widespread among hosting providers, significantly cheaper to host, and has by far the largest amount of frameworks, libraries, toolkits and other stuff to aid with development. Java (which _is_ a platform the same way .Net is one) is maybe comparably expensive to host, but still hosted by more providers, and also benefits from an ecosystem of components, libraries, frameworks and stuff orders of magnitude larger than ASP.Net. It also has the advantage of two excellent, feature rich IDEs, either better than a naked Visual Studio (you have to add ReSharper to VS to make it comparable). Both PHP and Java allow you to use the best possible tools, or close to, without any costs whatsoever.

    Disadvantages of ASP.Net: portability is just a marketing buzzword (i.e. you can do something with Mono, but don’t say you can run an app developed on Windows on Mono before you have tried it), if you want to set up a professional development environment you’re looking at costs of a few thousand dollars, the ecosystem of freely available code around ASP.Net is small, the ports of popular Java frameworks to .Net are years behind in features from the original Java versions, the availability of serving platforms is extremely small (PHP can be served even by IIS, so can Java, there are several servlet containers available for Java, there’s just IIS and Apache with mod_aspdotnet – which was retired from the ASF’s project hosting due to lack of developers – for ASP.Net).

    So why bother with a technology stack which is expensive (when comparing apples to apples), has a long track record of botches of various types, has a small ecosystem (when compared to alternatives) and is non-portable?

  • adam

    Do you actually use .net and others?

    Do you think Compiled language still suitable for today’s user ever changing demand.

    Think just this:
    A web site, web app will never “complete”. So using compiled language, you constantly have extra cost
    of deployment.

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

      I use ASP.NET and PHP.

      I think any of the major server-side technologies are suitable for web development.

  • Bud

    Yes we use it heavly (mvc and webforms) calling wcf services and it works fine. As for deployment, i complile and copy.

  • Paul Neary

    Thanks for bringing up the issue of type safety, something that should be a no-brainer, but seems to elude people drinking the Kool-Aid about dynamic languages. Type-unsafe languages like JavaScript, PHP, Perl, etc. have their place, but the nastiest bugs come from mixing types. I don’t understand why you would develop a critical piece of code without using a type-safe language, if it’s available. It’s like swimming with the sharks without a shark cage: you might pull it off, but if you don’t, there’s going to be a lot of blood in the water.

  • Andrew

    I develop in PHP, ASP.NET, VB.NET but I hate both .net frameworks. They are horrible to use in comparision to php, ruby, python.

  • Darren

    Jeremy, you don’t use TDD, do you? Or do heavy unit-testing in your applications?

    If you did, I don’t think you’d say that you have to be any more “careful” with a dynamic language than a static language. Yes, you get pre-compile type checks with C#, but what does that really get you? Runtime errors still happen in programs that compile, and the only way to verify that the application works is to run tests through it.

    But if you are running tests in your static language to verify that your application actually works… then what’s the point of “type safety?” The tests will give you the same coverage that the compiler will.

    Another reason that I suspect you don’t test often is: Static types get in the way of testing. With C#, you’ll often find yourself creating abstract classes or interfaces *just* for the sake of making it testable.

  • André

    I, sort of, dislike Microsoft Windows ( the OS, not the company ), but I love .NET framework. I use VB.NET and ASP.NET for everything.

    I really liked your article, I didn’t know about Mono, thanks for the advice. I really appreciate

  • CGC

    “ASP.NET sites do not have to be written in C# (or even VB.NET… but who would want to do that?).”

    Are you implying that no one should want to write an ASP.Net sit in VB?
    Are you a VB hater or a naysayer?
    How much have you done with it?
    Talk about throwing stones!

  • http://www.robertb.co.nz Robert Barnes

    As an ASP.NET user for the past few years I completely agree with this article: ASP.NET is great, my main gripe is that the documentation is appalling by comparison with what I used to experience in the heyday of mainframes. However the documentation of a recent open-source project that I used was worse.

    The only gripe with the article is that the author unnecessarily denigrates VB with his comment “(or even VB.NET… but who would want to do that?)” . The only reason for choosing between C# and VB is whether you prefer the language style of

    IF xxx THEN
    End If

    or

    IF xxx {
    }

    As far as I can tell the languages have identical capability, and all the real work is in understanding the objects, some of which are well designed so that what they do and how you use them is obvious, and some are not. For me, with my PL/I background (now there’s an ancient relic!) I prefer the VB style, it seems simpler. Either way you get a very powerful development environment with a brilliant IDE.

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

      I denigrate VB all the time ;) And there’s more to it than just if statements…

  • Stefano

    Developers hate ASP.NET because Microsoft creates illusion that a simple “hello word” demo is like a structured multilnaguage multiplatform multi-all application.
    When a developer discovers that things are not so simple as “demo-nized”, is too late BUT…meanwhile…Microsoft has gain money from some server licence, senior-professional developer has loose his value and a new milk-drinker coming up from school, that beleave to be a very expert in the last technology that MS has simplified with their tools, put it in the ass to the senior developer and the previos milk-drinker. The business must pay the work of the developer, not the possibility to use the unuseful 9999 functions or a licenced prg.

  • http://agustinsaldias.com.ar Agustin Saldias

    I’m sorry, but you are compairing a FRAMEWORK against ACTUAL PROGRAMMING LANGUAGES…this is the starting fail point on this entire article…
    And this is where almost everyone fails when starting the “ASP.NET vs PHP” discussions.
    In fact, “ASP.NET” as such uses C# or VB, because it’s a framework. So everything you are promoting as “good of ASP.NET” is, in fact, “good of C#” and therefore ASP.NET goes out of this article in most of your points.

    If you want to compare ASP.NET with PHP or Python, you should compare it with say CodeIgniter or ZendFramework for PHP and Django for Python. The same applies for Rails and Ruby….

    Just because of this Fact, almost all your arguments are invalid. It’s not free, most -if not all- libraries out there are paid. Hosting is NOT to be considered as part of the expensiveness of a developing platform, you’ll need it anyway…and even then, if you have a massive site, you wont use an ordinary hosting plan but rather go on and get dedicated servers, much like StackOverflow does, and let me tell that those windows dedicated servers compared to their Linux/Unix alternatives are completely expensive.

    On the other hand, it IS proved that Linux as a Server platform is by many ways better than any Windows platform. Damn, even Microsoft uses Linux Servers. So I could make the assumption that with only half those servers Stack networks is using but with Linux would be enough.

    Regarding your statically typed “advantage”, well…that’s not a real deal to be honest. If you expect an Integer to arrive but instead receive a String, that’s not the language fault by itself but rather your code’s fault (and ultimately Your fault). There are trillion ways to prepare variables to the type you want in PHP or Python and to ENSURE you receive what you expect.
    You have for example in PHP “is_int” (like in your example) to check if the given variable is in fact an integer, and if you expect it to be a String (because you received that value from POST data, then you can also cast it to integer with a simple (int) before the variable. So you actually HAVE the tools. You could even expand your functions with a set of settings to check variable types. Something like this, maybe :

    <?php

    class MyClass {

    public function __construct() {}

    public function display() {
    $param1 = 20;
    $param2 = 30;
    echo ‘$param1 is an int 20<br />$param2 is a int 30<br /><br />add($param1, $param2):<br />’;
    echo $this->add($param1, $param2);
    $param1 = 40;
    $param2 = “50″;
    echo ‘<br /><br />$param1 is an int 40<br />$param2 is a string 50<br /><br />add($param1, $param2):<br />’;
    echo $this->add($param1, $param2);
    }

    public function add($param1, $param2) {
    $settings = array(
    0 => ‘int’,
    1 => ‘int’
    );
    Utils::__check_var_types($settings, func_get_args());
    return $param1 + $param2;
    }

    }

    class Utils {

    static public function __check_var_types($settings, $params) {
    if(count($settings) !== count($params))
    throw new Exception(“Invalid params count.”);
    foreach($settings as $key => $type) {
    $func = “is_” . $type;
    if( ! $func($params[$key]) )
    throw new Exception(“Invalid parameter [{$key}]. Got ” . gettype($params[$key]) . ” type. Expected {$type} type.”);
    }
    }

    }

    $class = new MyClass();
    $class->display();

    Sure, you can say this is not the “ideal” solution, but the quality of the software is not made by the framework (asp.net) or language itself (php/python/ruby) but rather YOUR CODE’S QUALITY. I wouldn’t EVER expect ANY language to check things by itself, specially when it comes to Web Applications. If I have to write a little function to check function arguments like the one above, then so be it. I still prefer this road.

    And I can argue about how statically typed Languages like ASP.NET and Java require an ENORMOUS amount of code to perform one of the simplest tasks like reading a file or interacting with a database. While you need to create buffers and streamers and managers and etc just to read the content of a file in Java, in PHP there’s nothing simpler than file_get_contents(). And although this is not recommended with large files, for most use cases will be just enough to work with. While ASP.NET has a good (“frameworked”) alternative (File class) compared to Java, you still need to write a whole damn lot just to read the entire file in the actual real language that is ASP.

    Compiled? Well, good for you, but PHP can be compiled to and not executed on runtime every time. An excellent example for this would be Facebook. Their entire system runs on pre-compiled PHP code. And they even gave the tool for free and open sourced if I’m not mistaken.

    ——————————————

    It’s is OK to be biased, we all love our language the most, but it is NOT OK to be biased in an article on a site about EDUCATION. And I’m quoting something YOU wrote that was BAD about other people’s actions:

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

    You, Sir, are doing the exact same thing with this article and being biased on your opinion. Objectivity is what matters, specially in a site like this…

    • http://agustinsaldias.com.ar Agustin Saldias

      Oh, on a side note.

      As mentioned before me, using type hinting actually works as of PHP 5.3, so there SHOULDN’T BE any reason to use my variable’s type check anymore. But if you don’t use 5.3 as many hosting plans don’t work with it, then that little function may prove to be really useful. Not only for function parameters but also another variables that need some checking.

    • Kay

      @Augustin Saldiamos

      I think he has you covered in the ‘people who have never worked with it’ category. Basically, you’re wrong. C# is one of a few dozen languages you can write ASP.NET in, including IronPython and IronRuby. Just because you want something to be true doesn’t mean that it is.

      Do me a favor and go write a custom http handler in PHP that executes as the initial handler as opposed to a pipeline proxy. Or, go add some base functionality to the PHP infrastructure (i.e. have fun writing C/C++).

      Next point would be that your view of type safety is laughably naive, but there’s also no point in discussing it because you like being able to set $var = newObject() and clear it by setting $var = false. And everyone laughs at you for it.

      What you’re missing is, everything. But more specifically, what you’re missing is that ASP.NET is inseparable from the .NET framework, and as such, it has functionality that you can’t even begin to approach using PHP. I’m sure you also don’t understand that the .NET framework does not run on a VM, and contrary to the “in a nutshell” definition on wikipedia, the CLR isn’t identical to the JVM; CIL will execute as native code, whose memory management is controlled by the CLR. The only similarity it has to a VM is that managed memory component. Not that you’d know what that is.

      .NET can interface directly with the operating system, support multithreading, it can be written as unmanaged code, it can talk to other applications and services natively, has server-side, client-side, remote and RIA debugging, it can use any windows DLL you want to make use of and a thousand other tasks that PHP can’t. PHP is a scripting language that sits on top of a CGI stack that sits on top of a server (count the layers of abstraction).

      • http://agustinsaldias.com.ar Agustin Saldias

        @Kay,

        Well, first of all, my name is “Agustin Saldias” and not “Augustin Saldiamos”. I’m gonna assume this was an auto-correct error.

        Regarding your points, you failed at understanding my point. You, and this entire article, is comparing a FRAMEWORK with a language. My point was, exactly, that you can write in various languages with the .NET _FRAMEWORK_

        This article is compairing .NET with LANGUAGES. There’s the problem.

        “Next point would be that your view of type safety is laughably naive, but there’s also no point in discussing it because you like being able to set $var = newObject() and clear it by setting $var = false. And everyone laughs at you for it.”

        I’m sorry, but that comment was plain stupid and unnecessary. You don’t know how I code, and of course you don’t know what I like or how I like to code stuff. Using “$var = false” to destroy an object or variable clearly shows you lack of understanding and knowledge of PHP. Maybe you’re used to PHP3, I don’t know…but the correct way to destroy variables and objects is using the unset() function. If an object is passed as argument, PHP will call __destruct() on that object in case you want to do more logic before destroying it. I laugh at you for your ignorance on the matter.

        Again, .NET IS A FRAMEWORK, it is NOT a language. Learn the difference, please. Leave your fan-boy helmet alone and objectively make your opinions.

      • http://agustinsaldias.com.ar Agustin Saldias

        Again, all your “pro-points” are about .NET FRAMEWORK and not about a language that you are comparing it to.

        “(…) and other laughable technologies don’t even enter my scope unless I’m paid to muddle with them.”

        You just proved to be as biased as hell. You totally win at fan-boyism.

  • http://www.adroitsense.com Nikhil Goyal

    What I find the most interesting about this articles

    1. ASP.NET has a lot better performance (e.g. of stackoverflow) – and I did not even knew about this.

    2. Every Developer should be Polyglot

    After reading this I am sure that I’ll give ASP.NET try.

  • Kay

    I agree with all your points. You can’t really expect anything more from people who don’t actually know how to write code. I’ve worked with ASP.NET since shortly after it was first released. My short list of gripes about ASP.NET are as follows:

    (bandwidth heavy is my primary gripe, and it’s effectively a base property of all of the following objects)
    1. Session state – convenient, and more abused than free speech
    2. Control State – convenient, and non-disable-able
    3. Control IDs – concatenated id fail on top of useful names, requiring you to go to extreme lengths to reference page items in scripts that are set to runat=”server”
    4. No default means of naming a page’s body id
    5. Convoluted Url-mapping vs MVC framework
    6. SharePoint will never be upgraded to MVC
    7. ASP.NET ajax toolkit – nubs love to abuse the unholy hell out of this
    8. Telerik/infragistics/component art and the other 9 million packages that people use as crutches and waste 10 billion hours trying to make work in situations they aren’t designed for
    9. ONE FORM PER PAGE – this shouldn’t require explanation
    10. Inline everything – most of microsoft’s controls generate it
    11. Tables – see 10

    My long list is a lot longer. ASP.NET does have a lot of strengths (it’s likely the most RAD-able technology for web development), and it’s a lot better than messing with servlet programming and the limitations of java. PHP (aka, classic asp/jsp with sugar on top), rails (for around in (x..y) puts around to no end) and other laughable technologies don’t even enter my scope unless I’m paid to muddle with them.

  • Wayne

    But what about the community? The ASP.net community is nowhere like the community of ruby or php.

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

      Explain “nowhere like the community.” If it’s a numbers game, that cannot be debated (except for being a bad metric).

  • Wayne

    But what about the community? The ASP.net community is nothing like the community of ruby or php.

    Also, it seems like testing in ASP.net is not as easy as ruby or php even.

  • Kevin

    How much did Microsoft pay you guys to write this article?

  • Eric

    I’ve come to appreciate VS & C#. However, when I can, I will opt for Python over .Net.

    And, if I have to create an app with .NET, then I will use the MVC3 framework.