Monday, June 04, 2007

Microsoft and Web Development: In Decline and Staying that Way

I got to thinking about the nature of the web this weekend as I built yet another web site in classic ASP. I started in the Internet industry in 2000 as a "web site coordinator" for an ecommerce web site. I was eager to learn dynamic programming, but wasn't getting the opportunity on the job, so I bought a book and taught myself. The first site I ever built (SFReader) is up and going strong.

As I became more adept at ASP, I began asking for opportunities to contribute on the programming side of the house at my job. Despite my developing skills and eagerness to learn more, my requests to contribute above and beyond my "web site coordinator" role went unheeded. Finally tiring of my initiative and motivation, my manager took me aside one day and said, "Dave, we hired you to be a web site coordinator, not a developer. You need to keep your focus on your main job responsibilities."

It took me three weeks to find another job. My manager seemed surprised when I turned in my resignation. Go figure....

Now, 6 years and 3 companies later, my official job title is 'Software Engineering Manager'. So in that time, I went from a hobbyist web developer to manager level. I supervise a team of 9 software engineers who develop web and database applications for a company Intranet. When I came on board in 2005, they were developing in .Net 1.1. We've since to the 2.0 framework.

Now here's the kicker: I don't know .Net.

Oh, I've got the books and know the best sites with tutorials and all that, but I've never typed a lick of .Net code. Occasionally, the realization that I need to learn .Net surfaces, not because I need it for my current job (I don't, I'm a pointy haired manager now), but because if I ever lose this sweet gig, I'll probably have to go back to programming and jobs for ASP coders are few and far between these days.

I still do web development on the side, and I still build everything I do in ASP. As far as .Net versus ASP for web development, Microsoft, IMO, went in the wrong direction. Sure, you can 'rapidly build and deploy dynamic web application', but put a .Net site out there and see how well it get crawled by the search engines with all that post back and web form and page state crap it uses.

Classic ASP was powerful and easy to learn. .NET is powerful, but certainly not easy to learn, even for experienced ASP developers. Look around the web and you'll see many of the biggest sites out there still use ASP (or PHP) and their stuff runs very well. .Net is an environment best suited for developers building object oriented web and database applications, not weekend code warriors, and it's the weekend code warriors and freelancers out there who built and are still building most of the web.

The penetration of .Net into this demographic ended up being much lower than Microsoft ever expected. A year ago, Microsoft put out Visual Web Developer, which is a free, light-weight version of Visual Studio 2005. Change the name and give it away - a cunning recruitment strategy to get people using .Net? Or a company desperate to bring hobbyist developers back into the fold?

Consider:
1. Thousands of web developers have been using classic ASP for years. There's a ton of stuff developed in it and ton of resources on how to develop stuff in it. A lot of it is free. Just go to Aspin.com or HotScripts.com to see all that's available.

2. All you need to start developing in ASP is a text editor. Microsoft web servers already have ASP installed, you can have an ASP page up and running in an instant, and there are no extra configuration settings or developing environment to mess with.

3. Doing a quick fix on an ASP web site is incredibly easy. If you've the cajones, you can even edit the page right on the the web server and view your results instantly. Try that on a compiled .NET web site. No fun, my programming friend. Fire up your development environment, start Visual Studio, load the project, make your edits, recompile, test. Did it work? Then redeploy the full application to the web site, restart IIS, and check the site. Did it work? Meanwhile, the ASP guy is talking to the new cute graphic artist over by the water cooler.

So by going to .Net, what Microsoft did was abandon an easily learned and implemented web development language that needed no special development environment to a much more complex, object oriented methodology that requires special tools. By doing so, they have pretty much cut out the hobby coder from the equation. The traditional webmaster now has to be a full blooded programmer just to be able to open up a user control's code-behind file to add another item to a DropDownList.

Most 'organic' developers (people who taught themselves) tend to be younger and just out of school. They have a ton of time, but not much money. They get interested in the web, what do they do? Buy Visual Studio and a computer with Windows XP for a couple of grand, or get an empty box for a few hundred dollars, load it with Linux and MySQL, and start typing PHP?

