Código de calidad. ¿Cómo se puede monitorear una base de código en evolución para detectar cambios cualitativos para peor, a fin de alertar a las personas (preferiblemente de una manera confiable y automatizada; de lo contrario, es político) cuando la calidad del código llega a un estado demasiado malo?
El problema teórico: el razonamiento sobre el código arbitrario es, literalmente, imposible. No quiero decir que sea muy difícil o económicamente inviable; Quiero decir que para cualquier lenguaje de programación con todas las funciones (Turing-complete es el término técnico) es imposible hacer una determinación de sí / no, como “¿se detiene?”, Sobre todos los programas válidos. Hay una variedad de teoremas matemáticos en ese sentido (resultados de Turing sobre el problema de detención, el trabajo de Church sobre el cálculo lambda, el teorema de Rice).
La buena noticia: los programadores no escriben “código arbitrario” porque “la mayoría” de los programas válidos son basura, al igual que la mayoría de las cadenas de caracteres no son palabras. Por el contrario, se adhieren, como individuos, a subespacios de “todos los programas válidos” que se comportan extremadamente bien. Escriben el programa más simple en el que pueden pensar (que puede no ser muy simple o muy bueno, pero ese es otro problema) para hacer un trabajo.
- Tengo una aplicación que está a punto de comenzar las pruebas de usuarios externos antes de un lanzamiento público. ¿Cuáles son las mejores soluciones gratuitas o de bajo costo para recopilar comentarios de los usuarios?
- ¿Cuáles son algunas clases y subsistemas que se pueden encontrar en el software de un panel de sistema de seguridad para el hogar?
- Como estudiante de informática que acaba de terminar su primer año, ¿qué puedo aprender sobre computadoras, programación y desarrollo de aplicaciones móviles en un mes?
- ¿Puede un estudiante de EEE obtener un trabajo de software?
- ¿Qué sitios de trabajo son buenos para los ingenieros de software?
Por qué eso no es lo suficientemente bueno: desafortunadamente, a medida que pasa el tiempo y más personas modifican el código sin comprender por qué funciona de la manera en que lo hace, y a medida que los errores se convierten en características dependientes, la entropía del software se establece y el código va mucho más allá / imposible razonar sobre el espacio.
Los problemas de calidad del código van a estar con nosotros durante mucho tiempo. Este no es un problema nuevo. Se le dio el nombre de “la crisis del software” a fines de la década de 1960 y los problemas no han desaparecido. Los proyectos de software a menudo se entregan tarde o no se entregan. La mayoría de los programas son de baja calidad y la mayoría del código no sobrevivirá un año. Muchas compañías de software dedican del 50 al 90 por ciento de su tiempo a trabajos de mantenimiento, es decir, a mantener el éxito; la mitad de todo el software funciona peor, lo cual es extremadamente costoso y dañino para la moral (ningún programador quiere tener personal para el mantenimiento a tiempo completo de la mierda heredada de otra persona). Hay muchos problemas que resolver aquí.
¿Más buenas noticias? Los idiomas se están volviendo más manejables, al menos en usos de mejores prácticas, con el tiempo. La única forma de razonar sobre un programa de ensamblaje dirigido por goto (y casi nadie lo escribe) es ejecutarlo, que es una forma no muy técnica de decir que no se puede razonar en absoluto. El código altamente optimizado siempre será imperativo, muy acoplado y difícil de razonar. Por otro lado, si bien el código de alto rendimiento puede ejecutarse mucho, las personas no tienden a necesitar mucho y las personas (muy gradualmente) están desarrollando un sentido estético que mejora la calidad del software para, al menos, un pequeño grado Si bien nadie va a encontrar una manera de razonar sobre todo el código para ninguna medida cuantitativa o cualitativa, mejorar las herramientas podría facilitar el acercamiento lo suficiente para la mayoría de los fines industriales.