Follow up: FM-Web meets the iPhone
This post comes as a follow up on some of the questions I received based on my initial post regarding development for the iPhone using Mono.
Question: Tell me more about Mono?
(Warning, a lot of technical drivel)
Quoting from the Mono website, “It [Mono] is an open source implementation of Microsoft’s .Net Framework based on the ECMA standards for C# and the Common Language Runtime.” – http://www.mono-project.com/What_is_Mono
Browsing to the referenced page, you will see Mono’s C# compiler is feature complete for C# 1.0, 2.0, 3.0, and 4.0 (ECMA). This means that if you are C# proficient, you already have the required skill set to develop cross platform applications. (I have to distinguish cross platform and cross platform User Interface applications, but I’ll get to this point later in this post.)
Following up on the cross platform statement, you will also notice the following on the same page: “Cross Platform – Mono is built to be cross platform. Mono runs on Linux, Microsoft Windows, Mac OS X, BSD, and Sun Solaris, Nintendo Wii, Sony PlayStation 3, Apple iPhone. It also runs on x86, x86-64, IA64, PowerPC, SPARC (32), ARM, Alpha, s390, s390x (32 and 64 bits) and more. Developing your application with Mono allows you to run on nearly any computer in existence (details).” This is a pretty bold statement coming from a language, which by some, is perceived as a Microsoft only language.
To sum it up, Mono is an open source implementation of the Microsoft.Net Framework, capable of running on multiple platforms.
Question: What is the speed of delivery impact on the iPhone?
You could see this from two sides. The first could be the speed of development and delivery time to market of MonoTouch developed applications.
To put some weight behind my thoughts I would suggest listening to the following .Net Rocks podcast Weyer and Rammer Program iPhones with MonoTouch. What it boils down to is it depends on your proficiency levels. If I know nothing of Objective-C and the iPhone API and internals, but I know C#, using MonoTouch provides me with a familiar language reducing the of language up skill.
Yes, I admit, this is a subjective argument. You could argue someone proficient in Objective-C would have already overcome the iPhone technical development intricacies and would not have language up skill problems. And this statement is very much true, however having C# SOAP web service proxy classes generated for me versus parsing XML by hand using Objective-C wins hands down any day.
I’ll rather focus the extra time I have now on stuff that really matters in the application, i.e. the user experience.
The second view could be actual file sizes and execution time of the application on the device. Currently the compilation size of the prototype app is 8.5Mb, this includes the scaled down Mono run time and Garbage collector. As a download to the phone for initial installation, the package size drops to 2.5Mb.
Start up time for an application depends on what your application is doing at start up combined with the loading of the executable into memory. This means the 1st time run will be slower than a 2nd or subsequent run and so forth. In order to curb applications from turning into resource hogs, Apple enforces strict rules over the execution of applications within the OS. If there is no response within 20 seconds from an application, the OS will terminate the application.
Question: Silverlight is rather heavy/expensive isn’t it?
Although Silverlight has got nothing to do with iPhone development, I mentioned Silverlight as the same web service communication dlls used in Moonlight is used in MonoTouch. This question still has got merit in terms of the previous question, speed of delivery.
To understand why I say this, let us look at the location of the application. The application is downloaded and installed onto the iPhone, only when there is an update to the application code, will there be a new download of the application. Once installed, only data is transmitted to and from the device.
This as a matter of fact, holds true for the Windows 7 phones, running Silverlight as well as Out-of-Browser Silverlight / Moonlight applications.
However, let me not make this post about Silverlight, I’ll keep that for another time.
Question: Do you think it is the preferred way and/or what have you proved?
Do I think it is the preferred way?
If I had been a proficient Objective-C coder, I would not hesitate to say no. If I had been a Java developer, I am sure the response would not be better and I would have pointed you to a framework such as “Applause“, which uses a declarative language to define the iPhone UI and application functionality. With this response, I would already be leaning away from Objective-C.
However, I’m neither a Objective-C developer nor a Java developer. I am a C# developer with a specific skill set. MonoTouch allows me to apply this skill set today.
What have I proved?
Use the right tool for the right job. I’ve heard this a number of times the last few months. Theoretically that is the best way to go. However, I do not believe practically this is always the best route to follow.
You do not want to extend time to market with unneeded costs and risks if taking into consideration that 3 months is not that long for a product’s 1st release cycle. Even 3 months may be to optimistic.
Learning the “right tool” falls into both cost and risk categories for me. Cost in time to learn the tool and risk in terms of hitting a brick wall when your go-to-guy for knowledge disappears.
Something that may be a good idea now, with the potentially to make you heaps of money, is not always the best idea in 3 months time. Even if you were the only person to think of it the idea, nothing prevents the opposition from having the same light bulb moment in the meantime and acting on it.
I would like to think that I proved you are able to be competitive, productive and create easily maintained code, using a current skill set, even though other people may not perceive it as the right tool for the job.













