You Are Here:

Community: Blogs

Who am I?

dcrocha

I'm a software engineer with 10 years experience in application development, having worked with Web (Perl, PHP, JavaScript, JSP, Servlets, Flash, ASP), Enterprise (Java EE) and Mobile software (Symbian C++, Java ME, Flash Lite, Python). Currently working as Forum Nokia Technology Expert with many exciting technologies.

Check my blog for more articles and fun stuff: http://rawsocket.org

 

Calendar

« May 2008 »
Mo Tu We Th Fr Sa Su
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
 

Daniel Rocha's Forum Nokia Blog

Which technology should I use for development? Round 1: Java

dcrocha | 27 May, 2008 18:29

If I had just made a dollar each time I heard this question...  *sigh*.

With the availability of so many different development technologies in Nokia's platforms today, sometimes is hard to decide which of them we should use to build our application, isn't it? There's Java, Symbian C++, Open C, Flash Lite, WidSets, WRT Widgets, Python, and the list is still growing.

This is good news for developers, since not everybody has the same technical background nor is developing the same kinds of applications; this means at least one of the technologies will fit our experience and purpose like a glove, and we are going to use it. On the other side, this may confuse newcomers to the wonderful but fragmented mobile software world. Usually it goes like this:

Question: "I want to write an application that opens a file and sends it out to a web server. What should I use to create it?"
Answer 1: "Java ME, FileConnection API"
Answer 2: "Don't bother, use C++ or you will get a lot of security prompts."
Answer 3: "Why use C++ when you can do the same with Python? C++ is way too hard!"
Answer 4: "Python does not run on S40, use Java."
Answer 5: "Do you really need all that jazz? Why don't you go with Flash Lite and use server-based persistence? Your application will look great!"
Answer 6: "Flash Lite is too fragmented. Use Java, but beware of the MIDlet signing issues or your app's user experience will be crap!"

Go check the Discussion Boards. It is crowded with examples of conversations like the one above. Having answered this question so many times before, I decided to summarize my answers in this blog, in the hopes of helping developers decide what use from the growing technology options pool offered in mobile devices these days. Please keep in mind that the following are my opinions on the subject; yours may differ and even prove mine wrong, but that's the beauty of interacting with people within a community. As the number of technologies it too big for a single post, I will continue my analysis in the upcoming posts. I will start off with the most popular mobile developmentp platform, Java ME.


Technology: Java

Good for:

  • Productivity applications - Examples: sports trackers, expense control apps, Personal Information Management (calendar, phonebook, etc.).
  • Games - Both casual and complex.
  • Enterprise applications - These don't require fancy user interfaces. Using LCDUI and the standard packages can go a long way pretty fast.
  • Rapid prototyping and proof-of-concept applications.
  • Network applications - RSS readers, weather services, blogging applications, mobile versions of Web applications.
  • Creating truly portable apps

Why? 

  • Java and its mobile version are very simple to use and learn -  An experienced programmer, even coming from other C/C++-based languages, can get a pretty good working knowledge of how everything works in a matter of weeks and start producing applications quickly. This leads to faster time-to-market for Java ME apps.
  • Applications are generally portable between S60 and S40 platforms - Although there are some differences in implementation, supported packages, audio/video formats and so on, those are few in number and thus easier to work around. You don't need to entirely rewrite your application so it will run on N95 instead of 6131: a few runtime checks and versioning tools will be enough.
  • Game API combined with optional packages makes it a killer for game development
  • Straightforward network API makes it easy to communicate with web services - The GCF (Generic Connection Framework) is a simple and unified way of using the network on Java ME applications. Once you learn how to do one kind of connection, you will have learned them all.

Bad for:

  • Accessing device resources - Examples: SMS Inbox, file system, gallery, hardware.
  • Multimedia applications - Examples: Video streaming players, audio and video recorders, camera applications.
  • Performance-intensive applications - Scientific computing, image processors, video decoders, sound processors.

Why? 

  • Java's functionalities depend on Java Community Process process: if there's no official, industry-standard API for what you want to do, you are out of luck. Example: accessing SMS inbox.
  • Mobile Media API implementation is (too) highly modular, a lot of runtime checks are needed. Also, most functionality is implemented on the native side and then made available to Java's virtual machine, such as the camera access. This may have a serious impact on performance.
  • Fine-grained control over video, audio and camera is generally not available. Although JSR 234 (Advanced Multimedia Supplements) tackles some of these issues, it still can't be compared to what's available on other technologies, and its device availability is still low.
  • Access to the file system is provided by FileConnection API, but it's somewhat restricted and requires the midlet to be signed, otherwise multiple security prompts will be displayed, taking your user to tears (believe me). The signing process itself costs money and has some bureaucracy, so be prepared.

As I said before, these are my opinions on the technologies. It does not mean that X is better than Z, and Z should be thrown into the dirt and kicked in the head, like XML in the funny The Parable of the Languages. If you get your requirements right, it's very likely that your question of "what to use" will answer itself. Need to access the Inbox? Down with Java. Need portability? Down with Python and C++. Fancy UI? Flash. Requirements management is a science, not an art, so when you get it right from the start, the development technology to use will pop up naturally.