There are two types of programmers who work for me: ones like myself who, some years ago (usually 5 or more) taught themselves to program in ASP (or PHP). The demands of employment eventually forced them to .Net. The other type tends to be younger, maybe a few years out of college, but the difference is that they actually STUDIED programming, and specifically studied .Net. What I don't run into very much any more are job candidates who came up into .Net on their own.

When a neighbor or friend tells me they (or their kid, or their neighbor, or whomever) is interested in getting into web development and how should they get started, I ask what kind of web programming they envision themselves doing. If they reply, "I'd like to do stovepiped, enterprise class, scalable, Intranet applications designed to Service Oriented Architecture standards for a company Intranet" I tell them to start classes in .Net. If they say "web sites and stuff" I tell them to go buy a book on PHP and a book on MySQL.

So what's my point? Ever since Microsoft moved away from ASP to the .Net offering, there has been a continuing downward trend in programmers working in the Microsoft development environment. Newbies find .Net too hard to learn and too expensive to get started with, so they aren't picking it. ASP developers are declining as well, since the perception is that sooner or later Microsoft will stop supporting it. That leaves PHP, which continues to grow as a web development language and gain more and more programmers.

Microsoft screwed the pooch in a big way when they moved away from an easy to understand, inline coding language. The very essence that started the dynamic web is missing in .NET because it is too difficult. The hobby web developers and the newcomers face a much steeper learning curve and a more expensive startup, which usually leads them to choose another platform.

Microsoft's weak attempt to ignite .Net interest in weekend coders with their free offering of Visual Web Developer is too little and too late. As time passes, Microsoft and .Net will become less and less of a player in the open Internet community, relegated instead to the moribund development shops of major corporations, where mostly middle-aged men (who reminisce fondly about the good old days of ASP) and a few recent grads (mislead by their guidance counselors to study .Net) will grind out stovepiped OOP applications for an Intranet.

3 comments:

needs more sleep said...

You raise some valid points!
On the whole though, I disagree.

The reason that ASP.Net has is less popular is because the market place is much more competitive. To create a website these days, you only need to setup wordpress or Drupal or something similar.

Ruby on Rails is th next step up, lego programming effectively! Get the blocks out of their box, figure out how t put them together and then off you go - I;m not bellitling it, look at what you can do with Lego Technic ;O)

In essence Microsoft built the .Net framework for the Windows platform and have developed it through to the third ittiration and incorporated things like AJAX - so that developers don't have to understand everything under the hood, but can still keep up with this fast moving industry!

Th future of development lies with the developers themselves and how they drive companies to evolve their software / frameworks. Not the other way around.

To this end, if Microsoft were interested in developing small frameworks for sites that only cater for sub 1000 users they would have cleaned up years ago!

If you look at NHibernate or Subsonic or dotNetNuke or anything similar, it's the developers of these frameworks and tools (who use .Net), who are building technology for the weekend hobbyist.

Remember, you don't have to own Visual studio to build ASP.Net websites.
You don't have to understand OOP either.
But if you want to do it as a career and you have chosen .Net - its helps!

RetroWebDev said...

Thanks for the comment.

I should have been more clear that I was talking about self-taught coders who went on to a career in web site development.

I agree that there are plenty of tools out there for someone who want's a build a web site but doesn't know squat about coding.

But it used to be that you could teach yourself a coding language and get a job. I just don't see too many self-taught .Net coders who turned their hobby into a career, like I used to see with ASP and liek I still see with PHP.

That points to two factors:
1. There just aren't that many self-taught .Net coders

2. There are just as many self-taught .Net coders as there are in other languages, but for some reason they aren't trying to get development jobs

I think the answer is door #1....

Anonymous said...

I can tell you for a fact that MS is putting a lot of effort in making .NET available to many of the top languages as possible. Also, the comment about hobby coders becoming paid developers is non-sense to me. The reason you don't find many hobby coders moving into .net jobs is because those hobby coders were coding in VB6 and moved to VB.NET or C#. They never were hobby coders to begin with. And as far as I'm concerned I have seen "hobby coder" code and It sucks 98% of the time. At least .NET forces you to have some kind of structure unlike all the PHP/MySQL crap i have seen out there.