Desde hace casi un año me decidí a aprender a programar aplicaciones para iOS con la idea de realizar la versión nativa de DNDzgz. Meses después me tiré a la piscina para trabajar como freelance desarrollando aplicaciones para estos dispositivos. Las ventajas e inconvenientes que encontré fueron diversos. Pero ha habido muchas más ventajas que inconvenientes, y creo que son extrapolables a cualquier plataforma de aplicaciones nativa para dispositivos móviles. Y aquí los voy a explicar:

Ventajas

  • Alta demanda de aplicaciones. Las oportunidades que brindan las aplicaciones móviles (conexión a internet, geolocalización, cámara,..), y en concreto las aplicaciones nativas, hacen que la demanda sea cada vez mayor. Todos los pronósticos además apuntan a que dentro de pocos años el tráfico de datos en dispositivos móviles superará al tráfico desde ordenadores personales.
  • Escasez de programadores. Hay pocos programadores con experiencia en aplicaciones móviles. Y las aplicaciones móviles requieren un conocimiento especial dado el contexto de utilización. Por ejemplo hay que tener especial cuidado en la gestión de recursos (uso de red, gestión de memoria,...) ya que son dispositivos con limitadas prestaciones y en un ambiente variable. Por ejemplo la conexión a Internet puede ir y venir durante la ejecución de la aplicación, así como los servicios de geolocalización, etc.
  • Necesidades puntuales. Siempre en base a mi experiencia veo que los programadores de aplicaciones móviles juegan un papel muy susceptible de ser externalizado. Es decir, veo empresas con departamentos de desarrollo de aplicaciones (sobre todo web) que buscan programadores freelance o empresas para desarrollar aplicaciones nativas. Esto es así porque el desarrollo de una aplicación no suele requerir un programador full-time, y por tanto contratar una persona para esa labor saldría muy caro y poco productivo. Es por ello que este trabajo se suele externalizar, y debido a ello hay una oportunidad para trabajar como freelance para diversos clientes.

Inconvenientes

  • El cliente no sabe lo que quiere. Y en las aplicaciones móviles todavía sabe menos. Los clientes suelen intentar mimetizar funcionalidades de páginas web en las aplicaciones móviles. Y tampoco piensan en las limitaciones como pueden ser: no siempre hay conexión a Inernet, el servicio de geolocalización puede no estar disponible, los botones deben ser grandes porque se usa el dedo, no un puntero, etc.
  • Barrera de entrada alta. Uno de los motivos de la escasez de programadores es que necesitas (o es MUY recomendable) tener un dispositivo para poder programarlo, aprender una nueva plataforma, y quizá incluso aprender un nuevo lenguaje de programación. En el caso de los dispositivos iOS la barrera incluso es más alta, porque Objective-C es un lenguaje que pocos programadores manejan, y es (casi) imprescindible contar con un ordenador Mac. Sin embargo este inconveniente redunda finalmente en una ventaja: mayor escasez de programadores implica mayor poder de negociación en el presupuesto.
  • Sueles depender de un API. Casi todas las aplicaciones móviles dependen de un servicio web, y normalmente aquí se produce uno de los siguientes inconvenientes: a) No hay un API y entonces puedes optar por programarlo tú mismo; y puede que incluso el cliente no "conociera" esta necesidad, con lo que el presupuesto se dispara b) Hay un API y no tienes control sobre ella. Aquí pueden ocurrir problemas diversos. Quizá tengas que "negociar" cambios en el API para no tener que realizar decenas de peticiones, o cambios simples para obtener más datos que el API no facilita, o tendrás problemas de que el API no esté suficientemente bien documentada, falle, o no esté disponible en ocasiones por problemas con el servidor y tu trabajo se vea bloqueado por algo a lo que no tienes acceso.

Otras consideraciones

  • Interfaces. Los dispositivos móviles tienen un tamaño de pantalla limitado. Esto puede ser una ventaja o un inconveniente, según el caso. Es una ventaja en el sentido de que el cliente no te puede pedir interfaces muy barrocas, ya que el tamaño de la pantalla no da para más. No tendrás que realizar normalmente sidebars o footers, o al menos serán muy simples. Pero esta limitación de pantalla puede ser un inconveniente por el mismo motivo: en ocasiones por pocas funcionalidades que haya, la pantalla se queda corta, y además los componentes deben ser grandes porque la precisión de un dedo es mucho menor que la de un puntero. Y el problema se agrava si tienes que lidiar con entrada de texto, porque el teclado virtual "se te comerá" la mitad de la pantalla.
  • Administración de servidores. Una de las problemáticas de las aplicaciones web es que requieren mantenimiento: estado de los servidores, backups, etc. En caso de las aplicaciones móvil te ahorras esos problemas. ¡A no ser que tú también te encargues del API / backend!
  • Aplicaciones sociales. Las aplicaciones móviles son más susceptibles de tener funcionalidades sociales: enviar por correo, publicar en twitter, facebook,... Y estas funcionalidades suelen ser más fáciles de implementar en un entorno web que en una aplicación nativa.

Teniendo en cuenta las ventajas y a pesar de algunos inconvenientes pienso que el sector del desarrollo de aplicaciones para dispositivos móviles es una gran oportunidad para lanzarse a trabajar por cuenta propia. Así que os animo a ello. Y os animo también a que nos contéis vuestra experiencia si ya os estáis dedicando a ello!