React Native y Swift son dos tecnologías relativamente nuevas que apoyan el desarrollo de aplicaciones móviles para dispositivos iOS. Mientras que React Native es un framework para JavaScript, Swift es un lenguaje de programación completamente nuevo. Entonces, ¿cuál elegir cuando se piensa en construir una nueva aplicación para iOS?

El texto cubre:

  1. ¿Qué es Swift?
  2. ¿Qué es React Native?
  3. ¿Por qué compararlos de todos modos?
  4. Comparación
  5. Algunas reflexiones sobre Fortran y la historia de la computación (¡en serio!)

El iPhone es, sin duda, algo más que un dispositivo: es un fenómeno cultural y social que, en un principio, impulsó la revolución de los teléfonos inteligentes iniciada con el primer lanzamiento del dispositivo en junio de 2007. Desde entonces, la popularidad del dispositivo se ha disparado, ya que la marca alcanzó una impresionante cuota del 13,2% en las ventas mundiales de unidades de smartphones. Es especialmente impresionante cuando se ve en el contexto – Apple es una marca premium, mientras que estas cifras incluyen también una marca sin nombre o de presupuesto, que se vende en los mercados emergentes.

Los dispositivos impulsados por iOS ven la mayor popularidad en las economías fuertes de los EE.UU., Canadá, Escandinavia y Australia. A finales de 2017, el 78% de los adolescentes estadounidenses poseían un iPhone y el 80% afirmaba que su próximo smartphone también estaría impulsado por iOS.

Considerando esto, no es de extrañar, que Apple sea lo suficientemente fuerte como para forzar frameworks y lenguajes de programación propios – y eso es básicamente lo que es Swift.

Construyendo un Equipo de Ingeniería de Software Distribuido en Europa WEBINAR

¿Qué es Swift?

Swift es un lenguaje de programación moderno, de propósito general y multiparadigma diseñado por Apple para construir sus dispositivos con iOS y todo el ecosistema siguiente. Las aplicaciones pueden ser diseñadas para ejecutarse también en macOS (para los ordenadores de Apple), watchOS (AppleWatch), tvOS (reproductor de medios digitales de Apple TV) y, lo que puede ser un poco sorprendente z/OS, que está impulsando los ordenadores IBM Mainframe.

El lenguaje se distribuye actualmente en la licencia Apache, que hace que esté disponible para la comunidad a utilizar. Es un proyecto relativamente nuevo, lanzado en junio de 2014, siete años después del lanzamiento del primer iPhone.

¿Qué es React Native?

React Native es un framework apoyado por Facebook diseñado para construir aplicaciones móviles agnósticas a los dispositivos. A diferencia de las aplicaciones nativas que utilizan lenguajes de programación diferentes para cada plataforma, React Native se basa en JavaScript y permite a los usuarios compartir el código entre varias plataformas, incluyendo Android, iOS y aplicaciones web. Hasta el 70% del código puede ser compartido entre las apps, reduciendo significativamente el tiempo de desarrollo en el desarrollo de apps móviles multiplataforma.

React Native es una tecnología ampliamente utilizada y consolidada, aprovechada por las apps de Shopify, Facebook y Walmart entre otras.

Botón de imagen OG 1200 x 635

React Native vs. Swift – ¿por qué debemos compararlas?

Las apps móviles se están convirtiendo no solo en una mera herramienta para resolver un problema. Se está convirtiendo en algo más relacionado con el estilo de vida y con el establecimiento de un vínculo con el usuario: si tienen una aplicación instalada, la marca está constantemente en su bolsillo o bajo su mano. Según los datos de IDC, el 80% de los propietarios de smartphones consultan su dispositivo a más tardar 15 minutos después de levantarse, es decir, antes incluso de cepillarse los dientes. Teniendo en cuenta esto, tener una aplicación es imprescindible.

Sin embargo, crear la aplicación supone un coste, a veces enorme, cuando se trata de desarrollo móvil de vanguardia entre plataformas. Reducir los costes sin perder calidad puede suponer una gran ganancia para las empresas. Además, al desarrollar aplicaciones, las empresas tienen que atender las necesidades tanto de los dispositivos con iPhone como con Android, preparando efectivamente dos piezas de software separadas diseñadas para realizar la misma tarea: la forma más robusta de desarrollo de aplicaciones móviles multiplataforma.

Pero la optimización puede conllevar unos costes que no son fáciles de aceptar. Teniendo en cuenta esto, comparar las posibilidades de React Native vs. Swift es preciso.

