Muchos se sorprenden cuando se dan cuenta que el motor de Xatkit está escrito en Java. Cierto, la mayoría de proyectos de Inteligencia Artificial y Machine Learning están escritos en Python. Pero esto no implica necesariamente que tengas que ir directo a Python si vas a empezar un nuevo proyecto en esta área.

Y no te preocupes que éste no es el típico post de guerras de lenguajes. Nada más lejos de mi intención sugerir que Java es mejor que Python (ni todo lo contrario). Sólo quiero explicaros el porqué hemos desarrollado nuestra plataforma de chatbots en Java. Y mediante esta justificación, sugeriros que tengáis en cuenta muchos otros factores, más allá del número de librerías, a la hora de decidiros por un lenguaje de programación para vuestro próximo proyecto.

Veamos pues porque Java es una buena opción para proyectos de Machine Learning. O como mínimo, una opción tan buena como muchas otras:

  • La parte de Machine Learning representa una muy pequeña parte del código total del proyecto. La gran mayoría del código NO tendrá nada que ver con redes neuronales ni nada parecido. Será código de lectura / escritura de ficheros, de interfaz de usuario, de integración con servicios externos, de autenticación, seguridad,… Necesitas un lenguaje que sirva para todas estas tareas. Y esto es especialmente cierto cuando hablamos de chatbots que, para empezar, necesitan desplegarse en diferentes canales de comunicación.
  • Tienes librerías de ML para cualquier lenguaje. Siempre hay alguna manera de ejecutar (e incluso entrenar) tus modelos y redes neuronales fuera del ecosistema Python. Por ejemplo, en Xatkit reutilizamos algunos de los componentes de Stanfords’ Core NLP (también escrito en Java) en nuestros procesadores de lenguaje natural. Y si hiciera falta, siempre hay la opción de encapsular la parte de ML y ofrecerla como un servicio web que permita a tu programa principal consumir y ejecutar los modelos mediante llamadas a la API del servicio. Para esto, me gusta especialmente la simplicidad de Flask a la hora de crear un servidor web y exponer fácilmente los endpoints que necesites. Si quieres explorar un poco más el soporte “nativo” de ML en JAva puedes jugar con TensorFlow Java bindings o Deeplearning4j.
  • Java se usa mucho en el mundo empresarial. Los expertos en IA fruncen el ceño al ver Java pero muchas grandes empresas respiran con alivio, ya que saben perfectamente como desplegar y optimizar aplicaciones Java (o Java EE) pero pueden tener bastante más dudas con otros lenguajes, que a lo mejor están más de moda pero no han llegado a dominar el mundo más empresarial. Conviene recordar que Java  no está muerto, ni mucho menos.
  • Somos “expertos” en Java. Somos mucho más productivos en Java que en otros lenguajes. Claro que podríamos invertir tiempo en aprender Python como se debe pero no siempre se tiene el tiempo para eso y, en nuestro caso, tenía más sentido seguir con el lenguaje que ya usábamos en la mayoría de nuestros otros proyectos.
  • Xatkit es una herramienta que sigue una aproximación basada en modelos. Y aquí cuando hablo de modelo, me refiero a modelos software, no a modeos de Machine Learning. Y en el ecosistema de modelos software, Java sigue siendo el rey. Más en detalle, Xatkit reutiliza algunas librerías EMF, sobre todo para analizar la definición del bot durante la ejecución del mismo. Hay otras maneras de hacerlo pero esto es parte de una decisión de diseño “heredada” de cuando Xatkit no había todavía abrazado el mundo de las Fluent API.  De nuevo, a falta de un motivo imperios que nos haga abandonar Java, es más fácil seguir con estas dependencias que no suponen tampoco ni un riesgo ni una excesiva carga.

Como véis, probablemente Java no debería ser vuestra primera opción al empezar en el mundo de la programación de aplicaciones inteligentes si y solo si os podéis permitir escoger el lenguaje libremente, sin ningún tipo de restricción.  Si no, el mejor lenguaje debería depender más de otros factores “sociales” (conocimiento del equipo, preferencias de los clientes, necesidades de integración,…) que no del mero de hecho de qué un lenguaje sea el mejor para una tarea muy concreta.

Veo a menudo programadores discutiendo (y, en mi opinión, perdiendo el tiempo) acerca de si “su” lenguaje es mejor que el del otro. Hoy en día, cualquiera de los lenguajes generalistas es una opción válida para cualquier tipo de proyecto y la elección tiene que hacerse con la cabeza y teniendo en cuenta todos los factores que hemos ido mencionando, no siguiendo las últimas modas.

Perdonadme, pues, si de momento continuo programando mis bots en Java 🙂