Hace algunos meses veíamos PHP vs Python y hoy hablaremos de PHP vs Ruby, dos lenguajes con diferentes enfoques. Como Ruby no es un lenguaje destinado al desarrollo web desde su origen como si los es PHP, cuando desarrollamos un proyecto web en Ruby debemos utilizar un framework, hay muchos como pueden ser como Rack, Cuba, Sinatra, Lotus, Volt, Cramp o el más conocido de todos: Ruby on Rails o simplemente RoR.
Debido a su amplia popularidad y ser el framework de referencia, cuando hablemos de Ruby a lo largo del artículo tomaremos como comparación Ruby on Rails, aunque es importante saber que existen más frameworks para Ruby aparte de RoR.
Comencemos con este versus que promete y mucho: Ruby vs PHP
Contenido
¿Qué es y para qué sirve Ruby?
Ruby es un lenguaje de programación interpretado y de alto nivel, lo que significa que es un lenguaje más natural y comprensible que el lenguaje máquina de bajo nivel.
Fue creado por el programador japonés Yukihiro «Matz» Matsumoto a partir de 1993 como un lenguaje de propósito general, sin embargo donde es más usado es en el desarrollo web donde es utilizado mediante el framework Ruby on Rails creado por David Heinemeier Hansson
Ruby es un lenguaje multiplataforma y multiparadigma, permite programación procedimental, con orientación a objetos o funcionalmente. Además soporta introspección, reflexión y metaprogramación, además tiene soporte para ejecución de hilos.
En Ruby todo es un objeto, si bien en otros lenguajes como Java, Python o C++, lo cierto que Ruby lo lleva a otro nivel donde hasta los tipo de datos básicos como enteros, cadenas o booleanos que en Ruby también son objetos, incluso los operadores también lo son.
Una particularidad de una aplicación en RoR es que funciona como un servicio independiente levantando su propio servidor HTTP a diferencia de PHP que necesita para funcionar un servidor web tradicional como Apache por ejemplo.
Definitivamente Ruby no es tan popular en el mundo Web como PHP, sin embargo grandes compañías lo usan como por ejemplo Twitter, Github, Airnbn, SoundCloud, etc
¿Por qué aprender Ruby?
Ruby es un lenguaje con una sintaxis amigable diseñada para facilitar mucho la lectura de código y esto es un aspecto importante ya que la mayor parte del tiempo un programador la pasa leyendo e intentando entender código propio además de código ajeno.
Mientras más amigable sea la sintaxis mejor para facilitar la comprensión, se dice que Ruby fue pensado en hacer feliz al programador y para ser productivo, haciendo énfasis en las necesidades del programador más que de la máquina.
Cuando se diseña un lenguaje de programación normalmente se toman decisiones de diseño en función de lo que sea más eficiente o más rápido para la computadora en lugar del programador, por eso Ruby rompe con esta lógica y se centra en lo que el programador necesita para ser más productivo.
¿Qué es y para qué sirve PHP?
A mitad de los años noventas Rasmus Lerdorf creo PHP como un lenguaje scripting destinado a generar contenido dinámico para la web ejecutándose del lado del servidor y que genera el html que se enviaba al navegador.
En los siguientes años PHP evolucionó hasta transformarse en un lenguaje de propósito general, aunque el uso más conocido continua siendo el desarrollo web actualmente también es un lenguaje que permite generar programas de consola por ejemplo, independiente del servidor web.
Es un lenguaje multiplataforma y multiparadigma, permite programación procedural, imperativo, con orientación a objetos y funcional, todo lo cual nos brinda una amplia flexibilidad a la hora de programar según nuestras necesidades.
Tiene una curva de aprendizaje mucho más corta que otros lenguajes y donde la documentación es una de las más extensas y completas.
La sintaxis de PHP es heredada de C/C++ y esta es una cualidad que también comparte con JavaScript nos resulta igualmente familiar. El tipado de variables es dinámico lo cual hace que no debamos declarar tipos, esto nos da flexibilidad sin embargo también es asunto de críticas cuando se lo compara con lenguajes de tipado fuerte como Java.
Recién en PHP 7 se incluyó la posibilidad de definir tipos a los parámetros pasados a una función y también el poder definir un tipo del valor de retorno, aunque todo esto es opcional y depende del programador si quiere trabajar así y no obligatorio como lo es en otros lenguajes.
Además soporta una gran cantidad de tipos de base de datos lo cual nos brinda total libertad a la hora de elegir nuestro motor de almacenamiento, además en su core el propio lenguaje ya nos incluye de serie un montón de funciones básicas integradas y muchas no tan básicas sin necesidad de recurrir a extensiones de terceros que podrían comprometer el rendimiento y/o la estabilidad.
¿Por qué aprender PHP?
Hay muchas razones por las que elegir PHP si vas a hacer desarrollo web, es un lenguaje sencillo donde la curva de aprendizaje es relativamente corta. Aunque sea un lenguaje sencillo no deja de ser potente y te permite hacer los más variados proyectos.
Otra de las principales razones es prácticamente es el lenguaje de facto en la web, casi el 79% de los sitios web en internet están basados en PHP, la diferencia con el segundo es abismal, el lenguaje le sigue es ASP casi el 12%.
Datos validos actualizados a Noviembre de 2018 – Fuente: w3techs.com
Al ser de los lenguajes más utilizados podemos encontrar una alta oferta de software, desde frameworks de desarrollo como Laravel o Symfony como gestores de contenido como WordPress, Joomla, Drupal, Magento o Prestashop entre miles de alternativas disponibles.
Otro detalle significativo es que no es el lenguaje con mejores salarios sin embargo por la alta demanda seguramente es el que más salida laboral tiene. Siempre será más sencillo encontrar empleo como programador PHP que en cualquier otro lenguaje, incluido Ruby
Comparativa Ruby vs PHP
Ruby | PHP | |
Desarrollado | Fue programado en C | Fue programado en C y C++ |
Porcentaje del mercado web | 2.3% | 78.9% |
Frameworks | Ruby es un lenguaje de programación pero para ser usado en la web se necesita un Framework como Ruby on Rails | PHP es un lenguaje de programacion y no es necesario el uso de un Framework aunque si es recomendable |
Aplicaciones | Ruby es un lenguaje de programación de propósito general por lo que sirve tanto para la web como para el escritorio. | PHP fue diseñado específicamente para la web y no para el escritorio |
Desarrollo | En Ruby el desarrollo y el despliegue es un poco mas complejo que en PHP | En PHP el desarrollo y el despliegue es mas sencillo que en Ruby |
Funciones disponibles | Ruby debe cargar todas las librerías de forma externa | PHP incorpora la mayoria de las funciones en su nucleo aunque puede expandir funciones mediante modulos |
Sintaxis | La sintaxis de Ruby es muy similar a la de Python | La sintaxis de PHP es muy similar a la de C/C++ |
Rendimiento | Ruby es un poco mas lento que PHP | PHP es un poco mas eficiente |
Similitudes y diferencias de Ruby vs PHP
Como en PHP, en Ruby puedes encontrar que:
- Todas las variables son de tipado dinámico , no tienes que declararlas.
- Hay clases, y puedes controlar el acceso a ellas como en PHP como public, protected y private.
- Algunas variables comienzan con $, pero no todas, varia segun el ámbito de la variable.
- También está eval.
- Puedes usar el interpolado de strings. En vez de hacer «$foo es un $bar», en Ruby puedes hacer «#{foo} es un #{bar}» y como en PHP, esto no aplica para los strings definidos con comillas simples.
- Puedes manejar excepciones
- Los arrays y hashes funcionan como se espera que lo hagan, si cambias array() por { y }: array(‘a’ => ‘b’) en Ruby es {‘a’ => ‘b’}.
- true y false se comportan como en PHP, pero null se llama nil.
Ruby vas a encontrar que a diferencia de PHP:
- Tipado fuerte. Ya no depende del lenguaje lo haga automático. Debes utilizar to_s, to_i, etc. si quieres convertir tipos
- Las variables pueden comenzar con «$», «@», «@@» o no tener un símbolo que la preceda, varia según el ámbito de la variable
- Los strings, números, arrays, hashes, etc. son objetos, de hecho todo es un objeto. En vez de utilizar abs(-1) se usa -1.abs.
- En la llamada a funciones no es obligatorio el uso de paréntesis salvo cuando necesitas pasar parámetros
- No existen clases tipo abstract o interfaces.
- Sólo false y nil (nul) son falsos, en el caso de 0, array() y «», son todos verdaderos en las operaciones de comparación lógicas.
Ruby vs PHP
Veamos ahora las principales diferencias entre Ruby vs PHP:
Frameworks
Hay necesidades básicas de todo proyecto de software que es independiente del cometido de la aplicación, es decir que independiente de lo que haga la aplicación web lo más habitual y recomendable es que utilicemos el patrón MVC para organizar nuestra aplicación, que utilicemos una conexión a base de datos, un gestor de template entre muchas otras cosas.
La idea detrás de un framework es facilitar el desarrollo de un proyecto proporcionandonos todo esto esto, es decir una estructura organizada junto un conjunto de funciones y bibliotecas básicas que nos sirve de punto de partida para desarrollar la aplicación.
En ambos ambientes tenemos múltiples alternativas de frameworks, en Ruby la mas conocida sin dudas es Ruby on Rails, aunque no es la única, existen otras aunque menos conocidas, en el caso de PHP la variedad de frameworks es mucho mayor sin duda.
A su vez un framework web de Ruby tiene otra característica diferente a los de PHP, y es la de permitir usar Ruby en un entorno web ya que Ruby no fue diseñado para tal fin, lo que los frameworks de Ruby nos proporcionan es el poder crear la aplicaciones que implementan su propio servidor web prescindiendo de uno como Apache/Nginx o similar y funcionan en un puerto independiente, esto es especialmente útil si creamos algún servicio y queremos que ofrezca una interfaz web por ejemplo.
Escalabilidad y Mantenimiento
Los motivos para escalar en ambos casos son los mismos aunque como Ruby consume muchos más recursos que PHP tendremos la necesidad de escalar mucho antes en una aplicación con Ruby que con PHP, no porque Ruby sea mala opcion es que simplemente trabajan diferente.
Podemos escalar verticalmente agregando recursos al servidor o migrando a un servidor más grande, este es el mecanismo más sencillo si se quiere porque no hay que tocar código aunque esto tendrá un techo en el hardware disponible en el mercado, es una de las formas de balanceo de carga más comunes del mercado.
Luego cuando escalar verticalmente no es una opción podremos hacerlo horizontalmente agregando mas servidores en paralelo sin embargo en este caso si la aplicación debe estar preparada para esta forma de trabajar.
Los pasos que sigamos a la hora de escalar depende de la arquitectura del proyecto o aplicación, muchas veces el cómo escalar de esta forma estará condicionada por decisiones de diseño heredadas, por eso siempre es mejor adelantarnos y considerar desde la concepción misma del proyecto la necesidad de escalar en un futuro.
Esto es independiente de si se trata de Ruby vs PHP o cualquier otro lenguaje, en todos nos pasara lo mismo aunque siendo previsores con esto se nos facilitara en tiempo, en costos y nos evitará dolores de cabeza futuros.
En el caso del mantenimiento a nivel de código debido a la flexibilidad de PHP que nos permite ser más desordenados puede que el mantenimiento se haga un poco más complejo, sin embargo si seguimos buenas prácticas y utilizamos un framework esto no debería representar problemas.
Luego a nivel de infraestructura el mantenimiento se vuelve más complejo sobre todo al agregar más servidores o más servicios se nos agrega más trabajo de administración que a su vez también requieren conocimientos mas profundo de sistemas, servidores, redes e infraestructura.
Rendimiento
Es un tema delicado de medir debido a que PHP un lenguaje y si usamos Ruby en una web estaríamos usando un framework como Ruby on Rails (RoR) que obviamente va a ser más lento que PHP puro.
En cambio si medimos RoR contra por ejemplo Laravel, el framework más usado para hacer las cosas más justas encontramos el rendimiento de Laravel/PHP es inferior que el de Ruby on Rails para ejecutar la misma tarea.
Ambos son lenguajes interpretados, es decir que cada vez que se ejecuta el código este es traducido a un código intermedio comprensible por la máquina. Por su naturaleza de lenguajes scripting ambos son más lentos que los lenguajes compilados.
Este proceso de interpretación del código es repetido en cada petición lo cual provoca mayor uso de CPU y puede provocar una sobrecarga en el servidor cuando el número de peticiones es alto sin embargo existen formas de suprimir este tiempo innecesario.
Para aumentar el rendimiento si bien hay varias alternativas en ambos casos, las más conocidas son Rubinius para Ruby mientras que con PHP podemos implementar HHVM.
En ambos se encargan de compilar y traducir el código fuente a código intermedio o bytecode, ahorrando tiempo de ejecución para aumentar el rendimiento y la velocidad.
HHVM son las iniciales de HipHop Virtual Machine y se trata de una máquina virtual de código abierto que está basada en compilador Just in Time , que sirve como motor para ejecutar código de PHP y Hack, este último un lenguaje interno de Facebook y derivado de PHP.
Usando el principio del compilador JIT, ejecuta código PHP o Hack y lo transforma en bytecode de alto nivel (código intermedio) y posteriormente entonces traducido en código máquina, optimizado y ejecutado nativamente.
En el caso de Rubinius se trata de un proyecto mucho más pequeño, originalmente fue creado por Evan Phoenix que ha delegado el desarrollo y ahora es mantenido por un único ingeniero trabajando a tiempo completo.
Costos
Ambos lenguajes son gratuitos y open-source lo que significa que podemos usarlos libremente sin necesidad de pagar licencias como puede llegar a pasar con otros lenguajes y tecnologías sin embargo hay otros costos a considerar.
Descartado el costos por licencia de uso, el principal costo se refiere a los recursos humanos, es decir a los programadores. En en el mercado la oferta de programadores en PHP es mucho mayor que la de programadores Ruby que implica que por la ley de oferta y demanda del mercado haya diferencia en los ingresos promedio de cada uno.
Tanto por el gran número de desarrolladores de PHP y porque existe una fuerte competencia entre ellos es que hacen que los costos por programador sea menor en comparación con el costo de un desarrollador en Ruby, esto puede ser una ventaja competitiva para un negocio, al ser más económicos es más rentable contratar programadores PHP.
Si bien los sueldos de un programador Ruby/RoR suelen ser mayores, la demanda del mercado suele ser mucho menor por lo que siempre será mucho más sencillo encontrar empleos en los que se solicita PHP, las ofertas de programadores Ruby son más bien escasas en comparación.
Por otro lado, otro costo importante tiene que ver con el alojamiento de los proyectos desarrollados en cada uno de los lenguajes. Es mucho más fácil y económico encontrar un alojamiento para un desarrollo en PHP que uno en Ruby, básicamente debido a la popularidad de PHP, recordemos que PHP concentra casi el 80% del mercado web mientras que Ruby apenas el 2.3%.
Una de las enormes ventajas de PHP es que podemos alojar un proyecto en un hosting compartido que son muy comunes mientras que para un proyecto en Ruby si bien es posible alojarse también en un servidor compartido los proveedores que ofrecen tal soporte son muchos menos que los que ofrecen PHP.
En un servidor compartido podemos llegar a tener algunas limitaciones como por ejemplo la base de datos disponible o alguna configuración especial que necesitamos.
Por eso en algunas circunstancias vamos a necesitar un servidor Cloud o un Dedicado para alojar un proyecto en Ruby en lugar de un servidor compartido.
Con PHP también podemos llegar a necesitar un Cloud o un Dedicado solo que en este caso es más por escalabilidad, por un tema de rendimiento y tráfico que por las limitaciones técnicas y de servicio que podamos tener en un hosting compartido.
Si quieres ver más en profundidad las diferencias entre un tipo de alojamiento y otro te invito a leer: Diferencias entre servidor y hosting
Documentación y Comunidad
Si bien tanto la documentación de Ruby por un lado y de RoR por otro es abundante y su comunidad muy activa lo cierto que la documentación oficial de PHP así como la información disponible en otras fuentes es mucho mayor que de Ruby/RoR.
En ambos podemos encontrar información desactualizada, esto se debe principalmente a la evolución de cada lenguaje a través de los años que hace que la información previa quede obsoleta en pocos años.
En el caso de PHP podemos encontrar la Documentación Oficial bastante amplia en múltiples idiomas, donde podemos encontrar organizado por temas y por cada versión de PHP que necesitemos. Encontremos datos sobre cada función y clase incluida en PHP además de numerosos ejemplos de uso de cada funcionalidad.
Se incluyen apartados sobre Características, Referencia del lenguaje, Referencia de funciones ademas importantes secciones sobre Seguridad, Migración entre versiones, Instalación y configuración.
Un sitio relevante dentro del la comunidad PHP es phptherightway que nos ayudará a evitar errores comunes, como seguridad, instalación, multilingüe, prácticas de codificación, pruebas, etc.
Para Ruby podemos encontrar Ruby Lang que nos proporciona una documentación no tan extensa como la de PHP aunque sin embargo nos ayudara mucho sobre todo a iniciarnos en el mundo de la programación con Ruby.
En esta web dentro de la categoría Para iniciarse encontrarás recursos de cómo comenzar a programar en Ruby desde cero y por supuesto manuales mas avanzados si ya sabes programar porque vienes desde otro lenguaje. Además también te brinda los enlaces de los clásicos manuales de referencia del lenguaje, para conocer todos lo que Ruby nos brinda.
Conclusión
Existe una relación de amor-odio hacia PHP y se pronostica de un futuro incierto, sin embargo actualmente es la base del desarrollo de sitios, lo que garantiza su vigencia por muchos años aún, hay millones de páginas web actualmente desarrolladas en PHP que deberán ser mantenidas para lo cual se necesitaran programadores para hacerlo.
¿PHP vs Ruby? ¿Cuál debo elegir? Ambos en realidad. Si ya dominamos PHP un paso para crecer como programador es añadir Ruby/RoR como habilidad, en caso que ya sepamos Ruby es sumamente importante aprender PHP porque imposible obviar la importancia de PHP entre las habilidades de un programador web. Tal como está el mercado actual conocer PHP es indispensable.