El otro día vi un trabajito para programadores freelance. El trabajo consistía en generar MySQL DDL scripts (los create table, index,…) para un conjunto de diagramas de clase UML. En seguida pensé que esto seria un trabajo fácil para todos aquellos programadores con acceso a una herramienta de generación de código apropiada para este escenario.

La pregunta sería entonces, si esta solución sería aceptable por parte del “cliente”. Imagina que tu eres ese cliente, ¿confiarías suficientemente en la herramienta como para aceptar directamente el código que la herramienta ha generado? ¿Te sentirías estafado (por aquello de qué “el freelance ha apretado sólo un botón”)? ¿Crees que la calidad conseguida por las herramientas de generación de código puede estar al mismo nivel que la de los programadores profesionales? ¿Como mínimo para este escenario, digamos, “sencillo” ya que implica solamente una traducción de UML a Bases de Datos?

Claro, que si la herramienta fuera suficientemente buena, a lo mejor el cliente ni se entera de quién ha realizado el trabajo y nos ahorramos esta discusión. La responsabilidad del trabajo sigue siendo en todo caso del freelance pero me refiero a qué, en un caso ideal, el cliente no tendría porqué darse cuenta de si quién ha escrito el código ha sido el freelance o su herramienta.

Esta herramienta (que ya os digo que a día de hoy no existe a no ser que sea para casos muy muy particulares) debería pasar el equivalente al test de turing pero para el código. Las herramientas que pasen el test habrán demostrado que la calidad del código que generan es comparable a la de los humanos y que, por lo tanto, podrían usarse en su lugar.

De forma similar al turing test clásico para IA , propongo un test de turing para el código que se defina como:

Un juez humano examina el código generado por un programador y por una herramienta generadora de código a partir de la misma especificación formal. Si el juez no puede determinar con certeza quién ha hecho qué, la herramienta pasa el test.

Y es que precisamente éste es uno de los grandes problemas de los frameworks y herramientas que generan código. La reacción hostil que muchos programadores sienten a este tipo de herramientas no viene tanto de la calidad del código generado (o del miedo de qué les quiten un día el trabajo) sinó de qué cuando ellos tienen que utilizar ese código generado lo sienten totalmente extraño ya que, aunque correcto, no se parece en estilo, nomenclatura,… al qué ellos escribirían y por tanto les hace sentir incómodos.

Esta capacidad de imitar el estilo de programación de una empresa es justamente una de los desafíos que hemos identificado en el campo de la “cognificación del desarrollo de software“.