¿Qué hay que tener en cuenta?

Desarrollar una app sobresaliente es una suma de muchos factores, sin embargo hay pocos indicadores que tienen el mayor valor. ¡Que comience la comparación React Native vs. Swift!

(Pero antes, aquí tienes una versión TL;DR 😉)

React Native vs Swift chart 1

React Native vs Swift – comparación de plataformas

Interfaz de usuario

Swift, al ser el lenguaje nativo de iOS diseñado por Apple para potenciar las apps no tiene, obviamente, problemas para integrarse en el diseño de iOS y aprovechar todos los principios de UX. Por otro lado, construir la aplicación con Swift es, de hecho, codificar una aplicación nativa desde cero. Por lo tanto, cada elemento necesita ser pulido por separado.

React Native, por otro lado, utiliza JavaScript como poder detrás de la escena y aprovecha las APIs internas para ejecutar elementos nativos. Teniendo en cuenta esto, la interfaz de usuario es indistinguible de la nativa, pero más fácil de codificar. Además, debido a la herencia de desarrollo web de JavaScipt, las aplicaciones no tienen problemas para mostrarse en varios tamaños de pantalla – y eso puede ser un punto cuando se construye una aplicación para el iPhone y el iPad al mismo tiempo.

Velocidad de codificación

Swift es, bueno… Swift cuando se trata de codificación, ya que el lenguaje se quitó el legado de Objective-C utilizado antes, haciendo el proceso más fácil y deshaciéndose de los inconvenientes. Es una manera conveniente de construir una aplicación para iOS.

Por otro lado, React Native es un marco de trabajo para JavaScript, que es un simple-pero-poderoso caballo de batalla de las aplicaciones web. El lenguaje también es fácil de aprender y desde 1995, cuando se introdujo el lenguaje, se diseñaron varias herramientas de apoyo.

El juego cambia cuando se trata de construir la aplicación de Android. Con React Native puede ser incluso un proceso de copiar y pegar (hasta cierto punto). Si la app se construyó con Swift, el proceso comienza desde el principio.

Rendimiento

La intuición sugiere que la app nativa debería tener mejor rendimiento que la basada en el framework. Pero no es tan sencillo.

Varias pruebas vistas entre la web muestran, que al comparar dos apps idénticas que realizan las mismas acciones, las diferencias varían de la tarea. React Native es ligeramente mejor cuando se trata de la optimización del uso de la CPU, pero lidiar con los efectos gráficos puede ser más problemático para el framework. Para hacer frente al desafío, React Native permite a los desarrolladores incrustar el código nativo en la aplicación, entregando la quimera de código utilizando diferentes herramientas y activos para hacer frente a diferentes tareas.

Pero el solo hecho de que las diferencias no sean significativas es un gran testimonio para React Native.

Comunidad y soporte

JavaScript es actualmente uno de los lenguajes de programación más populares, utilizados en el desarrollo de aplicaciones web y móviles híbridas. De hecho – sigue siendo el lenguaje de programación más popular por sexto año consecutivo y se utiliza en más del 95,1% de los sitios web de Internet.

Es difícil desafiar la posición de JavaScript al establecerse en 2014, incluso cuando está respaldado por Apple.

Por otro lado, con la comunidad más pequeña, el acopio de contenido de baja clase es significativamente menor. Cuando se trata de encontrar cualquier cosa sobre JavaScript en Internet, hay innumerables respuestas asociadas a montones de problemas sólo ligeramente relacionados con el problema a resolver. Así que, de hecho, a pesar de la gran comunidad de codificadores de JavaScript que hay, encontrar la respuesta puede considerarse como buscar una aguja en un pajar.

La situación se ve también debido a la omnipresencia y versatilidad de JavaScript. El lenguaje se utiliza para resolver múltiples tipos de problemas, ya sea el desarrollo web, el desarrollo de apps móviles o incluso el machine learning -sí, hay frameworks que combinan redes neuronales y javascript y son mucho más que un juguete interesante o un fenómeno.

Como oposición estricta – los problemas relacionados con Swift se refieren a un solo tipo de programación – el desarrollo de aplicaciones iOS. Teniendo en cuenta que, las clases de problemas son estrechas y asumiendo que uno no está buscando una solución para algún desafío extremadamente sofisticado nunca encontrado antes, detectar la solución o preguntar sobre ella en la comunidad puede ser significativamente más fácil.

Por lo tanto, una comunidad más grande a veces puede dar más confusión que un beneficio real.

