Hacker News new | past | comments | ask | show | jobs | submit login
Leaving .net (whatupdave.tumblr.com)
355 points by chrislloyd on Sept 23, 2010 | hide | past | web | favorite | 213 comments

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.

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.

> ...hack together stuff that will be thrown away in 2 years

Hah! Just like those all those VB6 apps that have been thrown away?!

So true, but I think he meant "hack stuff together with the intention it will be thrown away in 2 years"

More like "hack stuff together because if we don't get more business quickly we won't be around in 2 years anyway"

Well, if I may, even more like "hacking stuff together that SHOULD be thrown away within two years but never is".

Maybe he meant "should have been thrown away".

I lead a small .net shop up until 2005, when MS decided that integrated unit testing was only going to be available in their Team Edition, which was $1,500 per seat. They later retracted, but we were already drinking python and ruby kool-aide and never looked back.

Although I really enjoyed C#, everything else about the community and ecosystem will eventually be a killjoy if you value your work over your resume.

I agree, C# is aweesome as a programming language. With Mono, an open source implmentation of .NET framework, it virtually runs cross all platform, even supports iPhone apps with MonoTouch.

This. Right now, as a .NET developer myself, it is impossible to keep up with all the new frameworks that Microsoft are releasing.

Hint: you don't need to. Use what works for you.

I disagree. Or at least, you will cause problems for other people. One of my coworkers was delivered a Windows app by a third party - it was written using MFC. I said, "Seriously? In 2010, MFC? MFC was bad even before it became obsolete." My coworker said, "They used it once before and decided it works for them, so that's what they use."

Here's the thing: part of being a developer is keeping up to date. If you find one thing that works for you and don't ever update you are not doing your job.

Learning all the intricacies of a framework takes a lot of time. Once a time, I was all for learning new things, but guess what: I discovered that old tools still delivered.

Sometimes the less dependencies factor matters too. Having to quickly develop a diagnostic application for users to download, a couple of years ago, guess what I chose: Visual Basic 6. Right, that ancient tool. No matter what, the application was easy to develop and the executable was a few kilobytes, with no requirements other than Windows 2000 SP4.

There are definitely limits. I'm not suggesting you use a 20 year old technology like MFC. However, using .NET 3.5 instead of 4.0? Just fine.

Why did it matter what it was written in, if it met the spec?

That's great in theory but once an application becomes big and settled it is usually too big to just 'upgrade'. Upgrading becomes a massive time sink and when there's other deadlines pressing for stuff that your clients will actually notice then upgrading won't happen. Ballmer wants to release a new VS every 18 months. Just skip every other major release and save yourself 1/2 the pain and effort.

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.

Customers will not worry about "alien" technologies, unless you sell the latter as such. This is a basic sales principle.

Don't ever say you develop applications in Clojure, just say you develop in Java. Clojure is just a Jar, isn't it? Then you are just using a Java library, aren't you?

Prototypes usually end up in production, don't they? Then develop such prototypes in an agile language and just make them follow their destiny.

What are you doing around Hacker News, if you aren't able to hack the system?

EDIT: However, you should also understand when your language of choice just doesn't fit a gray-suited environment, and indeed I think Ruby doesn't. Python does.

> Don't ever say you develop applications in Clojure, just say you develop in Java.

That would be lying though, and it could get you in to a whole pile of hot water. Such 'technical tricks' may work a few times but eventually you'll have a real problem.

I think the safe way, if you want to follow that policy, is to say you develop for the JRE or for the JVM. Neither of these are lies, but they keep with the original idea of keeping peoples focus on "Java".

JRE and JVM are technical terms. Unless you are talking to techies, I think "Java technology" and/or "Java platform" are a better choice.

You are correct, that's the right way out.

Although it bears more truth than you might think. As of Clojure 1.2, you can implement Java types from Clojure and you could build a plain old Java interface to the system if you needed to. And you'll likely be making use of many standard/community Java libraries.

I personally don't think that will be lying. I built a Java app that sets up the environment, starts Rhino and executes the app from there. The Rhino then make calls into Java classes for DB, file access and low level stuff only.

What do I call that solution? "Developed in Java". Here Rhino is to Java what JavaScript is to a HTML web site.

It's a matter of semantics. "A Java application" is perfectly honest. Just like when someone says "a native application" it says nothing about if it was actually written in OCaml.

Until the time that HR hires a person to collaborate on your project with 'java' experience and it turns out you wrote your code in clojure.

Stuff like that tends to have consequences, especially when there are contracts and liabilities involved.

We used to say that Tcl/Tk was a C library with a very complex configuration file ;-)


I've only been on one project where HR was so far divorced from the team executing on a project to hire candidates without us vetting them, and it was (unsurprisingly) a complete disaster.

Also, if you're hiring programmers who can't pick up a new language to work on your project, you're doing it wrong. Most of the capable folks I've worked with loved learning new tech; the problem is usually keeping them from jumping onto a new platform for every project.

You could quote Greenspun's Tenth Rule of Programming, and say therefor you skipped the error-prone process of increasing complexity-building.

Doesn't HR list frameworks along with languages? Is JDK knowledge alone enough to be employed anywhere?

I understand your suspicions: switching perspective is something techies have a difficult time with. Is Arc a language or is it a bunch of macros on top of MzScheme? It depends on how you see it.

Clojure is 100% compatible with Java, both ways in a straightforward manner, so you can easily argue that it's still Java. That's been the smartest design decision ever by its designer.

You have to understand whether your clients are interested either in leveraging the Java technology or employing code-drones. In the former case, Clojure will be fine; in the latter one it will not.

Popular wisdom teaches that most people remember the result, not the way you got it. If you use Clojure and succeed, you'll have your own way.

And my own experience concurs with lelele.

When I was at my last company we encountered many a client which considered Java the "alien technology". I remember particularly one of the five largest banks in the world absolutely would not allow the JVM in their data center even if it was on our box. (This was the type of place where it took about a month and 3 or 4 signatures to get a port opened in the local network).

What makes you say Python is more appropriate for greysuits? Ruby and Python seem very much alike to me.

In a nutshell: Python actually runs well on Windows, which isn't something you can really say about MRI. (JRuby, maybe, but that brings its own set of issues.)

