Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=4af06178-4b50-4eee-86df-06928915a6a6

Programación móvil: Qué herramienta y lenguaje elegir

Elegir-Entorno-Programacion-MovilEn casi cualquier ámbito de programación que escojas, hoy en día tienes disponibles infinidad de herramientas, lenguajes y entornos que puedes elegir. Toda esa maraña de opciones hacen que, en ocasiones, sea muy complicado decantarse por una opción u otra.

En el mundo del desarrollo para móviles y tabletas pasa lo mismo. Actualmente dispones de muchas opciones si te quieres dedicar a este ámbito, y en concreto debes elegir entre:

  1. Los lenguajes y herramientas nativos de cada plataforma: ObjectiveC/Swift y XCode en iOS, Java y Android Studio en Android, C#, XAML y Visual Studio en el caso de Windows Phone y Windows 8....
  2. Herramientas multiplataforma que compilan a código nativo. La más conocida y utilizada es Xamarin.
  3. Herramientas multiplataforma basadas en HTML. La más conocida es PhoneGap/Apache Cordova, pero existen muchas más.

Cada una de estas opciones tiene sus ventajas e inconvenientes, así que ¿cuál deberías elegir?.

En este post repasaremos por encima las principales opciones que existen a la hora de realizar programación móvil con sus ventajas e inconvenientes, y te daremos unas pautas básicas para ayudarte a decidir por dónde tirar.

Desarrollo Nativo

Está claro que, siempre que puedas, el desarrollo nativo es la mejor gran opción.

El problema es que cada plataforma (iOS, Android, WP...) es un mundo. Cada una de ellas utiliza un lenguaje de programación diferente, herramientas propias y paradigmas de programación particulares. A cambio obtienes la máxima flexibilidad, adaptación total al entorno en el que se ejecuta la aplicación y el máximo rendimiento.

La desventaja principal es que tienes que dominar muchos lenguajes y herramientas y que el tiempo de desarrollo se multiplica mucho, pues es necesario crear desde cero tres versiones diferentes de la misma aplicación (una para cada plataforma).

Por regla general los programadores se especializan y eligen una única plataforma, de modo que puedan dar lo mejor de si mismos en ésta.

Por ejemplo, si decides especializarte en iOS y así programar para la popular plataforma de iPhone y iPad, entonces deberás aprender a programar con Objective-C o Swift y a utilizar el entorno XCode, comprándote además un ordenador Mac. 

Tratar de abarcarlas todas es muy complicado, aunque desde luego siempre es una opción.

Desarrollo multiplataforma compilado a nativo

Una opción de compromiso es utilizar alguna plataforma de desarrollo mixta que independiza el desarrollo del lenguaje nativo de cada plataforma móvil.

Con este tipo de herramientas se utiliza un único lenguaje y se crean aplicaciones para todas las plataformas, eso sí, adaptando algunas cuestiones para poder funcionar en cada caso. Lo bueno es que te permite conocer un solo lenguaje, reutilizar gran parte del código entre todas, y generar aplicaciones nativas para todos los entornos móviles.

La más conocida es, sin duda, Xamarin. Está basada en el lenguaje C# de Microsoft y en la plataforma .NET, y gracias a sus herramientas permite crear aplicaciones para todas las plataformas, reutilizando gran parte del código (a excepción de la interfaz).

Si ya conoces C# y .NET, aprender Xamarin te ayuda a aprovechar los conocimientos que ya posees y con ellos desarrollar para todas las plataformas móviles relevantes del mercado (iOS, Android y Windows Phone).

Se obtienen muchas ventajas de su uso, pero fundamentalmente dos:

· Puedes programar en algo que ya conoces y evitar aprender nuevos lenguajes innecesariamente.
· Tus aplicaciones funcionarán con pocos cambios en varias plataformas.

O sea, al final ahorras tiempo, esfuerzo y llegas antes al mercado.