Estabilidad

React Native, a pesar de estar impulsado por uno de los lenguajes de programación más reconocidos, no está produciendo una app realmente nativa. Su trabajo se basa en aprovechar las APIs y librerías internas para hacer funcionar la app. Por tanto, se trata de añadir un intermediario entre el código y la plataforma.

Por otro lado, Swift produce una app nativa, que puede aprovechar todas las posibilidades de la plataforma. Como se mencionó anteriormente, Swift se desempeña mejor cuando se trata de efectos gráficos y tareas computacionales pesadas. Así que cuando se trata de exprimir la plataforma, Swift puede ser la mejor opción.

¿Pero todas las aplicaciones exprimen el iPhone? ¿Y cuántos desarrolladores de Swift están lo suficientemente capacitados para crear una aplicación que esté lo suficientemente optimizada para funcionar de forma más estable que React Native?

Documentación

Tanto React Native como Swift cuentan con el apoyo y el mantenimiento de gigantes tecnológicos. React Native es un proyecto respaldado por Facebook, y Swift proviene de Apple. Teniendo en cuenta esto, ambos proyectos están bien documentados y organizados. De hecho, ambas tecnologías entregan estándares de comentar el código de una manera que se puede convertir fácilmente en la documentación, reduciendo significativamente el tiempo requerido. Para ser precisos:

  • JSDoc para Java
  • Jazza, que convierte los comentarios en markdown hecho en Swift.

Pero aparte de la documentación entregada por el propietario del proyecto, hay otro aspecto de la entrega del proyecto de TI – la facilidad y la automatización de la documentación del código entregado. Hay una declaración (no realmente) humorística sobre la necesidad de escribir comentarios y entregar una documentación fiable de cualquier código escrito:

Cualquier código propio que no hayas mirado durante seis o más meses bien podría haber sido escrito por otra persona.

– Ley de Eagleson

Así que de hecho – no importa lo brillante que sea un programador, cualquier código poco documentado es espagueti a primera vista. Las funciones de documentación automatizada -tanto las que permiten añadir los comentarios como las que exportan los documentos completos- pueden suponer un enorme ahorro de tiempo.

Cuando se trata de este aspecto, React Native tiene herramientas significativamente más sofisticadas para automatizar la entrega de la documentación o incluso apoyar la discusión entre los codificadores durante el proceso de desarrollo.

Así que considerando este punto de vista – la ventaja está del lado de React Native.

La madurez de la plataforma

Ambos proyectos son relativamente nuevos, ya que Swift se lanzó en 2014 y React Native en 2015 (siendo un descendiente directo de React.js, que ha estado en uso dentro de Facebook desde 2011 y se convirtió en código abierto en 2013). Estas tecnologías son emergentes, aunque hay pocas diferencias significativas.

Swift es un nuevo lenguaje de programación diseñado para ser el siguiente paso después de Objective-C. El diseño de un lenguaje de programación es siempre un proceso espinoso, ya que es una columna vertebral de toda pieza de software.

React Native, por otro lado, es la nueva tecnología impulsada por la ya establecida – el JavaScript. Por lo tanto, es más fácil comprobar el código y detectar los problemas con el propio marco y la detección de los errores es más fácil.

El coste del desarrollo

Por último, pero no por ello menos importante, el coste de desarrollo es uno de los aspectos clave a tener en cuenta… bueno… a la hora de pensar en elegir una tecnología concreta para entregar el proyecto. La mayoría de los retos en este campo pueden resolverse con un simple gráfico que represente el aumento de la calidad con el aumento del precio. Pero eso no es necesariamente la verdad – especialmente considerando el desarrollo de aplicaciones iOS.

Según varias estimaciones, no hay una diferencia significativa en los salarios por hora de los codificadores, con ganancias ligeramente superiores de los equipos de desarrollo rápidos:

React Native vs Swift chart 2

Aparentemente, la diferencia no es tan grande cuando se trata de un solo codificador, sin embargo se apilan cuando se trata de un proyecto grande o numerosos codificadores dentro del equipo.

Así que si pensamos en el coste de desarrollo contado en moneda fuerte, React Native es ligeramente más barato manteniendo todas las ventajas que ofrece.

Plantilla de talentos de desarrolladores

Los números anteriores pueden ser confusos – por qué para Linus Torvald el codificador que entrega la aplicación sólo para un sistema operativo móvil se paga mejor que el tipo o la chica cuyo código se puede utilizar en ambas plataformas principales al mismo tiempo, reduciendo efectivamente el tiempo de desarrollo y los costos a la mitad.