Linux may have gained real acceptance as a server OS, but businesses overwhelmingly still prefer Windows on the desktop.

Google makes him say it ;)

Yeah, Google, for the most part. You are not using an agile language, you are using some of the technology Google relies on, aren't you? ;-)

Google, and beyond it. You could easily have a case for Python: Nokia has made it available for Symbian, Microsoft endorses it via ActiveState, and so on.

My friends, if we want to be effective entrepreneurs, we must learn how to repackage things in a way customers will find attractive. A language can be just a technology, a framework, an application, and so on... whatever concerns your customers. There is no point in being strict about terminology, unless you are selling to savvy techies.

I'm sorry, but I don't agree. There is no reason why my customers need to know in what language the solution is developed in.

Besides, Ruby powers many highly visible websites and web apps. If I'd be losing a sale because I develop in Ruby and NOT Python, chances are I don't want that sale in the first place.

> There is no reason why my customers need to know in what language the solution is developed in.

Business continuity.

Business continuity applies only if we're talking about Java vs Ruby/Python/etc.

If the choice is between Ruby and Python and Clojure and any of the "esoteric" languages as far as enterprises are concerned, that's a red herring.

I don't know what your business is, but if it's consulting or custom development, then you may be wrong. It matters very much to me if I buy something from you that is written in some esoteric language that only a few people can develop for.

Obscure languages are a form of vendor lock-in, in that sense.

if you're developing SAAS or something, then I'm sure you're right, but that argument doesn't apply to everybody.

Let me explain better: Google does not stop at using Python, it embraces and backs it. And every grey suit knows Google.

And any grey suit that deals with the web knows about YellowPages.com which is a Rails site, as is newyorkjets.com.

Google is a compelling argument, no doubt, but if the biz dudes are open to switching from a "traditional" language/framework such as Java/J2EE or .Net, there are other "established" players that use Ruby.

Please don't take this as defending Ruby, the best tool for the job should win out. If the team proposing Python is well-versed in Python, that's what they should go with. But saying that Python is a better bet than Ruby, because Google embraces it is a bit of a strawman.

> Microsoft endorses it via ActiveState

Microsoft has IronPython, and I'm not aware of any existing endorsement of ActivePython from AS. There used to be some partnership or agreement between the two around Python.NET, but that project has been gone for a while now.

This is completely true and exactly the place I am stuck at. I have a product with major parts in RoR, that the business end user loves but the IT just won't let through. I have to now learn asp.net mvc and port everything over to it. I dread going through that.

"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's an uphill battle, but it's not impossible. My last job involved me writing Python for insurance companies. Yeah, there's always someone who won't accept anything that isn't written in .net or Java. But generally speaking, it's only a select few on your customers' team that will even know the difference. For the most part, businesses do actually focus on what's best for their bottom line instead of framework ideology.

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.

  > Actually, quite a few Haskell folks work for Microsoft Research
What is up with that, anyway? Three of the most important people in Haskell -- the originators of the language and primary developers of GHC, and the foremost researchers in functional programming as I've experienced it who aren't employed by universities, Galois or wherever the fuck okmij works -- are employed by Microsoft Research [0]

Seems like a very odd place for them to be. Microsoft has absolutely no official relationship with Haskell, but it is the closest thing Haskell has to a patron.

I suppose bits of their work are trickling down into C#/LINQ (and VB) at as fast a pace as the ecosystem can absorb it, and it would be unthinkable, inappropriate, and probably disastrous in sociologically interesting ways, for Microsoft to try to push direct Haskell on conservative enterprise. I suppose "they" view it as an obscure research tool, by and for the top talent they retain, granted apparent freedom in their research, to keep a strategic reserve of deep magic. It's more likely that "they" don't think of Haskell at all.


Also, while I don't think this strange relationship could be credibly attributed to any calculation of PR or prestige, I'll admit that noticing a sizeable chunk of the best stuff I've read in the field is written by known Microsoft employees has done as much to salve my personal opinion of the brand as their fall from threatening malevolence. It would be interesting to see what it would look like for Microsoft to officially recognize Haskell.

  [0]  http://research.microsoft.com/en-us/people/simonpj/

There's a thing called F# that you should read more about.

And there's too much money in consulting for the government as a low-level programmer.

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.

There's a special place reserved in Hell for the management of Borland, right next to the management of Commodore

A large part of their demise was due to their constantly pursuing the enterprise market (they even changed their name to Inprise for a few years) where they were largely ignored and unwanted, while ignoring the indie devs and smaller shops who loved them.

In the end their developer tools went from best in class (by a very large margin) to an embarrassing copy of Visual Studio, but not quite as good and a hell of a lot more expensive.

Kylix was a bold move though, and could have been something good (it wasn't). For anyone interested, Lazarus is still going; it's a cross platform open source ide heavily inspired by Delphi (version <= 7) http://sourceforge.net/projects/lazarus/files/

I loved and used Turbo Pascal since the 3.0 days - 5.5 was probably my favourite, while 6.0 was real stable (bit bit bigger). Then I started learning Turbo C at the same time (was it 3.0), and TVision, Delphi for Windows.

Really cool products, and then Microsoft hired the guy from Borland that was responsible for the Forms Editing and other things in the IDE, and Borland changed their trademarks from the cool Delphi/Turbo/Borland to stupid names like Inprise/Kylix/etc.

The Turbo Pascal 3.00 was the smallest IDE ever in the world - 30kb of compiler, editor and libraries :)

Yes, Turbo Pascal was one of the most underrated languages ever. Blisteringly fast to run and way faster than C to compile. Clean simple language, native strings (yay!), no need to worry about memory management, pointers etc.

Built some pretty good stuff with Delphi, and I think sometimes that there's many cases where Delphi 7 is still one of the most productive desktop development packages of all time, even when compared to the latest Visual Studio.

and to those who doubt me - well, I like my rose tinted glasses, and I'm keeping them on :P

Why making money with programming makes you feel dirty?

It was Microsoft's answer to Java, with hindsight 20/20. I wanted to see their take on portable bytecode, JIT techniques, security, distributed computing, performance, etc. Nearly everybody there was burned by MS's short attention span when it comes to system libraries (OLE, COM, DCOM, DCOM+ for one, and the mess that is data-access libraries, OLE-DB,MDAC, ODBC, ADO, Jet, etc.)

