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 2: C++

dcrocha | 30 May, 2008 15:39


 The Holy Grail, according to Monty Python 

So let us talk now about the Holy Grail of mobile development in Nokia platforms: Symbian/S60 C++. It is the language in which the operating system is developed (about 95%), it is the language that allows developing all sorts of applications, from simple expense trackers to VoIP and geotagging and video-sharing applications. It is the language about which odes are written, flowers strewn at is feet, and virgins sacrificed to its altar.

It is also one of the hardest development environments there is to learn: it's not standard C++, you have to instrument a lot of the memory management yourself, the learning curve is very steep, and the amount of code it takes to write even a simple "Hello World" GUI application is larger than any other technology we'll talk about. However, if you have the skills to learn it, the patience to develop apps with it, and want to power your application with the most sophisticated features available, it can be a very rewarding experience using it after all.

Obs.: I know I promised Python this time but I felt like covering the two core technologies first.

First part of this article: Which technology should I use for development? Round 1: Java 


Technology: Symbian/S60 C++

Good for:

  • Games - Full-fledged commercial complex games, such as N-Gage's, as the APIs for direct screen access, 3D graphics, audio and video and camera manipulations are very powerful and enrich and gaming experience.
  • Multimedia applications - You can write very complex applications which integrate a handful of different powerful features such as: location, geo-tagging, video and audio low-level manipulation, VoIP, camera access and so on. As examples, check Shozu, Fring, Windows Live, Google Search, and many others.
  • Mapping and location apps - These leverage the powerful Location APIs along with the OS-provided Assisted GPS and the Map and Navigation framework (3.2 only) to give you a very fine-grained control over obtaining the location of your device and integrating it with other features or APIs. For example, Shozu integrates GPS location with EXIF JPEG data manipulation to upload pictures which are geotagged to known services such as Flickr, where they are placed automatically on a map. Very creative. Check also WayFinder, Google Maps, Nokia Maps, Route 66.
  • VoIP Applications - There are simply too many to list, just check for yourself.
  • E-mail applications - Your e-mail apps can talk to Microsoft Exchange using ActiveSync protocol, and also be integrated into the standard Messaging application so users can access it without having to go to the menu.
  • Many others - Enablers, virtual machines, services, device drivers, file managers, are all examples of sophisticated applications which can be written in C++. 

Why? 

  • API/functionality availability - Programming with Symbian C++ is almost like programming desktop applications: you will get a stagerring number of APIs, powerful features, sophisticated integration between applications and services; those allow you to do more with your device than any other technology.
  • Performance - Native C++ applications have the best performance of all analyzed technologies (unless you're a really really bad programmer).
  • Porting from other platforms - This used to be a nightmare, but with the introduction of Open C and Open C++ porting layers, it became much easier to port from other POSIX platforms.
  • Tools - Although the building tools themselves are not standard, Carbide.c++ does a fine job of hiding the complexity from you the programmer, allowing for faster application development. Its debugging tools are specially worth mentioning.

Bad for:

  • Simple applications - If you need to develop an expense or sports tracker, a blogging tool, casual game or such, using C++ is probably an overkill. You can achieve the same in much less time using Java, Flash Lite or Python.
  • Rapid prototyping - Symbian C++'s complexity will add much more time to your development projects, so it's not well suited for protopying. Do it in Python or Java and if needed, write the final version in C++.
  • Casual games - That would be another overkill. You will end up writing 7000 lines of code or so per game, and your productivity when compared to your competitors using lighter technologies will suffer. A lot.
  • Web applications - At risk of souding repetitive, another case where you're better off with technologies whose focus is Web services. I'm talking Widgets, Widsets and Python here.

Why? 

  • Harder to learn than any other technology -  Even an experienced programmer, coming from other C/C++ languages, will have a hard time learning Symbian C++, using the non-standard tools and proprietary features, such as resource and registration files. It can take a long time to get a decent working knowledge of how everything works and even then you will find yourself.
  • Slower development time - Due to the steep learning curver and overall complexity, native development in S60 is generally though to take 3 to 10 times more time than Java or Flash Lite projects. 
  • Portability - First off, there's a binary compatibility break between S60 3rd. Edition and its previous editions. Secondly, even within the same versions there some API incompatibilities/deprecations you'll only find out about when you're deep into development. In this case you'll have to produce a workaround or ask technical support from Forum Nokia to fix you an update, workaround or private API that does the job.
  • Platform security - Although it's very noble on its purpose (securing users' devices against malware), platform security can be a pain to live with during the development cycle. The whole Symbian Signed environment and platform security API restrictions slow down development time and can increase development costs, because of test fees, certificate purchasing, re-test, etc. 