Las aplicaciones escritas con Xamarin en C# se compilan a código nativo en cada plataforma, por lo que su rendimiento es exactamente el mismo que el de una aplicación nativa. Además ofrece acceso directo nativo a todas las APIs de cada plataforma así como a los controles de interfaz de usuario nativos (de hecho esto es lo que debes aprender con Xamarin para cada plataforma de manera diferente según quieras programar para iOS, Android o Windows Phone).

Xamarin-Apps-Nativas
(Captura obtenida de la propia web de Xamarin)

Desarrollo multiplataforma basado en HTML5

Una opción muy popular, sobre todo si eres un programador Web, es utilizar alguna herramienta basada en HTML que genere aplicaciones para todas las plataformas. Existen muchas, pero la más conocida es PhoneGap/Apache Cordova.

Las apps escritas en HTML5 y compiladas con PhoneGap, permiten crear la interfaz usando HTML, CSS y JavaScript, lenguajes muy conocidos y utilizados, y desplegar a las diferentes plataformas. En cada una además podemos utilizar un “skin” concreto para que el aspecto sea lo más similar posible al de las aplicaciones nativas. PhoneGap y similares crean un contenedor para la aplicación que la ejecuta como si estuviesen en un servidor web local. Además exponen gran parte de la funcionalidad nativa del dispositivo móvil a través de librerías JavaScript, de modo que es muy sencillo “engancharse” desde la aplicación HTML5 que estamos creando.

PhoneGap es una plataforma muy interesante si eres un programador web y si además tu aplicación dispone de una versión web.

Entre las desventajas principales están que las aplicaciones no tiene el mismo rendimiento que una app nativa, ni tampoco te dan acceso a todas las APIs nativas de cada plataforma. aunque sí a todas las importantes. Además, aunque algunas bibliotecas como jQuery Mobile te dan la opción de adaptarse al aspecto de cada sistema operativo móvil, no puedes simular todos los controles nativos (aunque sí muchos de ellos).

Si ya conoces HTML, CSS y JavaScript, entonces PhoneGap te deja construir aplicaciones para cualquier plataforma móvil usando lo que ya sabes, y te brinda la funcionalidad necesaria para poder construir el 90% de las aplicaciones habituales que puedas necesitar, con un rendimiento adecuado también para el 90% de los casos.

Si lo que quieres es una aplicación súper-especial que entre muy a bajo nivel (por ejemplo un juego complicado) y que sea muy compleja en cuanto a interfaz y por lo tanto el rendimiento es muy importante, entonces PhoneGap seguramente no es para ti.

¿Cuál escojo entonces?

Para ayudarte a decidir hemos creado este sencillo diagrama de flujo:

Elegir-Entorno-Programacion-Movil

(pulsa para agrandar)

En resumen y para darte una ruta más clara:

  • Si vas a programar para una sola plataforma (por ejemplo, Android) y no conoces C# ni HTML, entonces aprende las herramientas y el lenguaje nativo.
  • Si quieres tener una aplicación para todas las plataformas, entonces tus opciones son:
    1. Aprende ObjectiveC y Cocoa Touch para iOS, Java y el SDK de Android para Android, y C#/XAML para Windows Phone.
    2. Usa C# y Xamarin y ataca todas las plataformas.
    3. Usa HTML5 y PhoneGap (u otra herramienta simular) y  ataca todas las plataformas.

Como podemos ver, al final todo se reduce fundamentalmente a dos cuestiones fundamentales:

  • Conocer de qué punto partes (qué sabes y qué quieres/puedes aprovechar)
  • Decidir para qué plataformas quieres programar.

Esperamos que te resulte útil para decidirte.

campusMVP campusMVP es la mejor forma de aprender a programar online y en español. En nuestros cursos solamente encontrarás contenidos propios de alta calidad (teoría+vídeos+prácticas) creados y tutelados por los principales expertos del sector. Nosotros vamos mucho más allá de una simple colección de vídeos colgados en Internet porque nuestro principal objetivo es que tú aprendas. Ver todos los posts de campusMVP

No te pierdas ningún post

Únete gratis a nuestro canal en Telegram y te avisaremos en el momento en el que publiquemos uno nuevo.

Archivado en: Desarrollo móvil

Comentarios (24) -

Juan David Nicholls Cardona
Colombia Juan David Nicholls Cardona