We wanted closure, at least I knew I did. Was barely 20 and had my first serious application. Hundreds of MFC files, elaborate Win32 API integration, MS Office integration and a whole lotta crap. They fucked me over seriously bad, and I have already sunk in a year and a half of my time, skipping classes just to make it. Everytime I implemented a subsystem a new memo would come out on MSDN Magazine telling me to use a component bundled with Office for that, or tie my app into the latest IE release, or "just" use ActiveX.

I fucking wanted an answer. Instead, the fat guy they paid to talk to us said we could all get highly paying jobs if we only learned this new, new thing.

I left that mess for good. First to Perl, then Lisp. Never going back to the API carrots on a stick thing.

Part of the "Microsoft Tax" is that there is always a new new thing - when it comes to Microsoft selling products their biggest competitor is installed versions of their existing products not other vendors.

No, wait a sec. A good share of people is complaining about the lack of Microsoft's willingness to push the new shiny stuff - how much time did it take for them to come up with a MVC framework? - the other share of people is complaining that Microsoft pushes too much of a new stuff.

C'mon, people, give me a break - yes, there're lots of new frameworks coming from MS. Well, that's what I would expect the company to do in order to give their developers some other options to be more productive. It's not like MS' competition is sitting around and doing nothing - Google has their own not-invented-here syndrome, Ruby community produces new frameworks every other week, PHP community clones whatever Ruby community produces... Technology isn't frosen and is always a moving target, that's life, get over it.

Apples and oranges:

1) Microsoft is both the tool vendor and the platform vendor. The Ruby community can go ape-shit forking each other on github, but at least the underlying OS remains constant.

2) Microsoft tools cannibalized each other. There is nothing laissez-faire about its offerings: the new kills the old and the entire company, developers, reference materials, publications, marketing, and retail are in lock step. You just couldn't depend on using a disavowed infrastructure without fear of your bookmarks going stale, immediately.

3) They had no reason to phase out products and tools, at least no sensible reason. It's often to harm a competitor. Not only that, but they have sometimes pushed changes for the same of ill-advised aesthetic reasons. You had to be a C++ programmer 1997 - 200 to see how MS can bully. The push to COM and machine generated stub code. The fucked up pre-compilers. The weird new syntax. You could do everything with vanilla C++, but they were trying hard to keep Borland and other compiler vendors at bay, so you had to kowtow and come along with them.

Alright, this is seriously giving me flashbacks and might trigger PTSD.

(1) - I don't see the problem here. Somehow old DOS stuff still works in Windows 7. You need new features? They're coming with the newer OS, but your old features rarely go away. Contrast this with upgrades from PHP 3 to 4 or 5, stillborn Perl 6, great divide between Python 2 and 3.

(2) - Please... Your old frameworks are still there. You are discouraged to use them, but they didn't go away. I seriously don't understand how this is a problem?

(3) - Again, technology is not frosen. Competitors are coming out with new shinier things - why Microsoft should stick to only what was there back 20 years ago? So they push their shiny stuff into the limelight. But given that old frameworks are still in place, it's not a problem.

"The push to COM and machine generated stub code." - I don't understand your grudge here. Why didn't you ask yourself: do _I_ really need to use COM? COM solves some particular problem - was it _your_ problem? Did ole-good Windows API and C++ classes just go away with the advent of COM? I for one am a C++/Win32|64 and .NET dev. Last few years I'm asking myself a question - do _I_ need to use WPF, just because it is there? My answer is no - I'm just ignoring it, as I ignore other shiny things that don't solve _my_ problem.

BTW, maybe this will sound like a blasphemy here, on HN, but Microsoft could teach a thing or two to the "platform vendors" out there. The pace of change and amount of inconsistency that is being introduced by everyone and their dog with web service "APIs" is astounding. Compared to that, MS' approach of keeping of old stuff while introducing new one is simply a god-send.

I worked in a different era than yours. Today, you can pick and choose the microsoft stack you want to use, if any at all, because you have choice and they don't.

Then, you sold software based on polish and integration in UI look and feel. You have to choose your tools very carefully, because of the realities of software publishing and distribution. You don't know how long it takes from the moment you press the CD-ROM, to the moment it goes on the shelf, to when it's bought. If it looks and works OK today, a year from now it would be butt ugly. Only hardware vendors could get away with ugly software. Even anti-virus software is polished and themed to oblivion. But mine corporate software with strong Office integration, it has to look modern, for some modern in the unknown future.

Did ole-good Windows API and C++ classes just go away with the advent of COM?

They didn't. I occasionally write native win32 apps with Dev-C++. But I could not, today, embed all third party components, be they MS' or off-the-shelf, using only pure C++ and win32 API.

There are tiers of Win32 interfaces and libraries, in terms of quality and system integration. On one end you have the Win32 API, and on the other end the latest managed .NET newfangled things (I am ignoring native NT layer and the DDK.) However, in between you have this graveyard of APIs, from OLE to ActiveX to COM to what have you. Each has been pushed with merciless fervor by MS, at a time when they were the only game in town.

I am glad you like your stay on .NET though. Cheers! I myself java just rediscovered Java (the JVM, really) and this is where it's at. Sun couldn't sell for shit, but they knew how to make software.

Wait a minute... You are complaining that you are now forced to have updated looking and function software? Oh. The horror. That's a sure way to make your users mad. Sell them software today that looks like it was written 10 years ago... But wait, it was written 10 years ago.

You are completely pushing the philosophy of technology needs to remain the same and consistant through all of time. Not possible, ever. Technology HAS to evolve or we all sit at a standstill. If you don't want to learn new things and stay modern in technology, then you need to sign up for truck driving, not software development.

They (MS) didn't just sit around trying to find ways to piss you off by coming out with new technology. They released one, found a way to improve, and released that next. Quite blaming the vendors and put the blame squarely where it belongs, with people who refuse to learn and evolve with the technology.

What? Did I not make myself clear or are you incapable of reading?

I am not "complaining about now", I am complaining about 10 years ago. Specifically '98-00. Fireup Wikipedia and do a little MS history research.