"With great power, comes great responsibility", once said Spider-Man's uncle. In this case, however, with great power you'll get great complexity. If after careful evaluation of requirements you decide you should go with C++, commit yourself and your development team to learn the plaform right, and well. Otherwise it will cost you time and money. We know that time = money, so it will end up costing you money².

Symbian/S60 C++ offers you the opportunity of leveraging as much functionality as the device can provide. This can be a real differentiation factor for your applications and can result in more users, thus more money. Just make sure it's the right technology for you before you start up your project.

OK, now I'm not lying: next round will be about Python.

See you!

 

RSSComments

Great material!

marcelcaraciolo | 01/06/2008, 00:06

Great Material Daniel!! I'm learning a lot with your feedback about the Symbian plataform development languages. I'm waiting for Python and it's my favourite language. It's easy and you can prototype your application in a very high-speed way.
If you don't mind i'd like to use your material for my presentation about mobile languages at my university. Of course, i'll give you all the references and credits.
Thanks,
Marcel

Re: Which technology should I use for development? Round 2: C++

croozeus | 01/06/2008, 13:27

croozeus

I was expecting Python here :-(

Hope to see it next time...

Excellent survey!

oren.levine@nokia.com | 02/06/2008, 17:34

Thanks for this survey, Daniel. Excellent summary of the development options. I'm looking forward to the Python article, and happy to see that you mentioned using Python or Java for prototyping. That's an important feature of the S60 offering.

Balanced review

JOM | 03/06/2008, 10:12

JOM

Good review!

Excellent highlight of the very strong points (APIs, tools) with the weak ones (learning curve, productivity). Normally reviewers turn a blind eye on either one, but you presented C++ in the way it really is:

C++ - love to hate it :)

You must login to post comments. Login
 

Rate This

 
 