Next time I will cover the darling of all Internet programmers, now getting much of the attention on S60 platform: Python.

See you!

RSSComments

Re: Which technology should I use for development? Round 1: Java

antonypr | 28/05/2008, 04:17

antonypr

It's going to be more interesting when Nokia releases Qt and Silverlight. :)

It's a very hot topic

tote_b5 | 28/05/2008, 11:51

tote_b5

Daniel,

Thanks for writing a series of post about this question, this topic is really worth the attention. Actually I could imagine an ever-expanding set of articles discussing this question, of course, a blog is not really the right means for sharing this information (as opposed to a Wiki, for example).

Furthermore, it would be also important to compare other development environments, tools, etc. than what Nokia currently offers to see how developers do mobile software development for other phones, like Linux phones, Windows Mobile-based ones, iPhone, BlackBerry, etc. I must admit, though, that it would be a very complex analysis and would most probably require joint effort of experts on their own areas (unless you're experienced in all of them:).

Re: Which technology should I use for development? Round 1: Java

biskero | 28/05/2008, 12:31

biskero

Ciao,

would it be more appropriate to ask: "what I am trying to achieve and then select the appropriate technology?"

Alessandro

Re: Which technology should I use for development? Round 1: Java

bogdan.galiceanu | 28/05/2008, 13:11

bogdan.galiceanu

Nice post, Daniel. Maybe after you write the whole "series", it can be posted as a sticky thread in the Discussion Boards (probably the General Discussion section).

Re: Which technology should I use for development? Round 1: Java

croozeus | 28/05/2008, 13:19

croozeus

Eagerly, awaiting the next post...

Tools are a factor, too

JOM | 29/05/2008, 23:14

JOM

It's not only a question of what you can do with the language. As important question is the usability from developer point of view: what kind IDE there is, how's the documentation, how do you debug, do you have profiler and code scanner, how do you do automated testing etc.

Even though I hate it, also signing process should be considered. Java verified will get more difficult, WRT has the easy way.

Looking forward to next article,

--jouni

Nice

lpvalente | 02/06/2008, 14:27

lpvalente

Hey Daniel,

I've written a page on the Wiki for beginner developers named "Getting started on mobile phone development", but it's a bit incomplete.

I think it would be very nice to have there the information you wrote here

Here's the link: http://wiki.forum.nokia.com/index.php/Getting_started_on_mobile_phone_development

You must login to post comments. Login
 

Rate This

 
 
Bookmark this page: DeliciousDiggFacebookGoogleYahooStumbleUponRedditFurlTechnocratiMagnoliaTwitter  Share this page Share this page Print this Page Print this page Invite a friend Invite a friend
Email Newsletters Press Terms & Conditions Privacy Policy Sitemap Contact Us © 2009 Nokia 
RDF Facets: qdcZdescriptionQSxAE20blogE20aboutE20everythingE20thatE20soundsE20interestingE20toE20meE20andE20ForumE20NokiaE20audienceE2eE20dcrochaE20E7cE2027E20MayE2cE202008E2018E3a29E20IfE20IE20hadE20justE20madeE20aE20dollarE20eachE20timeE20IE20heardE20thisE20E71uestionE2eE2eE2eEa0E20E2asighE2aE2eE20WithE20theE20availabilityE20ofE20soE20manyE20differentE20developmentE20technologiesE20inE20NokiaE27sE20platformsE20todayE2cE20sometimesE20isE20hardE20toE20decideE20whichE20ofE20themE20weE20shouldE20useE20toE20buildE20ourE20applicationE2cE20isnE27tE20itE3fE20ThereE27sE20JavaE2cE20SymbianE20CE2bE2bE2cE20OpenE20CE2cE20FlashE20E4citeE2cE20WidSetsE2cE20WE52TE20WidgetsE2cE20PythonE2cE20andE20theE20listE20isE20stillE20growingE2eE20ThisE20isE20goodE20newsE20E2eE2eE2eX qdcZidentifierQSxhttpE3aE2fE2fblogsE2eforumE2enokiaE2ecomE2fblogE2fdanielE2drochasE2dforumE2dnokiaE2dblogE2f2008E2f05E2f27E2fwhichE5ftechnologyX qdcZpublisherQUxhttpE3aE2fE2fswE2enokiaE2ecomE2fidE2fc764fd1cE2d8b06E2d499aE2d9a6aE2d17c3903d5a65E2fforumE5fnokiaE5fcrawlerE5fagentX qdcZtitleQSxE44anielE20E52ochaE27sE20ForumE20NokiaE20BlogE20E7cE20WhichE20technologyE20shouldE20IE20useE20forE20developmentE3fE20E52oundE201E3aE20JavaX qdcZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qdcZtypeQUqfnTypeZBlogContentQ qdcZtypeQUqfnTypeZBlogE45ntryQ qdcZtypeQUqfnTypeZCommunityContentQ qdcZtypeQUqfnTypeZE52esourceQ qdcZtypeQUqfnTypeZWebpageQ qdcZtypeQUqmarsZManagedE52esourceQ qdcZtypeQUqwebZInformationE52esourceQ qdcZtypeQUqwebZPageQ qdcZtypeQUqwebZE52esourceQ qdcZtypeQUqrdfsZE52esourceQ qrssZdescriptionQSxAE20blogE20aboutE20everythingE20thatE20soundsE20interestingE20toE20meE20andE20ForumE20NokiaE20audienceE2eE20dcrochaE20E7cE2027E20MayE2cE202008E2018E3a29E20IfE20IE20hadE20justE20madeE20aE20dollarE20eachE20timeE20IE20heardE20thisE20E71uestionE2eE2eE2eEa0E20E2asighE2aE2eE20WithE20theE20availabilityE20ofE20soE20manyE20differentE20developmentE20technologiesE20inE20NokiaE27sE20platformsE20todayE2cE20sometimesE20isE20hardE20toE20decideE20whichE20ofE20themE20weE20shouldE20useE20toE20buildE20ourE20applicationE2cE20isnE27tE20itE3fE20ThereE27sE20JavaE2cE20SymbianE20CE2bE2bE2cE20OpenE20CE2cE20FlashE20E4citeE2cE20WidSetsE2cE20WE52TE20WidgetsE2cE20PythonE2cE20andE20theE20listE20isE20stillE20growingE2eE20ThisE20isE20goodE20newsE20E2eE2eE2eX qfnZdistributionQUxhttpE3aE2fE2fblogsE2eforumE2enokiaE2ecomE2fX qfnZtopicQUxhttpE3aE2fE2fswE2enokiaE2ecomE2fFNE2d1E2fBlogTopicE2fgeneralXRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZcppQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZenterpriseQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZentertainmentQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZflashQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZgamesQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZjavaQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZopenE5fcQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZpythonQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZseriesE5f40QRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZseriesE5f60QRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZwebE5frunE5ftimeQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZwebE5ftechnologyQRqmarsZrelevanceQNx100X qfnZtypeQUqfnTypeZBlogContentQ qfnZtypeQUqfnTypeZBlogE45ntryQ qfnZtypeQUqfnTypeZCommunityContentQ qfnZtypeQUqfnTypeZE52esourceQ qfnZtypeQUqfnTypeZWebpageQ qfnZupdatedQDx2008E2d06E2d02X qfnZuserE5ftagQSxenterpriseX qfnZuserE5ftagQSxentertainmentX qfnZuserE5ftagQSxflashX qfnZuserE5ftagQSxgamesX qfnZuserE5ftagQSxjavaX qfnZuserE5ftagQSxopenE2dcE2fcE2bE2bX qfnZuserE5ftagQSxpythonX qfnZuserE5ftagQSxs60X qfnZuserE5ftagQSxseriesE2d40X qfnZuserE5ftagQSxsymbianE2dcE2bE2bX qfnZuserE5ftagQSxwebE2druntimeE2dwrtE2dX qfnZuserE5ftagQSxwebE2dtechnologyX qmarsZdescriptionQSxAE20blogE20aboutE20everythingE20thatE20soundsE20interestingE20toE20meE20andE20ForumE20NokiaE20audienceE2eE20dcrochaE20E7cE2027E20MayE2cE202008E2018E3a29E20IfE20IE20hadE20justE20madeE20aE20dollarE20eachE20timeE20IE20heardE20thisE20E71uestionE2eE2eE2eEa0E20E2asighE2aE2eE20WithE20theE20availabilityE20ofE20soE20manyE20differentE20developmentE20technologiesE20inE20NokiaE27sE20platformsE20todayE2cE20sometimesE20isE20hardE20toE20decideE20whichE20ofE20themE20weE20shouldE20useE20toE20buildE20ourE20applicationE2cE20isnE27tE20itE3fE20ThereE27sE20JavaE2cE20SymbianE20CE2bE2bE2cE20OpenE20CE2cE20FlashE20E4citeE2cE20WidSetsE2cE20WE52TE20WidgetsE2cE20PythonE2cE20andE20theE20listE20isE20stillE20growingE2eE20ThisE20isE20goodE20newsE20E2eE2eE2eX qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX qrdfZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qrdfZtypeQUqfnTypeZBlogContentQ qrdfZtypeQUqfnTypeZBlogE45ntryQ qrdfZtypeQUqfnTypeZCommunityContentQ qrdfZtypeQUqfnTypeZE52esourceQ qrdfZtypeQUqfnTypeZWebpageQ qrdfZtypeQUqmarsZManagedE52esourceQ qrdfZtypeQUqwebZInformationE52esourceQ qrdfZtypeQUqwebZPageQ qrdfZtypeQUqwebZE52esourceQ qrdfZtypeQUqrdfsZE52esourceQ