I have gotten a few questions asking why a developer should use Mono for Android (aka MonoDroid). I thought I would just do a brain dump on my thoughts on this.
Java Developers are looking at MonoDroid and wondering "Why"? They see that the core of Android is Linux, an open source operating system, with a bunch of passionette people behind it. Java developers have a free runtime, they have a free IDE (Eclips) to develop with, they have a free SDK to develop with, they view Java as an easy language to learn (and I'm not debating any of these points). Why would anyone want something else? Let me introduce myself, I'm Wally McClure. I'm a .NET developer, and I think you have a product that is being accepted into the marketplace. I want to get my some of that. How do I do it in a productive manner that doesn't require me to take all my existing knowledge and throw it away? For a developer to be productive, they need a language that they understand, an IDE that helps them to be successful, and knowledge of the underlying operating system (the -isms).
-
I'd like to "get me some of that." I'd like to be able to write programs that run on your platform. I'd like to do that with the least amount of pain possible. I'd like to reuse as much of my existing .NET knowledge as I can. Mono, the open source implementation of .NET runs on a variety of platforms. I can take my existing knowledge of C#/.NET and apply it to Android. This solves my problem of the language.
-
I'd like to use my existing tools as much as possible. I've invested time, money, and energy in learning Visual Studio .NET. I am productive in my existing environment, why should I have to add a new environment to program in. Because Mono for Android integrates in with my existing IDE, the problem of having an IDE that I understand has been solved.
-
Now, ultimately, I still have to learn the Android-isms to be productive. We've already faught the Java, cross platform wars and we know that writte one run anywhere failed. I don't think that anything can really help us on this.
Now, I don't mean to imply that learning the Android-isms is simple. Its hard. You have to learn the platform. There's no getting around that. Does Mono for Android solve two thirds of my problem? That would be underestimating the problem of learning the Android-isms. I do think that it helps with half the problem. Now that I am up and going, it seems that learning the Android-isms isn't that hard, but I would have had to learn them either way.
If I had to learn a new language, platform, and IDE, that's probably too much of a time commitment for most developers(and me). It would be the equivalent of putting a permanent stop sign in front of me, just something I don't have the time to overcome. Some developers will trivialize the time required to learn a language or IDE. I've been through this and the time is not insignificant. When you compare to bill rates, the time required can get upto speed will dwarf the cost of a plugin.
However, if I only have to learn the Android-isms, I can probably handle that. Now, there's nothing wrong with Java. For me, the cost of Mono for Android will more than offset the time required to learn a new IDE and language.
Now, lets take this a step further. What about iPhone and WP7? How does my Java code translate to iPhone and WP7? It doesn't. However, if I commit to using Mono/.NET then I can hit those 3 platforms for a significant portion of my non-UI logic.