Let's talk about money first.
Today, Microsoft's most expensive developer tools package is called "Microsoft Visual Studio Ultimate Edition" and it costs $11,899. Regular developers who just want a compiler with a profiler can buy a version for $5,469. If you don't pay that much, you can't profile your code to see what's fast and what's slow.
And of course, there are many alternatives with fewer features: there are 1126 versions of Visual Studio to pick from.
Apple's most expensive developer tool is called XCode, and it is free. You can pay $99 for a subscription that allows you to publish stuff that people can download through the app store (and you also get early releases of Apple's OSes.)
Microsoft says very clearly that you should develop for their platforms if you have to, and not because you want to. It seems that they intend to make a ton of profit on these tools, rather than making a ton of profit on their operating system, Windows. And amazingly, revenues for Windows are down 4% this quarter.
To be fair, they have free "Express" versions of their software, which don't allow you to edit user interfaces, or use third-party plugins, like source control. I don't understand how these versions are supposed to encourage people to develop for Windows. For instance, many native apps written for Windows have some tie to MFC, but the Express versions don't support MFC.
Microsoft's developer tools come with all sorts of SQL databases and "team foundation servers" and enterprise-sounding integration, and there's a "servers" pane when you open their IDE that only connects to Microsoft servers.
But: if you want to write a game or deal with video or read an image, you have to separately download a huge DirectX SDK, and then a lot of your old code won't compile. For instance, with some code I made to read images from a webcam for f.lux, upgrading to the new versions has missing header files and no suggestion of what the replacement might be.
Microsoft has a very fragmented installed base (with XP at 40% of users), so certain features are only available on Windows Vista or Windows 7, and they do not make it easy to say, "I really want this app to run on Windows XP." Using Apple's tools, you say, "I want to support this level of OS" and the tools do the rest.
Microsoft's developer samples are mostly very old, and the basic story is that they spent all their effort on .NET/ASP/C#, to the exclusion of providing equal access to the OS from native code, or compatibility layers to make stuff run the same way on XP and later versions of Windows.
So if you do care about the 40% of users who haven't upgraded away from XP, you are in this strange game of chicken with Microsoft. You want tools that build one thing that runs everywhere, and Microsoft are obstinately waiting 10 more years for everyone to be running some Windows-Vista-derived OS with only managed binaries on their PC. You'd love to compile on 64-bit Windows 7 and 32-bit Windows XP at the same time, but you really don't get to.
Chicken.
Apple's XCode comes with subversion and git integration, and it builds "universal binaries" that package up multiple builds for multiple OSes. Apple's OS X has a nice shell with an SSH client, so you can manage your server that runs Linux. You can build binaries for multiple versions of OS X by pushing one button, and the code samples are up to date, and they all compile.
Windows 7 shipped "Powershell" which takes 15 seconds to launch and nobody understands.
Microsoft seems to say to developers: if you're not developing for Enterprise, we simply do not care. Our developer tools business unit can be profitable if we sell licenses for $11,000, but not if we give them away for free. And presumably, in some weird twist of Microsoft politics, the snake eats its own tail: maximize developer profits and your platform stops having any new apps in just five years.
It's confusing, right?
In Microsoft's "ecosystem", seriously talented hobbyist developers are not welcome. Not doors-open welcome, maybe junior-high-school welcome. Seriously, they turned off the dialog editor in their free tools.
So this part is obvious: all the people who are using Apple's free tools or Google's free tools or Linux's free tools to make cool stuff can ship it to consumers, while Microsoft's developers are a different breed, the stuck, the legacy...working for big companies who have to do it this way.
The big story isn't even about the iPad. It's why nobody else can get good developers on their version of the iPad, or the phone. And it's because Apple already had developers using their tools, years before they made an iPhone. And they made it easy for new ones to come on board. They made it free, they made it compatible, and they made their sample code compile.
Today, companies are developing for so many platforms at a time. When you use a tool only 20% of the time, for one of your platforms, for some of your users, it doesn't make sense to pay a premium for it. That $11,000 tool you use 20% of the time is like a $55,000 tool you use 100% of the time.
It seems that in the new world of free software, and Apple and Google, developers are sometimes kids from countries where people don't make much money. Certainly not enough to afford Microsoft's tools.
I don't think that the conclusion is hard: Microsoft needs to give up their little bit of revenue they make from exploiting IT budgets for the "developer tools" line item, and price, package, and explain their software so it makes sense to people who haven't already been doing it for ten years.
Consumers, consumers. consumers?
I think you're way off. MS's dev tools may be expensive, but they are the best by far on any platform. Documentation, support, tools, etc. across the board the best.
ReplyDeleteEveryone I know who's been forced to move to Apple tools because of the iPhone market size hates it.
And god help you if you have to work on a non-MS game console.
"there are 1126 versions of Visual Studio to pick from."
ReplyDeleteThere are not 1126 versions of Visual Studio. There are five. They are listed at http://www.microsoft.com/visualstudio/en-us/products/2010-editions/product-comparison.
"Microsoft's developer samples are mostly very old"
You're not looking at the same version of msdn.microsoft.com that I do. If anything, the content changes too much to keep up with all of the latest technologies.
"the basic story is that they spent all their effort on .NET/ASP/C#, to the exclusion of providing equal access to the OS from native code, or compatibility layers to make stuff run the same way on XP and later versions of Windows."
Please enlighten me as to what I can do to the operating system using .NET that I can't do in unmanaged code.
"Windows 7 shipped Powershell which takes 15 seconds to launch and nobody understands."
Powershell was released in 2006 for Windows XP SP2 and SP3.
To upgrade to Xcode 4 costs $4.99 (£2.99) at the App Store unless you have already paid for iOS/Mac Developers package.
ReplyDelete@jeff - .NET didn't ship in XP SP3, so it's still a download for regular users. In addition to using more RAM and CPU, this means that a 500k download can become a 30MB one.
ReplyDelete@cbloom - maybe for game code/DX the docs are clear, but for desktop, it's a mess. the core of this is Microsoft willing XP not to exist, so picking up conditional dependencies from new OSes is quite a pain.
I don't believe that Microsoft is all that focused on the B2C market, neither for their software nor their developer products. They seem much more targeted at B2B, cause that's where it's easy to generate money in license fees.
ReplyDeleteThe state of the MS developer toolset has never been better than it is today; yet the new driving force in the market is now the consumer, rather than the enterprise: and the enterprise user is starting to demand the type of functionality, design, and ease of use that consumer-targeted applications provide. This is where MS has always been behind, and continues to lag.
But I must second the earlier comments: in general, it is hard to find a more consistent set of good documentation than what is found at MSDN. Certainly my experience both with Apple (e.g. iOS Safari) and OS products (e.g. Lucene, Solr) have been immensely frustrating in comparison.
Great post! Of course, in my case you may just be preaching to the choir. Even if it was free, I'd still hate Visual Studio because it's so bloated and ugly.
ReplyDeleteIt seems to me that opinions about Xcode versus Visual Studio are so polarized that they must be for fundamentally different kinds of people. I have no doubt that Visual Studio is the best for certain kinds of things, but none of those things are things that I care about. Likewise, all the things that I care about in a development environment, Visual Studio is horrible at.
Anyway, that's not the point of your post. Back on the topic of charging for your platform's development tools, a friend of mine had this to add: “It seems to me that Apple is also monetising its developer infrastructure, but in a much smarter way: through the App Stores. A wildly successful app will surely make them more than the $11K price tag for Visual Studio, just on the 30% commissions, but by collecting the money at that stage they take a huge amount of risk out for potential devs, who get to just try stuff out.”
@Oskar agreed. The fundamental difference between the consumer and business markets from a design standpoint is that while business applications can get away with “it's what you have to use”, consumer applications actually have to be desirable on their own right. Now the Microsoft ecosystem is faltering under the weight of decades of prioritizing functionality over desirability. Hopefully now the industry is shifting towards a better balance between the two qualities, as they're obviously both important.
ReplyDeleteVisual Studio Express editions are actually perfectly capable for almost any stuff. I have used the Express versions for many things over past years and came to conclusion that even a free version of VS is an excellent development tool.
ReplyDeleteAnd yeah, Xcode nowadays actually costs ~5 bucks from the Mac app store.
I'd pick Visual Studio any time over Xcode. VS runs circles around Xcode, which starts to be really sluggy with any slightly larger C++ files for example. My experience is that it's almost unusable and I actually prefer to do most development in VS and just compile test builds for Apple devices with Xcode when needed. I think Xcode truly works well for development _only_ when you write ObjC with it. Which leads to the exact same platform lock-in issues MS has been doing for years, so Apple is really not any better here.
By measuring iteration times alone I measured that I'm about 3-6x as productive on VS.
I don't get the remarks about ssh or powershell. Everybody uses Putty on Windows, which I think is better or at least equivalent to the typical terminal sw on osx/*nix. Also the Windows ships with the classic shell (called command prompt) which is fine for most command line things, and starts faster than the terminal. The powershell is for some special-case users who need fancier server administration tools etc.