Leer código: una actividad cuasi olvidada
Es común sugerir a una persona que se inicia por estos lares del código a que ponga los dedos sobre el teclado, a que cometa errores y, si se anima, lo vuelva a intentar, esto es, que gane experiencia mediante la práctica. Y es verdad, ayuda bastante porque es decisivo para aprender a programar; aunque no menos importante es leer, si no te acostumbras a revisar y analizar un mejor código, tu nivel suele estancarse.
Si recién comienzas a programar en Python (o cualquier otro lenguaje) y te dan a leer un algoritmo de aproximación (por dar un ejemplo),1 está claro que no entenderás nada, menos poder implementarlo. Al igual que escribir código, leer código significa un orden gradual de dificultad. Cuál leer debería ser trabajo de tu profesor o mentor o de un buen amigo (un mal amigo te dará a leer código que él no entiende).
Y es que la principal pregunta que se toparía alguien que decidiera recomendar un código a leer, en primer lugar, sería asumir que el código que le mostrará es mejor al que sabes hacer. ¿Cómo se podría saber?
Por lo general los lugares donde se puede encontrar códigos de buena calidad son los libros, dado que, se asume, que han pasado por un filtro previo de competencia proporcionada por el autor y el editor (aunque esto no implica que no haya erratas). Otro lugar son los repositorios públicos. Mirar el código de proyectos que tienen una buena reputación (estrellas en GitHub, por ejemplo) puede ser un buen comienzo.
Lo más complejo es saber qué dar a leer según tu nivel de conocimiento. Ahí, en esta encrucijada, es mejor recurrir a otra persona que, ojalá, haya podido filtrar abundante contenido con los años. Y es que no todos los programadores senior leen código. Algunos solo leen su código.
La idea de leer código significa: leer código ajeno, de un mejor programador, para así mejorar. Es un aprendizaje por imitación, no por ejecución. Aunque ambos se retroalimentan.
Cuando resolvemos un problema y logramos llegar a una solución es donde comienza la fase de lectura. Esto nos permite que al instante de leer un código que, resuelva el mismo problema o similar, aprendamos una forma diferente de llegar a una solución equivalente. Una mejor solución. Acaso usando menos recursos de memoria o más eficiente (menor tiempo de cómputo gracias a la elección de una mejor estructura de datos) o incluso más legible. Depende del parámetro para definir un algoritmo mejor que otro.
La habilidad de aprender a escribir buen código es lo mismo que la literatura. Un escritor no se transforma en buen escritor yendo a talleres de escritura, sino leyendo y escribiendo tanto como pueda. No hay recetas mágicas. Tampoco una hoja de ruta. Únicamente sabemos una cosa para ser un mejor programador: escribir y leer mucho código.
LevelDB es un proyecto que me gusta leer cuando estoy escribiendo en C++ y es que hay construcciones muy elegantes en él:
https://github.com/google/leveldb/tree/main/db
Pienso en un algoritmo genético o el de la colonia de hormigas.