top | item 1719277

Leaving .net

355 points| chrislloyd | 15 years ago |whatupdave.tumblr.com | reply

213 comments

order
[+] mahmud|15 years ago|reply
There were already open source MVC web frameworks and an army of .net developers who could have collaborated to make them great but nothing much happened.

He is lamenting that the .NET community didn't embrace the pioneering MVC frameworks from the OS community, but waited for Microsoft to deliver its own "blessed" framework.

Here is what he is forgetting: Economics. A good chunk of .NET developers are not using the system for the love of hacking. No. These people want to learn marketable skills and get/keep jobs. Whatever MS pushes out is what the market will buy, and hire for. What do you think killed Borland? Certainly not the lack of excellent quality products. Rather, their incompatibility with Microsoft. Even if your engineering is superior to Microsoft's, you can't afford to break rank, since the market will not follow your lead.

I went to a D.C. area meeting of early .NET adopters, a group of hardcore MS-specialists working for gur'ment. One of the organizers had a fat .NET book on the table, which he slapped with his palm three times and said: "Gentlemen, this is where the money is at". You could have taken me to a brothel afterwards and wouldn't have felt dirtier.

.NET is nice and you can do pretty things with it, but corporate platforms are first and foremost careers and cash-cows for people. The broke mofos are out there hacking on GHC and SBCL.

[+] d4nt|15 years ago|reply
I agree, but would add this.

Microsoft's (development) tools have never had any underlying principles other than: enabling people with minimal knowledge to get stuff done.

