May 8, 2007
Although I am generally platform agnostic, I make no secret of the fact that I am primarily a Microsoft developer. In a way, I grew up with Microsoft-- as a teenager, I cut my programming teeth on the early microcomputer implementations of Microsoft BASIC. And I spent much of my professional life writing Visual Basic code. When Microsoft rebooted their programming franchise with .NET in 2003, I was thrilled and reinvigorated, glad to finally have a viable exit strategy from the glass house that was Visual Basic.
As a developer who grew up on a steady diet of Microsoft tools, I never understood the pockets of rabid anti-Microsoft sentiment in the programming community. To me, Microsoft was the least of all possible commercial evils, a generally benevolent dictatorship. Humor me for a moment and imagine replacing Microsoft with one of its competitors: Sun, IBM, Oracle, or Apple. I don't know about you, but those alternate histories send a chill up my spine. Yes, Microsoft is a near-monopoly, but as giant, evil monopolistic corporations go, you could do a lot worse. Microsoft is far from perfect, but they generally do the right thing as far as I'm concerned.
Microsoft has always been a developer-centric company to their very core. From Steve Ballmer's developers, developers, developers, to Bill Gates' centerfold shot, it's always been abundantly clear that Microsoft is a company which prides itself on taking care of its core constituency: developers.
Although I'm still satisfied with my place in the Microsoft development universe, some developers desperately want off the Microsoft treadmill. Mike Gunderloy is a notable example:
I've spent the bulk of the last fifteen years developing some amount of reputation and expertise in the Microsoft universe, having published dozens of books and hundreds of articles, worked as an editor and consultant, written (as a subcontractor) parts of various Microsoft products, and so on. I'm also the editor of the Larkware site, which tracks news in the Microsoft software world for developers.
Unfortunately, over that time I've also come to the conclusion that, even though it is staffed largely by smart and ethical people, Microsoft itself represents a grave threat to the future of software development through its increasing inclination to stifle competition through legal shenanigans. Its recent attempt to claim that no one can implement a user interface that looks anything like the Office 2007 ribbon without licensing some nebulous piece of intellectual property represents a new low in this regard.
I'm in a bit of a bind. Unlike fifteen years ago, I've got a family, including four kids, and I can't afford to just walk out on a career that brings in good money. But I rather desperately want to find an alternative. This blog will record some of my explorations as I hunt around in other corners of the software world, trying to decide if there's a viable business plan for me that can include weaning myself off of Microsoft software.
Mike started a new blog, A Fresh Cup, where he's reinventing himself as an open-source developer. If you were wondering why the content at Larkware's Daily Grind has degenerated so much recently (and boy, has it ever), now you know. His heart's just not in it any more.
I can understand where Mike is coming from. Microsoft releases new technology at a blistering pace, and keeping up-- not to mention dealing with all the obsolete baggage you're carrying around-- is half the challenge. Just take a look at the stack I have to install on my development machine to do development work in .NET 3.0:
- Windows Vista
- Visual Studio 2005
- Visual Studio 2005 Team Explorer (source control)
- Orcas Extensions for Visual Studio 2005 (WPF & WCF project templates)
- SQL Server Express SP2
- Visual Studio 2005 SP1
- Visual Studio 2005 SP1 Update for Vista
- ASP.NET 2.0 AJAX Extensions 1.0
- Expression Blend
Historically, I've used Microsoft development environments because they made my life easier. It's hard to look at this list and see how it's any easier than the open source alternatives. I also begin to look longingly at the open source developers who have been plugging away productively in Perl or Python over the last five years. Sometimes, you wonder if choosing an environment where things change more slowly isn't a better long term evolutionary decision. Perhaps there's a kernel of truth in Paul Graham's sensationalist Microsoft is Dead article: can you even name any startups that use Microsoft development tools?
So part of me agrees with Mike. To paraphrase Chris Rock: I'm not saying he should have given up on Microsoft. But I understand.
Mike's certainly entitled to take whatever steps he deems necessary for his professional development. Still, his attitude frustrates me, because it falls so egregiously into the stereotypical, religious love/hate dichotomy that I've observed again and again in software developers. You either love Microsoft and use exclusively Microsoft products, or you hate Microsoft, and you vow never to use any of their products ever again. There's nothing in between. No middle ground. Why does it have to be an all or nothing proposition? As far as I'm concerned, every software developer, regardless of what's on their tool belt, has the same goal: to craft useful computer software that delights users. We're allies, not enemies. Friendly rivalry I can understand. But the rabid partisanship that I typically see-- on both sides of the fence-- isn't helping us.
I also find that both the Microsoft community and the open-source communities are far too insular and provincial. I had the great pleasure of meeting Miguel de Icaza at MIX this year. Miguel is one of my heroes, as he was instrumental in bringing .NET to the world of open source with the Mono project. What truly surprised me, though, was how few MIX attendees knew who Miguel was, despite his groundbreaking contribution to the .NET programming ecosystem. To me, he's famous. A celebrity. But because Miguel has roots in the open-source community, he barely exists to the majority of Microsoft-centric developers. They didn't even know who he was! And those who did recognize him had about a 50/50 chance of disliking him on principle. As Miguel pointed out during the open source panel, he's disliked by both camps: open-source zealots think he's sold out to Microsoft, and Microsoft zealots think he's destroying the value of the .NET platform.
This is wrong. This is not the way things should be.
As a software developer, you're doing yourself a disservice by pledging allegiance to anything other than yourself and your craft-- whether it's Microsoft or the principle of free software. Stop with the us vs. them mentality. Let go of the partisanship. We're all in this thing together.
I'm a pragmatist. For now, I choose to live in the Microsoft universe. But that doesn't mean I'm ignorant of how the other half lives. There's always more than one way to do it, and just because I chose one particular way doesn't make it the right way-- or even a particularly good way. Choosing to be provincial and insular is a sure-fire path to ignorance. Learn how the other half lives. Get to know some developers who don't live in the exact same world you do. Find out what tools they're using, and why. If, after getting your feet wet on both sides of the fence, you decide the other half is living better and you want to join them, then I bid you a fond farewell.
But either way, we're still friends.
Posted by Jeff Atwood
The vast majority of developpers I know are not zealots, far from it. They stick to what they learned in school, and don't seek to know other stuff. It's simply a job for them and they don't really care about the origin of the tools. Zealots, on the other hand, from either camp, are far more verbose, they want to convince. I find both attitudes sad. I do care about the tools I use, and am always looking out for new ideas, products, concepts, etc and I don't care if they are from Ms or open source or from the Apple world or BSD, or Unix, etc. It is, for me, the best way of improvement, and even after 15 years in the field, there is no greater pleasure for me than when I stumble in awe on a new idea, a nifty hack or cool piece of soft.
Yes, we are sharecroppers (thanks Peter). Microsoft is a business and it's a question of money: if we want to keep using MS software, someone (our companies or clients) will have to pay MS some part of the IT budget instead of paying us. Then again, MS is very good at getting licenses for their software to make business sense, although I've never had a job where we aren't behind the curve in terms of latest MS versions at least partly for financial reasons (and supplemented our MS "stack" with open-source tools). IBM is bullish on open source because it can use the fruits of its open source efforts without licensing anything. Most interesting to me now is the way .NET is converging with open-souce, dynamic languages like Python and what effect this will have on the marketplace.
Microsoft may not be the best solution around, but, they are not the worst either. For the last 10 years I have been listening to people complain about Microsoft. I have no love for microsoft one way or the other, however, (for the most part) when I use a Microsoft product it works. I don't have to spend a lot of time tweaking it or getting it to work well with other Microsoft programs. The stuff just works well out of the box. Are there better products out there...of course there are. Will I check them out...of course I will. I may even add them to my toolkit of products that help me get the job done. I get paid for results, not because I use one technology over another. I say use whatever product helps you get the job done quickly and correctly.
I think I'll still use Microsoft Tech for Games
How many people on this thread have a shopping list of programming languages that they've learned over the years? How many of those languages are based on, subsets of or share concepts with each other?
I can't think of time where I have programmed the same langauge in the same way for the same purpose for a prolonged period of time.
The world evolves and so do the people, companies rise and fall, concepts and methodologies come and go and stay in and out of vogue.
If food, family and survival are your reasons for staying or going with a platform then you've got greater problems. If your choice of platform is because it's fashionable and gives logo's to your tag you have another set of issues. Maybe your the kind that likes to stick it to the 'man' -- well good luck in the battle, your fighting for what?
Programmers are problem solvers that use technology as the answer.
The red hammer works great in one scenario and the blue one works well in another. Because the blue works doesn't mean your locked into a future of blue handled tools. If someone asks you to make something only using the red tools (because thats all they have) then you craft your wares using those items.
If you're good at programming, then you can switch back and forth and learn new things as you need them. The more diverse expierence you have the better you get and it makes it easier to adapt to new things.
It's convenient to pick a side as it limits the choices and makes your life easier. If your incapable of seeing the 'other' side then you should turn around and get back to work, your wasting everyone's time.
I've been developing software for various Microsoft platforms since Windows 3.1 (Win16). Back then I primarily programmed in C and transitioned to C++ after a couple years. I've dabbled in Java but once the .NET Framework came out, I found very little use for it. Over the last few years I've mainly been developing integration services, frameworks, and tools using Microsoft tools and products. Overall, Microsoft is a fantastic company when it comes to supporting developers. MSDN is a fantastic resource and is overflowing with great and, admittedly, sometimes not-so-great, information, tools, free software, guidelines best practices, docs, etc.
This article states that it is becoming increasingly complex to develop with Microsoft products. The following list is provided as an example of developing against .NET 3.0:
Visual Studio 2005
Visual Studio 2005 Team Explorer (source control)
Orcas Extensions for Visual Studio 2005 (WPF WCF project templates)
SQL Server Express SP2
Visual Studio 2005 SP1
Visual Studio 2005 SP1 Update for Vista
ASP.NET 2.0 AJAX Extensions 1.0
If we clean up that list a bit to represent what the full release of "Orcas" will ship with, the list looks more like:
Visual Studio 2008
ASP.NET 2.0 AJAX Extensions (might be included in .NET 3.5?)
It is also interesting to note that you don't need to develop under Vista to take advantage of interesting .NET 3.0 functionality, namely WCF and WF. You can also develop against the .NET 3.0 Framework on WinXP SP2 and Windows 2003 using VS2005 w/SP1 WCF/WF extensions add-on.
If I want to develop in Java, I have to install:
NetBeans or Eclipse
Java SE and/or Java EE
Apache (and Axis 1.4)
Developing against the .NET Framework is no more difficult or complex than developing against the Java Framework (and supporting SDKs.) If anything, I find that Microsoft has done a fantastic job of clearly organizing and documenting the various frameworks that they provide. I find the Java world very convoluted because you have a plethora of open source libraries that are poorly documented (Javadocs that just detail method signatures and class hierarchies are weak excuses for documentation), poorly supported, usually not vigorously tested, and usually quite buggy.
Personally, I like to use whatever products allow me to be the most efficient and create the best solutions for my clients. Microsoft tools allow me to do that. What would take me 5 lines of code in C#/.NET might take me 15-30 lines in Java, three 3rd party supporting libraries, and a boat load of configuration headaches. With Microsoft's recent push towards interoperability and open standards (WS-*, SAML, etc), things are just getting better and better for MS developers. Microsoft's latest frameworks - WCF, WPF, and WF - are incredibly useful, well architected, and well documented/supported.
I've got nothing against the open source community or Java, but until I see a real reason to switch, I'll stick with my efficient, well documented, well supported MS tools. While they might not be perfect, they are certainly much better than the alternative.
Anyone remember Netscape? I wouldn't count Microsoft out. Microsoft has always provided great support to developers. This is arguably their claim to fame. These days, however, that isn't enough. Microsoft needs to start embracing and promoting better design and user experiences in the MS community. There are new shops using Microsoft's latest frameworks. As Joel points out, these are extremely well thought out and documented. Some of the most recent WPF design and development coming out of the next generation software agencies is proof there is still life. Take a look at the New York Times WPF reader or Nostalgia from thirteen23. Never say never.
After being a Borland programmer for years and switching to the MS environment, I have issues also. Everyone wants MS stuff, but I can't see past the bugs. I mean, I have never had the IDE crash or destroy my code using borland tools, but constantly have problems with the MS IDE. I have lost hours of work...and it is just not on a single machine. Stability is my issue, of the IDE and the stack. For those that have to support the system, a question for you...what do you need to do when one .net service hangs...there is only one choice, reboot the machine. Not good for a service oriented architecture. I have to create high availability just to get around bugs MS says they will fix in the next patch (several patches ago).
cam - you obviously have no idea what you're doing! Vs2005 SP1+ and the framework are notoriously stable. I've delivered 100% availability for our big SOA / SaaS app in the last 2 years. We've had absolutely NO problems at all (other than the DC having power problems - damn you redbus!).
Ignore cash and politics as neither of these matter if you're running a profitable organisation. People are where the cost is. Personally, I'll stick to .Net until someone delivers something truly better. There is nothing else out there which can use the same technologies for a) web, b) mid tier, c) desktop apps, and d) mobile apps, has available developers by the dozen, has low entry requirements into development, produces real results quickly and doesn't get developers too frustrated.
I've used RoR extensively. It doesn't perform, has way too many workarounds if you want to do something slightly out of "the ruby mindset", is incredibly hard to find good developers and the language is hideous. There are way too many zealots as well.
I've used PHP extensively. It doesn't perform either, is a mess of a language, I've never encountered a good developer in London, it's insecure by design and it doesn't promote clean design.
I've used Perl for about 10 years now. It's a mess. Need I say any more.
I've used Python extensively. It's the nearest competitor to .Net but it doesn't have the tool support or a framework suitable for delivering big applications with unless you want to write everything from scratch. It also runs on .Net as IronPython on the DLR so might as well just use .Net anyway.
Java is just too fragmented (how many frameworks?) and configuration oriented to be useful! Eclipse is just a crash-a-thon. I've not tried anything else in it, so that is the limit of my experience.
Mono is good but it's just .Net at the end of the day, so why not go with the genuine thing and benefit from completeness.
I'd like to see something better than .Net, but it doesn't exist. Yet! When it appears, I'll be there.
I can understand where Mike is coming from. Microsoft releases new technology at a blistering pace, and keeping up-- not to mention dealing with all the obsolete baggage you're carrying around-- is half the challenge.
Is it just me or did you completely skip over Mike's main point about Microsoft being "a grave threat to the future of software development through its increasing inclination to stifle competition through legal shenanigans"? But instead choosing to change his reason to something about keeping with Microsoft's "fast pace"? wtf?
Microsoft doesn't "release technology" at a blistering pace, they copy other peoples work at a blistering pace.
The real innovation happens outside of Microsoft, then they copy it and run the innovators out of business.
You can only do that for so long before the innovators band together.
Watch for the Google / Apple / Adobe combo.
I have nothing to add because you get to a point where you decide to switch and you commit and then you wonder why you did not do it earlier.
I jumped into the Python development community and have never looked back on .NET.
I have found the job postings are exploding in the Python space and being an early adopter I am getting more pay, and it is a lot of fun being on a team where we are all rather new and exploring the lovely Python programming paradigm. It is also a good feeling knowing we will soon be the old toothed wisened ones of the Python space and be the go to people =)
Lovin' it MS Free at last!
I haven't heard of an IDE better than Visual Studio. Do Perl and Python developers even HAVE an IDE, or do they just use vim or Emacs?
Why is everyone SO Addicted to tools that write code for you and dumb you down. Why not just write it in a text editor (notepad,vi,emacs)?
I have been writing code for 20 years. I have been a MS solutions provider, I have worked writing asp (old) and VB. I have written in java and prefer that. I was forced to use an IDE for the MS stuff and hated it.
I now, 20 years later, use Windows, Apple and Linux for desktops. But I use Linux for all servers everywhere although my company does have windows servers. I take care of all the linux machines, by myself and there are several people needed to take care of the windows servers. I have not had to fix anything on the linux servers in the past year. In fact they haven't even been shut down! They are stable. Something that cannot be said confidently about windows servers.
I write EVERYTHING in a text editor. I contribute stuff to open source community, etc. All from the same editor.
As a programmer I have always been annoyed at Microsoft's failure to follow their own standards. It horribly obvious that every API was written by a completely different person/team and none of them have ever spoken to each other. It's all a bunch of design by committee that ends up being work-arounds for their own API's! Argh!
And don't get me started on Microsoft's documentation. What a joke. Most of their examples don't work and even when they do they are usually really excellent examples of bad coding practices.
For instance you should NEVER teach someone how to do something in a way you would never actually do, like using my in front of variables and objects. Have you ever in your professional life prefixed a variable with my? Or would you use Microsoft's own standards and name the variable appropriately?
If you wouldn't do it in production code then don't use it in an example! Duh!
But I think that's because, in my uninformed opinion, they use summer interns to write their documentation because the real programmers couldn't be bothered.
Here are two reasons for all of this animosity:
1) Microsoft tools generally do not play well with others. This trouble is largely of their own making on this front. What do I use to do VB.Net development if I want to use something other than VS? How about a middleware application server? How about what OS it runs on? Java, Python, Ruby, ANSI C, etc all have options.
2) Having been on the receiving end of MS's business practices (and the BSA) for simply having a public facing web server that was not IIS (no violation was ever found, through 6 full audits) I understand also why people are leery of doing business with them.
There is more that just this, but this is a large portion. Lack of choice and fear of being bullied, or having the tool that works go away with no way to revive it is no fun.
I have been programming since MS was just small, and insignificant. I have worked on nearly every platform there is from mainframes to PDA's. I use MS products at times, but reluctantly.
Dvaid H Said:
"I can't afford to "get my feed wet on both sides." My work involves PHP, Apache, and MySQL. To test the water on the other side, I would need an XP (or Vista) license, a MS SQL license, and Visual Studio (to learn ASP). Rather than pay for these licenses - just to see what advantages and disadvantages MS offers - I have to go with legally free software. "
This is exactly why there is SQL Server Express and Visual Studio Express.
You can learn the ins and outs of the MS platform for free now, and when your ready to make the commercial plunge, buy the software.
Express is powerful enough to do most of what any of the open source stuff does anyways.
I can't afford to upgrade to the latest version of Visual Studio every couple of years at a cost of thousands of pounds every time - that money typically needs to go on other things like food and the mortgage. When you get into free tools you find things like Emacs (which gets exponentially more powerful the more you learn to use it) don't need to change every time you upgrade some part of your kit, they just keep on working like they always did; maybe you need to update a couple of bindings to keep up with changes but it's not a mammoth task and it's not expensive.
If I was working for someone who was buying all my tools for me, that's maybe another matter, but working for me it's simple economics that when there are tools out there like Eclipse and Emacs and the code they produce is no different in outcome to Visual Studio it's just not worth the expense.
Just like the guy a few posts back I spent years with ASP.Net, battling to make sites that were standards-compliant and accessible, but currently I'm working with RoR and enjoying it for it's simple, no-nonsense approach.
Well said. I felt the same way at MIX - privileged to get to hang out with Miguel, and frustrated that few people seemed to know him.
I've always wondered why people like Mike don't make incremental steps to a Mono based stack instead of "chucking it all" and starting over with Ruby on Rails on a Mac. It's very possible to leverage your .NET knowledge in open source development. I'm still amazed that most .NET developers think you need to recompile their code with Mono's compiler (mcs). Since Mono works at the MSIL level, you can copy binaries written in Visual Studio to a Linux box with Mono installed and just run them.
ASP.NET code is the easiest to get working in Mono. Rob Conery had to change just one line of code in the entire SubSonic framework to pass the MOMA Mono Compliance checker.
well said. I myself never understood why people like to take sides and lambast and insult the other camp with reckless abundant. Of particular note is, what they mostly state is nothing directed to improving the situation.
I inline skate, you skateboard, we're street skating because it's _fun_ so why can't we hang out together?
One drives a BMW, the other a Mercedes Benz. Big deal.
I love all the comments that Microsoft is better or Open Source is better. My IDE is better than your IDE!!! It's comical and makes me laugh. Does the average user even care? No. The average user just cares that it works. The point is providing quality software to your end users. Whether its Microsoft or Open Source its your job as a developer to help pick the best tools for the job and implement code. Sometimes the toolset is driven by the company your working for. Every interview I've ever given is something like: Our product is using .Net 1.0 VB. NET with some C++ mixed in or something similiar. Are you interested in doing that type of work? Then it's up person to decide.
I work with Microsoft products, but that doesn't mean I'm not intested in Open Source. I think that if your in one camp or the other your missing out and that this bias will make your software development experiences and decisions narrow minded.
After nearly 5 years of ASP.NET, C# etc I'm now working full time as a Ruby on Rails dev and I couldn't be happier. While I really have no problem with the .NET framework itself or even Microsoft (other than its questionable legal hijinx) ASP.NET is in my eyes a piece of software that completely misses the point. It seriously feels like the MSN (circa 1995) of Web frameworks. It's great for people who want the web to feel like windows but does its best to shut out people who want the web to feel like the web. (or develop like the web)
This along with Microsoft's complete "if it wasn't built here, it doesn't exist" stance on dev. technologies is why people have such strong views about MS, and even MS based dev shops. MSBuild really shouldn't even exist, or their source control, or J#.NET. There were technologies that existed before these that were great and the MS take on them tends to be a rip off at best contributing very little new. Why not just contribute to the existing thing, make it better, and use it? (Ala Adobe, Apple, Google, Yahoo!, IBM, etc)
Even this wouldn't be so bad except that dev shops tend to buy into this attitude with: "If it doesn't come from MS it doesn't exist", or "Why build it if we can buy it?" Sure this makes sense with some things but AJAX libraries in ASP.NET? People build this stuff by hand every day, it's not that out there. In my time at MS shops I spent more time learning new Plugins, Libraries, and Frameworks we purchased than I did actual programming. It was completely ridiculous.
All that said, I really liked C#, VS.NET, and had the opportunity to work with some great programmers. It's just that in the end the prevailing attitudes of the ASP.NET community really turned me off as a developer. It may be where the money is, but it's not where the innovation is - most of the devs seem to be waiting for MS to move first on that one.
Personally, I think Microsoft's really got its stuff (developer tool-wise) together in the last 5 years, and I haven't heard of an IDE better than Visual Studio. Do Perl and Python developers even HAVE an IDE, or do they just use vim or Emacs? Yech. I don't think I'd want to work in such an environment, but certainly we can learn a lot from "the other half". (And look what's happening with C# 3.0... quite a bit of inspiration from Lisp and Ruby, I suspect.)
Wow. Could you actually make a decent comment, instead of having a whole paragraph rant against Linux users and Python/Perl programmers (the "other half", as you call us)?
I'd like to see your Visual Studio start up before Vim on a console via SSH, by the way.
And search Wikipedia for "Python IDE". You'd be suprised.