La inteligencia artificial cambiará la manera en qué el software se programa (algunos llegan a predecir que el software se va a escribir a sí mismo vía Deep Learming). En eso creo que estamos todos de acuerdo. Lo que no tengo claro es como de cerca está ese futuro. Para averiguarlo, he buscado y probado todos los entornos de programación (IDEs) y extensiones que se llaman a sí mismos inteligentes.

Con todos ellos he intentado completar una tarea conceptualmente sencilla: leer un archivo de texto, pero que requiere acordarse de qué clases usar para abrir el archivo, leerlo,… Y yo nunca me acuerdo. Parece, pues, una tarea perfecta para que un editor inteligente me ayude.

Leyendo las descripciones de estos editores (“entiendo el código del mundo y te daré la sugerencia correcta cuando la necesites”, “analizo todo el código de la web y te doy rápidamente la forma de completar el código que te vaya bien ordenado por su popularidad”) debería haber sido una tarea fácil. Pero no ha sido así.

Repasemos cada una de las herramientas (avisad si me he dejado alguna) para ver qué tal me ha ido.

Eclipse Code Recommender

Eclipse Code Recommender es un proyecto oficial Eclipse desarrollado por la empresa CodeTrails .

Ofrece una herramienta de “code completion” para Java que ordena todos los posibles métodos que puedes usar en un cierto punto del código basado en lo qué otros programadores han hecho en el pasado. Usa Jayes, una librería para redes Bayesianes en Java para ese fin.  Como se ve en la figura, dentro del loop de lectura del archivo, Eclipse Code Recommender sugiere next() comola mejor opción a ejecutar sobre el objeto  inputFile.

Eclipse Code Recommender

Para el aprendizaje de las recomendaciones utiliza ejemplos de código disponibles en el ” Eclipse Marketplace. Sólo da recomendaciones para las APIs de java.*javax.*  y org.eclipse.* . Con la  opción de pago puedes también proporcionar tus propios ejemplos para que aprenda de tu propio estilo de programación .

CodePilot

CodePilot.ai es más un buscador avanzado de código que un recomendador en sí. Puede buscar en tu entorno local o (previo pago) en StackOverflow o GitHub.

En mi ejemplo, CodePilot fue capaz de detectar rápidamente que ya tenía otro .java que utilizava la clase Scanner y me la enseñó por si me era útil.

Local search in code pilot

De momento, para la búsqueda, CodePilot no utiliza ningún tipo de algoritmo de Machine Learning para filtrar los resultados, sinó que enseña básicamente todos las coincidencias que encuentra.

Codota

Codota promete darte la buena sugerencia justo cuando la necesitas. Mirad que me sugiere para mi tarea ejemplo y juzgad vosotros mismo como de cerca está de conseguir lo que promete.

Example of codota suggestions

La verdad es que Codota se integra bien con el editor y es capaz de detectar solito las clases que usas y ir a buscar a Stack Overflow ejemplos de preguntas donde se usen. Pero, evidentemente, no es capaz de primero intentar entender tu código para ver realmente que estás intentando hacer.

Kite

Kite se define a si mismo como un copiloto en la nube para impulsar tu entorno de programación. De momento es el único para Python.

A nivel de funcionalidad, es bastante similar a los otros. Útil para mostrar documentación de las clases y métodos que usas, incluyendo ejemplos (para los patrones de uso más populares hay que pagar) que cree que te podrían ser útiles. Esto es lo que me dió  a mí.

Kite python suggestions

De nuevo, las sugerencias se basan en las clases, no mira nada más del contexto en qué se usan.

CodeCorrect

CodeCorrect utiliza la API de StackOverflow para encontrar soluciones a errores comunes que todos hacemos a la hora de programar. Fue el resultado de un Hackathon y consiguió un cierto eco mediático  pero de momento parece que no ha seguido adelante.

Mi opinión: mucho marketing y poca inteligencia

En base a este experimento, la verdad es que me parece que esto de los IDEs inteligentes es de momento más marketing que realidad. Sí que estoy convencido que a la larga vamos a tenerlos y acabaremos trabajando con asistentes de programación virtuales pero nos queda todavía mucho para eso.

De hecho, este campo es un tema muy candente en investigación (nosotros mismos estamos definiendo un plan de trabajo para IDEs inteligentes pero enfocado a las herramientas de modelado) con lo que puedo llegar a entender perfectamente lo que cuesta crear este tipo de herramientas.

Además, tienen una competencia feroz. No sólo tiene que demostrar que funcionan sinó que tienen que probar que són mejores que el ir directamente a Google y preguntar. Por ejemplo, si pregunto a Google algo como “open file in Java” el primer resultado incluye un código de ejemplo de Stack Overflow que es exactamente lo que estoy buscando. Difícil de competir con esto. Google search for open a file

Fijaros además que toda la parte de “inteligencia” se focaliza en analizar los datos de GitHub o SO para ordenarlos, priorizarlos,… Para mí, no está ahí realmente el valor añadido (como decía Google es muy bueno en esto). Donde estos editores inteligentes pueden marcar la diferencia es en entender lo que el programador está intentando escribir y darle una solución para es patrón de programación que ha reconocido.

Quiero un editor que me ayude a escribir código, no uno que me ayude a buscar código útil online. Aún mejor si cuando me da una sugerencia me la adapta al código donde debería integrarla (ej. utilizando mis variables, mi estilo de programación,…) para que la adaptación sea mínima.

En un futuro aún más distance, estoy convencido que tendremos un ejército de bots de programación con los que haremos pair programming y con los que hablaremos para explicarles qué queremos hacer. Pero de momento, lo que tenemos que tener es un montón de paciencia. Falta todavía bastante para llegar allí.