Qué piensan de Servicios como CocoonJS? :)

Responder

Una herramienta muy interesante, especialmente para juegos. Además, aunque esté basada en San Francisco el equipo que está detrás es español, así que es un lujazo :-)

Si alguien de la empresa se anima estaríamos encantados de publicar un artículo en el blog para hablar a fondo del proyecto.

Saludos!

Responder

Juan David Nicholls Cardona
Colombia Juan David Nicholls Cardona

Excelente! Muchas Gracias :D
También tengo un artículo sobre PhoneGap/Cordova y Windows Azure Mobile Services por si quieren verlo www.nicholls.co/.../PhoneGapCordova-y-Windows-Azure-Mobile-Services
Últimamente ando con muchas ganas de aprender Phaser.io + CocoonJS (Pienso que es muy interesante el desarrollo de juegos con HTML5 para múltiples plataformas) :3

Responder

Buenas tengo ciertas dudas acerca del articulo leido si deseo q mi aplicacion sea multiplataforma ps debo elegir trabajar con phonegap si quiero que mi aplicaicon maneje bd de datos alojada en un hosting puedo seguir utilizando phonegap  o debo utilizar otra herramienta si es posible que base de datos elegiria (mysql, sqllite, etc)

Responder

José Manuel Alarcón
Spain José Manuel Alarcón

Hola Julián:

Las bases de datos que albergues en un servidor externo las tienes que exponer hacia el exterior mediante algún servicio web de tipo SOAP o REST (generalmente esto último). Éstos se consumen tanto desde aplicaciones nativas como desde aplicaciones web (Phonegap/Cordova) por lo que no van a influir en tu decisión de usar una herramienta u otra. Todo lo del artículo sigue siendo válido.

Por otro lado lo que preguntas sobre qué base de datos elegiría: la que tú quieras, es totalmente indiferente. Eso va a estar en el servidor y vas a exponerla mediante un servicio por lo que da igual cual sea. Es más, puedes empezar con una y luego si lo prefieres cambiar a otra, y mientras la interfaz del servicio no cambie tu aplicación móvil que lo utiliza no lo notaría. Si trabajas con tecnologías Microsoft seguro que lo que más te gustará es usar SQL Server, pero si trabajas con PHP, Node.JS, etc... seguramente te sentirás más cómodo con MySQL... pero eso es cosa tuya.

Saludos.

Responder

Miguel Castañeda
Colombia Miguel Castañeda

Buenas Noches, soy desarrollador Delphi desde hace muchos años, quisiera saber si alguién ha utilizado su versión para desarrollo nativo android - ios, se llama delphi XE7.
Yo tengo la versión para win32/win64/imac, pero me gustaría saber si alguién ha usado la versión XE7 para android, es que me gustaría comprarla y aunque en el sitio de embarcadero se ve muy bien, me gustaría una opinión Objetiva.
Gracias de antemano.

Responder

de todos los frameworks no se hace uno...android studio nada intuitivo y con bugs, escasa documentacion en los otros,
html y javascript parece lo mas facil pero hace falta aun un ide  bueno. porque no hacer un ide como lo fue  visual basic 6  sencillo  rapido en hacer cualquier programa, hoy en dia todo se  hace mas complicado .

he llegado  al punto de hacerme un  ide para  javascript  un prototipo lo pueden hayar  en you tube  visual javascript mobile
planeo que sea un Rad  para acelerar  un poco la programacion en javascript y ala vez  empaquetar  la aplicacion en una apk  facilmente usando  phonegap  ....

Responder

Hola, muchas gracias por el artículo, me aporta bastante luz.
En mi caso he de desarrollar una aplicación que se conecte con servicios WCF, y trabaje con certificados digitales cara a realizar firma digital en el dispositivo. ¿He interpretado bien el artículo, si digo que veo que solo puedo usar desarrollo nativo o xamarin? Porque con las html5 la parte de certificados y firma, la veo imposible,
Muchas gracias

Responder

Hola Davidian:

