What's out there?
To understand the problem behind this, we do need to have a look at the industry and standards out there.
According to different sources (Gartner, et all) there are roughly 270 million smartphone devices and 19 million tablet computers in the hands of users at the moment. With tablets being the fastest growing cosumer electronic category of all times. Especially the iPad became the most quickly adopted electronic device ever. According to different sources, the number of mobile devices shipped every year will grow at rates close to 20 percent. There are roughly six different vendors with offerings for smartphones or tablet devices which both count as mobiles in my definition. The most prominent ones are of course Apple, RIM and Nokia.
Why should I care?
Mobile computing is a trend in the enterprise. Forrester predicts, that 2/3 of the employees will require mobility support until 2012. For IDC it is clear that more than 35 percent of the workforce will be done using mobile technologies in 2013. All this are enormous numbers that do point into one direction. Mobile computing will hit your desk or even development environment sometimes in the near future. You better should be prepared for that.
Which technologies are there?
Six major vendors are a valid size in the industry. But if we look at the used technologies you quickly notice, that they are all cooking their own soup. Android and BlackBerry rely on Java (Eclipse) with additional device APIs. iOS has it's own Objective-C based programming and tooling environment. Windows Phone 7 relays on .NET and C#, Symbian uses Qt and C++. All (except one) OS are equipped with a modern browser based on an HTML 5 capable rendering engine. Windows Phone 7 however will probably still contain an older version of Microsoft's Internet Explorer and therefore will not be able to take advantage from the next generation web standard. All but one OS actually can or will be able to run Flash / AIR applications.
HTML 5 and Flash/AIR are the solution?
If you are looking at the table above and are searching for a "write once, run everywhere solution", you probably are looking for an HTML 5 or Flash/AIR app. BUT, both have their limitations. Using one of them does not give you access to the device specific APIs. So you will not be able to access contacts, phone, camera and many many more of the device specific features. If you need them and you need to support all the major OS in the mobile space, you probably end up writing different applications for different devices. If you are comfortable with the feature set you get from HTML 5 and Flash/AIR you probably have found your programming language of choice.
Native apps are the solution?
You are going to develop native applications if you are trying to be most efficient in terms of resource usage. This is true for battery, RAM and CPU. If you are trying to get the best out of your resources there is no other way than writing native apps. I already mentioned the integration with built in device features. If you are willing to write an email, contacts or whatever integration there is no other way than to provide a native app making use of all the device/OS specific features.
But to be honest, this are not the only decisions you have to make. There are many more things to look after if your are evaluating your approach to mobile development. Everything starts with technology but you also have to look at the distribution (e.g. Do you really want your app in iTunes?) at the development skills in your company, at the needed resources (Do all developers really need a mac ?) ....
As always, there is no single answer to this simple question. But I still hope, the little basics give a brief idea about where to look to make your decision.