Es bien sabido que las aplicaciones web modernas se utilizan cada día más. El desarrollo es realmente rápido y permite publicar aplicaciones en todas las plataformas, donde el único requisito es disponer de un entorno que maneje una pila tecnológica determinada. El lenguaje que se puede llamar rey de todos los demás dentro de este entorno es JavaScript. Hoy voy a compartir contigo algunos datos sobre el desarrollo de software relacionados con este lenguaje.
Definición de desarrollo rápido de aplicaciones
La frase "desarrollo rápido" puede interpretarse de muchas maneras equivocadas. Para evitarlo, expliquemos cuáles son nuestras expectativas. Lo más importante es el presupuesto. Para construir muchas versiones de la misma aplicación, necesitamos muchos desarrolladores de varias pilas tecnológicas y pagar a cada uno de ellos. Para construir aplicaciones móviles nativas, necesitamos duplicar nuestro código para que funcione bien en ambas plataformas: Android e iOS. Un enfoque común es mantener ambas aplicaciones similares, utilizar la misma API, mantener el mismo comportamiento, etc. Como resultado, tenemos que duplicar el código para construir dos versiones de la misma aplicación. JS es un lenguaje que nos permite construir aplicaciones móviles y aplicaciones web al mismo tiempo. ¿Suena imposible? Deja que te explique de qué estoy hablando.
¿Móvil? ¿Web? Me da igual.
Digamos que queremos construir una aplicación que utilice la librería React. Esta biblioteca se puede utilizar para construir aplicaciones web y aplicaciones móviles con React nativo. Los mecanismos lógicos de la aplicación, como la autorización, la computación, el filtrado de datos, etc., pueden realizarse con hooks React. La cuestión es que estos hooks pueden ser compartidos por ambas versiones de la aplicación - web y móvil. Gracias a esta opción, tenemos las siguientes salvaciones:
- No es necesario duplicar el código responsable de lo mismo,
- No es necesario contratar desarrolladores móviles nativos para implementar la misma parte de las aplicaciones,
- No hay necesidad de mezclar diferentes lenguajes para implementar la misma aplicación en diferentes plataformas móviles (Android/iOS),
- Un desarrollador puede encargarse de implementar funciones específicas de la aplicación en todas las plataformas.
Para resumir este párrafo, no se trata de que un código base alimente todas las versiones de la aplicación, aunque podemos dividir el código compartido y utilizarlo en cada una de ellas para que el proceso de desarrollo sea realmente más rápido.
Conclusión - si quieres construir una aplicación web y una aplicación móvil al mismo tiempo, considera la librería React que puede compartir un código base en la versión móvil y web de la aplicación.
Pero, ¿qué pasa con el backend?
Hace unos años, al hablar del backend, probablemente pocos imaginarían que su mantenimiento podría ser posible con la ayuda de un lenguaje como JS. El desarrollo de esta lengua es asombroso y sus frutos pueden recogerse hasta el día de hoy.
¿De qué estoy hablando? Si contratas al Desarrolladores JSresulta que pueden escribir no sólo el frontend de la aplicación, sino también el backend, es decir, ser responsables del procesamiento de datos en el servidor, la comunicación con la base de datos, diversos tipos de integraciones, etc. ¿Todavía dudas o no estás convencido de este lenguaje? ¡No hay razón para tener esta actitud! Backend con JS se puede implementar de dos formas populares - en un modo extensible y configurable, que express.js nos puede proporcionar, y en un modo estructurado usando el patrón DI - nest.js.
Ambas soluciones son extremadamente populares y alimentan muchas aplicaciones de producción cuyos propietarios son "gigantes tecnológicos" en su sector. Creo que han madurado lo suficiente como para convencerte de que elijas cualquiera de ellas.
¿Aún no es suficiente? De forma similar a la compartición de código entre aplicaciones web y móviles, el backend puede compartir recursos tanto con las primeras como con las segundas. La palabra clave aquí es TypeScript: entre otras cosas, nos permite compartir una base de código, es decir, una definición común de tipos de datos entre todas las plataformas.
Con aplicaciones creadas únicamente en el JavaScript / TypeScript stack usando monolith, tenemos un montón de líneas de código ahorradas, que tendríamos que duplicar en lenguajes de programación nativos. Por otro lado, al utilizar el mismo lenguaje en todos los frentes, podemos compartir una enorme cantidad de lógica entre todas las aplicaciones, lo que definitivamente aceleraría el tiempo en el que se puede construir una aplicación concreta. ¿No suena genial?
¿Puede JS impulsar aplicaciones de escritorio?
Resulta que las tecnologías para crear aplicaciones de navegador son estupendas para mantener las aplicaciones que utilizamos en su forma de escritorio: un buen ejemplo puede ser Slack. Slack es una aplicación utilizada para equipo comunicación: además de la mensajería estándar, cuenta con muchas funcionalidades diferentes y varios tipos de integraciones externas. Todo ello la convierte en una de las aplicaciones más populares utilizadas principalmente en el sector informático.
Resulta que Slack también utiliza tecnologías web (y, por tanto, JavaScript) para construir la interfaz de su aplicación. La base que hace posible ejecutar este tipo de aplicaciones en el escritorio es el electrón. Crear interfaces gráficas utilizando tecnologías web hace que sea mucho más fácil, rápido y, en general, posible desarrollar aplicaciones para diferentes plataformas al mismo tiempo.
¿Es JS lo suficientemente maduro?
Por la parte frontend de la aplicación, no hay ilusión de que JS es el único y exclusivo lenguaje que potencia el ecosistema aquí. Por el momento, no hay alternativas viables que puedan sustituir esta parte de la aplicación (aunque creo que WebAssembly puede sorprendernos en el futuro). Así que, hablando de la madurez de JS en el frontend, no cabe duda de que es el único real.
Hablando del backend, muchos desarrolladores pueden parecer escandalizados o negar inmediatamente que JS sea adecuado como lenguaje de programación en el backend. Sin embargo, hay que analizar la cuestión objetivamente.
Muchos proveedores de servicios en la nube ofrecen SDK que permiten utilizar directamente nube métodos. Curiosamente, una de las pestañas más populares, justo al lado de C#, Go y Javaes Node.js. Resulta que esta plataforma es ideal para escalar y construir aplicaciones basadas en microservicios o arquitectura sin servidor. Conclusión - JS es uno de los lenguajes más populares para desarrollar aplicaciones basadas en microservicios/arquitectura sin servidor. En las pantallas de abajo, podemos ver que la santísima trinidad (Google Computing Services, AWS, Azure) de proveedores de nube nos permite crear aplicaciones utilizando nodo.js.