I want my software to look fresh and fit in with the UI of the environment. I said was coding for the future, i.e. use the most cutting edge software today, so by the time we put the software on shelves, it doesn't look old.

My #1 issue with MS, really, is that they let the official API stagnate and forced us developers to use Office and IE components, in the hope of integrating them with Windows.

I would make sense of your writing if it wasn't so weirdly phrased.

"We wanted closure"; left the mess for Lisp. Indeed, the explicit use of closures is closely associated with Lisp.

I am sorry you have been downvotted, but that was indeed a deliberate word-mine, buried for your pleasure.

I do that frequently, but you're the first to point it out :-)

Did you HAVE to chase every new API as soon as they came out? Did MFC suddenly stop working? Did the Win32 API go away? Why couldn't you just keep going as you were until you really wanted to rewrite to new APIs?

Yes, if you want your corporate productivity app to be Office certified. The UI guidelines are pretty clear about how it should look and behave. First MS pushed the new CommonControls from IE on us, then there was an Office update, then XP came out with new UI elements, like rebars.

With every new release of Windows, Office or IE, the UI got tweaked. Pretty quickly you couldn't even use vanilla C++ anymore to embed the bulk of widgets/controls from Office to do basic stuff like showing spreadsheets in your app. You had to use COM.

I was a sole developer hoping to differentiate myself from other shareware authors by being on MS's good graces. Good grief! I didn't get peace of mind until I dropped them.

And why is that mahmud? Because most developers, by a HUGE margin, wanted to this in VB. And in VB hosting COM controls in your app was super simple.

What I send to see are two classes of MS developers: 1) Those who use the MS stack, but realize they're using tools that they build with and on. 2) Those who use the MS stack, but get stuck thinking that it is the only tool available, period.

The second group of developers sometimes gets an epiphany when they change to a non-MS stack, because its so clearly obvious in the non-MS world that there is no stack that is convincingly better than any other. Group two expresses their outrage at the MS stack. While group one is mystified that they ever thought the MS stack is the end all be all.

Here's a hint as to how to find them ahead of time. Go talk to the guy who does .NET development today and ask what his favorite third-party controls are. If he has none and says, "I only use MS out the box controls" then this person will eventually become part of second group.

That diagnosis about the second group fits me to a T. 100% correct you are, Sir.

I have been a programmer longer, mostly cracking games and writing x86 asm and DOS stuff with Turbo C; but I became a developer on Microsoft's platform and under their auspices.

After Microsoft, I went through a few years of insane productivity and deep, god-level hacking. I have chronicled those stories else on HN. Here is one:


After I found "success" elsewhere as a programmer. When I finally saw a product of mine being used, shipped, bought, deployed. When I started seeing bug-reports, requests for bulk prices, discounts, and yes, piracy. That's when I made peace with Microsoft and went back to using Windows. I am typing this on XP.

They're an OK company with an OK platform, just not when you're young and impressionable. Beware of the bastards and use portable, 3rd party libraries.

I am done with this thread ..

Perl? You serious? Are you developing text-based system?

My first Perl application, after I put my Win3 app on hold, was a desktop GUI app for printing mailing labels. It had a builtin list building engine that scraped counties throughout Virginia and found information on new home buyers, and applications for building renovation.

It took me 20 days to develop. Perl/Tk.

If memory service me right, and I really could be wrong .. I think I must have been the first one in the world to hack together a bridge between Perl and Office 2000, because I had a developer preview. ActivePerl .. now that was a delightful platform.

Perl empowered me. If it wasn't for Perl, I might have quit software altogether and became a philosophy major, or worse, a mathematician.

The only major failing of Perl is that its error handling facilities just flat out suck. Outside of that, it's a very modern language, albeit a little esoteric at times, and writing maintainable systems with it is possible with some discipline and common sense.

To boot, Perl natively supports modules written in C, and by way of DynaLoader.pm, a programmer can do fun things with exported symbols from object code. I wouldn't go as far as to call DynaLoader.pm a proper FFI, but it definitely gets the job done a lot of the time.

Yep. That's why I bailed back in '99. You needed an MSDN subscription just so your apps could tread water.

Phone rings "Hi, we upgraded our NT server and now your software is broken".

Many hours later "Oh MS changed the DB connection pooling to OFF"

Me: Hmm, this Personal Home Page things looks ok, I'll give that a try.

And as horrible as PHP is, it behaves itself.

I don't see how this is any worse than trying to keep up with the latest version of some OSS library. Whether it's MS that's revving or open-source developers, changes happen, and if it's a breaking change in a shared library, sometimes you get hurt.

Just yesterday there was a "goodbye python" article posted here, that blamed the fact that so many Linux installations have old installations of python, and so many things are broken when modules in the installation get updates.

Myopic viewpoints about code longevity tend to be driven by people that never worked on a project for more than 2 years. Few companies have business models that allow them to avoid the mess. It's not a problem for throw away projects or startups though.

The same PHP code has followed me round since 1999. From FreeBSD 4 to Linux to OpenBSD to FreeBSD 6 (but in a VM running on Linux).

Early on in my career I was given a codebase that adhered to every lesson in How To Write Unmaintainable Code. I can't thank fate enough.

Distributing software always sucks, on every OS. It wasn't the language he had a problem with, it was the platform quirks.

I see what you're saying but upgrading an OSS library is usually undertaken by somebody that thinks beforehand "I wonder if upgrading this will have any implications" whereas clicking "Express" on update.windows.com is billed as pain free, just like all things point and click.

Plus I had followed the advice in MSDN concerning connection pooling which was a registry setting for ODBC NOT part of the framework I was using (VBscript in ASP). Responsibilty for pooling was pushed into the framework.

The goodbye python article was about assumptions one could make about what would be available before one's code arrived. I bet php3 code still runs just fine.

You shouldn't be hitting 'express' on windows update on a live server just as you shouldn't be running 'update world' on a live linux server

