En un mundo ideal, todo el código escrito por un desarrollador dado estará bien documentado, bien estructurado y probado de manera comprensible, tanto con herramientas automáticas como pruebas unitarias y guiones de casos de uso que un usuario ejecuta para verificar que obtenga el resultado esperado.
Sin embargo, lo primero que aprenderá es que no vivimos en un mundo ideal.
Muchos desarrolladores no documentan su código correctamente, si es que mezclan la lógica empresarial con código no relacionado, y la única prueba que hacen es una ejecución rápida de lo que esperan que sea el caso de uso normal.
Cuando trabaje con un código como este, lo primero que debe hacer es establecer lo que debe hacer. Si hay comentarios, pueden darte pistas, pero no cuentes con eso. Según mi experiencia, muchos codificadores no son buenos para explicarse e incluso si dejan comentarios, pueden no tener sentido. Sin embargo, a menos que sea el único codificador de la empresa, alguien seguramente debe tener al menos una idea básica de para qué sirve el código y qué debe hacer. ¡Pregunta por ahí!
Si tiene pruebas unitarias, le harán la vida mucho más fácil. Si no lo hace, entonces parte del aprendizaje de la base de código puede implicar escribir pruebas unitarias para el código que ya existe. Normalmente, esto no se considera una buena práctica porque si escribe pruebas unitarias para ajustar el código existente, terminará con pruebas unitarias que piensan que el código funciona como está (se escribirán para asumir que el comportamiento que en realidad es un error es correcto), pero al menos te da una línea de base. Si luego descubre que algún comportamiento que pensó que era correcto, de hecho, es incorrecto, puede cambiar la prueba unitaria para comprobar cuál es el resultado esperado en lugar del resultado que el código da ahora. Una vez que tiene una prueba unitaria, puede hacer cambios y evaluar qué efectos secundarios tiene cualquier cambio que realice.
Finalmente, el mejor recurso que tiene cuando trata con un fragmento de código no documentado es preguntar a los usuarios finales. Es posible que no sepan nada sobre el código, pero saben lo que quieren que haga la aplicación. La recopilación de requisitos es la primera etapa de cualquier proyecto, y hablar con los posibles usuarios del sistema a desarrollar es siempre una parte importante de eso. Solo piense en ello como en la etapa de captura de requisitos para un nuevo proyecto que ya se ha construido.
Tenga en cuenta que incluso un código bien escrito y bien documentado puede ser difícil de entender para un extraño. El código es esencialmente una expresión de cómo pensaba la persona que lo escribió en ese momento, y cada uno tiene su propio proceso de pensamiento único. Tendrás que aprender a ser un poco paciente y ser un detective. Poder entrar en el proceso de pensamiento de otra persona es difícil, pero es una habilidad esencial para un programador que realiza el mantenimiento del código existente. Como la mayoría de la codificación (alrededor del 70%) está relacionada con el mantenimiento del código existente, es una habilidad importante para aprender.
Ah, y ahora que has visto el dolor que puede causar un código mal documentado, no probado y desordenado, no lo harás con el próximo desarrollador pobre que aparezca, ¿verdad? :) Aprenda de los errores de su predecesor, comente bien su código, asegúrese de que cada módulo tenga una responsabilidad claramente definida a la que se adhiera, y asegúrese de tener un conjunto completo de pruebas unitarias que escriba primero (para metodologías TDD) o al menos junto con el código que se está desarrollando.