views:

647

answers:

10

I am entering mobile development. I have been working primarily in .NET since 1.0 came out in beta. Before that, I was mostly a C++ and Delphi guy and still dabble in C++ from time to time. I do web apps quite a bit so I am reasonably proficient with Javascript, JQuery and CSS. I have also done a few Java applications. I started web programming with CGI and live mostly in the ASP.NET MVC world these days.

I am trying to decide on which platform/OS and tool to select. I am concerned with the size of the market available for my applications as well as the marketibility of the skills I will pick up.

The apps I have in mind would work on both phones and pads. Some aspects of what I have in mind will play better on the bigger screens that will be available on pads.

Here are the options I am considering:

  1. Apple iPhone/iPad using pure Apple SDK (Objective-C)
  2. Apple iPhone/iPad using Mono Touch (C#)
  3. Android using pure Android SDK (Java)
  4. Multiple platforms using something like Titanium to generate native apps from web technologies (HTML, CSS and Javascript)
  5. Multiple platforms using HTML5 web applications that run in the browser (HTML, CSS and Javascript).

Which option would you choose? Do you have a different suggestion? What are the pros and cons?

+1  A: 

Cross platform frameworks you should look at:

PhoneGap QuickConnet

Fred Grott
+6  A: 

Hi Tom,

I think you have cover almost all options, let me share my opinion on each.

  1. It is worth to start with highest priority as its Buzz now a days.
  2. According to iPhone OS 4 developers agreement section 3.3.1, apple will only allow apps developed in C/C++ and JAVA script. I would not suggest you to put your efforts in C#.
  3. Its worth and if you have good grip over core JAVA then, you can be productive in few days. At this stage Android might not have much market share but My personal opinion is ANDROID IS FUTURE.
  4. My point number 2 effect Titanium as well but according to their latest tweet, they have approval from Apple. I am not aware with ground reality.
  5. Same as point number 2

It is good, if you start to concentrate on native iPhone and Android programming framework at this stage. Still if you have time you can invest on Blackberry RIM as well, as you have JAVA background.

Welcome to smartphone dev. :)

Thanks,

Rajnikant

Rajnikant
I am worried about the Apple licensing agreement risks with both the Mono approach and Titanium. I am strongly leanding towards native tools as a result.I go back and forth on Android. It's app store is currently a distant second and they remain behind Windows Mobile in phone penetration. I have a Droid and I do love it. I also prefer's Google's open approach. However, I won't bet against Steve Jobs when it comes to marketing consumer devices that are just plain cool. Therefore, I like your suggestion to do iPhone/iPad for buzz and Android for future.
Tom Cabanski
HTML5 development is still very much allowed in the agreement, as long as you don't implement your own JavaScript interpreter. For true cross-platform development, that's probably the easiest option (although you lose out on all the benefits of each platform).
eman
HTML5 may be true in case of web app, but to use native individual device capabilities have to depend on native library. I do agree that cross platform technologies are ambitious and they are trying to remove fragmentation, but according to me its proprietary war probably and they don't likes to remove that fragmentation.
Rajnikant
+4  A: 

If you're targeting the iPhone/iPad, the changes to the iPhone SDK agreement that are being ushered in with iPhone OS 4.0 and the new SDK state that you are only allowed to submit apps to the App Store that have been written in C/C++/Objective-C, or Javascript if its a webapp.

You need to take this into consideration, because compatibility layers, cross-compilers, source translators all look like they're going to be prohibited under the new agreement, which includes things like MonoTouch, Adobe's Flash CS5, Phonegap, etc.

Jasarien
We do not have the full story on this yet. For instance, PhoneGap is explicitly ALLOWED: http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/There's a similar story for Appcellerator.
Kendall Helmstetter Gelner
They may be allowed this time around. And that was the thinking of other cross platform development tools for iPhone as well. Who can say that Apple won't ban these tools in OS 4.1 or 5.0. You can never be sure. But what you can be sure of is that the official SDK and code written in C/C++/ObjC will be allowed. It is the only known, in a sea of unknowns.
Jasarien
@Jasarien: You can't even be sure of that. App Store approval process--
synic
The App Store is a constantly evolving entity, which I agree can be one of the most unpredictable and frustrating hurdles to iPhone developers. But at the same time, I find it difficult to believe that Apple will forsake anything written in C/C++/ObjC because their own apps and frameworks are written with these languages too.
Jasarien
+1  A: 