Security updates and product updates are mixed on Windows (or were I don't know now). They called them "Option Packs" back then which sounds like it just brings another keg to the party not plans to re-arrange the furniture.

If I already have a full-time job, and I just want to hack around as a hobby in my spare time, I don't want the language features and runtime to be tied up in the same (probably more) red tape and politicking I have to deal with at my day job. I just want to relax and hack, and if there's money involved, that's a lot less likely to be enjoyable.

The reality is that any reasonably complex endeavour will suffer from this, OSS languages included.

Then make it enjoyable: the last bit of code I hacked was "for profit" but I told the guy who wanted it to just pay me with a bottle of Patron.

He gets the code he wants, I get drunk on good tequila. What's not to love :-)

How well do you code? I know of a few startups that will happily send you to AA.

Ha! Thanks, that made my morning :-)

Seriously though, he was willing to pay me, but I wasn't comfortable taking money for something I had zero experience with (this was my first time using a Web API). And I could tell he didn't want to feel like he was ripping me off by getting my work (all 45 minutes of it) for free, so we met in the middle and both parties were happy.

For the same reason selling your body for money might make you feel dirty.

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.

I thought it wasn't that long time ago MS released Powershell and the latest MSBuild? These are necessities to automate some tasks in software development. Have you seen your build.proj file lately? Is it as nice as ANT or Maven?

Depending on what your practice style is, Java seems to be far ahead in terms of being agile (excuse me for the buzzword). Of course PHP/Python/Ruby are even better.

There's also Rake.net.

I presume GHC is the Glasgow Haskell Compiler and not Guarded Horn Clauses?


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.)

"You could have taken me to a brothel afterwards and wouldn't have felt dirtier."

Thats the quote of the day !

Many feel the same way about the 'my shit doesn't smell' attitude coming from 37Signals, the _creators_ of RoR, not just a random user like in this case.

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.

"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).

I agree -- there are a lot of disinterested 9-5ers who are burned out by their environment, not the technology.

LINQ to SQL was killed. IronRuby is terrible. Constantly evolving C# syntax is not inherently a good thing.

As contextfree says, Linq2Sql is an ORM and Linq is really a set of a few technologies (expression trees, lambdas, anonymous types) originally created FOR Linq2Sql but now used all over the place.

