No existe una relación directa entre las características de los lenguajes de programación y los conceptos involucrados en la definición actual de computación en la nube. Las plataformas de computación en la nube están construidas en muchos lenguajes desde C hasta Python, Java, C ++, Ruby.
Cada aspecto de la computación en la nube tiene lenguajes que son adecuados para la tarea. C ++ es mejor para implementar capas de administración en la nube de bajo nivel que asignan recursos de procesador y virtualizan. Muchos lenguajes web convencionales, desde php hasta Python, Ruby y Scala, son útiles en marcos como Apache o WSGI. NodeJS (que es un paradigma de marco, no un lenguaje), junto con Twisted o Tornado, son útiles para crear servicios web y backends que son eficientes y manejan un gran número de conexiones.
Nada de lo que acabo de decir es específico de la computación en la nube. Todos esos problemas son relevantes para cualquiera que construya cualquier plataforma basada en Internet, incluso las no virtualizadas.
Sin embargo, hay una dimensión del lenguaje que afecta la idoneidad para la computación en la nube de una manera más importante y ese es el entorno de desarrollo que a menudo se casa con el lenguaje . Se han creado muchos idiomas para optimizar su eficiencia en la creación de aplicaciones de escritorio. Visual Studio es probablemente el mejor ejemplo de un IDE sofisticado que comenzó como un sistema de creación de aplicaciones de escritorio, pero XCode de Apple y Eclipse de código abierto son los mismos tipos de entornos.
Algunas de las características de las plataformas en la nube hacen que estos IDE sean ineficaces:
- Las plataformas en la nube a menudo contienen una rica combinación de diferentes idiomas, y muchos IDE prefieren un conjunto de idiomas sobre otro.
- Las plataformas en la nube a menudo contienen una mezcla de diferentes arquitecturas (ejecutamos una aplicación en la nube que utiliza servidores Windows y servidores Linux en varios roles). No hay IDE que operen de manera transparente e idéntica en todas las plataformas, aunque Eclipse se acerca más.
- Los IDE tienen una capacidad limitada para trabajar en código de forma remota y favorecer el desarrollo local debido a su herencia de escritorio.
- La depuración remota a menudo debe realizarse en la línea de comandos y, a menos que un programador conozca bien el entorno de la línea de comandos, se ve obstaculizado por la falta de su IDE favorito en los servidores remotos.
- La nube lo recompensa por crear grandes grupos de servidores especializados en lugar de tener una pequeña cantidad de servidores más grandes. Por esta razón, las aplicaciones a menudo se distribuyen en media docena (o más) de servidores virtuales, y a veces cada servidor virtual tiene su propio modelo arquitectónico. Ningún IDE aborda de manera transparente este tipo de aplicación de “enjambre de servidores”, y a medida que los desarrolladores aprenden más sobre la versatilidad de la implementación en la nube, esta “arquitectura de enjambre” se está volviendo cada vez más común.
Una vez más, muchos de estos problemas han sido ciertos durante años, pero la nube los ha acelerado, especialmente cuando se trata de arquitecturas mixtas y despliegues más grandes.
Por estas razones, la “idoneidad de varios idiomas para la nube” a menudo está sesgada. Ruby o Python pueden parecer más adecuados que C # o Java / JDE porque los dos últimos están tan fuertemente vinculados a entornos de desarrollo rígidos que las aplicaciones en la nube verdaderamente complejas y diversas se vuelven desalentadoras. Por el contrario, Python, Ruby, Scala e incluso php y perl pueden parecer superiores porque pueden controlarse fácilmente a través de herramientas de línea de comandos y sentirse “magras y malas” en comparación con sus contrapartes más listas para la empresa.
Por supuesto, esta distinción cambiará con el tiempo. Algún día, alguien creará un entorno de desarrollo de estilo IDE completamente distribuido donde la localidad, la arquitectura y los idiomas se pueden mezclar de forma transparente y parece que no hay límites entre los servidores. Pero ese día aún está lejos.
En la actualidad, aquellos que pueden “ensuciarse las manos” y trabajar eficazmente utilizando herramientas de línea de comandos rápidas y eficientes tienen una ventaja en la nube, y esos estilos de trabajo se combinan mejor con ciertas ofertas de idiomas que con otros.