La importancia de no repetirse
Si vemos los programas que podamos haber escrito en Python siguiendo los tutoriales, vemos que son programas pequeños de máximo 15 a 20 líneas, sin embargo si quisiéramos escribir un programa mucho más grande sería un gran problema si no manejamos la abstracción. Recordemos que la virtud del programador es que no hace un trabajo innecesario, es decir no trabaja dos veces lo mismo ni se repite.
Veamos el siguiente código, este calcula los 10 primeros números de una secuencia Fibonacci:
fibs = [0, 1] for i in range(8): fibs.append(fibs[-2] + fibs[-1])
Esto nos da como resultado efectivamente los 10 primeros números
Ahora que pasa si queremos que sea el usuario quien defina que en vez de ser 10 números sea una cantidad dinámica, pues re-acondicionamos nuestro código de la siguiente forma:
fibs = [0, 1] num = input('How many Fibonacci numbers do you want? ') for i in range(num-2): fibs.append(fibs[-2] + fibs[-1]) print fibs
Hasta aquí todo parece normal, no vemos ningún problema técnico, sin embargo hay un problema de filosofía de programación, por ejemplo si deseamos hacer esto en varias partes de un programa debemos escribir todas estas líneas una y otra vez, esto sería a lo que llamamos trabajo innecesario. Lo que llamamos abstracción es código más corto donde lo que pasa detrás está aislado, hecho de forma que funcione en cualquier parte, que solo nos preocupemos de obtener lo necesario para nuestras condiciones, una forma más abstracta de ver los códigos anteriores sería esta:
num = input('How many numbers do you want? ') print fibs(num)
Fijémonos que es algo directo totalmente, pedimos por input cuantos números quiere el usuario, luego imprimimos un resultado, siendo lo que pasa que hemos definido una función fibs en alguna otra parte que nos permite invocarla cuando queramos, evitando la necesidad de hacer el bucle de cálculo una y otra vez, haciendo nuestro programa más legible y menos complejo.
La legibilidad lo es todo cuando estamos desarrollando un programa grande, el manejo de los recursos del sistema y la eficiencia también son importantes, pero como mejorar un programa si no lo entendemos al leerlo, por ejemplo este código:
page = download_page() freqs = compute_frequencies(page) for word, freq in freqs: print word, freq
Al leerlo sabemos que hace y que debe devolver, esto es la abstracción en su estado más puro, el cómo funcionen los métodos y funciones en este punto no nos interesa, ahora si la eficiencia y el manejo de recursos se torna problemático, simplemente se trabaja sobre la función y el programa no sería afectado, por lo que solo trabajaríamos una vez.
Esto es todo por este tutorial, nos queda material para seguir pensando y mejorar nuestra mentalidad de programador, de forma que podamos abstraer nuestro código y trabajar de manera mucho más eficiente.