Diferencias entre LAMP y MEAN

Si comienzas a programar aplicaciones web estás bastante perdido preguntándote por dónde empezar. Una buena opción es plantearlo de la siguiente manera. Tienes que elegir entre LAMP o MEAN. ¿Pero cuál es mejor? ¿En qué se diferencian?

Diferencias entre LAMP y MEAN

Cualquiera de las dos pilas o stack es una buena apuesta de futuro porque las empresas no pueden cubrir los puestos LAMP y MEAN que ofrecen, y no parece que las cosas vayan a cambiar mucho a medio y largo plazo.

Pero no nos engañemos. Ninguna de las dos pilas es perfecta y al final se termina eligiendo una u otra en función del proyecto que se tiene que implementar.

Y por supuesto que no son las únicas opciones, también están las arquitecturas Java y Ruby, pero el post de hoy lo hemos planteado como una especie de batalla entre LAMP y MEAN para dar un poco de emoción 🙂

Ok, veamos algunas diferencias entre LAMP y MEAN, así como sus ventajas, inconvenientes y proyecciones de futuro. Are you ready?

LAMP

LAMP es el nombre de estas tecnologías:

  • Linux
  • Apache/Nginx
  • MySQL
  • PHP/Python

El nombre original LAMP responde a Linux, Apache, MySQL y PHP/Python/Perl, pero también puede incluir otras tecnologías.

La idea importante de LAMP es que funciona sobre sistemas operativos Linux y te permite construir apps web que son gestionadas por un servidor web (Apache, Nginx u otros) vía HTTP o HTTPS, en el puerto 80 o 443. Este es el paradigma que determina la arquitectura de la aplicación.

Las apps web LAMP se programan con lenguajes de script de servidor como PHP o Python y utilizan bases de datos MySQL, aunque también puedes utilizar otro motor como PostgreSQL o incluso otras tecnologías de bases de datos como SQLite.

GNU/Linux

Ventajas de LAMP

  • Es una tecnología madura
  • Está bien documentada
  • Funciona bien en apps web de tamaño medio y grande donde la gestión de los datos en tiempo real no es vital
  • Tiene una comunidad muy grande
  • PHP es el lenguaje de servidor más utilizado del mundo, lo usan WordPress, Drupal, Prestashop, Magento, Moodle y un largo, largo etcétera

Inconvenientes de LAMP

  • No funciona bien en aplicaciones de tiempo real que manejan grandes cantidades datos de forma concurrente
  • No está de moda
  • Es más lento que MEAN
  • Emplea varios lenguajes de programación

MEAN

MEAN quiere decir esto:

  • MongoDB
  • Express
  • AngularJS
  • Node.js

¡En MEAN todo es JavaScript!, este es el lenguaje de programación que se utiliza tanto en la parte frontend como en la parte backend.

En MEAN todo es JavaScript

MongoDB es una base de datos NoSQL orientada a documentos. Express es el framework web más utilizado en Node.js. AngularJS es el framework que utilizan los frontenders para construir apps SPA (single-page application) robustas y mantenibles. Finalmente, Node.js es la tecnología de servidor orientada a eventos, no bloqueante, que viene a sustituir al tradicional servidor web de la pila LAMP.

Una cosa muy importante a tener en cuenta es que Node.js es diferente a los servidores web tradicionales tales como Apache o Nginx, y el JavaScript empleado en el lado del servidor se escribe bajo un paradigma orientado a eventos. Nada que ver con las aplicaciones Python, PHP, Ruby, etc.

Ventajas de MEAN

  • Lo utilizan las startups más punteras
  • Es la mejor solución para programar aplicaciones de tiempo real que manejan grandes cantidades de datos de forma concurrente
  • Es más rápido que LAMP
  • Emplea un solo lenguaje para todo: JavaScript
  • Está de moda

Inconvenientes de MEAN

  • La orientación a eventos no es siempre el mejor marco para desarrollar aplicaciones
  • MEAN está todavía en fase de investigación y desarrollo, lo que lo convierte en un entorno extremadamente volátil
  • Cada dos por tres salen nuevas librerías que no siempre funcionan bien
  • La documentación no es tan buena como en LAMP
  • Muchas empresas pequeñas y medianas no pueden permitirse el riesgo de utilizar tecnologías tan cambiantes

Conclusión

En mi humilde opinión, si quieres aprender programación web puedes elegir tanto LAMP como MEAN. Los dos caminos son buenos, aunque lo ideal es combinar cosas de los dos mundos porque al final suele emplearse una u otra pila dependiendo de la aplicación a implementar.

Si te encanta el mundo de las startups punteras tipo Facebook e Instagram, por poner algunos ejemplos, si lo tuyo es Silicon Valley, es más recomendable que empieces por MEAN. No te lo pienses dos veces, elige MEAN si te gusta experimentar, programar aplicaciones concurrentes, romper cosas cada dos por tres, y estar a la vanguardia de las últimas tendencias.

Por el contrario, si prefieres trabajar en entornos medianos y grandes (no tanto como Facebook) dando soporte a pymes que trabajan con WordPress u otros CMS basados en PHP, o simplemente quieres desarrollar aplicaciones web sin complicaciones que simplemente funcionen, ya sea por tu cuenta o para otros, LAMP es el camino a seguir.

LAMP es recomendable para los que no queréis arriesgar demasiado dinero invirtiendo en recursos, formación, personal, etc., en un entorno tan extremadamente cambiante como el de JavaScript en 2016.

¿Y qué pasará en el futuro, ganará LAMP o MEAN?

¿Y qué pasará en el futuro, ganará LAMP o MEAN?

Ya para terminar voy a posicionarme respecto a este tema como se viene haciendo en varios debates de la Web. ¿MEAN es el futuro? Creo que LAMP seguirá muy viva en los próximos años, simplemente MEAN ha entrado en juego a solucionar el problema de la programación concurrente y a mejorar la programación de apps SPA.

Pero las dos tenderán a converger. No habrá apps MEAN puras ni apps LAMP puras porque hay cosas de MEAN que puedes aplicar en LAMP y viceversa. Nada te priva de coger la A (AngularJS) de MEAN y ponerla en LAMP. Por otro lado, hay cosas que no se pueden hacer con LAMP y otras cosas que no permite MEAN.

Así pues, el desarrollador full stack del futuro tendrá que conocer LAMP y MEAN.

Otra previsión para el medio plazo: a medida que MEAN madure algunas tecnologías se terminarán deprecando, imponiéndose unas sobre otras, o cambiarán radicalmente como ya pasó hace poco con la actualización de AngularJS 1 a AngularJS 2.