Cualquier gurú te dirá que la plataforma que él maneja es la mejor, pero sólo porque no conoce otras plataformas.
Entonces, si otra (que no es la del gurú) es mejor ¿Cual escoger? Mi primera respuesta sería ¡no importa! Las plataformas más populares compiten ferozmente entre ellas por ofrecer mejores funcionalidades y prestaciones.
A continuación las 5 plataformas más populares de lado servidor: Java, PHP, Microsoft .NET, Python y Ruby On Rails. Las plataformas voy a evaluarlas en base a los siguientes criterios:
1º) Grado de madurez.
2º) Tamaño y grado de actividad de la comunidad.
3º) Disponibilidad de librerías y aplicaciones de terceros.
4º) Disponibilidad y coste salarial de los programadores.
5º) Dificultad de la curva de aprendizaje.
6º) Compatibilidad con el resto del ecosistema.
7º) Rendimiento y escalabilidad.
¿Por qué es relevante cada uno de los siete factores anteriores?
Primero, la madurez. Hay proyectos, como por ejemplo node.js que se crearon para resolver problemas específicos. En el caso de node.js el tratamiento de peticiones AJAX desde las nuevas aplicaciones HTML5. Node.js ofrece una modalidad de procesamiento asíncrono junto con la propuesta de programar en JavaScript igualmente en el lado cliente y en el servidor (¿alguien se acuerda del SSJS de Netscape en el 94?) cosa que sus promotores denominan “el nirvana de los programadores”, aunque yo no calificaría a JavaScript como el nirvana de nada. Lo que sucede es que lo mismo que se puede hacer con node.js se puede hacer con los servlets asíncronos de Tomcat 7. Es más enrevesado de aprender y de codificar en Tomcat, ciertamente, pero a cambio se tiene una plataforma mucho más madura, eficiente y compatible que node.js. Más madura implica, por ejemplo, casi siempre mejor documentada. Las carencias de la documentación, por cierto, son un mal endémico en las librerías JavaScript cliente incluso en las más maduras como Dojo o YUI.
Segundo, el tamaño y grado de actividad de la comunidad. Es relevante porque cuanto mayor sea la comunidad más probable es que hay alguien que se haya topado con el mismo problema que nosotros y lo haya resulto. Más probable que en Stack Overflow o en cualquier otro sitio de preguntas y respuestas hallemos la solución a un problema que nos mantiene atascados.
Tercero, la disponibilidad de aplicaciones y librerías de terceros. El framework de desarrollo es sólo la herramienta base para construir una aplicación. Justo a continuación de elegir la plataforma hay que elegir las librerías. Por ejemplo, Java domina absolutamente el entorno financiero y bancario porque su middleware es el mejor. Lo hay para todos los gustos desde JBoss a TIBCO, pasando por Informatica UM. Los frameworks más modernos de todos los lenguajes han ido incorporando librerías de serie. Java apareció en 1995 y, más que un lenguaje para aplicaciones web estaba pensado con filosofía WORA (Write Once Run Anywhere) y para tener la menor cantidad de dependencias posible. Ruby On Rails apareció 10 años después e incorporaba en su arquitectura el paradigma Modelo Vista Controlador (MVC) y mecanismos como ActiveRecord que permiten que las clases tomen de la base de datos los nombres de la columnas sin necesidad de definirlas explícitamente en el código. Para conseguir con Java un framework funcionalmente similar a Ruby on Rails se necesita, al menos, una librería MVC como Struts, una capa de persistencia como Hibernate, soporte de servicios REST como Jersey, una librería de tags como JSTL y JavaMail. La cantidad de librerías Java es tal que existen empresas como Black Duck en EE.UU. Autentia en España especializadas en evaluarlas y dar formación a los clientes corporativos.
Cuarto, la disponibilidad y coste de programadores. Si sólo se van a necesitar dos o tres, entonces no hay problema. Pero si se estima que el proyecto requerirá 40 o 50 desarrolladores entonces encontrar y contratar personas puede llegar a ser muy difícil y costoso. Si se estima que el proyecto necesitará más de 50 desarrolladores, entonces es que se ha hecho mal el plan y bien hay que partir el proyecto en trozos de menos de 50, bien sería mejor cancelarlo y tirarlo todo a la basura antes de que se queme una burrada de dinero en producir un monstruo.
Quinto, la dificultad de la curva de aprendizaje. He dicho antes que todas las plataformas son igualmente buenas en cuanto a productividad. Pero no todas son igualmente fáciles de aprender. Si se tiene cuenta el tiempo que requiere un programador novato para aprender cómo funciona el invento, entonces sí que existen diferencias entre unas y otras. El orden de más fácil a más difícil es: PHP, Ruby On Rails, .NET, Python y Java.
Sexto, la compatibilidad con el resto del ecosistema. Rara vez las aplicaciones existen de forma aislada e independiente unas de otras. En general, las diferentes plataformas no son fácilmente interoperables unas con otras. Existen muchas herramientas de integración y formatos de representación de datos independientes del lenguaje como Protocol Buffers, pero lo más común, por fácil, es que las plataformas en dos lenguajes diferentes se acaben integrando vía base de datos relacional, XML o ficheros de texto delimitado.
Séptimo, el rendimiento y escalabilidad. Todos los programadores que conozco afirman que ellos desarrollan aplicaciones escalables. De ellos, he visto con mis propios ojos desarrollos ir lentísimos con tan poco como 100.000 registros. Con ello quiero decir que la escalabilidad es en primer lugar una cuestión de diseño y sólo en segundo lugar algo que dependa de la plataforma. La prueba es que existen sitios web de altísimo tráfico sobre todas las plataformas que comentamos aquí. A grosso modo, si se tiene una base de datos con tablas que no superan el millón de registros y un sitio web que no supera las cien mil visitas al día, entonces la escalabilidad no será una cuestión relevante se use lo que se use a menos que el programador sea realmente malo, pues cualquier servidor quad-core medio moderno puede atender tal volumen de trabajo sobre una base de datos relacional.
Te esperamos en los próximos artículos en donde hablaremos mas acerca de estos temas que hoy en día son de importancia e interés en el mundo de la tecnología.