Thinking back through MFC, COM, VB v1-6, Access, SharePoint, WebForms and ADO.NET, none of them were characterised by any particular architectural purity or design aesthetic. But they enabled a generation of corporate developers to hack stuff together quickly (I know MFC and COM aren't all that easy but they were easier than just using the WinAPI). Which is why businesses liked the Microsoft stack and hence 9-5 developers flock to them.

What's interesting is that in recent years Microsoft has been infiltrated by other schools of thought. It's like there's a three way war going on. On the one hand there are VB.NET people using WebForms, EntityFramework, VSS and SharePoint to hack together stuff that will be thrown away in 2 years. The TFS, SQL Server, BizTalk and Dynamics people want to bring in some enterprise style rigour to the whole thing. While the C#, Linq, MVC crowd are trying to keep everything loose and open.

I doubt this is any kind of conspiracy to retain mindshare. It's just that Microsoft got big and Bill Gates started stepping back, so it lost much of it's direction.

I sense a real but rarely articulated confusion among the 9-5 developers about all this new stuff. There are 3x the number of frameworks and tools coming out of Microsoft these days, which ones will all the enterprise recruiters be looking for in 2 years? Nobody knows.

[+] jacquesm|15 years ago|reply
Not only that, if you are a startup that wants to do b2b and you want to sell a product in to that market that will have a tight connection to stuff your clients already run you will be required to use .NET by your customers. Unless you like uphill battles that's the way you'll go eventually.

It sucks, but it is the reality of the business environment, web side stuff that is abstracted through some HTTP interface you can build in whatever you please but good luck trying to sneak your locally hosted rails app past the Microsoft only mentality prevalent in plenty of businesses.

[+] jrockway|15 years ago|reply
Actually, quite a few Haskell folks work for Microsoft Research. So it's more like the well-paid Microsoft employees are out there hacking on GHC.

The broke mofos are the ones that are working on all that .NET stuff. Working for the government as a low-level programmer is not where the money is at.

[+] blub|15 years ago|reply
Borland was (almost) killed by its own stupidity. Their RAD tools were miles ahead of anything that MS had, but they got buggier and buggier with each version and their C++ compiler had and still has poor standards compliance.

I felt like I had taken a step back productivity-wise with VC++6, but it was solid compared to BCB.

[+] shin_lao|15 years ago|reply
Why making money with programming makes you feel dirty?
[+] bbsabelli|15 years ago|reply
It sounds like he is annoyed at the community that surrounds asp.net MVC development.

There was no mention of money, but not all broke mofos chose to not use asp.net for their web app.

I also believe that asp.net would be completely dead for web development without stackoverflow.com. A shame, because C# with Visual Studio is a very nice environment. Lonely (i.e. no community), but nice.

[+] arethuza|15 years ago|reply
I presume GHC is the Glasgow Haskell Compiler and not Guarded Horn Clauses?
[+] palish|15 years ago|reply
Speaking of SBCL, I really wish someone would make SBCL stable on Windows. Please. (Windows XP, Vista, and 7. Don't even worry about 64-bit right now, just get 32-bit fully functional and stable.)
[+] gbowyer|15 years ago|reply
"You could have taken me to a brothel afterwards and wouldn't have felt dirtier."

Thats the quote of the day !

[+] ihumanable|15 years ago|reply
I can't agree more with the observations on MVC. It's really a symptom of .Net and Microsoft locking in the vast majority of inexperienced users with overly abstract components.

Developers fresh out of college who were taught .Net in school and get a job in it become experts at Partial PostBacks and Code Behinds and binding data to the latest whiz-bang GridDataAwesomeControlForTheWin.

The problem I've seen time and again is that they have no idea how this is implemented. Ask a green .Net developer about the ViewState lifecycle and see if they know how that really works.

I don't mean to disparage all .Net developers or to try and say that being a .Net developer precludes you from ever understanding how these things work. I am trying to say that for a lot of people for whom coding is their 9-5 way to make money, they will never look behind that curtain to better understand their craft. They will believe that Microsoft invented Model View Controller, they will only get exposed to technology at the pace Microsoft cares to expose them to it, and that's a shame.

There are probably a lot of 9-5ers who could have that switch flipped and go from code monkey to craftsmen, but they are stuck doing WebForms and have never really got bitten by the curiosity bug in the face of the stale joyless Microsoft platform.

Other platforms can be just as dangerous, even RoR has a preponderance of gems that solve common problems in web development that there are probably RoR web devs that have never thought about have you would implement authentication on the web, just slap :acts_as_authenticator_unicorns_rule on the model. It just seems to be a much more pernicious problem in the .Net community and one that grew up out of trying to hide Web Programming and make it Windows Programming rendered in HTML.

[+] sofuture|15 years ago|reply
"There are probably a lot of 9-5ers who could have that switch flipped and go from code monkey to craftsmen, but they are stuck doing WebForms and have never really got bitten by the curiosity bug"

That's disingenuous bullshit. Hackers start a lot earlier than "fresh out of college". Disinterested coders aren't lost souls led astray by the ways of .Net, they're disinterested coders; they'd write Ruby with just as little interest.

"in the face of the stale joyless Microsoft platform."

Thanks for making it worse. The .Net community does labor under the illness/weight of the 9-5 couldn't-care-less crowd, but to turn a community problem into a gross stereotype of the framework only serves to demonstrate your unfamiliarity with .Net. .Net is a rock solid, cool as hell and dynamic/evolving platform.

.Net is steered with a much heavier hand than most frameworks, but it makes huge, deliberate moves of evolution (Linq, var/dynamic, PLinq, IronPython/IronRuby/F#, constantly-evolving-C#-syntax).

[+] kenjackson|15 years ago|reply
I find it absurd that people comment about the "problem of abstractions" is a developer at all. And to even bring up this "problem" in the context of web programming is laughable. The whole web is a pretty huge abstraction, and languages like Ruby and Javascript are way more abstract than something like COM (which is really all about object layout).

Lets get this straight. The key is not to have no abstractions. That's just stupid. It's to pick the right abstraction to build on.

"The problem I've seen time and again is that they have no idea how this is implemented. Ask a green .Net developer about the ViewState lifecycle and see if they know how that really works."

There are lots of stuff I use that I have no idea how it works. And in fact, that's the way it should be. If I'm only using things that I fully understand, I'm probably not moving fast enough.

Ask your RoR dev who is using an OS relational store how queries are processed. Nine times out of ten they won't know, despite the fact that they could have looked at the code anytime in the past decade. Actually even give them an hour to go look it up, and you'll still probably get a wrong answer. But you know what, who cares?

[+] DennisP|15 years ago|reply
> Partial PostBacks and Code Behinds and binding data to the latest whiz-bang GridDataAwesomeControlForTheWin

That's WebForms. I hate it too. MVC makes it all go away.

[+] dangrossman|15 years ago|reply
There are colleges teaching .NET? I'd never heard of that.
[+] acabal|15 years ago|reply
A sizeable chunk of .NET development happens in the corporate/enterprise world. That sort of environment isn't interested in collaboration, open source, etc.--they're interested in the guaranteed support the MS stack provides, and the idiot-proof web basics provided by ASP/webforms/MVC.

If shit hits the fan in the .NET stack for a big enough corporate project, someone in the office can phone/email MS and get support for their problem. If a bug is found in the stack itself, it won't languish unsolved in bug trackers for years, like many OSS bugs do. MS will probably fix it in their next cycle, and the corporate devs won't have to waste their time figuring out the nuts and bolts of the stack to fix the bugs themselves, like in OSS.

So I think it's this requirement for enterprise support that keeps MS from accepting OSS patches and locking everyone in--it would be too much work to track, validate, and test 3rd party patches when they can just fix it themselves with their own devs and keep going to sleep on their piles of money surrounded by many beautiful women.

Unfortunately this sort of view isn't very compatible with the indie developer ideal, or the ideals the author holds--which might one of the many reasons why you see so much Rails/PHP development in the non-enterprise space.

[+] herewego|15 years ago|reply
I work for a mid-size (read: 100+ employee) IT recruiting company and I have to tell you that this boils down to one thing and one thing only for most people that have chosen .NET: economics.

If you want to be a developer and you're goal is to give your three kids a good life, drive that BMW 5 series, and own a $500k house, then you should be a .NET developer. The math is simple and I have a mountain of data that supports the reality that .NET developers get paid significantly more (20-30%) on average than any of the hot whiz-bang alternatives (Ruby, PHP, Java, etc). The average mid-level .NET developer in a dev-friendly town (san fran, boston, new york, etc) is making $80-90k, Senior $90-110k, Architects $110-130k, Director/Managers $130-160k. Those are averages that don't include bonuses. There are of course exceptions (finance industry add 20% to the above figures, start-ups subtract 10%, etc).

Never underestimate the position that money holds in ones relationship with their chosen path in life.

I think the authors argument is valid and is the reason why most of the developers that leave the .NET world do, but my observations indicate that most .NET/MS developers are lifers.

On a side note, I actively practice development in.NET, PHP, Java, and a few other languages at my 9 to 5. I like to think that I'm fairly unbiased.

[+] jeremymcanally|15 years ago|reply
Your numbers must be pretty outdated for Rails people (or maybe you don't recruit into well-paying gigs) if you think those figures are well above what we're making. I'd say most salaries are comparable to that.

And I think you're probably right for PHP and Java. The talent pool is saturated, so there's little "demand" for that sort of employee. "Oh you want $70k? Sorry, we've got 10 candidates who will take $40k. Bye!"

But outside of the markets you specify, I think the same situation exists for .NET developers. I know a good number of .NET devs who work in government contracting work and make about half what you say they should make. I know a few who work for product companies in towns other than the ones you mentioned that make about half also.

It's probably different markets, business models, but let's not act like .NET is some magical cornucopia of money that will shower you with many monetary blessings if you just sell out to it (this coming from someone who worked in .NET from its beta until right after 2.x came out).

[+] bnoordhuis|15 years ago|reply
As a counterpoint to your figures: this side of the ocean, senior Java contractors make EUR 90-100 while most .NET jobs hover around EUR 65-80.

As to why this is, I can only guess. It appears the pool of .NET developers is larger, keeping the prices down, and most jobs are at a medior level, not senior.

[+] rizal|15 years ago|reply
In Malaysia, life is currently very good for .NET (and specifically C#) developers. If you have more than 3 years experience, headhunters will call/email you almost every day and try to poach you from your current company. The talent pool is not that big but demand for .NET developers is steadily increasing; and so is their median pay. It's definitely enough to be quite comfortable. As an indication, the salary of .NET developers with 5 years experience is on par with that of managers.

In general, "offshore" software companies (e.g. Monster has a dev center here) use .NET and can afford to pay well. For them it's a simple matter of currency arbitrage. Local startups, on the other hand, tend to choose PHP because PHP programmers are plentiful and inexpensive.

[+] MikeMacMan|15 years ago|reply
My buddy and I are starting a web project (a Q&A site for translations) and have chosen ASP.NET MVC. It doesn't abstract away the innards of the web like WebForms did. It has no more magic than RoR.

Why are we using .NET instead of something like RoR or (my framework of choice) Grails? Because my buddy knows it inside and out, the tools are great, and we'd like to minimize the number of unknowns in our project. We're pragmatic.

There's plenty of .NET open-source projects out there for things like dependency injection and ORM.

[+] mgkimsal|15 years ago|reply
Sorry to hear you didn't go with Grails (my framework of choice too). Sounds like the .Net choice was based on his skills, and not yours. The domain-first approach of Grails, especially with greenfield projects, is so tempting that it'd be really hard for me not to choose it for something these days. I have chosen non-Grails tech in the last year, but it's been a tough choice in those cases. :)

How's the project site coming along?

[+] nopal|15 years ago|reply
Are you participating in BizSpark to get the tools?
[+] jasonkester|15 years ago|reply
This guy lives in a different world from me. In my world, .NET is just a really good set of class libraries and a well thought out templating system that you can use to present HTML.

I realize that it advertises itself as a lot more than that, and that there are thousands of terrible ASP:whatever controls and the ability to drag and drop them in a visual designer, and a nightmare of ViewState and EverythingIsAPostBack and all that other stuff that people complain about.

But I've never met anybody that uses any of it.

ASP.NET MVC came out, and it didn't change the way I build my stuff in any fundamental way, because the way it expects you to work is the way that anybody who knew their stuff was working already. In the middle of ASP.NET lives a little core of "good". Find it, use it, and you'll be happy.

[+] dingle_thunk|15 years ago|reply
People tend to think of Microsoft as much more backward than they actually are. Yes, Microsoft isn't the brighest when it comes to open-source, but they do at least try. And yes, if you're going to live in the Enterprise world, things are a little old fashioned, but that's a reflection of the market, not the vendor. Microsoft makes tonnes of neat stuff that never gains traction because people seem to have convinced themselves that MS is an enterprise-only shop...

Some examples:

http://blogs.msdn.com/b/efdesign/archive/2010/06/01/conventi...

http://microsoft.com/web/webmatrix

http://ironruby.codeplex.com/ | http://ironpython.codeplex.com/

http://visitmix.com/ | http://edge.technet.com

http://officelabs.com | http://www.microsoft.com/visualstudio/en-us/lightswitch

http://microsoft.com/express | http://microsoft.com/dreamspark | http://technet.microsoft.com/en-us/subscriptions/default.asp...

[+] braddunbar|15 years ago|reply
I can't up-vote this enough. I started out as a .net developer. I didn't know anything else so I thought that's all there was.

I was very wrong.

I'm trying to get out as fast as possible, but applying for a job as a python developer with 4 years of asp.net experience isn't easy.

[+] megamark16|15 years ago|reply
I was in the same boat as you a few years ago. I had worked on .NET for a few years, mostly webforms, because that's just what was available when I got started. I started tinkering around with Python because I needed a load testing tool and found an open source one written in python but it needed some tweaking to work with the viewstate. Anyway, I started learning Python and Django, built a few little sites and webapps just to try it out (ok, I was hoping one of them might take off...they didn't) and eventually a Python dev shop here in town found me on DjangoPeople.net, looked at some of my Django work, and asked me to come in for an interview. Now I'm hacking Python (almost) full time, plus side gigs and personal projects, and I couldn't be happier to only have to look at .NET once in a while.
[+] PandaWood|15 years ago|reply
Maybe there's something to be said for those too lazy to get involved or to try and make a difference. Dave suggested he did get involved, he turned up to usergroups, created new GitHub projects in C#, what did you do?

I'm hanging around because while I don't seem to need the extreme, passionate, awesome, 5-million committer projects to keep me happy, I still contribute something.

http://forgivingworm.wordpress.com/2010/09/24/dotnet-zombies...

[+] redstripe|15 years ago|reply
I would be worried about the lack of community integration in the asp.net platform if it was stagnant - but it's not. It's moving forward very rapidly. I guess he's unhappy that he can't contribute to that progress. I agree, it would be nice if MS at least reviewed contributions from the community but I imagine that is something decided by lawyers and not programmers in a company that size.

Personally I prefer stability in a platform over the exciting ups and downs of open source projects. I just want to get stuff done. I want my challenges to be in the code I write and not in maintaining a patchwork machine.

Finally, as a support base I find the .net community to be very good. Just look at how large and helpful the community on stackoverflow is. Communication from MS is also pretty good. You would certainly never see Scott Gu pull one of these: http://blog.wekeroad.com/wp-content/uploads/2007/10/dhh-fu.j...

[+] jswinghammer|15 years ago|reply
I have noticed the lack of community as well but I suppose the choice of using .Net has more to do with your goals. My company's product uses .Net and I chose that because I know it best. I didn't really have time to learn something new when I was trying to get a product to market.

It's a very marketable skill I suppose in certain companies but I've noticed that few companies I see talked about around here use it much. I mostly see interest in Ruby, PHP, and Python skills. If you want to start an open source project then .Net probably isn't your best choice. I haven't met any .Net developers who work on open source .Net projects. They work on projects in C or Python on their own but almost never C#. The C# open source projects that I've used in the past like Lucene .Net are just straight ports from Java. Lucene is a little frustrating because it doesn't take advantage of many C# features so it feels like programming Java when you're interacting with it.

[+] chrisbaglieri|15 years ago|reply
Personally, it's less the lack of community and more the lack of OSS adoption as a result of the lack of community that's a hindrance. .NET developers need to stop drinking Microsoft's Kool-Aid and explore what's out there. If nothing else, they ought to explore the major ports from the Java world (e.g. NHibernate, Spring.NET, etc.). .NET developers are effectively slaves to their tools; don't get me wrong, Visual Studio is an impressive IDE and development environment but it over-shields. It's shocking how out of their comfort zone most are with anything that does not start with the letter 'n' or end with the word 'dotnet'.

I agree with the points made about economics and marketability, but, at least for me, if you want to stand out from the .NET crowd (in turn making yourself more marketable), learn something, anything, as long as it's not a first class citizen on Microsoft's stack. Become familiar with a language other than C# or (gasp!) VB.NET. Try IronPython or F#; you're still on the CLR! Learn to appreciate and leverage patterns. The Java community embraces open source, and as a result, patterns become an integral part of their vocabulary. .NET developers need to become more proficient in this realm.

[+] huherto|15 years ago|reply
"The Java community embraces open source, and as a result, patterns become an integral part of their vocabulary." Generally good advice; but apply good judgment on using patterns. Learn when to use them and don't go overboard. We (the java community) are getting bad reputation for overusing patterns.
[+] nopal|15 years ago|reply
"Third party vendor support forums are swamped with questions like 'I put a GridView onto my CallBack control and now I get a ViewState is corrupt error'. The real answer to this question is not the one supplied: 'this is fixed in the next version'. The real answer is of course 'STOP USING SO MANY ILL-CONCEIVED ABSTRACTIONS AND LEARN FROM YOUR PEERS HOW THE #@$#@% WEB WORKS!'."

I've found this to be the case, too, to a surprising degree. I wrote a little about it here: http://news.ycombinator.com/item?id=1120777

[+] Rickasaurus|15 years ago|reply
"Real open source isn’t submitting a patch and waiting/hoping that one day it might be accepted and merged into the main line."

So the Linux kernel isn't REAL open source then?

[+] liamk|15 years ago|reply
Out of curiosity, are people building their own for-fun-projects using .net or even Java? All I seem to hear are people using Python, Ruby and Javascript.
[+] DrJokepu|15 years ago|reply
Yes, .Net is actually a nice environment for hacking. C# is a very good programming language, the standard library is very well designed, it's fast, but the what I really like about .Net is how seamless it is to work with multiple languages at the same time. It's ridiculously easy to write some parts of the code in F#, others in C# and some others in Python. This way, I can always chose the best language for each problem without having to use the same language throughout the whole project.

(I also do a lot of Common Lisp fun coding as well so I'm not exactly a Microsoft fanboy, just to provide some context).

[+] city41|15 years ago|reply
This weekend I shall be putting the finishing touches on my iPad game, written in C#. If I had written it in C, C++ or ObjC I don't think I'd be anywhere near done with it. For sure, .NET is very "enterprisey" and has all the caveats that come with that. But .NET has grown into an interesting beast in other unexpected ways too.
[+] josephcooney|15 years ago|reply
I have a 'fun' side-project written in C# that I'd eventually like to commercialize...it's not a web app though. http://lognv.com
[+] MartinCron|15 years ago|reply
I do both for fun and for profit stuff in .net. I recently put together my first Silverlight app and I found the platform to be wholly underrated.
[+] heretoo|15 years ago|reply
<hand-waving> My impression is that .NET just isn't that much for-fun, mainly because the community isn't based in the hobby arena. A decent package repository might help this (I guess there is one, but I don't know it) -- something like PyPi for python, rubygems for ruby (is this correct? [not a ruby programmer - yet!]), cliki for common lisp (okay, asdf isn't so nice), etc.

My impression is that .NET development, at least in the web arena, is quite backwards. Another observation to add to my first, is that .NET developers (at least where I work), aren't working on their own projects in anything else, so aren't benefiting from the way of working that RoR (CRUD, HTML templates, gems, etc) seems to have. </hand-waving>

[+] samstokes|15 years ago|reply
Great paragraph at the end of the article: (emphasis mine)

    To those who want to be part of a vibrant community of passionate developers
    crafting new and innovative solutions, start hanging out with people who
    *aren’t tied to a particular language or framework*. Get to your local user
    groups. All of them. Get a github account and start forking the hell out of
    everything!
[+] pilif|15 years ago|reply
in the very early PHP3 days (around 1998), on the official german PHP mailing list, somebody once was comparing the ASP (no .NET back then) and PHP communities.

He said that if he needs help in PHP, somebody will explain the issue and solve it with them. If he needs help in ASP, he'll get back a price list.

It feels like this hasn't changed over the years.

While I agree that it's nice (and necessary) to be paid for your work, if the prevalent attitude is to not help unless in the form of paid consulting or a closed-source software component, a community can't grow because at that point it gets more advantageous to not share information, but sell it (and forbid the recipient from sharing it).

That's one of the big points the OP was lamenting and I agree.

[+] djhworld|15 years ago|reply
A lot of enterprise software development suffers from the implementation of boilerplate code and custom in-house frameworks, I think a lot of businesses enjoy and value the level of control they can have over their own development eco-system rather than relying on third party libraries.
[+] zentechen|15 years ago|reply
asp.net mvc was a community effort and open source from the every beginning. It even packed in with jquery javascript library. It can have the same collaborative community support as any other framework. However, I suspect that the most of developers are not interested in contributing is because the learning curve it has for who coming from traditional ASP.NET background. Among those so-called developers most are contractors who are used to hack up quick and dirty web applications that aren't scalable in a few years.

On the other hands, we have to give kudos to Microsoft that making things easy for people with little programming background get off the ground.

[+] st3fan|15 years ago|reply
What do people here think of .Net as a choice of platform for startups?
[+] WesleyJohnson|15 years ago|reply
Perhaps off topic, but I've never understood the draw of Microsoft's implementation of MVC. I've watched a few video tutorials and stepped through several articles and my initial impressions are that it seems like you're mixing a lot of code in with the presentation layer, almost like going back to classic ASP.

We use WinForms at work, and did so at my previous job as well. Perhaps I defend them because that's what I'm used to and they pay the bills, but I would argue that their not just for inexperienced guys fresh out of school that don't understand how the "magic" works. Sure, you can get far with them without really pulling back the curtain, but use them long enough and delve deep enough and you get a pretty decent understanding. Or maybe I'm the living proof of "you don't know, what you don't know".