En cuanto al ecosistema node.js, probablemente todo el mundo esté familiarizado con una biblioteca llamada express.js - es una herramienta simple y directa que permite definir rutas y luego alimentarlas con datos apropiados que han sido debidamente procesados en el lado JS. Es más, el patrón utilizado entre las solicitudes HTTP gestionadas en express.js se ha convertido en uno de los más populares en todo el ecosistema y es una especie de patrón para varias otras bibliotecas que utilizan, por ejemplo, la arquitectura sin servidor.
Conclusión - JS es un lenguaje lo suficientemente maduro como para poner todas las cartas sobre la mesa y construir tanto frontend como backend. Además, es un lenguaje bastante fresco que se integra fácilmente en las arquitecturas de aplicaciones modernas. Es genial que un programador que conozca un lenguaje pueda dominar ambos lados (full stack) de una aplicación.
¿Es JS lo suficientemente rápido?
Pues bien, el motor más utilizado para ejecutar código JS es el v8, potenciado por el lenguaje C++. Este motor desarrollado por Google está dedicado a ejecutar aplicaciones para plataformas web. Una cosa interesante es que este motor no interpreta el código JS. En su lugar, hace lo que se llama "JIT" - "compilación justo a tiempo". Gracias a ello, no tenemos que interpretar el código JS línea por línea, simplemente lo compilamos y lo ejecutamos. Es incluso más rápido y nos da unos resultados de rendimiento realmente buenos.
¿Es JS lo bastante justa en cuanto a rendimiento? Sí, lo es. Mientras mantengas tus algoritmos lo suficientemente justos, no hay ningún problema en utilizar JS en el lado del servidor. La otra cosa es mantener tu código lo más asíncrono posible. Con estas prácticas tu código puede manejar peticiones paralelas sin ningún problema. No tienes que preocuparte del intercambio de tecnología por el rendimiento - especialmente cuando la arquitectura de la aplicación es escalable.
Ya he hablado en detalle del rendimiento y los puntos de referencia en este artículo.
¿No es JS una rareza entre otros idiomas?
Bueno, son decenas de opiniones de que el lenguaje JS se comporta raro en algunos casos y manejarlo es algo que te hará explotar la cabeza durante el proceso de desarrollo. No puedo estar de acuerdo 🙂 Al igual que cualquier otro lenguaje, tiene varios patrones / comportamientos que no son elegantes, pero con la comprensión de cómo funcionan y cuáles son sus objetivos el desarrollo de aplicaciones con JS no es desagradable.
Especialmente el comentario "asíncrono" justo antes de JS hace temblar a algunos desarrolladores. Es difícil de entender cuando no se ha tenido ninguna experiencia con ello. Sin embargo, es una parte de JS que nos permite construir soluciones modernas de forma sencilla. Echemos un vistazo a los websockets: al estar basados en eventos, cada una de las unidades conectadas, el usuario y el servidor, pueden emitir y recibir eventos en paralelo. Si el código que alimenta esta aplicación es lo suficientemente asíncrono y no bloquea el hilo principal, podemos manejar fácilmente miles de peticiones en poco tiempo.
Comparemos JS y PHP con el contexto de los websockets. PHP es un lenguaje de programación síncrono, por lo que resolver temas de websockets da muchos quebraderos de cabeza. Podemos ver que PHP obtiene patrones de JS para construir aplicaciones backend interactivas que pueden utilizar tecnologías modernas, como webrtc o websockets.
Mézclalo todo
Reuniendo todos los párrafos, podemos afirmar algunos hechos:
JavaScript es un lenguaje que puede utilizarse para crear todo tipo de aplicaciones, desde web hasta móviles o de escritorio;
Las aplicaciones escritas en JS pueden compartir varios fragmentos de código entre sí, como los responsables del formato de los datos o los tipos en Typescript;
Gracias al crecimiento de la web, el rendimiento que ofrece JS es lo suficientemente bueno como para optar por el desarrollo de aplicaciones tanto frontend como backend;
Gracias a su diseño poco habitual, JavaScript es compatible con infraestructuras de aplicaciones modernas, como websockets y WebRTC;
Si contrata a un desarrollador debidamente cualificado, podrá aprovechar su potencial en todos los frontend disponibles que funcionan con este lenguaje;
JS es un lenguaje que lleva varios años subiendo en las listas de popularidad, y no hay indicios de que esto vaya a cambiar en modo alguno.
Para dar mi opinión, ciertamente sesgada, aprovechar la opción de JavaScript de reutilizar el mismo código en todos los frentes disponibles es algo que sin duda acelerará el desarrollo de aplicaciones y reducirá el número de desarrolladores implicados en el mantenimiento del backend de aplicaciones escritas en otras tecnologías. Como confirmación, recordemos el hecho de que un gran número de los llamados gigantes informáticos siguen este patrón y comparten bastante código base entre plataformas. A pesar de las diferentes opiniones sobre este lenguaje, hay que tener en cuenta el hecho de que las estadísticas de uso y satisfacción con el uso de JS crecen de año en año, y sus desarrolladores pueden engancharse fácilmente a la tendencia del full stack.

Más información:
Por qué debería (probablemente) utilizar Typescript
¿Cómo no matar un proyecto con malas prácticas de codificación?
Estrategias de obtención de datos en NextJS