Déjame adivinar, eres un Desarrollador Móvil y es hora de que tú y tu equipo decidan la plataforma de programación que usarán para su nuevo proyecto. Quizá estés buscando aprender una nueva habilidad y, por lo tanto, pienses: "Tal vez debería intentar usar una nueva biblioteca o marco de referencia, solo por curiosidad...". Por el contrario, puede que te encuentres tan seguro de tus habilidades que pienses: "Usaré lo que ya conozco, eso siempre me ha funcionado...". Y luego, te das cuenta... La decisión que tomes en ese instante afectará cada aspecto del proyecto de aquí en adelante.
Y créelo, no estás solo con esta decisión. Desarrolladores de todos lados tienen que responder la pregunta "¿nativo o multiplataforma?". Esta decisión puede volverse aún más estresante si se tiene en cuenta que, en el mercado actual, diseñar una aplicación de buena calidad e implementarla en el mercado lo más rápido posible podría ser la diferencia entre un éxito rotundo y un fracaso total. Entonces, ¿cuál es? ¿Hay una respuesta correcta? Para responder a esto, profundicemos en nuestro dilema explicando qué implican nuestras dos opciones.
Desarrollemos nativo
Primero expliquemos lo que es una “aplicación nativa”. Una aplicación creada de forma nativa es una pieza de software desarrollada con una plataforma o sistema operativo específico en mente y se creó utilizando el marco de referencia (“framework”) y el kit de desarrollo de software (SDK) oficiales de dicha plataforma. Por lo general, estas herramientas son desarrolladas por el mismo creador. Dado que estas aplicaciones están diseñadas para interactuar con un sistema específico, generalmente tienen acceso a funcionalidades de "nivel inferior" y pueden administrar mejor las interacciones con el hardware.
Algunos buenos ejemplos de “frameworks” nativos son:
- Java para Android
- Kotlin para Android
- Swift para IOS
- Objective-C para IOS
Ventajas de ser nativo
Algunas ventajas del desarrollo nativo son:
- Flexibilidad de desarrollo. - El desarrollo nativo generalmente tendrá una biblioteca de paquetes de desarrollo más extensa. Esto significa que, como desarrollador, tendrás más opciones que otras opciones no nativas. También significa que tendrás disponibles las nuevas funcionalidades o actualizaciones de la plataforma primero. Un ejemplo de ello fue la suite Android Jetpack, que se hizo accesible para los desarrolladores nativos en septiembre del 2018. Sin embargo, esta misma suite no estuvo disponible para los desarrolladores de Xamarin hasta febrero del 2020.
- Rendimiento de la aplicación. - Imagina que estás hablando con una persona que habla el mismo idioma. Suponiendo que ambos usen términos familiares, comprender y transmitir tu punto de vista a la otra persona debería ser relativamente rápido. Ahora, imagina que tratas de comunicarte con alguien que habla un idioma extranjero y, para facilitarte la vida, consigues a un intérprete. Sin duda esto afectará la comprensión en la conversación y la comunicación se volverá más lenta de lo habitual. Este excelente ejemplo nos ayuda a comprender cómo funcionan la mayoría de las soluciones de desarrollo multiplataforma. Estos deben pasar por una o más capas de compatibilidad para funcionar con nuestros diferentes sistemas operativos o plataformas.
- Seguridad de aplicaciones. - Esto no aplica a todos los marcos de desarrollo multiplataforma, pero está bien documentado que las herramientas basadas en tecnologías de desarrollo web suelen ser menos seguras. Existen marcos de desarrollo multiplataforma que garantizan la seguridad al compilar el código en el lenguaje máquina nativo (un gran ejemplo es Flutter). Sin embargo, todas las soluciones nativas admiten esto desde el primer momento, lo que complica el proceso de ingeniería inversa.
- Oportunidades laborales. - La demanda de experiencia con herramientas multiplataforma ha crecido considerablemente debido a la popularidad de la mentalidad "escríbelo una vez, impleméntalo en todas partes". Sin embargo, la mayoría de las aplicaciones de las principales empresas de la industria se realizaron de forma nativa. Incluso aquellas que no, requirieron conocimientos sobre las bibliotecas creadas para las plataformas de desarrollo nativas.
Las siguientes aplicaciones son algunos ejemplos de aplicaciones creadas de manera nativa:
- Waze
- Twitter
- Pinterest
- Spotify
- Google Maps
- WhatsApp
La popularidad de “multiplataforma”
¿Qué pasa si no tengo un equipo de desarrolladores que se especialicen en diferentes lenguajes de programación? ¿O qué pasa si mi objetivo de fecha de entrega es demasiado agresivo y no tengo tiempo para hacer un proyecto para cada plataforma? Una solución multiplataforma podría ser la respuesta que estás buscando. Una aplicación móvil desarrollada en un marco de referencia multiplataforma utiliza un código base único que puede ser implementado en múltiples plataformas o sistemas operativos. Para lograrlo, utilizan principalmente dos métodos diferentes:
- Desarrollo híbrido. - Este método puede considerarse otro tipo de opción de desarrollo para dispositivos móviles; sin embargo, en aras de la simplicidad, lo consideraremos parte de la categoría de desarrollo "Multiplataforma". Desarrollo híbrido combina soluciones nativas y basadas en tecnologías web. Esto permite que las aplicaciones tengan un aspecto y un rendimiento similares a las soluciones nativas, al mismo tiempo que les permite a los desarrolladores usar algunas características del desarrollo web (como el uso de CSS, HTML y JavaScript).
- Desarrollo multiplataforma puro. - Aunque son similares, ambos métodos no son iguales. La principal diferencia es la falta de tecnologías basadas en web utilizadas para diseñar la interfaz de usuario y la experiencia (UI/UX) de la aplicación. Los marcos de referencia multiplataforma puros se basan en sus propias librerías de desarrollo y otras herramientas específicas.
Estos se han vuelto increíblemente populares en los últimos años, especialmente entre los desarrolladores de aplicaciones basadas en la web, debido al uso de lenguajes de programación populares (como JavaScript o C#). Un programador que antes no sabía nada sobre el desarrollo móvil puede aprender rápidamente los conceptos básicos sin preocuparse por la barrera del lenguaje de codificación. Algunos buenos ejemplos de marcos de referencia para desarrollo móvil multiplataforma son:
- React Native: Utiliza JavaScript como su lenguaje de programación principal y se basa en la biblioteca React ya existente. Fue desarrollado por Meta (anteriormente Facebook) y fue lanzado en marzo de 2015 para IOS; el lanzamiento de Android se retrasó hasta septiembre de ese mismo año.
- Ionic: Utiliza TypeScript como su lenguaje de programación principal y está construido sobre el marco de referencia de desarrollo Angular. Fue creado por Max Lynch, Ben Sperry y Adam Bradley, quienes formaban parte de Drifty Co. y se lanzó en 2013.
- Xamarin: Utiliza C# como su lenguaje de codificación principal y se basa en el estándar .NET. Originalmente su propia empresa, fue comprada por Microsoft en 2016.
- Flutter: Usa Dart como su lenguaje de codificación principal y fue lanzado por Google en 2017 como una forma para que los desarrolladores implementen software en Android, IOS, Windows, macOS, Linux y la web con un código base único.
¿Qué obtengo cuando desarrollo multiplataforma?
Algunas de las características del desarrollo multiplataforma son:
· Curva de aprendizaje sencilla: Regularmente, los marcos de referencia multiplataforma usan lenguajes de programación populares ampliamente utilizados. Esto significa que aquellos desarrolladores web que trabajan con JavaScript les resultará más fácil aprender React Native o Ionic. Del mismo modo, aquellos que han trabajado con C#, usando el estándar .NET, tendrán más facilidad al utilizar Xamarin. En resumen, debido a que se construyen sobre tecnologías populares y usan lenguajes de programación ampliamente aceptados, los marcos de referencia móviles multiplataforma se vuelven más fáciles de aprender.
- Tiempos de desarrollo más cortos: En lugar de crear una aplicación para cada tipo de dispositivo, tú y tu equipo pueden usar la misma solución en todas partes. Incluso si se requieren algunas configuraciones para cada plataforma, esto reducirá significativamente el tiempo de desarrollo. Sin embargo, algo a tener en cuenta es que la velocidad depende en gran medida de la experiencia del equipo con el que estás trabajando, por lo que el uso de una solución multiplataforma no significa automáticamente que tendrás un ciclo de desarrollo más corto.
- Equipos de desarrollo pequeños: Hay una gran cantidad de lenguajes de programación, marcos de referencia y herramientas y, por mucho que quisiéramos, no podemos aprender cada uno de ellos. Hoy en día, es normal que los desarrolladores se especialicen en usar solo algunas de estas herramientas de desarrollo. Ahora imaginemos un equipo que intenta crear una aplicación que quiere tener la mayor audiencia posible. Probablemente necesitará desarrolladores de Swift (para una versión de IOS), desarrolladores de Kotlin (para Android) y tal vez incluso algunos desarrolladores de JavaScript (si desea un portal web). Esta manera de operar puede volverse costosa y complicada. Sin embargo, supongamos que utilizas una solución multiplataforma. En ese caso, el tamaño de tu equipo puede reducirse repentinamente, tu proceso de desarrollo puede simplificarse y puedes dedicarle tiempo y recursos a lo que realmente importa: ¡hacer que tu aplicación sea exitosa!
- Reutilización de código: Hiciste un portal web en JavaScript usando React hace unos años, ¿y ahora quieres hacer una versión móvil? Menos mal que React Native usa la misma sintaxis. De manera realista, no todas las soluciones multiplataforma te permitirán reutilizar cada línea de código escrita con el mismo lenguaje y bibliotecas. Sin embargo, es común poder ejecutar el mismo código haciendo muy pocas modificaciones.
Entonces, ¿Cuál es mejor?
Posiblemente estés esperando una respuesta directa, aunque la realidad es que ambas soluciones de desarrollo son útiles en determinadas circunstancias. Al igual que no usarías un martillo para apretar un tornillo, deberás comprender que el uso de "la herramienta adecuada para el trabajo correcto" es esencial para los desarrolladores.
Usa un marco de desarrollo "nativo" cuando:
- Estás creando una aplicación que depende en gran medida del hardware
- Tu cliente o audiencia le dé más importancia a la calidad que a la “velocidad de comercialización”
- Tu equipo tenga recursos suficientes para contratar especialistas
- El diseño, la seguridad y la estabilidad de la aplicación es de suma importancia
- El alcance de tu proyecto no esté del todo claro y requieras una gran flexibilidad
Usa una solución "multiplataforma" cuando:
- Tu aplicación no depende demasiado del hardware en el que se utiliza
- El cliente esté más preocupado por cumplir con las fechas de entrega que por crear funcionalidades adicionales
- Tienes un equipo pequeño con recursos muy limitados
- La reutilización del código, la disponibilidad de la documentación y el apoyo de la comunidad de desarrolladores es de gran importancia para el proyecto
- Tu alcance está claramente definido y documentado, junto con toda la lógica de negocio (BL).
Una vez que implementes estas condiciones en tu proceso de toma de decisiones, la opción correcta te quedará más clara. Con esto en mente, espero ahora puedes estar seguro de que has tomado la decisión correcta para ese nuevo proyecto.