Bookmark this page: DeliciousDiggFacebookGoogleYahooStumbleUponRedditDiigoTechnocratiTwitter  Share this page Share this page Print this Page Print this page Invite a friend Invite a friend
京ICP备05048969号    Email Newsletters Press Terms & Conditions Privacy Policy Sitemap Contact Us © 2009 Nokia 
RDF Facets: qdcZdescriptionQSxAE20blogE20aboutE20everythingE20thatE20soundsE20interestingE20toE20meE20andE20ForumE20NokiaE20audienceE2eE20dcrochaE20E7cE2030E20MayE2cE202008E2015E3a39E20Ea0TheE20HolyE20GrailE2cE20accordingE20toE20MontyE20PythonEa0E20SoE20letE20usE20talkE20nowE20aboutE20theE20HolyE20GrailE20ofE20mobileE20developmentE20inE20NokiaE20platformsE3aE20SymbianE2fS60E20CE2bE2bE2eE20ItE20isE20theE20languageE20inE20whichE20theE20operatingE20systemE20isE20developedE20E28aboutE2095E25E29E2cE20itE20isE20theE20languageE20thatE20allowsE20developingE20allE20sortsE20ofE20applicationsE2cE20fromE20simpleE20eE78penseE20trackersE20toE20VoIPE20andE20geotaggingE20andE20videoE2dsharingE20applicationsE2eE20ItE20isE20theE20E2eE2eE2eX qdcZidentifierQSxhttpE3aE2fE2fblogsE2eforumE2enokiaE2ecomE2fblogE2fdanielE2drochasE2dforumE2dnokiaE2dblogE2f2008E2f05E2f30E2fwhichE5ftechnologyE5fcX qdcZpublisherQUxhttpE3aE2fE2fswE2enokiaE2ecomE2fidE2fc764fd1cE2d8b06E2d499aE2d9a6aE2d17c3903d5a65E2fforumE5fnokiaE5fcrawlerE5fagentX qdcZtitleQSxE44anielE20E52ochaE27sE20ForumE20NokiaE20BlogE20E7cE20WhichE20technologyE20shouldE20IE20useE20forE20developmentE3fE20E52oundE202E3aE20CE2bE2bX qdcZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qdcZtypeQUqfntypeZBlogContentQ qdcZtypeQUqfntypeZBlogE45ntryQ qdcZtypeQUqfntypeZCommunityContentQ qdcZtypeQUqfntypeZE52esourceQ qdcZtypeQUqfntypeZWebpageQ qdcZtypeQUqmarsZManagedE52esourceQ qdcZtypeQUqwebZInformationE52esourceQ qdcZtypeQUqwebZPageQ qdcZtypeQUqwebZE52esourceQ qdcZtypeQUqrdfsZE52esourceQ qrssZdescriptionQSxAE20blogE20aboutE20everythingE20thatE20soundsE20interestingE20toE20meE20andE20ForumE20NokiaE20audienceE2eE20dcrochaE20E7cE2030E20MayE2cE202008E2015E3a39E20Ea0TheE20HolyE20GrailE2cE20accordingE20toE20MontyE20PythonEa0E20SoE20letE20usE20talkE20nowE20aboutE20theE20HolyE20GrailE20ofE20mobileE20developmentE20inE20NokiaE20platformsE3aE20SymbianE2fS60E20CE2bE2bE2eE20ItE20isE20theE20languageE20inE20whichE20theE20operatingE20systemE20isE20developedE20E28aboutE2095E25E29E2cE20itE20isE20theE20languageE20thatE20allowsE20developingE20allE20sortsE20ofE20applicationsE2cE20fromE20simpleE20eE78penseE20trackersE20toE20VoIPE20andE20geotaggingE20andE20videoE2dsharingE20applicationsE2eE20ItE20isE20theE20E2eE2eE2eX qfnZdistributionQUxhttpE3aE2fE2fblogsE2eforumE2enokiaE2ecomE2fX qfnZtopicQUxhttpE3aE2fE2fswE2enokiaE2ecomE2fFNE2d1E2fBlogTopicE2fgeneralXRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZbusinessE5fopportunitiesE5fservicesQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZbusinessE5ftechnicalE5fservicesQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZcppQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZenterpriseQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZentertainmentQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZgamesQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZlocationQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZmessagingQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZopenE5fcQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZseriesE5f60QRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZwebE5frunE5ftimeQRqdcZtypeQUqrdfsZE52esourceQRqmarsZrelevanceQNx100X qfnZtopicQUqfnTopicZwebE5ftechnologyQRqmarsZrelevanceQNx100X qfnZtypeQUqfntypeZBlogContentQ qfnZtypeQUqfntypeZBlogE45ntryQ qfnZtypeQUqfntypeZCommunityContentQ qfnZtypeQUqfntypeZE52esourceQ qfnZtypeQUqfntypeZWebpageQ qfnZupdatedQDx2008E2d06E2d03X qfnZuserE5ftagQSxbusinessE2dopportunitiesE2fservicesX qfnZuserE5ftagQSxbusinessE2ftechnicalE2dservicesX qfnZuserE5ftagQSxenterpriseX qfnZuserE5ftagQSxentertainmentX qfnZuserE5ftagQSxflashliteX qfnZuserE5ftagQSxgamesX qfnZuserE5ftagQSxlocationE2dbasedE2dservicesX qfnZuserE5ftagQSxmessagingX qfnZuserE5ftagQSxopenE2dcE2fcE2bE2bX qfnZuserE5ftagQSxs60X qfnZuserE5ftagQSxsymbianE2dcE2bE2bX qfnZuserE5ftagQSxwebE2druntimeE2dwrtE2dX qfnZuserE5ftagQSxwebE2dtechnologyX qmarsZdescriptionQSxAE20blogE20aboutE20everythingE20thatE20soundsE20interestingE20toE20meE20andE20ForumE20NokiaE20audienceE2eE20dcrochaE20E7cE2030E20MayE2cE202008E2015E3a39E20Ea0TheE20HolyE20GrailE2cE20accordingE20toE20MontyE20PythonEa0E20SoE20letE20usE20talkE20nowE20aboutE20theE20HolyE20GrailE20ofE20mobileE20developmentE20inE20NokiaE20platformsE3aE20SymbianE2fS60E20CE2bE2bE2eE20ItE20isE20theE20languageE20inE20whichE20theE20operatingE20systemE20isE20developedE20E28aboutE2095E25E29E2cE20itE20isE20theE20languageE20thatE20allowsE20developingE20allE20sortsE20ofE20applicationsE2cE20fromE20simpleE20eE78penseE20trackersE20toE20VoIPE20andE20geotaggingE20andE20videoE2dsharingE20applicationsE2eE20ItE20isE20theE20E2eE2eE2eX qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX qrdfZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qrdfZtypeQUqfntypeZBlogContentQ qrdfZtypeQUqfntypeZBlogE45ntryQ qrdfZtypeQUqfntypeZCommunityContentQ qrdfZtypeQUqfntypeZE52esourceQ qrdfZtypeQUqfntypeZWebpageQ qrdfZtypeQUqmarsZManagedE52esourceQ qrdfZtypeQUqwebZInformationE52esourceQ qrdfZtypeQUqwebZPageQ qrdfZtypeQUqwebZE52esourceQ qrdfZtypeQUqrdfsZE52esourceQ