An example of non-L2S use of Linq to sort an array of objects:

  //array of dogs
  var dogs = new[]{
    new Dog{Name = "Bowser", Age = 1, Gender = "M"},
    new Dog{Name = "Yoshi", Age = 2, Gender = "M"},
    new Dog{Name = "Molly", Age = 2, Gender = "F"}

  //get all male dogs ordered from oldest to youngest
  var dogs2 = dogs.Where(dog=> dog.Gender == "M").OrderByDescending(dog=> dog.Age);
No database access involved.

LINQ isn't the same as LINQ to SQL, which is an ORM written on top of the LINQ interfaces. Other ORMs like Entity Framework also use the LINQ interfaces.

C# is evolving, it's not just randomly, breaking-ly changing. It is a good thing.

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?

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

There are colleges teaching .NET? I'd never heard of that.

There is a college here that starts you out with VB.Net, in the CS track, no less. They learn C++ the semester after that. I wish they would just drop VB.Net and start with C++ then let them take an elective with C# or something...

Massey University's (massey.ac.nz) introductory computer science papers are all in C#/.Net. I found this surprising as well.

It isn't the first thing they teach you at Purdue but a sizable chunk of CS and CIT students learn C#/.NET

I remember meeting someone who said "oh yes, we did assembler in our course" - upon being questioned they had been doing .Net CLR instructions.

So much for the 6502 assembler I grew up with :-|

Interesting. In my CS degree ('08) the languages used in the few classes that involved actual programming were: C++, Scheme, Prolog, Python and Java. Never anything that would require proprietary software like Visual Studio.

Consider yourself lucky.

A CS degree is not where you learn "market skills". It's where you learn to build the stuff that will define what "market skills" are.

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.

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.

That's the canard, but it has seldom worked out that way for me. Whenever I've encountered a problem that can be traced to a flaw in their products, the suggestion of calling for support is usually met with riotous laughter. (In other words, everybody says it's a selling-point of their stack, but nobody believes it.) Maybe none of our corporate projects have been "big enough". How big, exactly, does one have to be?

Edit: come to think of it, most of the problems I have seen have been things that would go against their lock-in strategies, and maybe that's where the laughter comes from. The solution is always something like waiting for hackers to reverse engineer something like NTLM, or Samba, or WINS, or exchange integration...

A company I worked for in the past (MM pageviews a day, you've probably heard of them) was a big MS proponent and an early adopter of some of their new stuff, like--at the time--Silverlight. We had a fairly direct line to someone at MS if something crazy happened. It might not always get fixed right away (a bug that might need to wait for the next cycle), but MS was always on top of what needed fixing.

Contrarily, we had one guy working on some OSS stuff in a corner of the office--Apache, PHP, Rails, stuff like that. Whenever he ran into a problem that needed to be solved yesterday, he had to find and call a $100/hour consultant who may or may not even be able to solve the problem, or even guarantee that it would be patched at a later date. That's the big MS selling point.

"MM pageviews a day, you've probably heard of them) was a big MS proponent and an early adopter of some of their new stuff, like--at the time--Silverlight."

Yes, and that's about what it takes to get attention. Especially the "early adopter of Silverlight", you probably had a dedicated team back at MS.

And there are other large companies that also rise to this size. What confuses me is the 30-person ISV that believes that they can get magical super awesome support from Microsoft. They can't, or at least nothing better than they can get from open source. And typically, I find they know it too; they know better than to try to contact Microsoft, yet they still hold the mythical ability to do so in their hands like a security blanket. That's what confuses and to some extent annoys me; saying "I can get support from MS" when it's true makes sense, but using that as a reason to use MS when it's not is just silly.

It's a big selling point and that's legitimately true, but unless you're absolutely huge it doesn't apply to you.

Wow. We are a 10 person company (entire company, not just dev staff), and we had a major issue and I called MS and the issues was fixed in 2 days. And no, it wasn't some wierd setting or some hotfix that was already available, it was a bug in 2008 R2. Minidumps, remote sessions, and long conference calls for 2 days, but they ended up providing some files in the end to work around it until the next patch.

How about one person? I recently had an issue with VS 2010 and long hangs in the editor for a specific type of file. I got a series of minidumps for them... we narrowed it down to an issue with type resolution.

They sent me a QFE drop and then incorporated the fix into a tools release they were doing.

I was acting as single dev, not even on a support contract.

I think I need that fix. Thanks for reporting it!

...or start with the official documentation coming from - gasp! - Microsoft: http://msdn.microsoft.com/en-us/library/dd208104(PROT.10).as...

I mean no offense by this (even though your condescending gasp makes me relish the thought of offending you) but you're probably too young to appreciate the requisite historical context. The link you provided is a relatively recent change in posture for the company in question.

Yes. This is what the open source world doesn't understand. You can't just copy a commercial product feature-for-feature, open source it and then scratch your head wondering why it isn't gaining adoption.

When a corporate pays for software, they are paying for peace-of-mind and assurance more than the bits that make up the app.

That's true for Office and software packages like Webmail.

But if you build a system using Microsoft's tools and you ask for support, they'll tell you that the problem is with your code, not their tools. They'll support issues with your web server, database server, and even your IDE, but when it comes to the code itself, there's no level of support they can truly offer.

This is from 10 years of personal experience working in an MS centric organization. I get as much support on my Ruby code from MS as I get for the ASP code I wrote. None.

But people up the chain don't get this - they think "if we use the MS stack, we can blame them when something goes wrong."

I'll gladly take $200,000 a year from a company so they can feel like they can blame me when their apps don't work. I'll just charge them so many points per issue, have them run some diagnostics tool I send them, and say "you have a problem with your code. Can't help you."

But that's what your post's parents are talking about. Microsoft won't debug your code, but they will respond if you show them a bug in their code (and you've paid for the support accounts).

I was replying specifically to "When a corporate pays for software, they are paying for peace-of-mind and assurance more than the bits that make up the app."

The peace of mind part. And that support contract still hasn't provided a fix for the padded oracle exploit. It'll be "a few weeks yet."

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.

I'd say a much more likely reason is that the enterprise can't get enough programers to support anything other than the MS stack. The culture at large enterprise simply isn't compatible with the hacker mindset. Banks are a notable exception in my mind, but then again banks have always been fairly agile when it comes to turning a profit.

Also, the open source ideal isn't an "indie developer" ideal. Serious systems engineering goes on in the open source community and it produces what often are the technically superior solutions.

> 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

You also have the option of paying Microsoft for a QFE (quick fix engineering). With a QFE, the team fixes the bug as an immediate priority and provides you with a patch for it. All QFEs eventually get rolled up into cumulative updates and/or service packs.

So I'm paying to fix a bug in their software that I've already paid for?

Call me crazy, but if I have the option of cracking open the stack and having a go at fixing the bug myself I'll do it. At least that way I'm not dependent on anyone else for the fix...

How much does it cost you to divert your attention to fixing someone else's bugs?

It's all just a question of economic efficiency. Being able to pay for priority bugfixes is efficient.

Hey I didn't say it's a good option, just that it's an option :) The whole "paying someone to fix their bug" always boggled my mind. But it's the reality of MS and the reality of many of their customers. It works for them, so more power to them. I guess.

>> If a bug is found in the stack itself, it won't languish unsolved in bug trackers for years, like many OSS bugs do.

Oh, please...

Over the years, I've personally fixed bugs. And sent in fixes. (Stop complaining -- I promise to send tests too, next time!)

If I run into one that I am unable to grok in a reasonable time, there are always job boards and money.

Bugs -- not to be confused with full sized features -- are generally not that big a problem in even non-popular open source. You don't have to decompile the damn code!!

And you can get bugs fixed without waiting for a new release, next year... maybe.

>>Over the years, I've personally fixed bugs. And sent in fixes. (Stop complaining -- I promise to send tests too, next time!) >>If I run into one that I am unable to grok in a reasonable time, there are always job boards and money.

That's fine for a smaller shop, or even a medium-sized shop. But when you enter a true corporate behemoth type company, you don't have the option of posting an ad on the 37signals job board and hoping a dev cowboy will show up the very next morning and fix your problem. There's HR hoops to jump through, budgets to watch, schedules to keep, managers and colleagues to keep appeased--that's the kind of red-tape stuff that makes hiring anyone, even a short-term freelancer, enough of a PITA to not bother.

And as a corporate dev, you have better things to do than waste time hunting, fixing, merging, and patching a piece of software that should really only be a black-box cog in your greater machine.

Shouldn't the first rule of writing good software be "nothing is a black box"?

At some point something in that box is not going to work how you expect it to, regardless of who makes it.

Too bad most mega-corporations aren't as concerned with writing good software as they are with staying on budget, meeting deadlines, and making money. Not to say the two are mutually exclusive, but BigCorp isn't going to want to pay for your time to learn how Apache's threading model works so that you can beat a race-condition bug in PHP's IMAP library (or whatever).

OK, a reality check.

First, threading problems in Apache? That is something you report on a mailing list and it gets fixed fast. It is an actively developed application (-: at least last I looked, lots of years ago :-).

Second, I am a consultant that do work for a mega corporation, which builds large systems. At least thousands or developers. I don't know (and am too lazy to Google.)

I don't know because I work in a small group of developers and seldom interact with large groups of others. Most other developers I interact with in this mega corp also work in quite small groups. Big groups often seems to consist of small groups.

When I run into bugs/limitations in an open source library and write a work around (and send in the fix), the manager of my group in Big Corp is happy with me, since I fixed a problem. (His managers probably only hears from him "I'm happy with that consultant despite his humor and personality, keep him".)

Now, all this might be different in the Windows world. But when I was there a bit, ten++ years ago, you could find competent people.

(Have I been trolled?)

To be clear, the threading example was just something off the top of my head, not an actual real-life example. Though the PHP IMAP library is not thread-safe, so the problem would be fixing that library (or learning the guts of it to work around it in certain cases), not Apache. The point is that the example itself doesn't matter.

Finally, all of the big companies I've worked for have been MS shops for the reasons I've stated. Of course not every company is going to be the same. But every one I've worked for wants the MS "guarantee" because they'd rather pay their devs to build their product, not to fix bugs in someone else's software.

I'm pretty confused as to why these comments have been downvoted so much. Just because someone else's company uses OSS successfully doesn't invalidate the justifications for using MS that I've experienced.

If you're not trolling me and are generally confused, here is where I'm coming from.

I think the confusion is that I work for a big corp that do software as a central part of their business -- I'm not writing applications with shiny buttons on administrative applications (desktop or web) ordered by monkeys in suits.

I'm here to write lots of functionality and teach people. For that, we use scripting, open systems that are flexible -- and pluggable. I can always change what I plug in, with the limitation of having to teach people.

If it was the best solution, we would e.g. add a Windows machine and script Excel. The main problem would be that stuff in Microsoft applications tend to work badly in the next version and it is a f-ing pain and waste of money to rewrite stuff you implemented well a couple of years ago.

(Lots of other people here work as army ants on big projects where they should be replaceable. They use Java or C++, deploying little to Windows. I do server apps, not embeddable here, since I love the speed of creating functionality with Lisp, scripting languages etc.)

>>To be clear, the threading example was just something off the top of my head,

That is OK, since I just skimmed the example and saw problems with Apache/PHP std lib.

It was just stupid. Lots of people use those -- and bugs are killed fast.

In absolute worst case, use an external program in another language for this. (Processes or threads doesn't matter.)

That works, since IMAP4 was new and shiny in the mid 90s(!) -- in the non-MS world, we don't replace functioning standards all the time so there are multiple implementations out there for e.g. email libs...

>>I'm pretty confused as to why these comments have been downvoted so much.

Because you only know one side of things -- and believe the propaganda about the other side.

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.

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).

Ruby in particular is hot right now and they're fetching higher salaries relative to other OS languages, you're correct about that. I clumped them all together in my query, and PHP (and Java to a lesser extent) pulled the average down.

Also, notice that I didn't specify junior developers on the salary scale - they're all over the place in terms of salary.

Government contract work is always the exception in any industry. I think that's a given.

Is Ruby "hot" anywhere besides the valley? I haven't seen the significant uptick in socal, but perhaps I'm missing it.

It seems to have a lot of traction in the Silicon Forest

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.

Interesting. I should have been more explicit - my figures are for the U.S. only.

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.

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.

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?

Yes, choosing .NET was based on his skills, but also the fact that I'll be focusing on product design and development of the front-end. That work is mostly platform independent. I have another startup project that I'm building in Grails, and I love it, but MVC with Fluent nHibernate doesn't feel that different, lemme tell ya.

We just started building the site. We have our ORM, authentication, and DI all setup. I've created some mockups using Balsamiq and we're going to try to use Rally's product to keep us focused and on track.

Are you participating in BizSpark to get the tools?

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.

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://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...

I tend to think of Microsoft is backwards because of their reluctance to allow the Internet to be important. For a decade (say, '00 to '10) they basically ignored all the good things about the Internet and tried their best to keep "the old way" relevant.

They're slowly getting better (see IE9, Bing and Office Live...all good, but also all very recent) but it's absurd how far behind they are on the Internet.

I don't doubt that there are cool, modern projects going on at MS. But they corporate push over the last decade has definitely been: ignore the Internet.

On the same train of thought, Barrelfish is a pretty cool project... http://www.barrelfish.org/

IronRuby is dead and not because the "people seem to have convinced themselves that MS is an enterprise-only shop". Microsoft killed it.

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.

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.

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.


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

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.

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.

"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.

"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

"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?

OSS projects cannot guarantee to merge any patch they receive, that would mean disaster. The difference between Linux and MS Codeplex is that if you submit a patch to the former, it will be discussed in the open and it will be judged on its technical merit.

You don't submit patches for Codeplex - you submit patches to projects hosted on Codeplex. Some project managers and devs using Codeplex are better than others at reviewing and taking patches and involvement. So what? Most projects on Sourceforge are just plain dead, but everything there is 'open source'.

Sorry, I abbreviated "the projects on Codeplex that are run by Microsoft" as "Codeplex". That's how I understood the statement of the article where he said Codeplex wasn't real open source. If a project is under MS' wings, sure you can submit patches, but they might be rejected for business reasons or simply because no one cares.

I disagree with that as well. You can always fork if you're not happy with the way the project is managed. If your fork is considerably better, chances are, people will pick it up, as it already happened in the past a few times (EGCS, X.Org, etc.)

I have 3 friends that have contributed patches to the Linux kernel.

How many friends have you had that contributed patches to any Microsoft MS-PL projects, outside of Microsoft of course?

(e.g. ASP.NET MVC, DLR, IronPython, IronRuby)

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.

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).

Some examples would be nice.

Yes, I built http://ihackernews.com (a mobile version of HN), along with http://api.ihackernews.com, and http://viewtext.org, all with ASP.NET MVC. I've built these projects just for fun.

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.

I do. Personally, I love it.

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

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.

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

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

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.

Who is "somebody," and where do they come from?

.Net has tons of community support. The MSDN boards and the blogosphere are thriving and StackOverflow is extremely .NET friendly. Microsoft sponsors MVPs and provides tons of free training content and solid (in most cases) documentation. Product teams and individual architects and developers inside and outside MS publish blogs, videos, tutorials etc. out the wazoo.

Microsoft charges money for its products and development tools, but their goal is to get people using their software, and that means getting people to create software running on their platform. Supporting developers who want to write software in .NET is in their best interest.

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.

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.

What do people here think of .Net as a choice of platform for startups?

Well, mine is just one voice, but as someone who's worked for a startup running on the Microsoft stack (ASP.NET 3.5) I can tell you that there are a lot of "cool" libraries out there available for only $799! And there's a lot of cheap labor available overseas to knock out those little side features and tasks for you, all you have to do is drop their code in, then spend a bunch of time trying to make it actually work. And there's Microsoft BizSpark, so you don't have to pay for your software <whisper>until later</whisper>. Oh, and servers...err...yeah they're expensive, sorry, there's no way to spin that one.

Just from my experience, .NET as a platform for startsups can be made to sound really good by the people selling it, and there are some startups out there doing it and making it work for them, to which I say good on ya! But from my experience, it ends up being the boat anchor weighing you down. There are a TON of developers available, but finding good ones can be very difficult. Hosting is expensive (compared to linux-compatible solutions), and third party components are plentiful and expensive, and usually still require a fair amount of work to integrate.

My boss at my last job used to say "how can we make this faster? Why is everything so slow?" Well, because you started with a code base written by people who aren't really passionate about software development, they just took your specs and spit something out, so it gets the job done, but just barely. Then you bolted on a bunch of fancy UI components and ajaxified some stuff to give it the appearance of being less slow (oh, and look how pretty your GumDropGridView is!) Cram all of that into the cluster (f*ck) of servers in your server closet and you had a webapp you could start charging people to use. Now you've hired me and you want me to tell you how to make it faster? Well, it can be done, but we've got a lot of work to do. What's that? You've got 3 months worth of funding left? Dude, what do you want me to say?

I think it's great. Get BizSpark or WebsiteSpark to cover your licensing costs during development; start with el-cheapo $20/mo hosting which gives you reasonable bandwidth and MS SQL option - and you are all set. If three years down the road (that's how long *Spark lasts) you will find yourself thinking about licensing costs - you aren't doing it right: in three years of startup it's either you're getting enough profits to cover your licensing expenses, or you're in deep trouble no matter what license is.

I hear this often, but I don't buy it. The implications [seems] to be that most startups either succeed or fail within 3 years.

Does anyone have proof of this?

My personal observation is that most companies will still be around and they'll neither be millionaires nor broke. In such a situation, the bizspark bait-n-switch can be significant.

Picking technology today on the basis that you'll either crash and burn or be hugely successful in 3 years seems like the sales pitch of a man who lends you free software for 3 years.

My point is: if you're doing a startup, you want to have a business, not a hacking hobby. If three years down the road your business isn't generating enough profit one way or another, it's a "busyness" and you seriously should consider doing something else.

There's a lot of room in the gap between marginally profitable and exponential growth. Not every startup is necessarily going to end up making millions - not within 3 years, 10 years, maybe ever. That doesn't make it a "busyness," nor does it make it not worth doing.

> if you're doing a startup, you want to have a business, not a hacking hobby

That's funny, because I know at least 2 businesses that started out as hacking hobbies ... Apple and Google.

You also don't know when your business will reach the "tipping point", going from barely profitable to hugely profitable ... it could be 3 years from now, it could be 7.

... and until then spending thousands of dollars on software for a single server is just plain stupid from a business perspective, when you could be investing in something else or just give those money away as bonuses if you've got nothing else to do with it.

"Get BizSpark or WebsiteSpark to cover your licensing costs during development..."

Like offering free crack to drug addicts! No wonder .NET continues to exist.

More like pushers giving free dope out at grade schools. Get them while they're young and you'll have them till they die.

for a client application or for the backend?

SQL Server + Windows licensing can get crazy expensive. I know stackoverflow made it work via http://www.microsoft.com/bizspark/ but I believe even with that program you'll have to cough up the exorbitant licensing fees eventually.

more here: http://blog.stackoverflow.com/2009/03/stack-overflow-and-biz...

Nothing stopping you using another database - I've started using CouchDB with an ASP.Net MVC application and it all hangs together pretty well.

You could use MySQL, PostgreSQL, SQLite etc. just as easily.

The drivers for MySQL / PostgreSQL are very slow, not to mention stuff like LINQ / Visual Studio integration which are piss-poor, making you wish for SQL Server.

People are used to throw such examples in the air, like you forgot "hey, there's Mono if you want Linux" ... but how many real apps used by actual people diverge from the MS stack?

Hint: it's not ignorance.

I switched to Mono & MySql & Linux a year ago for my startup and in my experience performance is the same or even faster than .Net & SQL Server & Windows.

A couple of complex queries not optimized at all where slow in MySql and very fast in SQL Server but I think that that is because of the database engine itself and not because of the driver.

Of course, not that many - but it is possible.

I've designed ASP.Net apps that have had back ends of various forms (everything from navigational databases to Oracle OLAP systems) and once you get over the need to have direct support in Visual Studio then it's not really that big a deal.


Only exorbitant if your app isn't making any money but generating a lot of db time.

The tools are great, and there are a variety of MS programs available to get you using them at low (and sometimes zero) cost - Websitespark and Dreamspark (for students) are both good. From my perspective, the major drawback is that hosting is more expensive.

Not merely playing the devils advocate here, but what exactly do you mean by "the tools are great"? I have heard that numerous times about MS stuff, but I don't really get it.

I find that the oss/linux/socialist camp has some excellent tools available. But maybe you mean something different by "tools" than I do.

Visual Studio is excellent. I have my doubts about MSBuild, but the actual code-wrangling side is very good.

Doubly so if you plump for ReSharper.

No hidden message - I just meant that from my perspective, the tools are really nice. I use Visual Studio 2010 with Resharper for .NET development. I use Red Gate's tools for database management.

There's plenty of great FOSS stuff. I didn't intend for my message to suggest otherwise.

I've always suspected that it would discourage some OSS-focused companies from acquiring you, but I don't have any proof. It would be interesting to hear if there are any startups that had difficulty finding an exit because their product was built in .net.

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".

It's in the best interest of Microsoft that governments and government-sized and super-sized corporations procure systems that need indefinite upgrade$. I think that it is unfair to only pick on Microsoft because watch as that aging but curiously mission critical mainframe, Oracle license, and the entire fleet of Dell, HP, Apple, or fill-in-behemoth-brand-name hardware-software-network combo is going to need upgrade$ too.

I will never understand this. Whenever I look at a programming technology, all I see is a tool; I just can't see all the moral drama and tragedy this guy describes. Might be a religious thing. Or I am probably very stupid, like all the other "M$ slaves",...

This explains the unexpected presence of .Net devs on yesterdays local Ruby user group meeting!

Seems like this is the trend nowadays around the world. Corporate developers with experience in .NET/Java start doing Python/Ruby or other open source stuffs. Some of them start learning iOS or Android platform just to start their own starup.

This just seems to be another case of Ruby Racism http://forgivingworm.wordpress.com/2010/09/26/ruby-racism/

There always seems to be some sort of article that is negative towards such and such programming language/framework on hacker news, I wonder why that is?

eg, Java is dead Django sucks Leaving .NET

The short time I spent in .NET development felt incredibly disenfranchising, when the answer to bugs found was always a denial that the bug existed or "that will be fixed in the next release."

But Mono is a totally different story.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact