Encontré una lista de lectura bastante extensa en todos los temas de aprendizaje automático relacionados con la codificación .
Como puede ver, las personas han estado tratando de aplicar el aprendizaje automático a la codificación, pero siempre en campos muy estrechos, no solo una máquina que puede manejar todo tipo de codificación o depuración.
El resto de esta respuesta se enfoca en su máquina de "depuración" de amplio alcance y por qué esto todavía no se ha intentado (en lo que respecta a mi investigación sobre el tema).
Redacté una parte larga de la respuesta. Para resumir (es importante para la siguiente parte): siguiendo la metodología de aprendizaje automático actual, cualquier cosa que un ser humano pueda aprender, una máquina también puede hacerlo. Solo estamos limitados por el dominio físico (velocidad de la CPU, tamaño de una máquina, ...), no por una supuesta aplicabilidad limitada del algoritmo de aprendizaje en sí mismo.
¿Qué investigación se ha hecho hasta ahora para aplicar el aprendizaje automático al desarrollo de código? ¿Qué hay de la depuración?
El problema aquí no es que sea imposible, sino que es un tema increíblemente complejo.
Los humanos ni siquiera se han acercado a definir un estándar de codificación universal con el que todos estén de acuerdo. Incluso los principios más aceptados, como SOLID, son todavía una fuente de discusión en cuanto a qué tan profundamente se debe implementar. Para todos los propósitos prácticos, es imposible adherirse perfectamente a SOLID a menos que no tenga ninguna restricción financiera (o de tiempo); lo que simplemente no es posible en el sector privado donde ocurre la mayor parte del desarrollo. SOLID es una guía, no un límite difícil.
En ausencia de una medida objetiva de lo correcto y lo incorrecto, ¿cómo podremos dar una retroalimentación positiva / negativa a la máquina para que aprenda?
En el mejor de los casos, muchas personas pueden dar su propia opinión a la máquina ("este es un código bueno / malo"), y el resultado de la máquina será una "opinión promedio". Pero eso no es necesariamente lo mismo que una solución correcta . Puede ser, pero no se garantiza que sea.
En segundo lugar, para la depuración en particular, es importante reconocer que los desarrolladores específicos son propensos a introducir un tipo específico de error / error. La naturaleza del error puede ser influenciada en algunos casos por el desarrollador que lo introdujo.
Por ejemplo, como a menudo me involucro en la corrección de errores del código de otros en el trabajo, tengo una especie de expectativa de qué tipo de error es propenso a cada desarrollador. Dado un cierto problema, sé que es probable que el desarrollador A olvide actualizar el archivo de configuración, mientras que el desarrollador B a menudo escribe consultas de LINQ erróneas. Según el desarrollador, puedo mirar hacia el archivo de configuración o el LINQ primero.
De manera similar, he trabajado en varias compañías como consultor ahora, y puedo ver claramente que los tipos de errores pueden estar sesgados hacia ciertos tipos de compañías. No es una regla dura y rápida que pueda señalar de manera concluyente, pero hay una tendencia definida.
¿Puede una máquina aprender esto? ¿Puede darse cuenta de que es más probable que el desarrollador A arruine la configuración y que el B sea más probable que arruine una consulta LINQ? Por supuesto que puede Como dije antes, cualquier cosa que un humano pueda aprender, una máquina también puede hacerlo.
Sin embargo, ¿cómo sabe que le ha enseñado a la máquina toda la gama de posibilidades? ¿Cómo se puede proporcionar un pequeño conjunto de datos (es decir, no global) y saber a ciencia cierta que representa el espectro completo de errores? O, en su lugar, ¿crearía depuradores específicos para ayudar a desarrolladores / compañías específicos, en lugar de crear un depurador que sea universalmente utilizable?
Pedir un depurador aprendido a máquina es como pedir un Sherlock Holmes aprendido a máquina. Provablemente no es posible crear uno, pero a menudo el razonamiento central para ser un depurador / Sherlock depende de evaluaciones subjetivas que varían de un tema a otro y toca una variedad increíblemente amplia de conocimientos / posibles fallas.
La falta Los resultados correctos / incorrectos que se pueden demostrar rápidamente hacen que sea difícil enseñar fácilmente una máquina y verificar que está progresando bien.