Si tienes unas necesidades tan concretas vas a tener que usar desarrollo nativo. La opción de HTML5 no es buena.
Por un lado por todo lo relativo a WCF (salvo que, aunque sea WCF, lo que estés haciendo es exponer un servicio REST o SOAP estándar), y después por la necesidad tan específica de firmar digitalmente en el lado cliente.

Para WCF desde Xamarin tienes documentaci´no en su propia web:

developer.xamarin.com/.../

saludos.

Responder

Te agradezco que me hayas contestado. Un saludo

Responder

Camilo Suárez
Camilo Suárez

Hola!

Muchas gracias por el articulo, Ha sido muy útil y me ha servido de guía  para empezar a programar. Tengo una pregunta, si quisiera montar una aplicación tipo Uber, que maneje geolocalización e interacción entre usuarios tipo chat, qué lenguaje y que herramienta debería usar? adicional, me aconsejarías centrarme en un lenguaje nativo o de una vez multiplataforma? Es de tener en cuenta que tengo apenas conocimientos básicos sobre programación en Java, pero si soy experto en SQL Server.

Mil gracias!

Responder

campusMVP
campusMVP

Hola Camilo:
Es muy complicado contestar sin conocer bien los requisitos de tu aplicación, pero así a bote pronto probablemente cualquier lenguaje/framework multiplataforma te puede servir.

Con HTML5 puedes hacer todo eso que necesitas (geolocalización, chat con Web Sockets...) y luego con Cordova puedes generar la aplicación para todas las plataformas. Con Xamarin por supuesto también.

La "pega" es que necesitas saber HTML5 a fondo, incluyendo muchas de sus APIs y en cualquier caso (sea cual sea la tecnología de desarrollo para móvil que elijas) debes crear también un back-end que irá en un servidor al que debes conectarte desde la aplicación. Esto puedes crearlo con muchas tecnologías: ASP.NET, NodeJS, PHP, Java...

No es por quitarte las ganas ni mucho menos, pero hoy en día desarrollar una aplicación móvil conectada uno solo implica controlar muchas tecnologías diferentes, tanto en el lado cliente (el móvil) como en el lado servidor, por lo que la decisión va más allá de simplemente qué herramienta para desarrollo móvil escoger que es el objeto de este artículo.

En cualquier caso...:

    · Si te decides por Xamarin tendrías que aprender C# y .NET primero, luego Xamarin y finalmente, para el lado servidor, al menos ASP.NET Web API para crear los servicios.
    · Si te decides por HTML5, deberías aprender: HTML, CSS, JavaScript, jQuery, algún framework como AngularJS y Apache Cordova para el lado cliente. Para el lado servidor lo suyo sería aprender probablemente NodeJS porque así aprovechas lo que ya sabes de JavaScript para crear las aplicaciones de backend. Como almacén de datos MongoDB que es una base de datos no relacional (/recursos/post/Fundamentos-de-bases-de-datos-NoSQL-MongoDB.aspx), que es más fácil de aprender, desde luego, que SQL Server.

Si quieres seguir tirando con Java, entonces podrías crear aplicaciones para Android, pero no para otras plataformas móviles. Lo bueno es que ya controlas algo del lenguaje y te podría servir tanto para el lado cliente como para el servidor. Aunque tendrías que aprender muchas cosas igual. Probablemente no te mereciera la pena y es mejor que empieces de cero con alguna de las dos opciones anteriores.

En fin... es un poco "rollo" todo esto, pero al menos esperamos que te sirva para tenerlo un poco más claro.

Saludos!

Responder

Camilo Suárez
Camilo Suárez

Hola, Muchas gracias por tu respuesta!

A raíz de tu respuesta y otras averiguaciones. Me he decidido solamente por arrancar con una página web bien montada. Para este caso, me podrías recomendar un buen artículo como este?

Saludos!

Responder

Hola Camilo:

Te podemos recomendar algunos de nuestros cursos de desarrollo web, y en concreto nuestro Máster de desarrollo Front-End que te cubre al menos toda a parte de lado cliente.

Si te suscribes a nuestro boletín te puedes enterar de la próxima convocatoria.