You may be best off sticking to web apps if you're looking to make them cross-platform; the major smartphone OSs—iPhone OS, Android, and WebOS, with the Blackberry OS rumored to be next—all use the Webkit renderer, and you'll have an easier time making things that don't feel alien to each platform than if you're using one of the frameworks for writing ostensibly cross-platform code. This is the particularly the case when you take into account Apple's recent changes to their SDK license agreement: tools like MonoTouch and PhoneGap may no longer be usable for getting things into their App Store.

Noah Witherspoon
The developer in me keeps telling me exactly what you suggest -- do a web app. You can make it work on all smart phones and pads with one code base and a few conditionals. Plus, HTML5 gives you enough cool client stuff to make it work great. Unfortunately, the entrepreneur in me keeps shooting that down. "The app stores have buzz", it says. "There's going to be plenty of competition but at least your app will have a better chance of getting noticed."
Tom Cabanski
+1  A: 

There is a lot of things to consider. First you have to ask yourself two questions:

  1. Which platforms and which type of users you want to cover.
  2. Do you need to communicate with the phone (GPS, SMS etc...) or you need only some basic data manipulation and views.

If you need access to phone features then you have to develop an actual application that runs on the phone. The safest bet here is JAVA because it runs on almost all phones. But even JAVA is out as unified cross platform tools as of late. Apple put restrictions on the iPhone and iPad and MS is also unclear to me with the latest Windows Phone 7.

Now if you only need to display and manipulate data, HTML could be a valid approach. It has a benefit of being cross platform and all newer phones will have no problem displaying basic HTML. Javascript or more complex forms are still questionable though. Still to me it is the future for data oriented apps as the web support is only going to get better, javascipt included. As for HTML5 I say forget about it. It will take time to be wide spread on desktops and on phones it will take years to get there for sure.

To develop native apps for large variety of phones is quite a chalange and takes a lot of work and probably a large team. So again it depends on the task you have to do. Also if you are doing high end bussines apps, then you could only target Blacberry, Windows Mobile and something else. I don't know how widespread iPhone and Android are in the bussines world. I figure not so much.

These would be my guidellines. Obviously if you can, stick to web apps.

Runner
A: 

Independant of the new developer agrement, the effects of which are still unknown (for example people assumed that PhoneGap and Appcellerator were dead which is not the case); you are still better off in my mind targeting Objective-C on the iPhone OS platform.

The thing is that there are a lot of very powerful frameworks in Cocoa. By using Objective-C, you are also learning to think like the framework designers which means you'll have a much easier time understanding the patterns used, and also over time learn to anticipate abilities and names within the framework wince you have a clearer grasp over stylistic standards in use.

You are also instantly ready to leverage new abilities within the language and frameworks (like blocks or multitasking) rather than waiting for the framework writer(s) to figure out how to present some new feature to you. Given the acceleration of platform features, that could be a significant advantage.

Also, on a personal level - you are simply better off as a programmer the more languages you deeply understand, and the more you push outside your comfort zone to learn something truly new. That broadening helps your mind in other ways and makes you a more flexible thinker.

I have nothing against those who use other languages like Mono on the platform, I just think it makes the most sense to really use the tools and languages that are primary to whatever platform you are targeting. If I were to move into Android development I would switch to all Java in a heartbeat rather than seeking an Objective-C bridge.

Kendall Helmstetter Gelner
Yes in theory this is ok, but how many languages you can really know in great depth? Two at most. Because it means you have to work in them constantly, follow changes and learn them. Otherwise you are a jack of all trades and master of none. Also if you are alone or in small numbers and want to target multiple platforms, going native in each of them is just not doable.
Runner
At any one moment, around two. Over a lifetime? A dozen or more, easily.
Kendall Helmstetter Gelner
Then we agree. It is a problem if you want to develop native for multiple platforms and you don't have the manpower. But if there is a chance to do a project and learn a new language in the process, I also say go for it. Such chances are rare. There is always a deadline or somethings else stoping you.
Runner
Yep, over a lifetime dozens. A couple of years ago I had to jump in and help make some changes to an old COBOL system of mine that was still in production. I hadn't looked at a COBOL application for at least ten years. It came back to me almost immediately.The things that separate the best developers from the rest are a command of first principles, a hunger to learn and the ability to move from the abstract to the specific and back at will. In the end, languages and platforms are just tools. The genius of the programmer is using the best tools at hand to create something truly useful.
Tom Cabanski
+1  A: 

