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
  • http://www.riak.uk.com Web Design Crawley

    Nice blog post! I have just started learning C# and ASP.net. you guys should do more tuts on C# and ASP.net!

  • Flohack

    Dear Jeremy,

    while I agree 100% with your opinion (and I have to since C# development is my daily business) I have two remarks to make:

    * If somebody wants to use Windows in a virtual machine, it is not possible to use an OEM license, so for this special case one has to buy a boxed version – clear, as for OEM there is no physical hardware where it can be bound (= stick the sticker somewhere) to. MS requires that OEM licenses “die” with the hardware, which will not be the case with virtual machines so far ;)

    * The argument about static typed bahaviour lacks a comment that the advantage of compiled types ends at the database if you use simple access methods. All DataTable objects will have rows which deliver object data. These data fields need typecasting and will produce nice runtime exceptions if cast to the wrong type. A remedy could be the introduced entity model framework which hides the database completely, but has other issues as far as I can see (Db inconsistency leads to unpredictable behaviour, and its unclear which SQL statements will get executed by accessing an entity).

    * Try to feature Linq, its an excellent technology.

    regards Florian

  • Craig

    Hi,

    I’m an ASP.Net vet, I love the language and platform, I’m a huge fan of Azure and cloud development, any of my own work I do in C#, but I am about to start Rails & Node.js, because ….

    Unfortunately, the problem I see that can never be addressed, is the truth in the perception that “At some point you will pay”. Azure or even AWS Windows is 30% more expensive than linux. If you want the “right” tools, you inevitably have to fork out for VS pro or better. Even if you’re a partner, the free stuff runs out in the end. It’s a corporate ecosystem.

    The problem is that any young student confronted with that reality and an effectively unlimited amount of time to learn, will always favour free & OSS because they’re looking at the long tale. That’s not news. That’s what happened 5-10 years ago and the market has shifted. OSS toolkits and platforms are now as advanced as anything MS can put out as they one company against an army of free contributors.

    • William Meabrod

      I am a student and I get Visual Studio 2010 and other Microsoft developer support software for free.

      • Robin Card

        “At some point you will pay”

  • Techeese

    Now I’m encourage to try ASP.NET

  • Raymond Chandler III

    You are full of shit.

    I’ve coded in C++ and C# for years doing both server side and native application development with everything from .NET to GTK+ and If given the chance to write a web application in Ruby/Python vs C#/Java I would choose Ruby/Python every fucking time.

    You completely miss the point of dynamically typed languages. Dynamically Types != Weakly Typed. Most dynamically typed languages are strongly typed. Your examples or run time type checking are completely irrelevant and almost never happen in dynamically typed languages.

    Once I create an integer object it stays and integer object and I can rely on this always being the case. I am rarely unsure of the type of a specific variable and if you ever find this to be the case chances are you are doing something wrong.

    The benefits of static typing are a phantom. It is much more important that you unit test your code to ensure minimal bugs in your source code. Static typing does NOT reduce the chances of bugs appearing in your code.

    People who program in dynamically typed languages don’t necessarily dislike compilation or think this process is slow. Especially considering the constant running of test suites that most projects have included. There is always steps between deployment(local or otherwise) and testing. IMHO the ONLY benefits of compiling code is that it’s runtime speed is increased.

    Runtime speed is no longer an issue in web development. The speed gained from compiling your applications is, if not insignificant, then most certainly not needed. Dynamic languages are “fast enough”.

    The number one #1 reason people use dynamic languages is because they are blazingly fast. Yes blazingly fast… in development time which is where I spend all my money on my product. Another server is cheap compared to what I pay my programmers.

    You go onto argue about how .NET isn’t closed because their source code is available. That is bullshit. You neglect to mention that .NET is released under the MS-RSL or Reference Source License which essentially means read-only access. It is the very definition of closed. Simply because I can browse the source does not mean the source is open.

    You really have no fucking clue what you are talking about.

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

      There was no discussion on strong vs weak (and I avoided the topic because as you said, some dynamic languages are strongly typed), but I think you’re confused as to what defines “dynamically typed.” In dynamic languages, any variable can hold any type of value at any time. So, yes, you could create a variable that contains an integer, but that variable will contain an integer only as long as you don’t assign a different type of value to it. So while Python and Ruby are strongly typed languages, that doesn’t stop you from reassigning a different type of value to a variable.

      • Raymond Chandler III

        It sounds like you do understanding what dynamic typing is however your example of using run-time type checking is still full of shit. I’ve rarely if ever encountered runtime type checking on a project programmed in a dynamic language. Also it is pretty rare to see variables reassigned to different types that are not the result of type casting in the newest generation of dynamic languages i.e. Python/Ruby. I am not an expert on Ruby but I am on Python and I can tell you there are other mechanisms to deal with type mismatches during operations. Python exceptions for example are unchecked(meaning they don’t need to be rethrown) and throw a TypeError exception if there is a problem with an object’s type. (But even these are used less often then you would think)

        In the statically-typed world there is this idea that dynamic languages are a sort of programming badlands where normal rules are thrown out and everything is a gunfight, or that dynamically typed languages are prone to more bugs. This isn’t the case at all. In fact I write less bugs in Python than I ever did in C++ or C. (My other expert language)

        How do you account for your other inaccurate statements that I’ve pointed out? I’m particularly pissed about the bold-faced lie that .NET is open. It is not and you would do well to update your article to reflect this fact.

    • dotnetter

      how do C and C++ compare to .NET framework?! you don’t even have to use C#. So, yes, i guess you don’t have any knowledge about it, yet along any master knowledge. Why would i use a child’s toy if i have a professional tool that i KNOW how to use… not 1% of it, but a very big deal of it. .NET is not about declaring variables, what are we talking about? That’s child’s play! Yes, if you want to make something where you can remember all of your variable types, then be my guest, use ruby, python or whatever. I work on project’s that are in development for years, and will be for many more years, where a lot of developers work on the same code, where there are thousands and thousands of variables, i would be crazy to use anything but .NET! And i don’t care what’s the source code behind it, i care about what i can do with it, and that’s way more than you’ll ever be able with those opensourceshitthings. i’m talking about advanced stuff, not declaring variables. And the price? if you can’t afford to use .NET then my friend, you should reconsider your professional career choice!

    • Praveen

      Comon @Raymond if u r still looking for above mention example as going varible, then u are very far from OOPs Concept better u work on it, its all game of object, DataType, when u will start creating objects with different varibles, when u will provide a identity to any class code u written then u undestand above mention examples…..

  • Jason

    @Raymond Chandler III there are so many things factually wrong with your comment that I got bored trying to respond to them all. But I seriously doubt you’ve coded in Ruby, ever. I also doubt you’ve worked on a project with more developers than one. And you’ve certainly never worked on a project that would be considered “enterprise”.

    All that aside, he wrote this article this article for you. You’re exactly the type of blind-hate-for-.NET developer he was talking about. If you don’t want to use .NET don’t use it, but you completely missed the point. You should scroll up and read it again until you get it.

    “You really have no fucking clue what you are talking about.” Wow, the irony is astounding.

    • Raymond Chandler III

      This is really a pithy attempt at trolling Jason but okay… I’ll bite. First off, there is nothing in my statements that are wrong or inaccurate. So you say I’m wrong, but rather than coming up with a decent argument or discussion as to why, you resolve to ad-hominem attacks. If you have nothing to add to an argument or discussion then why post in the first place?

      Second, you are correct I’ve never touched Ruby. I’ve attempted to learn it several times, and each time it’s been a complete pain in the ass due to versioning issues. I don’t really consider the language very “stable” for professional work, but many do and it is use quite a bit in the startup space. What I do know and code in professionally is Python, which is very similar to Ruby as far as language features are concerned.

      You say that you doubt that I’ve worked on a project with more developers than one. This is partially accurate. I work better by myself and are a many times more production that way. I am a generalist hacker so I do many things very well. My specialty is rapid prototyping and product research. That said, I have worked in teams in the past and do very well within a team structure.

      “enterprise” development means many things to many people. I use the term in a derogatory manner to refer to small projects that have way to many developers thrown at it who use something like Java+Spring to develop something over the course of 3 months what would take me 2 weeks to accomplish(by myself) in Python. If this is the kind of “enterprise” you are referring to then yes…. I never hope to ever work like that. It is a useless existence.

      I think you missed the part where I’ve said I’ve used C# and .NET for native development. Scroll up and read it again to make sure. I can’t have blind hate for something I admire and recognize the value of.

      I can’t believe I actually responded to such a childish trolling attempt.

      • Nate G

        I couldn’t help but laugh.

        So you’ve barely used Ruby, only work on projects on your own and think “Enterprise” projects are 3 month Java/Spring endeavors.

        I’m betting you don’t have a formal Computer Science education and I doubt anyone could ever convince you that you’re completely ignorant and could learn a lot by humbling yourself.

        As to your original argument, I think the only reason you’d choose Python/Ruby over ASP.NET/C# is because you have never used C#/ASP.NET.

      • http://www.facebook.com/profile.php?id=100000494065349 Mixe

        men i love your ttaoriuls. especially the way you are doing them and how explanatory you are about all your steps. you should really consider creating a full set of tutors like this for beginners like us. there is nothing out there really… can’t get enough of it. hope you can create more stuff men cause this is really good shi* we want moooore :) thanks a lot

      • http://nath.is Nathaniel Higgins

        Nate: Since when did a “formal computer science” degree count for shit anymore? You’re exactly the kind of ancient programmer that would use ASP.

      • http://nath.is Nathaniel Higgins

        Nate: Since when did a “formal computer science” degree count for shit anymore? You’re exactly the kind of ancient programmer that would use ASP.

  • http://www.meow.fr Meow • Japan & Urbex

    C# + SQLSERVER + LINQ + ASP.NET MVC. I don’t want to lose my time with anything else. Those products are so amazing together that they made me disgusted of everything else I tried to use in the past. Now my issues are purely on the client side (didn’t find the perfect JS framework yet, even though I love jQuery and ExtJS).

    • George MN

      Jeremy has somethings very right. ASP.NET is the platform, web forms is a “way of doing things”. Other ways of doing things in the .NET Space are “Web Pages” and “MVC”. The problem is that most people don’t research the least bit on MS technologies. MS has consistently reduced the size of viewstate. Actually its possible to turn off viewstate completely. If you dont like ViewState use Web pages. If you like raw stateless HTTP use MVC. With the addition of Razor, web programming in ASP.NET Webpages and MVC is very sweet.

      C# is wonderful especially the new features such as async and await. I havent seen any other programming language that makes asynchronous programming so easy and intuitive. I wish devs could appreciate such features and not just hate Microsoft. Even Wozniack noted that MS is changing, for the better. They have a long way to go but of late things have “improved”. Look at LINQ, Entity Framework those are things that make .NET so attractive. Web config is good allows per site, custom config. Tools like Web Deploy make development so easy, fluid and natural.

      Web Forms was bad, it is way better. MVC and Web Pages are awesome. They are what people should use to develop sites. Every stack has problems but currently the state of ASP.NET is among the best!

  • anon

    I agree that asp.net doesn’t deserve to be hated for any of the reasons you list. I love IIS7, and I love C#. asp.net, on the other hand, not that great. It’s a mistake to try and make a web site a stated application. Haven’t tried MVC, but I assume it’s just another, better solution to a non-problem. That “non-problem” being the fact that HTTP is stateless.

  • Sergii

    I do not hate ASP.NET I dont like it. ASP.NET hides all web under theirs infrastructure. If you want to try developing on web in .NET. I will recommend to you ASP.NET MVC, not just ASP.NET.

  • Siberia

    I’m not sure i know what expensive ASP.NET is, i’m not interested. I’m happy with PHP

  • roxy

    And I’m happy with ASP.NET, On Mono/Linux and Windows.
    :)

  • Daemonl

    Nice post!

    I work in ASP.net at the moment, because I thought that was the only language to get a ‘real job’ in, but am about to start a new job in PHP.

    In my current role, I think I spend at least 1/4 if not a full half of my time compiling code, as Raymond Chandler III put it, “Another server is cheap compared to what I pay my programmers”.

    I think quite a lot of the things you see as being fixed by compiling are done by an IDE for PHP, I use netBeans, and it warns me about things like if($a=$b) {} and, I think, if (1==1) (I think, anyway. That one is usually as part of a test for me, don’t think it’s ever gone live).
    + I can choose whatever IDE, or notepad++ or even remote in and use vi to edit and test php. On my iPad. On the train. gl with Visual Studio.

    Yesterday I discovered that static classes in .net have constructors… what’s with that?

    One other note, I also use git and we have multiple developers. ASP.net has one single file listing all of the other files – and that file is always a mess. PHP doesn’t have that problem.

    I would like to not have to run up the entire code base each page request, however, asp does definitely have that going for it.

  • Chris

    To support your argument about .NET being expensive, new devs can have Visual Studio Pro, Web Server 2008 and some other programs for free. After 3 years they ask you pay for it, however I think 3 years is a good amount of time for new .NET developers to decide if they want to continue on that path. Check out the link so see what they offer.

    http://www.microsoft.com/web/websitespark/support.aspx?tab=ProgramDetails

  • Magnus

    Please give us more articles on the .NET-subject (L)!

  • http://www.outsystems.com/ Joao Pereira

    Hi, I must admit that ASP.NET is an extraordinary technology.
    I have been using it for some years and seen great results while using it.
    Never the less I have also been using a RAD tool called outsystems, and
    frankly I would use it anytime instead of using just plain and simple ASP.NET.

    People tend to think RAD tools are limited in flexibility, and they are right, there is nothing like a visual studio .NET in terms of flexibility.
    But the thing is, outsystems in not a RAD tool. It’s “Visual Studio 2018″ … on steroids.

    And when you find something you can’t building using outsystems, you can extend it with C# !

    I’ve need to extend outsystems like 1% of the time, most of the time it just works.
    I can build a full app in minutes and publish it on the Cloud! in minutes on a farm of several servers running IIS and a MS SQL server or Oracle back-end.

    Basically if you put a team of *two* guys using ASP.NET working on the same specs as me, and if they finish before me… YOU CAN FIRE ME.

    That’s how good it is.
    My 5 cents.

  • Kanwal

    Just to Point out, the 800/s figure you gave for Stack Exchange, 4% of it is page views, rest is ajax calls and static content. I know ajax calls will engage the .Net server, but static content wont go through .Net Stack. so its basically 26page views per second, and some ajax request, which are ofc resource consuming but far less consuming then normal page views. Now handing that with 12 windows servers don’t look too staggering does it? Its great to favor your platform of choice, but giving biased full length articles on an education site is not good.

    I used to turn to Net Tuts to find quality content, now i just find a lot of useless stuff like this.

  • Rick Rollington

    Either the author is very young, very ignorant, or has a very short memory. Microsoft is evil.

    I still remember Microsoft’s hamfisted attempts to dominate the browser space in the late ’90s, their desire to extinguish conventional TCP/IP (embrace, extend, extinguish was a well-known MSFT meme back then), their strong-arm tactics with PC manufacturers to force their software onto machines.

    Internet Explorer is *still* a total piece of shit, slow to implement features other browsers have supported for years.

    Why the hell would I give this company that’s been the source of so much misery any mindshare at all? Why would I want to help them reassert dominance in the web space?

    One of the best things about the explosion in popularity of Ruby On Rails, PHP, and Python is that they’re not Microsoft technologies. They’re not owned by crude monopolists with no taste (see: Sweatin’ Steve Ballmer) and no sense of where the market is going (see; Sweatin’ Steve Ballmer laughing at the iPhone before its release).

    The author attempts a pathetic jab at those of us who levy this charge against Microsoft by pointing out Google and Apple’s respective behaviors. A) it would be a mistake to presume that someone who hates Microsoft for their corporate philosophy is automatically a fan of those other two companies, and B) I don’t recall either of those companies floating plans to replace TCP/IP with their own fucked up proprietary technology.

    And if you really want to look at a profound difference between Microsoft and Apple, just look at WebKit. The engine for Safari and Chrome was developed by Apple, released as open source code, and is light-years beyond where Microsoft’s pathetic excuse for a browser is. Why isn’t Microsoft ending their development of web browsers? Why aren’t they using WebKit or Gecko?

    Microsoft is a dysfunctional behemoth that is slowly watching its monopoly disappear. If at some point they fragment, and .NET becomes another choice of open-source technology that I can freely use after weighing its merits against others, then maybe I’ll consider it.

    It’s telling that the biggest fans of .NET are corporate IT types who basically exist to justify each others’ bloated salaries. Out here in the real world, many web developers are doing just fine working with open source.

    • lossendae

      You’re cute.

      In the meantime, let’s not forget about Apple with its overflowing patents trolls stopping innovation whenever they can, and Google systematic attempts to give you things for free but make you either pay with ad, or required service (gmail) for its tools.

      Microsoft failed to rule the world, but don’t be fooled, nowadays, Google or Apple are as much evil if not more as Microsoft.

      Open Source is not a rule them all solution either.

      Thank you so much for your caricatural comment.

    • ZombieChan

      “It’s telling that the biggest fans of .NET are corporate IT types who basically exist to justify each others’ bloated salaries. Out here in the real world,”

      You have several things that are quite incorrect but I’m going to point out this one. Out here in the real world we use what ever tool works the best(or whatever tool my boss gives to me). Like lossendae
      said “Open Source is not a rule them all solution either.”

      I love using .Net, I also love using Ruby in some cases. It all depends on the project I’m working on.

  • roman

    “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); ”

    afer seeing the “eqivalent”… thats where i stopped reading…. dumb dah di dah.

  • phplover

    I do agree .Net is a great framework… but being an average scaled developer i would say php still rocks!!! easy to install and can find several frameworks to match criteria. i have no personal intention to criticize Microsoft’s framework but i would say Microsoft must release a version of .net for average scaled developers who cant afford to waste time installing heavy applications and frameworks.

    • praveen

      So man u mean to say that if any one making tea of waste poluted water u will take it because u feel it is easy to consume or u will go home and make a tea for ur self with fresh and clean water and wait for it to complete and drink

  • webarto

    PHP

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

    If you pass !int you will get “Catchable fatal error: Argument 1 passed to add() must be an instance of int, double given”.

    • Ian

      At run time?

  • Guo koko

    If are a java(or somethings else) developer then you are a valuables resource for open-source world.
    but..
    If you are a MS developer then you are a valuables resource for Microsoft only.

  • Makeyourdaddyproud

    If we were to take your advice on .Net worship, we will spend more time loading service packs and updates than actual coding. Real programming is low-level, spending 75% of your time writing code and 25% tracking down bugs, and it is the latter task where you learn more.

    FWIW, I would rather do this than spend 40% of my time skilling up (someone, somewhere is Redmond always has a bright idea, and they tend to be acne ridden 20 y/o virgins who of course, always know more than anyone else), 40% loading service packs and 10% trying work out how to use their forever changing IDE’s (remember InterDev et all?), and 9% deploying the same fucking thing that has now become obsolete because guess what? A new, younger brighto fucking spark knows it all and it all has to be done differently (probably that same twat, who invented WPF)

    The fun out of programming has long gone. It’s now all frameworks, frameworks and more frameworks. Simplicity is 1 simple edit, 1 compile and run everything else bores me to tears. Now the simplest .Net app has to have IIS, Webconfigs, Sharepoint, AD, Security, Deployment, MArkup, Scripting yawwwwn…

    I will NOT pander to the geeks in Redmond … Ever

  • Marcos de Miranda

    I really agree with the author…ASP.NET it’s very powerful! and fairly reliable for begineers and professionals during the development process…if you use ASP.NET MVC and the cocktail of Entity Framework, with some JQuery support and Ayax requests that’ll be extremely solid infraestructure for any kind of purpose wether it’ll be enterprise or personal.

    I have one of my students at first year of the career, total begineer to web programming and right now he is on the road with this technology, in the meantime that others from third year are still having headaches with Play and Symfony…is it a Java or a PHP problem?…nop…it’s the technology…the car has to be as easy as possible to drive and if you don’t have to…even the better…so sorry we haven’t found that case yet, with the exception of the CMS.

    I encourage the other developers whom may read this to share this post, as you might always find people doing the war to Microsoft and their products…but you never hear Microsoft doing the war to the Linux or Open Source developers…Do you want to know why?…because they ARE WORKING…and no wandering this or that…;) an awesome basket of reasons! Good Call Mr. McPeak!

  • Calebe

    I’ll just say this: web.config.

    Thanks.

  • Will S.

    To each their own. At day, I’m forced to work in ASP .NET (both Web Forms & MVC) but I go home and do real code in Python. Yes, Python. ASP.NET is detrimental to this web developer’s health. Even ASP .NET MVC pushes new versions just to push features that I basically don’t need. I just want to work, not contiously build up a skill that I won’t need in a year. I looked at the JVM with Java/Groovy, I looked into Ruby on Rails, but I decided on Python/Django. I’m starting to actually have fun being a developer again. At some point, I’ll be looking to getting out of .NET.

    The truth is, I don’t think I’m alone in how I feel about .NET. Look at Google Trends and do your own research. The .NET Framework is in a downward spiral. Numbers don’t lie, my friends.

    • Sean L

      I feel your pain man. I was a .NET dev for years with various companies even leading teams of other .NET developers on huge projects. Then I had a year as a Java dev which motivated me to leave them both behind and find better tools. I learnt Ruby on Rails.

      Up until my RoR education I was completely bored out of my skull with programming. So many years of MS drudging had left me basically brain-dead for programming. Swapping over to Ruby on Rails has without question been the most profitable use of my time ever. I finally got enthusiastic about programming again. It’s amazing what working with a fundamentally clever language like Ruby can do for your attitude. Getting involved in the OSS community and interacting with innovative hardcore Ruby coders also helped reignite the spark of my first love, coding!

      6 years of fulltime MS corporate donkey work was enough for me. Thankfully all my coding these days is in Ruby for web and Objective-C for mobile, with some vestigial C# work left over from maintaining old projects.

      • Pete, UK

        This just about sums it up for me ! I’ve been using MS technologies since the late ’90s and my skillset becomes redundant every few years – ClassicASP from 1999-2004; ASP.NET Web Forms from 2005-2012; now everyone is demanding (from the MS camp at least) ASP.NET MVC. I’m sick of it. I enquire about job roles (probably 120+ in the last week) and am left feeling I have nothing to offer aside of the ability to “write code”.

        Each new release from MS seems to take more control away from the developer. ASP.NET MVC and Entity Framework (these two seem to be Siamese twins at a lot of companies now) gives with one hand (more control over http and html) and takes with the other (crappy ORM taking control of data access away from the developer). I don’t need this kind of shit – I have code libraries and code generation tools that I’ve developed myself over the years to do all the basic boiler-plate stuff.

        It’s not rocket science, every program or web site I’ve worked on since 1998 pretty much does the same thing: get data, show data, update data, add data, delete data. How many ways can a company come up with to do this?

        Seriously looking to jump the MS ship!

  • Web Developer

    I don’t hate asp.net for any of those reasons.

    Try addressing these:

    - Only One Form allowed. Means if I want to send a postback I have to send everything. even a search form will send every single variable on the page in the request, I just need the the search text variable.

    - Viewstate is bloated.

    - The HTML generated behind the scenes is bloated.

    - It’s trying to fit an event model architecture into a client/server response/request model. (it’s like trying to fit a square peg into a round hole.)

    - The _doPostback(….) appearing in the status bar. Seriously, WT?

    - Everything by default is a PostBack, even simple things that I may want to do on the client. and yes with one form I will send every variable everytime.

    - Id names are bloated and dynamic, trying to refer to an Id with javascript is hard work.

    - No control over a controls HTML, which invariably in the end is HTML. (Everyting seems hidden behind the scenes, trying to figure out whats gone wrong with a complicated black box control is hard work and time consuming.)

    - A lot of controls require javascript to work, yes we have a standard where I work that requires all our sites to work without javascript. (Don’t ask me why.) Luckily, I did not have to write the Hack to make this happen for some ASP.NET controls.

    - In the end it all turns into HTML,CSS and Javascript, ASP.NET seems to hide all that with its own language and controls, which I think turns out bloated heavy weight webpages which takes up more bandwidth on the network than it needs to, and you lose the control and ability to make the websites footprint small and efficient.

    Admitteddly I havn’t used MVC, but I have used a lot of both ASP.NET and PHP. and while I don’t mind either, I find ASP.NET is written for writing websites like windows forms developers.
    Where PHP is written for writing web sites.

    If I was to start choose a technology it would definately be PHP for websites. and .NET C# for windows Forms. Or maybe C# WITHOUT ASP.NET for websites, I’ve seen it articles on doing it this way.

    Again,
    I find ASP.NET is written for writing websites like windows forms developers.
    Where PHP is written for writing web sites.

    • Andrew Price

      It took a lot of scrolling down to find the reason why I don’t work with .Net. Was beginning to think no-one else was bothered by some of the generated junk thats thrown down to the browser.

    • Jimmy C

      WebForms is for development environments that don’t want to re-write the wheel and can afford to spare some efficiency. The cost of not-so-pretty HTML is often worth the ability to create a powerful web application in a very short amount of time with relatively less defects.

      Your first issue: sending the entire form contents in postback is bandwidth heavy… Well, this is really a feature. In your event handler, you can reference any control in the form and see its value. For more complicated UIs, this is quite a benefit.

      As you only briefly mention, you have not tried ASP.net MVC. Let me tell you, it’s the best of both worlds. It still allows you to easily create interaction but you have control over the HTML. Andrew Price and yourself should try it. I would never use WebForms for a consumer facing application, but I currently have many external sites running MVC.

      BTW
      myControl.ClientID returns the generated ID… If you didn’t know about that, then I pity your users.

      • Web Developer

        How do you use myControl.ClientID to write javascript? I’m sure its very pretty.

        You can still send all the variables you need in one form using standard HTML in any language.

        Bandwidth heavy really a feature?! Tell that to my mobile phone, or someone on a 56k modem.

        You should work for the MS Marketing department!

        I’m interested,.. What was the powerful web application created in a short amount of time?
        once things become complicated(powerful) with ASP.NET, it rarely takes a short ammount of time. Simple and inefficient you mean, (standard default implementation being every button click event is a postback.)

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

      You’re confusing ASP.NET and ASP.NET WebForms. The former is the web technology; the latter is an implementation of the web technology. The flaws you mention only apply to the WebForms programming model; you don’t have to use the WebForms model if you don’t want to (and you never have had to). Even then, many (if not all), of these issues have been addressed in later versions of WebForms. So while your arguments may have had merit five years ago, they do not today.

      • Web Developer

        Typical MS Marketing Hype, No they havn’t!
        My arguments still have merit.
        I’m still using ASP.NET for work and I see all the same things.
        In fact I’ve noticed a few more.

        – Whats with the webresource.axd and embedded resources? I’ve had that break a few times now, still not sure how to fix it. what a complete waste of time.

        Why microsoft Why?!

  • http://net.tutplus.com Another Web Developer

    I have to agree with Web Developer (June 6, 2012 at 7:55 pm)

    I have used PHP a lot in the past. currently i am assigned to program in ASP.NET in a team to develop an enterprise system. And by god i dont like this language.

    I don’t hate ASP or Microsoft, I don’t like it. It makes simple things complicated.HTML is bloated like shit. And to create some fancy collapsible menu with sitemaps, i need to get a third party control that cost money, in PHP menus are childs play.

    I can do much faster development in PHP, by three times.

    I’m a graphic designer and programmer, i want to have full and easy control on aesthetics, and in this PHP > ASP

  • http://www.dotnetjalps.com Jalpesh Vadgama

    There is lots of myths about asp.net thanks for sharing this code!!

  • hafizan

    asp.net mvc .kinda a joke.
    1. 1 model ,1 controller ,1 view ?
    I need many model in one view.Dont’ want to push in ViewData.
    2.How do i output data from sql server and autogenerate model ?dam kinda lazy to generate code.

    ** My php code can generate model,view and controller .Can asp.net do it ? seriously.

    • Hart

      Nope, completely wrong. You can pass one model to the view, usually a view model with all the objects u need for that view, validation properties, etc. is bad practice to use db direct models on views. Also, that’s the principal object you pass to the view, but on the viewbag you can also pass any number of extra objects you want…

      You can use multiple partial views inside a view too.

      And with entity framework you can create your model from the database, or vice versa.

      So, yes, it can. And pretty easily I should say.

    • Pophils

      Not knowing how to use a tool does not make it a bash on the head. Microsoft can’t do everything for you dude.
      To use many model on the view, you can create and pass a wrapper class for all the models you need on it.
      NHibernate, Entitty framework, or even Linq-to-sql is a good tool for your mapping problem.
      For more solution to your problem, Stackoverflow ( A site based on Microsoft platform) is a good place you can go rather than making unfounded and derogative remarks about .NET MVC.

      I HATE IE, WEB FORMS, BUT MVC IS A GOOD TOOL…

  • Salvador

    True developers understand c,c++, c#, Java… The strongly typed languages… I have seen many PHP developers with weak OOP knowledge… I been working with both languages for years and PHP still lacks many things…

    • Lionheart

      You are right… PHP is good for small projects – but if you have a look on software design and performance, PHP is basically not good.

  • http://www.omniplexdesign.com Ionko

    I don’t think I’ve ever read such a well written article that contained so much bologna content.

    If only large companies bothered to look up what they can get for $10,000 on a php/linux based platform!

    It’s absolutely ridiculous to say that .NET can be cost efficient. I don’t care how small or large scale the business/project is 1 copy of windows is equal to infinite copies of Linux…

    The ONLY and i mean ONLY reason to use .NET is because large companies don’t know anything about the industry and are paying 4 times more for the development of a .NET website than they would other ways for the same thing in php/ruby.

    Great give me the extra money but don’t pretend that .NET is a good platform.

    • Hart

      Have you ever tried to find a company or an employee for technical support of Linux vs windows? When you do, you will understand how MS is cheap.

      For example, SQL server is expensive compared to the free version of MySQL. But get the enterprise MySQL, with the oracle support and you will cry tears of blood, for example. ;-)

  • Doug S.

    1. It’s not more expensive? It’s more expensive on a business level and a personal level. Why? Because if you have any OS PHP is not only free, it’s probably already there. Ruby as well. In fact, many of the bigger open-source languages are free. As for cost of apps, there are free beginner and advanced level apps for each that are comparable to what Microsoft sells you for .NET. So no, it’s not cheaper. On any level.

    2. It’s not closed? OK. Go copy the .NET source-code, fork it, make some changes and start distributing it as your own, new framework. See how Microsoft reacts. It’s not closed-source but it’s not open-source either, not in the same way GIT and Linux are. It’s an open-standard, like Flash. Which means one company is in control. So yeah, while I can look at the source code, which would be handy in some situations, and comment on what I think is wrong with it, but Microsoft is always 100% in control. Pretending otherwise is a daydream.

    3. It’s not Windows-only? Reeeeally? You’re going to go to a third-party on this one? The nice thing about Ruby, PHP, et al is that if you use them on OS X or Linux they’re supported. There are people who work on those projects and control them who will be there to answer your questions. More, they don’t care if you’re on WIndows, OS X or Linux. They’re just happy you’re using their language. Microsoft is OK with people using a third-party version on other systems because that’s more people using their language, but if they thought they could get away with it they’d push people onto Windows.

    And things you forgot to cover all-together:

    1. .NET was designed for desktop applications in Windows. If you make a hammer you can spend the next five years bending it, crushing it, folding it but no matter what you do it’s still going to make a pretty crappy saw. That’s .NET in a nutshell. It was built for a Windows desktop environment and the web-side was cobbled together.

    2. .NET isn’t Microsoft’s focus. The guys behind Ruby? That’s their thing. The guys behind PHP? That’s. Their. Thing. That’s the platform they care about, from top to bottom. Microsoft? Sure. NET is great. But what about Silverlight? What about their Xbox platform? Oh, don’t forget their apps. What about their hardware? The phone? The new tablet? Microsoft is a massive company that does loads of things. .NET isn’t their focus and there are a lot of people who want to use it for a lot of things within the company. That means it has to work for all of them instead of just being for the web or applications.

    So… Yeah. Nice try, well attempted, but no.

    • Jimmy C.

      That comment was just awful.

      The last part is the best. “That means it has to work for all of them instead of just being for the web or applications.” This is the exact OPPOSITE of what is considered to be good for a framework.

      You: I only trust frameworks that were built for the sole purpose of web development and being incapable of migrating to other environments.

      Professional software engineers: Do us a favor and work for Apple.

    • Shashi Shekhar

      Just to reply on your argument that .net isn’t their focus – you are wrong companies have different entities for different departments meaning that if hardware section is in loss then software section has nothing to do with it at all they will still make their own profit.
      So keep this in mind before posting without knowledge of anything

  • Makeyourdaddyproud

    Web development : Yawn, yawn and more yawn.

    The MS Web Dev toolchain is just a joke. ASP.Net by itself?? You got to be kidding, aren’t you supposed to know AJAX, MVC, Silverlight, XML, HTML, CSS, JavaScript, Json, ABC, DEF, GHJ etc etc. You cannot be proficient in all these ms technologies which may well be obsolete.

    Software engineering using just Obj-C and Cocoa, (Just 2 techs) now there’s a thought. Much more chance of being a competent programmer rather than a blag-happy MS web developer with declarative-only skills sucking balls in a boring corporate environment.

    I have worked alongside MS developers and you know what? They spend more time googling for solutions to their “cutting-edge” MS technologies than solving actual problems.

    Jimmy, go play with your dullard web apps that won’t stand the test of time…

    • Hart

      WTF?!!! Ajax, XML, ht,l, CSS, JavaScript and JSon are Microsoft technologies?

      And you are talking about objective-c (the biggest crap used today) and cocoa comparing it to making websites??

      Stackoverflow is a boring corporate environment?

      I don’t even know why I’m answering your stupid comment…

      • dtntcdr

        Perhaps you should read his comment again… because he is making a very good point and you are just making his case… :)

  • George MN

    ASP.NET MVC and Web Pages require only the following Skills=> C#, HTML/XML, CSS, JS Which is natural skills for all web developers. No silverlight is required in ASP.NET.

  • GreenL

    So at the end new programmer should learn Python, Ruby, or .net mvc for a money career?

  • Frasette Ginobili

    I think you misunderstand people’s feelings about Microsoft. We don’t hate them and love their competitors. We just hate them.
    They continue to make products for two decades that ignore common conventions that make programming across platforms easy ( ie. IE, stupid line breaks, backslashes in filenames ). Developers are a community and we don’t like when a large member refuses to ‘play nice’ on things that are trivial. There are not good reasons for these anti-social decisions by MS. They encroach on our ability to re-use the same code to reach all of our customers (forcing OTHER developers to put in extra work so that THEIR customers can have access to web sites, software, etc).
    Don’t waste time learning about and contributing to abusive software. Life is too short

    • Lionheart

      I believe that microsoft is no different than any other of its competitors. Apple doesn’t play the rules of developers’ community (e.g destroying Java as runtime environment in IOS). Google doesn’t play the rules of keeping the consumer’s privacy (this is the opposite of Microsoft’s notions).
      Every company has its own goals and targated audiences.

      • jbo5112

        Part of Apple’s reasoning for not allowing Java on iOS (besides the walled garden) is that Java is full of bugs and security holes. It would most certainly taint their image of simple, efficient perfection (not that they live up). I would not fault anyone from excluding Java on technical grounds.

        I would fault Apple for expecting everything in Objective-C.

    • mike

      if they are so trivial… why are you making such a big deal out of it?

      • jbo5112

        As far as implementing the proper features and making normal design choices, it’s trivial. Having to code around all the Microsoft specific conventions and shortcomings can double the workload of a software engineer. In fact, before IE9 and IE10, I was seeing a number of websites give up on supporting the continually-out-of-date Internet Explorer.

        Things got so bad around the turn of the century that Microsoft pretty much broke the Web. If you weren’t using Internet Explorer, with Microsoft’s proprietary web standards, many websites (maybe 50% or more) would just fail to load. It didn’t matter that I had a better web browser that was more standards compliant, I was nearly banned from the Web. I still see enough smaller shenanigans from Microsoft that they haven’t earned my trust back.

  • http://acneskincarestore.blogspot.com/ Great acne

    Hello there, I found your website by means of Google whilst searching for a related matter, your web site got here up, it appears great. I’ve added to favourites|added to bookmarks.

  • desmond22

    .net sucks.

    I would be very interested to know how many of you .net fans learnt .net (c#) as your first language ??

    yes, on the surface it seems like it does a ton of stuff that’s amazing (‘automagically’ with ‘syntatic sugar’) but it’s a pile of crap.

    I’m from an extensive c++/Java background working mainly on distributed systems in a corporate setting. Recently I’ve had to get my hands dirty with .net because I need to build front end apps for Windows.

    My experience of .Net is that the API’s don’t stand up – you can follow a tutorial but the abstractions (automagic/syntactic sugar) break down frequently which results in frantic googling for blogs to find out how the F you get the thing to do what it’s supposed to. The documentation seriously sucks, in no small part due to the version issues and backward compatibility. All to often hours are wasted before you realize that what should have been a simple task (in C++ or Java) can’t easily be achieved unless you spend the next few days learning a load of proprietry Microsoft crap because they’ve tried to be too clever in abstracting some API.

    A great example of an over-complex technology that basically doesn’t work is VSTO. I know this thread is mainly Web orientated but you gotta see the overall shit show that Microsoft technology is.

    In a nutshell: it doesn’t do what it says it does unless you commit to the Microsoft paradigms. The Microsoft paradigms are highly irritating and don’t work outside 1/2 a standard deviation of the average use case.

    It’s not so much the language as it is Microsoft/Windows, eg: C++ is highly expressive and fun to work with but writing windows applications in C++ is a complete pain in the ass.

    Stuff like linq / F# is cool but doesn’t make up for the rest of it – especially when you have Scala on the JVM which is basically a better functional language.

    • Hart

      Basically your problem is that YOU DON’T KNOW .NET!

      I end up having the same fellings about java… But at least I admit is my fault for not knowing java enough, and not learning his ways.

  • desmond22

    one really basic thing that I hate is .net properties….

    There is an argument about uniform access so you should access a value as if it was a value rather than accessing it as a method call…. personally I think that’s a load of sh!t: how does it really improve you code ? Just make the decision from the outset to access all state from method calls; public fields are not an option. If someone has a decent use case against this, I’m all ears…

    …although there is a lot of Java out there with redundant looking getters/setters eg:

    <pre name="code" class="java"?
    public setFoo(Foo f){
    myFoo = f;
    }

    this provides a level of indirection that can later be exploited if it becomes necessary. And guess what: I only have to maintain 1 variable

    In c# I have this mess:

    private Foo myFoo;
    public Foo MyFoo
    {
    get
    {
    return myFoo;
    }
    }

    where we distinguish between 2 variables that point to the same thing by some naming convention I have to remember. Yuk.

    • http://twitter.com/eloycm eloy cortinez m.

      what about public Foo MyFoo {get;set;}

  • desmond22

    It’s Made by Microsoft
    Don’t care

    Misconception: It’s Expensive
    Where I work the license for VS 2010 is $125 – Eclipse is free.

    Misconception: It’s Horrible for Small, Personal Websites
    Misconception: It’s Horrible for Large, Enterprise-class Websites
    Erm… web technology implicitly should be scalable, dividing by small/large is therefore redundant.

    It’s Statically Typed
    There’s a lot of data that shows dynamically typed languages spent too much time/code type checking the var you’re dealing with. You may as well have a statically typed language.

    It’s Compiled.
    Agree with the author; this is a retarded argument especially since .net can handle dynamic class loading.

    Misconception: It’s Closed
    Erm – check the license.

    It’s Windows Only
    Are you serious ? If you can work in an environment that isn’t windows why the F would you use .net ??

    It’s Not in Demand
    Truth is that Windows is used by most corporations – there is a huge market for developers who can build windows applications.

    Conclusion
    It’s disgusting but if you do this for living it’s worth knowing it.

  • http://www.andreyshipilov.com Andrey

    Usually many developers cannot be wrong. That’s why ASP is actually really should not be used. At all.

    • Lionheart

      PHP is an interpreted language – meaning of this one is that if you don’t know the specifics of the language and what it does ‘behind the scenes’, you end up with terrible performance issues.
      I am a c and c++ type of guy – therefore i understand where C# and Java are coming from. PHP is rather nuisance when it comes to developement. The only probl

  • Derrick

    I have used PHP for more than 5 years consistently and recently have been using ASP.net (with MVC Razor) at my new job for the past 7 months.

    I however have just learned to hate ASP more as I work with it as I feel more and more that it is very bulk for no reason at all.

    To do simple steps that are a breeze in PHP you are required to do a numerous amount of steps. To do something as simple as changing your sql connection you have to set up different connection strings in a web config that can crash during run time since there are multiple instances, and with its reliance on Microsoft products your programs always feel bulky and slow by the time you are done referencing all the needed files.

    And after using it with svn you will be begging to use another language after all the screw ups.

    Honestly there’s a reason PHP is more popular on the web with developers than ASP.net.

    I believe the reason its use is so high is because people are ‘forced’ to use it at work because way back when the company was started someone started off with ASP.

    Just think, companies like Facebook (whos majority code is compiled PHP code) or Google (who uses PHP and Ubuntu to build its sources) can’t be wrong for staying away from ASP.net

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

      I agree that ASP.NET requires extra code to do some simple tasks (that’s getting better, thankfully), but I disagree with the rest of your statements. You’re doing it wrong if your application crashes due to database connections. SVN is ancient technology that frankly shouldn’t be used anymore; .NET projects work very well with GIT and Mercurial.

      PHP is the most popular web technology because of its simplicity. Besides that and its cross-platform capabilities, there’s not a lot that it offers over other competing technologies.

  • http://www.worsoft.com Kunal Bhardwaj

    ASP.Net started its journey of the Web only as an easier way for the website visitors to interact with the websites. Gradually, it drifted more towards a language running Web Portals. Now, when we talk about high volume, we talk about enormous number of visitors and excessive HTTP requests from all over the world.

    PHP is still naive when it comes to enterprise projects not because it doesn’t have libraries or good built-in functions, but only because PHP still has no built-in mechanisms for developers to handle very enormous data (like 1 million entries a day) or handling cache for enormous web requests (say 1 million visitors a day). Though, it can be accomplished in PHP but not in any direct way. To do it, you need to custom tailor many of its libraries in C++ like Facebook has done.

    The fruits of Open Source is its agility to move forward with next big revolution but without anybody taking responsibility for it which unlike ASP.Net, is been taken care by Microsoft.

    If you are a Web Developer who is seeking large volume of data from visitors and wants easily tested platform solutions to achieve that, ASP.Net is the technology for you.

    And if you are a developer who wants complete control of each and every component of your website, catch up an open-source solution like PHP or Python (latter, the better) and customize your own set of functions by developing your own supported libraries in C++ (ush!, lots of work) and achieve almost anything you desire without any limitations. (this is what Apple and Google does).

    Whatever you opt for should be decided acc. to the expertise you have in working with your choice of technology.

  • http://www.dawlish.com Paul

    ASP.NET MVC is excellent!

  • vlad

    php, python, node/js feel more flexible, less limitations about os, db, less footprint. I don’t see reason to switch back to .Net.

  • Zoro

    ASP can work on Linux and Mac platforms via Mono… C# is my favorite language but I would never use ASP . NET again. It’s damn slow and resource expensive,.. PHP is and will be Web #1 :)

    btw some of your examples are not accurate…

  • Dev10Years

    ASP.Net is enterprise-capable, robust, dependable, etc…Yes it’s true! But the thing is..why complicate things??? Its seems that Microsoft is so obsessed in conquering even the tiniest aspect of software development that they have pushed their enterprise development standards into a crappy spaghetti state..In reality clients are bound to look into development Outputs/Turnovers, this means speed and dependability in terms of development output..ASP.Net will never accomplish this…And the production cost that you have to push through…tsk tsk..DAMN!

    I started using classic ASP way back 8 years ago, had tons of fun, huge amount of happy experience, easy to deploy/fix/adjust and straight to the point. then came the .Net family . I tried it and even deployed several applications with it in our company. Then PHP entered into my life and it changed my perspective in Web Development ever since..PHP is way straight-forward, no complications, cost efficient, fast-phased development…Now these are the things that matters to clients.

    I respect the owner of this post because it is his personal opinion. But next time to post an expression rather than an argument. You only have your own point of view to hold on to. May be it’s time for you to be the one to experience what we are experiencing. =)

    • BigInziNerd

      Were would you suggest a old classic ASP dev go for some PHP priming? I fell almost exactly like you and have the same experience – except I moved into IT management and got out of hands on coding. About a year ago I started doing mobile development and now want to create web services for apps – so here I am again.

  • Nyyyyya

    irony…. tutsplus is using wordpress which PHP/mysql driven.

  • Aftab

    I really liked your article and agree with you on all points. I am a big fan of Microsoft and its technologies.

    I am a desktop application developer. I switched from vb6 to .net 3 years ago. Now a days I am working on RIA application using Visual WebGUI. Any one of you having experience with Visual WebGUI already knows what an excellent technology it is. I think development of such a technology wouldn’t be possible without the power of .net and its related technologies.

  • Maloric

    Nice article, well written, objective and relevant. Reading the comments, I can’t believe how many one sided comments I see. I use both Asp.Net and PHP in my job, and while I personally prefer .Net, I recognise the relevance of PHP. The truth is, there are few things you can build in one language that you can’t build in the other. What often makes the bigger difference is the skill of the developer using it. I myself am an advanced developer with .Net, but more of a novice with PHP. This means my experience in PHP is frustrating and before long I’m pining for .Net. Some of my colleagues feel the same way when working in .Net, but again, this is because they are out of their comfort zone.

    One of the most common complaints I hear about .Net is that it takes longer to do just build a simple website. I’m not sure how relevant this argument is since the website is build with HTML – don’t use asp: tags if you don’t need to. If it’s static content then you don’t need either PHP or .Net. If you are just wanting to display data, you have the choice of using asp controls like the GridView, which can even automatically generate the columns you want to display (much faster than building the same in PHP) but you sacrifice control over the markup. If you want more control over the markup, use a Repeater, which only uses the markup you give it. Or even use code blocks to mix your logic and markup together, and use Asp.Net exactly the way you’d use PHP.

    Want to create a contact form quickly? The code for handling the postback is neatly seperated from your markup while still being semantically attached and wrapped in an event handler that makes it very easy to see what triggers this code execution.

    What about validation? Assuming you’re not using a third party library, In PHP you have to check the values on postback and then validate them. Your validation logic ends up intertwined with your markup. In Asp.Net, you can simply add a “RequiredFieldValidator” and tell it which control to validate, and you automatically have both client side and server side validation. Your markup becomes easier to read and your user doesn’t have to wait for the page to reload to see that the form failed validation. And because of the viewstate (I know, a lot of people hate it), when you post back, your fields are automatically populated with the values they had a moment ago. Correct me if I’m wrong, but doing so in PHP requires explicitly setting the value of each field to the value that was posted back, or a default value if applicable.

    And I completely agree regarding cost. From a personal standpoint PHP makes absolute sense. It is cheaper to host and you are getting the full version of the product for free. With Microsoft, if you wantthe fully featured versions of Visual Studio or SQL Server you have to pay, not to mention the Windows license. In business however, the cost saving isn’t in how much you spend on the tech, it’s in how much you save during development. Having potential errors and warnings given to you at compile time can save you many hours of debugging to find the cause of a problem that dynamic languages might have let slip through the net. The savings far outweigh the cost of a Windows license, but you don’t really know about it because the problem never occurs. I have seen cases where an incorrect assignment in PHP went undetected for weeks and rendered a great deal of data invalid – this would never have gotten past the compile stage in .Net.

    Don’t get me wrong, I’m not bashing PHP, as we have built some pretty amazing high performance websites in PHP. But each language has its strengths and weaknesses, and ultimately its the community that decides how relevant each one is. If .Net was so poor, nobody would be using it. Check out a few job listings and you will see that .Net developers are in high demand.