Los otros cursos están abiertos siempre: /catalogo/Catalog-Cursos-de-Programación-Web_30.aspx

Saludos.

Responder

Buenas tardes

Agradezco la información que proporcionan es clara y fácil de comprender, les comento que he buscado información acerca de creación de aplicaciones móviles en HTML5 y por eso he llegado hasta aquí.
Al leer los comentarios y ver que contestan las solicitudes me animo a exponer mi situación

Estoy empezando a elaborar mi tesis que incluye la elaboración de un Ebook interactivo para el aprendizaje de la tabla periódica, el cual debe permitir al alumno aprender la misma a través de alcance de niveles, recompensas por niveles alcanzados y el primer nivel por ejemplo será armar la tabla periódica de acuerdo a los colores de los elementos como un rompecabeza, etc.

Necesito que se guarden las estadísticas de uso, niveles alcanzados y niveles repetidos, cuantas veces el alumno ha repetido el nivel ect que serán reportados a una pagina web.

Mi pregunta es será que phonegap me puede servir para realizar este proyecto?  Tengo poco conocimiento en programación y  estoy aprendiendo HTML5 por medio de videos y tutoriales encontrados en la red, pero me gustaría apoyarme de una plataforma donde sea menor el trabajo.

Agradezco de antemano su respuesta y quedo al pendiente de sus sugerencias, cursos, plataformas etc, todo aquellos que me pudieran ofrecer pero que de verdad me ayude a realizar este proyecto que quiero realizar.

Saludos cordiales

Responder

Hola Beatriz:

Todo eso que quieres que tenga tu aplicación lo puedes hacer sin problemas tanto con PhoneGap/Cordova como con las herramientas nativas y por supuesto Xamarin. Pero debes tener en cuenta que las aplicaciones móviles no suelen ser desarrollos aislados que se circunscriben solamente al entorno del móvil, sino que además necesitan disponer de un entorno "backend", en el servidor, para almacenar toda esa información que indicas (estadísticas de uso, niveles, etc...) y debes construirlo además de la aplicación móvil y coordinada con ella.

Es decir, en tu caso necesitas al menos desarrollar lo siguiente:
·  La aplicación móvil multiplataforma, que será la interfaz que verá tu usuario.
· Un servicio web REST que será el que utilice tu aplicación móvil para enviar y consultar datos sobre las actividades que se realizan en ella.
· Una página/aplicación web que use los mismos datos para mostrar informes en la web a los administradores del sistema, sacando listados, etc...

Para desarrollar todo esto la elección de tecnologías es enorme, pero una buena posibilidad sería la de utilizar HTML, CSS y JavaScript para todo, de modo que cada parte la podrías crear de la siguiente manera:

· App móvil: HTML5+CSS3+JavaScript con Phonegap para convertirla en app móvil.
· Servicio Web: creado con JavaScript usando NodeJS y MongoDB
· Aplicación web de gestión: puedes crearla también en NodeJS con HTML5.

De este modo puedes reducir el número de lenguajes y plataformas a aprender (aunque por supuesto tienes más opciones). Usarías lo que se denomina el "Stack MEAN" que te lo explicamos aquí: /recursos/post/Que-es-el-stack-MEAN-y-como-escoger-el-mejor-para-ti.aspx

En cualquier caso necesitarás aprender bien a fondo todas estas tecnologías (HTML5, CSS3, JavaScript, NodeJS y MongoDB) para poder llevar a cabo un proyecto de este tipo, que no es tan sencillo. Necesitarás probablemente algo más que unos vídeos colgados en Internet.

De hecho con nosotros podrás aprender muy a fondo toda la parte de Front-End con el máster que empieza la semana que viene:

/catalogo/Product-MASTER-OnLine-Desarrollador-de-Aplicaciones-Web-Front-End_219.aspx

Y si no muchas de estas cosas "sueltas" con algunos de los cursos de nuestro amplio catálogo de desarrollo web:

/catalogo/Catalog-Cursos-de-Programación-Web_30.aspx

No está bien que lo digamos nosotros (de hecho lo dicen nuestros alumnos: /opiniones-campusmvp.htm) pero es una gran inversión :-)