La razón está relacionada con la disponibilidad de talentos en el mercado. JavaScript es uno de los lenguajes más populares que existen. Según la encuesta realizada por Stack Overflow, el 69,8% de los usuarios elegiría JavaScript como su lenguaje preferido, mientras que Swift apenas entra entre los quince primeros.

Considerando eso, hay muchos codificadores de JavaScript para elegir por ahí, mientras que un número significativamente menor es competente con Swift. Construir el equipo de codificadores de JavaScript es significativamente más fácil.

Ejemplos de aplicaciones

Ok, así que tenemos toda la magia tecnológica detrás de nosotros y la pregunta crucial viene en – ¿cuál es la diferencia real entre estos dos lenguajes y se puede detectar una diferencia significativa? La mejor prueba se puede realizar con dos aplicaciones similares, pero totalmente diferentes, como la aplicación de Facebook en iOS y la aplicación de LinkedIn para iOS.

Ambos son aplicaciones de redes sociales con gran cantidad de datos, con el feed para mostrar, mensajes para intercambiar y anuncios para mostrar. Además, ambas ofrecen una cantidad importante de contenido y necesitan ser optimizadas para tener un buen rendimiento y aprovechar los datos del usuario; al final, la aplicación móvil es una de las mejores formas de obtener los datos que a la empresa le cuesta recoger por otras vías, como la localización o los patrones de comportamiento.

Las diferencias clave se ven en dos campos cruciales: el rendimiento y las características. La aplicación de LinkedIn en Swift parece hinchada en comparación con la de Facebook, a pesar de que la cantidad de datos a procesar y analizar es relativamente menor. Además, la aplicación de LinkedIn parece ser menos intuitiva, aunque es una cuestión de UX y de diseño, no de la tecnología de programación utilizada para ofrecer el producto.

Al final – parece que la tecnología basada en javascript viene con un rendimiento mucho mejor que el lenguaje nativo cuando se trata de entregar contenido rico.

Resumen – una resiliencia del lenguaje de programación

La programación y el negocio de las TI se basan en un paradigma un poco esquizofrénico de la construcción de nuevas cosas con herramientas antiguas. A pesar de los esfuerzos de los gigantes de la tecnología y de los lenguajes de programación emergentes considerados como prodigios, el material envejecido, a veces incluso anticuado, no abandona el campo. Al menos no fácilmente.

Fortran puede ser un ejemplo extremo de la resistencia de los lenguajes de programación. Lanzado en 1957, cuatro años antes del vuelo espacial de Yuri Gagarin y nueve años antes de llegar a la luna.

Oh, y 28 años antes de la primera edición del sistema operativo Windows. Y, sin embargo, Fortran sigue utilizándose, especialmente en campos de la computación pesada como la predicción meteorológica y la astronomía.

El mismo destino parece compartir JavaScript, que potencia la web moderna a pesar de tener más de 20 años. Con React Native tiene la oportunidad de seguir utilizándose como caballo de batalla de los dispositivos móviles, sobre todo teniendo en cuenta la dinámica de las empresas de desarrollo de React native.

Preparar la aplicación con Swift puede suponer algunas mejoras de rendimiento y permite al desarrollador aprovechar todas las posibilidades que ofrece iOS. Pero en la mayoría de los casos, la ganancia parece no ser tan significativa cuando se comparan las posibilidades de React Native vs. Swift.

Sin mencionar el hecho de que hay todo un mundo de usuarios de Android esperando una aplicación.

Pero oye, no estás leyendo esta entrada del blog por accidente – por alguna razón, estabas buscando la comparación entre React Native y Swift. Incluso si nuestra comparación muestra que React Native es una mejor elección, no tenemos información sobre el desafío que espera a su negocio que desea resolver con una aplicación. Y el trasfondo puede cambiar el juego, a veces hay detalles que hacen que escoger una tecnología sobre otra sea una obligación, incluso si son similares a primera vista u otra parece ser mejor.

La tecnología no consiste en obsesionarse con una tecnología concreta: se trata de escoger lo mejor y crear la solución que supere al resto del mercado. Por eso mantenemos a nuestro equipo de expertos con múltiples talentos y habilidades listos para pensar fuera de la caja. Así que si te preguntas si React Native o Swift se adaptan mejor a tu proyecto, escríbenos para que podamos averiguarlo juntos.