I just wanted to cover a point re. Android v iPhone development. Let me be upfront and say that I have not developed for Android but I have for the iPhone. However, we do own an Android-based phone and an iPhone in our household, so I can speak as a user for both.

As far as the apps go, I find iPhone apps way easier and fun to use (for the end user). A lot of Android apps are really crappy. This isn't to say that iPhone apps aren't, but the natural iPhone interface really props them up somewhat. Android's interface is nothing special at all. As an end user, I prefer the iPhone and this should matter to a developer who is trying to choose a platform.

Lately, there has been a lot of flak going towards Apple for their ToS change, and developers saying they will move to Android. I say - stick to the iPhone because the iPad is creating buzz and is a unique opportunity for you. As someone who has used Titanium and Objective-C to create apps, I suggest that you stick with the native toolset. It will take longer to learn, but you will learn the correct design patterns as opposed to Titanium which doesn't even teach you good JS patterns to be honest (Not really much MVC there).

Tilo Mitra
I agree to a point. Don't forget that Android tablets are in the works across a diverse set of vendors and price points. So far we know some big names, like Sony and Dell, are launching such devices later this year. Some of the quality problems on the Android side are a direct result of the more open platform and much looser approval rules for the store. The smaller market is also leading the best developers to focus on iPhone first. As the number of Android devices grow, this might change especially if Apple remains as closed as they are right now.
Tom Cabanski
Tom, I agree that Android is only going to grow, and they may entice some of the bigger developers in sooner rather than later. Nonetheless, I was speaking more from a User interface point of view, and I find the iPhone UI way superior to Android to the point where the same app will feel much more intuitive on iPhone OS than Android.
Tilo Mitra
I agree that the iPhone apps look and feel better than the equivalent Android ones. I've written a few Android apps and never owned an iPhone but when I see a similar app on an iPhone it is much slicker and useable.However, I think the future of Android is not in widgets but in the integration of corporate applications. The sheer number of handsets running Android will make it the platform of choice for companies that want to provide their employees with mobile versions of their business applications. These will behave more like office apps than whizzy widgets, negating the iPhone slickness.
Rob Kent
A: 

I'm a n00b when it comes to Mobile Dev as well. It's my gut feeling that you should develop in the native code/environment for whatever hardware you are working with.

RedEye
A: 

If decide to go the Objective-C route, think about still taking a loot at MonoTouch, as a learning tool, because of all the experience you have with C#.

Being able to learn the framework first, and then move to the language simplifies learning a lot. With monotouch you'll be able to learn all the iPhone frameworks you'll need to learn (UIKit, etc) in the language you're already familiar with, as well as get used to tools like Interface Builder and some of XCode.

Picking up Obj-C after you already know the framework well makes things a LOT easier. I'm doing that right now. And depending on the timeline, the moon, and Steve Jobs' mood, you might just end up being able to end up never having to go to Obj-C at all.. :)

Eduardo Scoz
Languages don't bother me much. I have delivered significant systems using Basic, Pick Basic, COMAL (an old structured basic variant), COBOL, Fortran (starting with very old Fortran IID on an IBM 1620 punch card machine), C, C++, Lisp, Prolog, Pascal, Delphi, VB, Java, VB.NET, C# and many forms of assembler. I've programmed across platforms too -- Commodore 64, TI 99/4a, Apple II, Amiga, HP3000, IBM mainframe, PC, Mac, Unix, Linux, Windows and various oddballs like custom smelting furnace controllers. The platform tends to be the bigger learning curve. Languages are just sugar.
Tom Cabanski
How could you have possibly have missed Clipper'87??? :)
Eduardo Scoz
A: 

In one of your comments you state that you own a Droid, love it, and prefer Google's approach. In your question you state you're a Java developer - of course, you could always learn Objective-C as a Java dev like I did, but then again I'm totally in love with the iPhone. It sounds like you are totally in love with Android, so I'd say apply your passion to that and make some kick-ass Android apps. I don't think you would do as good of a job on the iPhone, especially without a great understanding or passion for the platform.

bpapa