¡Suerte con el proyecto!

Responder

Buenas tardes,

Muchas gracias por la información, estaba medio perdido en qué tecnología utilizar para mi proyecto. Necesito hacer una aplicación donde se carguen mediciones de piezas mediante celular y se almacenen para luego imprimir un reporte desde una pc de escritorio. Por mis conocimientos pienso que podría utilizar Xmarin (c#). La idea sería guardar los datos en la BD por medio de REST (podría utilizar SQLite para almacenar en el dispositivo en caso de no tener conexión a internet y luego sincronizar con la BD?). Luego crear una aplicación de escritorio que levante los datos de la BD y poder imprimirlos. Que opinan? Me conviene utilizar SQL o MySQL? Se puede utilizar una BD en la Nube? Cual?

Espero me puedan seguir orientando y desde ya muchas gracias!

Responder

campusMVP
campusMVP

Hola Fernando:

Lo que propones es una buena forma de hacer lo que necesitas. Utilizar la plataforma .NET y C# como lenguaje te ayudará a, con un único conjunto de conocimientos, poder abarcar tanto el desarrollo de las apps móviles (con Xamarin) como la parte de servidor (con ASP.NET) o una aplicación de escritorio (de hecho podría ser una Universal App para Windows 10 creada con Xamarin partiendo de la misma base que las otras apps móviles), sin tener que complicarte la vida más de la cuenta.

Con Xamarin puedes usar SQLite para almacenamiento local off-line de datos, y luego sincronizarlos al servidor mediante un servicio REST. De hecho es lo más habitual.

Para el "reporting" puedes crearte una aplicación específica de escritorio o bien incluso utilizar lo SQL Server Reporting Services para desplegar informes en la empresa o a través de Internet si los ubicas en Azure.

Podrías usar MySQL o SQL Server, o realmente cualquier otra base de datos. Todo depende de tus gustos y de cuál controles más, pero no hay limitaciones técnicas a ese respecto. Lo mismo para bases de datos en la nube. Puedes usar desde SQL Server Online en Azure (o MySQL, que también está en esta plataforma) a Amazon RDS si controlas esta tecnología.

Te sugerimos que le eches un vistazo a nuestros cursos de C# y la plataforma .NET y al curso de Xamarin. De hecho en unos días lanzamos un nuevo curso de Xamarin súper-completo con el que aprenderás a crear todo tipo de aplicaciones móviles siguiendo buenas prácticas.

Saludos.

Responder

Muchas gracias por la respuesta. Voy a tener en cuenta todo lo que comentás para mi proyecto. También voy a estar pendiente del curso para poder hacerlo.

Saludos!

Responder

Es de éxito la publicación de tu Artículo!

Responder

Mi pregunta es que todo lo que dices acerca de aprender : HTML, CSS, JavaScript, jQuery; que Angular tiene todas estas ventajas para programar => HTML, CSS, JavaScript, jQuery estos lenguajes de programación mmm ! Y si quiero programar en Android Stduio tambien tiene sus grana ventajas como el de Angular o cual de ellos me recomendarías ...Porfa espero tu respuesta amigo de ante mano!!

Responder

alguien que me pueda orientar con algun proyecto que use las tecnologias de Node.js -React Native-xamarin-MongoDB-azure

lo logro armar un proyecto con estas tecnologias.

Responder

Y nunca hablaron de Delphi XE,   o de Basic4Android (B4A) o Basic4iOS (B4i), Basic4J


https://www.youtube.com/watch?v=8fYt-WTEEuY

Responder

Hola, esta claro que todas ellas tienen una buena publicidad, pero ninguna de ellas se acerca al potencial de una plataforma que dispone de la Plataforma de Desarrollo de Aplicaciones Móviles byXOne, la cual es capaz de realizar todos y cada uno de los pasos desde el ERP del cliente hasta la aplicación móvil. Cuando quieran, vengan, y  quien quiera, realicen un examen real, no solo superficial, de todas y cada una de las posibilidades que da nuestra tecnología.
A la espera de su examen o preguntas nos quedamos.

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.