Leaving .net
whatupdave.tumblr.com
whatupdave.tumblr.com
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.
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.
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.
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.
Stuff like that tends to have consequences, especially when there are contracts and liabilities involved.
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.
What do I call that solution? "Developed in Java". Here Rhino is to Java what JavaScript is to a HTML web site.
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.
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.
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.
Business continuity.
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.
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.
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.
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.
Linux may have gained real acceptance as a server OS, but businesses overwhelmingly still prefer Windows on the desktop.
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.
He gets the code he wants, I get drunk on good tequila. What's not to love :-)
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.
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.
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.
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.
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.
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.
I do that frequently, but you're the first to point it out :-)
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.
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.
(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.
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.
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.
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.
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.
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.
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:
http://news.ycombinator.com/item?id=972423
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 ..
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.
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.
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/
http://research.microsoft.com/en-us/people/simonmar/
http://research.microsoft.com/en-us/um/people/emeijer/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.
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.
I felt like I had taken a step back productivity-wise with VC++6, but it was solid compared to BCB.
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/
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 :)
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
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.
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.
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.
Hah! Just like those all those VB6 apps that have been thrown away?!
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.
Thats the quote of the day !
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.
So much for the 6502 assembler I grew up with :-|
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.
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).
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.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?
That's WebForms. I hate it too. MVC makes it all go away.
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.
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.
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.
At some point something in that box is not going to work how you expect it to, regardless of who makes it.
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?)
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.
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 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.)
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...
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.
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.
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'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.
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.
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...
It's all just a question of economic efficiency. Being able to pay for priority bugfixes is efficient.
When a corporate pays for software, they are paying for peace-of-mind and assurance more than the bits that make up the app.
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."
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."
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.
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).
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.
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.
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.
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.
How's the project site coming along?
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.
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.
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...
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.
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'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...
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...
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.
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.
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
So the Linux kernel isn't REAL open source then?
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)
(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).
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>
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!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.
.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.
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.
I find that the oss/linux/socialist camp has some excellent tools available. But maybe you mean something different by "tools" than I do.
Doubly so if you plump for ReSharper.
There's plenty of great FOSS stuff. I didn't intend for my message to suggest otherwise.
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...
You could use MySQL, PostgreSQL, SQLite etc. just as easily.
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'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.
YMMV.
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.
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?
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.
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.
Like offering free crack to drug addicts! No wonder .NET continues to exist.
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".
eg, Java is dead Django sucks Leaving .NET