As I’m a developer who has worked on a wide range of platforms, I’m often asked which is my favorite. There’s only two ways I can answer that,if it’s a developer doing the asking, the answer that person wants is which platform I prefer to develop for the most.
It’s not hard, really. Most companies that make developers their focus do a pretty good job of making a point that they care about developers. Microsoft, in particular, provides an unbelievably rich tool set for developers to work with. When I’m working with Windows .NET, I generally feel like I can pretty much develop anything within a reasonable amount of time all by myself. It’s that extensive, that powerful. You don’t really feel like you’re reinventing the wheel because there’s generally an API or web service that will do what you want out there. And yes, Microsoft thumps their chests over providing such an experience; but that’s okay. They earned that right.
Microsoft has other issues, such as the insane costs to get yourself certified (mostly just in cost of study materials), but that’s beside the point. You can do so, so much because they took big risks to make their system so much more robust (and of course, the risk there is security and stability…but those are things that can be improved upon over time…taking a regressive policy to limit robustness only stunts potential and growth of a platform while making developers hate you.)
Palm is a company that I’ve always loved working with. They might not be a big player, but they’ve always taken good care of me as a developer and provided me with a lot of choices for development and incredibly good developer support. I’m not just a fanboy of Palm because I cheer for the underdog…they’ve taken really good care of me in the past and I cannot forget that. When I was getting my feet wet with Palm development, I had their OS engineers…not just tech support…replying to my emails responsively and giving me help and pointers. I’ve NEVER been taken care of that well, not on ANY platform. I felt like they really appreciated me writing applications for their platform, and that’s a sure fire way to make a devoted fanboy out of anyone.
Here’s my rankings:
1. Microsoft and .NET: It’s just the most powerful and robust tool set out there, with maybe the exception of Linux…but .NET is far more cohesive and still way more powerful. Now, if only Windows Phone/Mobile/CE/Pocket PC/Palm-sized PC would figure out what it really wants to do with itself and do it correctly and stop doing things in a ridiculously stupid way. But I still like developing those mobile apps in .NET CF…a lot. I just wish it didn’t suck so much to use, or I could have a lot more paid jobs writing .NET CF apps for companies. The fact that Microsoft ran the same application on a phone, desktop, and web is still wicked impressive. That tells me loud and clear that they don’t want to waste a developer’s time. They might still have their foibles, but they’re moving in a direction that I like and that means a lot.
2. Palm: They might not be the biggest player, but they go out of their way and spend a lot of their limited cash to provide developers with great tools that work on any development system. They also pamper you in a huge way. Plus, I’ve never used a Palm device that I flat out didn’t like. The UI and hardware has always been good to me, even if not to others. Palm takes risks to make things work the right way, and they work their tails off to fix their mistakes when things don’t work. Now if people would just use them instead of mobile devices that are generally unpleasant to develop for.
3. Linux: You can’t beat the freedom. However, the ideas that go into the guidance and direction of the platform sometimes just don’t make any sense and give the platform the appearance of running in place (or possibly backward).
4. Minix: Man, I loved this platform that no one uses. Microkernels make driver developers look so much better because their driver doesn’t GPF the whole operating system if it glitches. Too bad the development support is highly lacking a modern toolset. People may accuse me of whining…but the value of a modern, robust toolset is that a developer can do so much more with less. When you’re coding for a paycheck, you’re working on deadlines that you probably don’t have that much real influence on (aside from working PAST those deadlines).
5. Android/Java: Not really the same thing, since Android really is its own OS with its own Java-like language. I never liked the development tools, I winced painfully when Google bought it out. As a developer, I do NOT like having third party developers use my work as an advertising revenue stream unless I can shut it down. It may just be paranoia, but I do not trust any company to make my operating system that makes all of its money on spamming its users with ads. I’d rather them license a completely ad-free OS. That said, I’ve loved Java since it came out…well, I’ve never quite loved its syntax. Just really ugly.
6. iPhone/MacOS: Again, not the same things by a long shot. Both platforms commit the sin that I cannot, not now, not ever, forgive…they are guided by a CEO and his chief geek to protect security and stability at the cost of providing robustness and openness to developers. If you want me to NOT develop for your platform, please. Make it a pain in the ass for me. I found Objective C highly reminiscent of the worst language I’ve ever developed with…MFC. Microsoft washed its hands of it, and lo and behold, Steve Jobs was right under the drainpipe straining it into a glass to serve up to his Apple developers. Sure, it’s stable…a platform is always stable when you control the hardware profile underneath and can QA the same hardware/software profile. It saves you a lot of money, too. Money that Apple HAS, in spades. But would rather spend on running small companies out of business than ramping up the team and providing a far better and more powerful development experience, taking some risks to make a better product instead of hiding in a bunker.
7. SymbianOS: Why. Why? Why did you guys design this platform in such a peculiar way? With a fairly fragmented UI, where the overwhelming majority of the work goes when you’re developing a Symbian app, to it’s highly out of date goofball notationed C++ backend, SymbianOS is the biggest pain in the ass I have ever put myself through…twice…to develop for. Sure, conceptually it’s pretty cool. It’s also the worst implementation of the Model-View-Controller pattern I’ve ever seen. A whole lot of concepts seemingly were lifted from Symbian when other mobile cellphone operating systems were created…but none of them were really all that great. Symbian never really looked all that great, nor was it all that great to use. In fact, it always looked so ho-hum that people often mistook it for a dumb phone. It pretty much worked like one, except that it normally was on phones with bigger screens and higher resolutions. As for memory management…created in the dark ages of mobile development. Still lingering on, still being a pain in the ass for developers.
Again…look. This isn’t a whine. This isn’t me complaining that my job is too hard if I have to do something on one platform instead of another. The problem is that in my field, budgets are the reality, and if I can’t honestly feel good about making an estimate that falls into that budget, the project falls through and I’m out a job. If, by experience, I know it’ll take me twice as long to do an iPhone app as it would a Windows Phone app, I’ll only be hired long enough to do that Windows Phone app then I’ll be out the door. There are developers that will lie to a customer and short their estimates…those are developers that will either be prepared to be abused by their bosses when they invariably go over that estimate, or they’ll job search and try to bail out before the project hits the wall. I don’t play it that way because it’s way too much trouble for all parties involved, and it’s bad for my reputation. If I know that I’ll have to reinvent the wheel or buy an expensive third party component to get something done in time, that platform becomes less and less inviting to develop for.
I don’t like supporting companies that make it hard for me to do professional work. By supporting those companies, it encourages other companies to follow suit and make less of an investment into making developers happy and providing the tools needed to do the best work we can do. I’d rather just go back to college and become an archaeologist or a linguist than work in the sort of industry where there was a race AWAY from the cutting edge.
